Fibretrace Monet: team docs
Built 2026-08-25 from monet acafb94 (branch dev-dashboard). Lovable cursor: fetched a74c327f, ported 2b52a608. Read-only snapshot of the analysis docs, regenerated after every Lovable sync. Use the tree on the left to navigate; every page is self-contained and searchable with Ctrl+F.
Start here
The master report merges every analysis block into one ranked decision list. Read it first.
- Master Report VI: 8-rank decision list: claim-model schism, RLS exposure, QC start, terminology, reservation, script-vs-code drift, T88 revoke finding, product residue.
- Tier explainer VI: Self-running 11-scene animation of the fibre journey: what each tier does and how the capacity ledger moves (Activated / Reserved / Nominated / Claimed). Space pauses, arrows step scenes.
- Tier explainer 3D + voice: 3D diorama of the same journey, with an English voice-over on every beat and bilingual captions. Each beat states the rule that governs its step: the two hard gates, the three limits that block an over-claim, tier-scoped retirement. Voice starts off - press Voice on. Space pauses, arrows step beats.
QC test script
Malcolm's QC script tests the Lovable MVP, not monet. Running it against monet produces false bug reports.
- Script analysis VI: Route coverage (30/31 on Lovable, 10 missing + 14 shells on monet), per-section verdicts, questions for Malcolm.
- Test cases: The script's cases, normalised and numbered.
Knowledge base
Business logic re-derived 100% from the Lovable code. Every statement carries a confidence label (VERIFIED / STATED / INFERRED / UNKNOWN).
- Overview
- Domain model + ERD
- Lifecycles
- Glossary + collisions
- Rules + invariants
- Persona map
- Persona: FT Admin
- Persona: Program Owner
- Persona: Tier 4 Fibre Producer
- Persona: Tier 1 Manufacturer
- Persona: Tier 0 Retailer / Brand
- Persona: additional roles
- Implementation state
- Open questions (ranked)
- About the knowledge base
Lovable sync 2026-08-19
Window 0df29e60 to f0d02a28, 781 commits, 29 units (7 PORT / 14 REVIEW / 8 SKIP). Plan only; nothing is ported until business settles the version.
- Run summary: What changed on Lovable, why, and how each unit resolved against the real Fibretrace API.
- Port plan: Unit-by-unit plan with API resolution (EXISTS = 0, 9 GAP, 3 PARTIAL) and cursor state.
Walkthroughs and notes
Day-by-day notes from Malcolm's demos and the code walkthroughs that preceded the knowledge base.
- Flow diagram: Visual map of the claim / PO / evidence-pack flow.
- Flow explained: Narrative companion to the diagram.
- Persona case matrix: Which persona can do what, per screen.
- GUI walkthrough report: Screen-by-screen walkthrough of the live Lovable demo with screenshots.
- Walkthrough playbook: How the walkthrough was run and what is safe to touch on the demo.
- 2026-07-08 Malcolm demo notes: Fibre programme roles, tiers, hardcoded-apparel decision, certificates 1:N, claim sharing.
- 2026-07-09 Claims and product flow
- 2026-07-09 Linking and retirement rules
- 2026-07-16 Code-resolved open questions
- UX findings for Malcolm
- About these notes
Backend integration audit
Every dashboard data surface classified EXISTS / GAP / PARTIAL / mis-wired against the canvas API contracts.
- Audit report: Interactive report with verified contracts and draft code.
- BE ask: The consolidated request list for the backend team.
- About the audit
Jira backlog
Phase 1 planning source of truth.
- Phase 1 plan: Grouped by epic with FE/BE split, owners, estimates, out-of-scope list, open questions, sequencing.
- Master backlog (CSV): All phases, as a download.
What changed
- 2026-08-25 (v6) — Label stems no longer disappear behind the bottom panel. The solver bounded the CARD against the panel, but the stem and dot hang about 27px below the card and they are the part that shows what a label points at: on scene 10 the card cleared the panel top at 662.5px with its bottom at 658px while the dot sat at 678-685px, fully hidden, so the card appeared to point at nothing. The bound now reserves the stem reach. Found by a parallel codex run driving its own browser over the published page, which measured the exact pixel rows; confirmed here arithmetically and then in Chrome (dot bottom 907 against a panel top of 1064).
- 2026-08-25 (v5) — Fixed three world labels sitting on top of the caption card (scenes 03, 07, 09), found by measuring real rects in Chrome rather than trusting the gates. Two independent causes: the collision model charged one row per list item and was blind to wrapping, under-reporting card height by up to 101px; and the caption exclusion was a flat 180px band across the full width, while the card is left-side-only and its real bottom measured 211px. The model now counts wrapped rows (biased to over-estimate, since text wraps at word boundaries and under-estimating is what causes overlap), and the exclusion is measured from the live element and applied only where a label actually sits over the card — which also frees labels on the right that the flat band was pushing down for no reason. Verified in Chrome: 0 overlaps, 0 labels displaced sideways, height error now -19…+2px.
- 2026-08-25 (v4) — 3D explainer world labels enlarged for reading at a distance: card title 12.5→15.5px, list lines 11.5→13.5px, plain chips 12→14.5px, gate chips 11.5→13.5px, with
max-width320→380px so bigger type does not just wrap into taller cards. The collision model inhud/labels.tswas re-tuned in the same change — it hardcodes px-per-character and per-line height because happy-dom does no text layout, so leaving it at the old constants would have kept the verify gates passing against the old geometry while the rendered cards grew past their placement boxes. - 2026-08-25 (v3) — 3D explainer epilogue refreshed to the 2026-08-25 Lovable sync: API specs now EXISTS 1 / GAP 12 / PARTIAL 8 of 21 (was 0 / 11 / 6 of 17 from the 08-21 pull), counted directly from the 21
**Status**:fields in that run’s port-plan rather than taken from a summary line. One line in the epilogue panel was not merely stale but false — it read “Nothing in this sync window can be wired to the real backend yet”, which stopped being true the moment EXISTS went from 0 to 1; it now names the one spec that does have a real endpoint. Voice clips unchanged: the beat captions did not move, and only the English caption is narrated. - 2026-08-25 (v2) — 3D explainer now degrades on SHORT viewports. The HUD is a fixed flex column and its items do not shrink below content height, so with no height breakpoint the bottom of the panel simply overflowed past the window edge and was clipped - legend first, then the transport row. Width already stepped down at 900px; height had no step at all. Two tiers added: at 760px the legend hides and paddings tighten, at 600px the keyboard hint, chain labels and invariant line go too and the ledger bars shrink. Floor is now about 410px of CSS height instead of clipping silently. Note browser zoom shrinks the CSS viewport - 125% on a 700px window lands at 560px.
- 2026-08-25 — 3D tier explainer with an English voice-over added under Start here (explainer/player3d.html): the same journey as a 3D diorama, 11 scenes / 35 beats, one narrated clip per beat (Deepgram-class TTS, voice English_WiseScholar) with bilingual EN+VI captions on screen. Every beat now states the rule governing its step rather than only describing the picture — the two hard gates (total reservations <= ceiling; claim <= reservation left and <= pool left), the three limits that block an over-claim (reservation left, pool left, volume still open on the order), tier-scoped retirement (Tier 2/3 scan but never claim, so their scans stay reusable), mass balance rather than bale-to-garment identity, and the deliberate divergence that nominated <= reserved is advisory in the UI while only claims are hard-bounded at the database. Sound starts off; press Voice on. The 2D explainer (EN + VI) is unchanged and still listed.
- 2026-08-22 — Tier explainer translation pass 2 (Codex-reviewed) + abbreviation legend: the VI player drops the remaining English jargon a non-dev reader would trip on (pigment -> bột đánh dấu, licence -> giấy phép, database spelled out, toast/map/backend/flow replaced with plain Vietnamese, “được trace” -> “được theo dấu”), and both players gain a footer legend line explaining the abbreviations (VI: MT, SDU, T4->T0, the four ledger states, Verified, EXISTS/GAP/PARTIAL, MVP; EN: MT, SDU, tiers, EXISTS/GAP/PARTIAL). Kept per product convention: Nomination, Claim, Evidence Pack, MT, the ledger counter names, CONFIRMED, Verified, Programme Owner.
- 2026-08-21 (v2) — Vietnamese twin of the Tier explainer (explainer/player.vi.html, VI button on the Start-here tree row): same 11-scene engine, only the string table translated; terminology follows the approved flow-diagram wording (chuỗi hành trình, đặt chỗ, khoá sổ, chốt chặn) while ledger/domain terms stay EN (Nomination, Claim, Evidence Pack, MT, Activated / Reserved / Nominated / Claimed).
- 2026-08-21 — Tier explainer added under Start here: a self-running 11-scene animation of the fibre journey (follow-the-fibre) showing what each tier does and how the capacity ledger moves (Activated / Reserved / Nominated / Claimed, with the reserved >= nominated >= claimed invariant drawn as nested bars). Manual navigation: arrow keys step scenes, Space plays/pauses — no autoplay; the story line for each scene sits right under the title. Full-screen version at explainer/raw/player.html. The honest-MVP epilogue cites the 2026-08-21 Lovable sync numbers (API specs: EXISTS 0 / GAP 11 / PARTIAL 6).
- 2026-08-20 (v2) — New site shell styled on the monet dashboard design system (light theme, Inter + Mona Sans, shadcn tokens, the dashboard sidebar look) instead of the generic dark md2html theme: left sidebar with a collapsible document tree and a filter box, breadcrumb top bar, full-width content (wide tables now scroll inside their own box instead of overflowing), previous/next links, hand-built artifacts framed inside the shell. The knowledge-base portal page is retired: its 15 documents sit directly in the tree.
- 2026-08-20 — First publication. Contents: Master Report (EN + VI) merging the 2026-08-19 Lovable sync, the QC script analysis and the business-logic knowledge base; T88 closed (admin claim revoke throws at the DB, half-migration); the RLS exposure on the Lovable MVP’s Supabase promoted to rank 2; T88 evidence corrected the same day (program_certificates does carry a status CHECK and it allows revoked, which is why certificate revoke works).