Team alignment · onboarding · 2026-06-01
SIMS — to demo-ready
in 21 days.
Simoldes Industrial Monitoring System. Where the project stands, how the data flows, what must be true on Jun 22–23, and who owns what while Joaquim is out.
Repos
3
backend · frontend · ingestion
D2 manual inputs
~99%
4/4 demo-blockers closed
Demo
Jun 22-23
1 machine · 1 VM · Plastaze
What it is
An MES that replaces proGrow with real-time OEE from the machines.
Automated input
EWON IoT telemetry over OPC-UA → ingestion → backend → production_events. No human. Tells you that a machine stopped or produced a cycle.
Manual input
Operators on tablets enter why — stoppage reason codes, rejections, OF/mould changes. Queued offline when the network drops.
Manual SIMS entries are canonical. proGrow is fallback / validation only — and is being removed at D4. Tablet-first, role-based, European Portuguese.
Data pipeline
Machine → tablet → KPI, end to end.
01 · EWON
OPC-UA poll
24/651 tags · 5s · buffers on N_Ciclo / Estado change
→
02 · INGESTION
SQLite buffer
APScheduler · 60s · ≤100 rows + heartbeat
→
03 · BACKEND
/machine-data
X-API-Key · classify · SHA256 dedup · JSONB
→
04 · FRONTEND
TanStack poll
/machines/:code/status + /kpis · 10s
Mapping gotcha
DEVICE_MAPPING
"KM850II" → "KM 850 II"
Seeding
machines table is manually seeded — 404 if a code is missing.
Auth split
JWT on /api/v1/*; /machine-data uses X-API-Key (keys must match).
Where we are
D2 done. The demo runs on D3 — which is barely started.
- D1 Foundation — ✅ done (nav, tablet auth, PWA, manual-input scaffolding)
- D2 Core Manual Inputs — ~99%, all 4 named demo-blockers closed
- D3 Dashboards & Integration — 1.5% demo runs against these · unassigned
- D4 proGrow Elimination — 0% · holds Epic 16 (all demo coordination)
- D5 Multi-Tenant DB — rollout prereq, not a demo prereq
- R1 Plastaze (Jul 31) — pilot; the demo is its kickoff
- R2–R8 (Aug–Dec) — 7 more factories, proGrow off by year-end
- In-flight: branch DEV2-tablet-device-pairing, 31 commits ahead, PRs #94/#104 — shipped with no AC (now governance-ticketed)
The headline: nothing in D3/D4 had an owner. That's the gap the two new devs fill.
The calendar spine
Hard gates, in order. Most fall while Joaquim is out.
Jun 12
Cloudflare tunnel live + E2E suite · HARD GATE
Jun 15
Merge + deploy to Plastaze · feature freeze
Jun 18
Internal dry-run · bug list · go/no-go
Jun 19
R1 Phase-2 deploy to Plastaze
Jun 21
Paulo rehearsal · final go/no-go
Jun 22-23
Demo · Domingos & Couto
Not blocking the demo
Xpert ERP · multi-tenant · backups · monitoring. proGrow fallback is fine for the demo.
Owner-less & urgent
DEV2-603 · 602 · 606 · 650 — assign before you leave.
Gatekeeper
IT-security review of the cloud-FE/on-prem-BE arch — confirm it was sent.
Who owns what
Two lanes, split by strength.
Pedro → Work Orders DEV2-703
- DEV2-346 Work Order Management (recommended D3 starter, no blocker)
- DEV2-359 WO API CRUD · DEV2-360 WO Selection UI
- DEV2-536 "próxima OF" tile — Paulo demanded for the demo
Vusal → proGrow comparison DEV2-704
- DEV2-347 Comparison Mode + KPI source priority chain
- DEV2-602 Cut proGrow from KPI calculator (urgent)
- DEV2-604 Evidence package — ≥7 shifts, ≥3 proGrow-wrong cases
Shared with Gabriel: Cloudflare (Jun 12), runbook, dry-runs, and the demo-visible data bugs. Xpert is blocked on Simoldes IT — escalate via Paulo, soft for the demo.
Risk register
What can go wrong on screen.
- STOP-1 — "N por justificar" badge never decrements as operators justify. Visible mid-demo.
- CLOCK-01 — machine-switch doesn't close prior session → inflated hours + double-counted parts.
- PGW-* — proGrow numbers render next to canonical SIMS KPIs, no staleness badge — can visibly disagree.
- Mould 404 — unknown mould 404s as "Máquina não encontrada" (should say "Molde"). Re-verify the fix held.
- DEV2-535 — bulk-justify lacks shift-boundary check. Paulo demanded shift-scoped edits.
- Script drift — demo script narrates device-code; shipped flow is per-machine PIN. Reconcile before rehearsing.
And the one test everyone defers: 768px tablet smoke with real KM 850 II data (offline cache + queue). No agent can do it — by hand, before sign-off.
Demo-readiness checklist
Run the script end-to-end on the demo VM.
Functional path
- Supervisor login → /machines shows KM 850 II + KM1300 live
- Machine detail tabs render with real data
- Operator keypad clock-in → /input
- Rejection submits + offline-queue replays
- Stoppage justify — badge decrements (STOP-1)
- Tempo de Trabalho CSV exports in proGrow schema, opens in Excel
Integrity + infra
- No proGrow-vs-SIMS disagreement on Overview/Timeline
- Machine-switch closes prior session (CLOCK-01)
- Day-boundary / timezone correct for the demo shift
- Cloudflare tunnel live OR decision to demo on plain VM
- Frontend built --platform linux/amd64 · keys match
- 768px tablet smoke, real data, offline queue
Rules of the road
Five things that save you a bad PR.
Linear only
Ignore the bd/beads instructions in AGENTS.md. Tasks come from Linear, team Dev Team - Joaquim.
Add the pt key
App is lng:pt with pt fallback. A missing pt key silently leaks English to supervisors. CI guard enforces it.
Don't relitigate KPI math
Paulo signed off 2026-04-08, <1% OEE deviation. The proGrow cut is a code-path removal, not a math change.
Generated API types
npm run generate:types from backend OpenAPI. Never hand-write src/types/generated.
Verify offline with real data
The PWA cache + input queue is sensitive. Smoke it on a real tablet before claiming success.
File tickets as you go
Find a gap → file it. Milestone D3/D4, link the onboarding doc. You're trusted to grow the backlog.
First day
Boot it, click it,
own a lane.
- cd sims-backend && docker compose up -d
- alembic upgrade head if api 500s
- Open :5173 → log in as supervisor → click through
- Read docs/sims-demo-script.md, run the flow
- Run G1 gates on a no-op to confirm toolchain
- Pull DEV2-tablet-device-pairing (PRs #94/#104)
- Read your ticket — DEV2-703 (Pedro) / DEV2-704 (Vusal)
- Sync with Gabriel · post in #ops-weekly-updates
Full detail in the reference docs →