Fibretrace Monet docs/Knowledge base/Glossary + collisions

Glossary

Every term a newcomer trips on. Confidence markers and citation shorthand as defined in README.md (L: = Lovable clone at origin/main ffab85ca; QC: = QC script line; BL: = .local/business-logic/).

Core commercial objects

Term Definition Where used / evidence
Fibre Programme The commercial container for a traced fibre initiative: name, fibre type (Cotton, Wool, Rubber, Polyester, Recycled Polyester, Other), pigment, status (active/hidden/expired/deleted), start/end dates, country of origin, default reservation term (months, default 18), logo. Has registered producers, participants, manufacturers and exactly one owner company. VERIFIED L:src/pages/admin/AdminProgrammes.tsx:103-114,238-272; admin UI at /admin/programs
Program Owner The company operating a programme (Malcolm’s example: “Danny at FibreTrace”). Not a user role: a program_owners(company_id, programme_id) join row plus a company_modules row program_owner toggled per company. Owns the programme’s certificates, documents and claim wording (the “mini-CMS”). VERIFIED L:src/hooks/useProgramOwner.ts:20, L:src/pages/admin/AdminCompanies.tsx:97,254; BL:demo:88
Participant A company registered on a programme via programme_participants (role values manufacturer or participant). Participation is what makes a brand/retailer company a Tier 0 persona. VERIFIED L:src/hooks/usePersonaContext.ts:37-39; L:src/hooks/useProgrammes.ts:158
Programme Producer A company registered via programme_producers with per-row ceiling_mt, scans_per_mt, pigment_supplied_kg, scans_completed, produced_mt. Registration here — and only here — makes a company a Fibre Producer persona. VERIFIED L:src/pages/admin/AdminProgrammes.tsx (producer rows); QC:8 (rule 3)
Ceiling Sum of programme_producers.ceiling_mt — the maximum volume a programme can activate. VERIFIED L:src/hooks/useProgrammes.ts (total_ceiling_mt)
Activated Volume physically produced and scanned into the programme: sum of non-excluded production_records.weight_kg / 1000, raised by the auto_associate_session_to_programme trigger when a producer facility’s session falls inside a programme window. In ClaimPosition maths, activated = claimed + available. VERIFIED L:src/hooks/useProgrammes.ts; SQL:20260420114208; L:src/pages/ClaimPosition.tsx:474-478
Reservation A capacity grant to a participant company: one programme_reservations row per adjustment, each with its own expires_at, negative rows allowed as releases. Expired rows leave usable capacity but stay in history. VERIFIED L:src/pages/admin/AdminProgrammes.tsx:56-62,553-616; L:src/hooks/useProgrammes.ts
Reservation Request A participant-raised ask for more capacity (reservation_requests table) reviewed by FT Admin at /admin/reservation-requests; approval inserts the real reservation row. Distinct from the real backend’s write-only “reservation enquiry” email. VERIFIED L:src/components/AddReservationModal.tsx:167-190; L:src/pages/admin/AdminReservationRequests.tsx:97-135
Capacity release A negative-quantity reservation row recording that capacity was taken back, kept visible in history rather than silently shrinking older entries. VERIFIED L:src/pages/admin/AdminProgrammes.tsx:588-616 (“Use a negative value to subtract. 1,000 CU = 1 MT.”)
Claim Position The participant-facing capacity page (/claim-position): Total reserved headline, reservation history, capacity funnel, PO-raised KPI with Near/Over-limit warnings. VERIFIED L:src/pages/ClaimPosition.tsx:387-398,565-586
Nomination (Purchase Order) The brand-to-manufacturer commercial order: header (po_reference, volume_mt/volume_cu, programme, partner) plus product lines. Status enum: draft, shared, linked, ready, proposed, partially_claimed, fully_claimed, closed. See collision C2. VERIFIED L:src/hooks/usePurchaseOrders.ts:5-38
Nomination line (PO line) Per-product row: quantity, HS code, product category, net weight kg, blend %, loss multiplier, computed cu_total, overridden, excluded, quantity_claimed. VERIFIED L:src/hooks/usePurchaseOrderLines.ts:11-24
Linking The manufacturer act of attaching verification sessions to a nomination (/link-to-po), producing purchase_order_verifications rows and per-line allocations. VERIFIED L:src/components/LinkVerificationsToPoModal.tsx:134-193
Claim (production claim) The metered statement “company X claims Y MT of programme Z fibre”. production_claims row scoped to the PO-issuing retailer, statuses proposed / confirmed / rejected / revoked. Reference format CLM- + first 8 hex of the id, uppercased. VERIFIED L:src/hooks/usePurchaseOrders.ts:373-560,640-746; L:src/hooks/useEvidencePackData.ts:36
Claim proposal A claim in status proposed: created by the manufacturer with an allocation snapshot (production_claim_lines) and session bindings (production_claim_sessions), awaiting the retailer’s confirm/reject. VERIFIED L:src/hooks/usePurchaseOrders.ts:373-560
Ready to Claim The retailer queue of proposals (/ready-to-claim) with variance highlighting, over-capacity flags, “Deselect to fit” and bulk approval. VERIFIED L:src/pages/ReadyToClaim.tsx:500; L:src/components/BulkClaimApprovalModal.tsx:140-183
Partial claim Claiming less than a nomination’s remaining volume; the PO moves to partially_claimed and stays claimable; line quantity_claimed tracks the consumed part. VERIFIED L:src/hooks/usePurchaseOrders.ts:640-746; BL:wt2:35
Supplier close Manufacturer-side “no more shipments” flag (supplier_closed_at/_note) that notifies the retailer but does not close the PO. VERIFIED L:src/hooks/usePurchaseOrders.ts:1063-1090
Evidence pack An audience-specific printout of a confirmed claim. Registry of 8: verification-record (“Fibre verification record”), sustainability, procurement, retailer, assurance, regulator, dpp, supplier. Public tokens are seeded for trade/sustainability/procurement on confirmation. VERIFIED L:src/lib/evidencePacks.ts:15-24; L:src/hooks/usePurchaseOrders.ts:722-732
Verification record (pack) The primary evidence pack (sections: consignment, fibre origin, supply chain map, programme scope and methods) — also the QC script’s name for the /claims page. See collision C3. VERIFIED L:src/lib/evidencePacks.ts; QC:244-246
Certificate Three distinct things: programme-level credentials uploaded by the owner (program_certificates), company-level certificates (Settings > Certificates, company_certificates, BE-blocked), and certificates attached to a claim/transaction (1:N per Malcolm). VERIFIED for the first two as UI; STATED for 1:N L:src/pages/OwnerCertificates.tsx; memory reference_company_certificates; BL:demo:15-17
Claim certificate The exported PDF of an evidence pack carrying a QR code that resolves to the public claim page. STATED BL:demo:98; QR rendering VERIFIED L:src/pages/PublicClaim.tsx (QRCodeSVG)

Scanning and verification

Term Definition Where used / evidence
Scan One physical trigger of a scanner: the device returns tau/intensity values; pigment found = tau not 0xffff. VERIFIED apps/sat/src/features/scanner/services/fibreReader.ts:39-65
Audit SAT’s name for one completed verification event (scan set + product/process + reference + geolocation), posted as POST sat-audit. In dashboard vocabulary this is a verification. VERIFIED apps/sat/src/features/audits/types/audit.ts:421-432
Session / verification session The dashboard’s grouping of scans at a facility (Lovable sessions table; the thing that gets shared, linked to POs and claim-locked). No real REST resource exists yet. VERIFIED as Lovable model; GAP vs real BE integration-audit README; L:src/hooks/useVerifications.ts
Collection Canvas/legacy term overlapping order/session grouping; monet’s Collections page reads real orders. “Orders” in the real API means collections, not purchase orders. VERIFIED port-plan.md:121; M:src/lib/apiAdapter.ts:647
Scan History The manufacturer-facing name of /verifications per the QC script; the page header vocabulary for the sessions list. See collision C3. STATED QC:169-171,276
session_shares Sharing a session with another company (the anchor step: Tier 1 shares the final verification with the brand). VERIFIED BL:claims (session_shares); L:src/components/LinkVerificationsToPoModal.tsx:134-193 (shared sessions selectable)
Connection status Inert = verified FibreTrace scan not yet connected to any claim; Linked = part of a claim evidence pack, shows “Linked & Verified by {company}”. VERIFIED L:src/components/ObfuscatedId.tsx:48-90
Obfuscation Masking of session codes, FT IDs and blockchain IDs for any scan not claim-linked, controlled by app_settings['obfuscate_verification_ids'] (default ON). Reveal happens only when the scan becomes part of a claim. VERIFIED L:src/hooks/useObfuscateVerificationIds.ts:4; L:src/pages/admin/AdminSettings.tsx:163-175
Blockchain GUID The on-chain anchor id shown on verification records. In Lovable it is a masked/unmasked display field; against the real backend it is documented “always null — has no source on the sat-audits endpoint”; the real mechanism is GET /check-audit-blockchain-status. VERIFIED integration-audit/README.md:117,151; canvas auditApi.ts:58-63
FTID / FibreTrace ID The pigment identity a scan resolves to; SAT matches tau against per-FTID tolerance windows (fibretrace-id?tau=... online, cached list offline). VERIFIED apps/sat/src/features/audits/services/auditApi.ts:41-46
tau The scanner’s decay-time measurement used to match pigment identity; ranges overlap so tau alone is not unique — online checks add order code. VERIFIED memory reference_sat_offline_detection_and_idb_gotchas; fibreReader.ts:39-57
Pigment The physical luminescent tracer, admin-managed as pigment_ids with per-company/programme assignments. VERIFIED L:src/pages/admin/ (AdminPigmentIds); DemoEWRModal pigment picker
SDU Sliver Delivery Unit — in-line production hardware at producer facilities; Lovable models sliver_delivery_units + activity logs; the real backend exposes 4 read-only GET /api/v1/sdu/devices* endpoints. VERIFIED .local/backend-specs/claude-sdu-api-spec.md; L:src/pages/SDU.tsx
EWR Electronic Warehouse Receipt integration (“EWR eCotton”) importing US bale records into fibre creation; simulator-only today (“Dummy connection — production records will sync once live integration is enabled”). VERIFIED L:src/components/DemoEWRModal.tsx:77-83; L:src/components/AddFacilityFlow.tsx:226
Production record One unit of created fibre volume (source: SDU run, EWR import, or manual entry) counting toward Activated. VERIFIED L:src/pages/FibreCreation.tsx:441; DemoSDUModal/DemoEWRModal

Units and pricing-like objects

Term Definition Where used / evidence
Claim Unit (CU) 1 CU = 1 kg of raw marked fibre; 1000 CU = 1 MT. Line CU = quantity x net weight kg x blend % x loss multiplier. See collision C1 on the label. VERIFIED L:src/lib/claimUnits.ts:1-11
Product category Admin-configured CU rate card: HS codes, baseline net weight kg per piece, default blend % (5% steps), internal-only loss multiplier, primary vs custom (client-scoped via product_category_clients). VERIFIED L:src/pages/admin/AdminProductCategories.tsx; L:src/hooks/useProductCategories.ts
Blend % Share of traced fibre in the product, defaulted from the product category, overridable per nomination line (flagged overridden). Never hard-coded (QC rule 2). VERIFIED QC:7; L:src/hooks/usePurchaseOrderLines.ts:11-24
Loss multiplier Internal-only factor (“never shown to the customer”) applied in CU maths to account for process loss. Omitted from the QC script’s stated formula. VERIFIED L:src/pages/admin/AdminProductCategories.tsx:144
CU Estimator The product-lines calculator inside the reservation modal that live-computes CU from qty/weight/blend and applies the total to the request. VERIFIED L:src/components/CuEstimator.tsx
Overrides (admin) /admin/overrides — a read-only calibration report diffing nomination-line and claim-line values against category defaults, with CSV export. It has no add-override form. VERIFIED L:src/pages/admin/AdminOverrides.tsx:48-84,161-175
Facility licence A count-based entitlement (facility_licenses: license_count, subscription_status) consumed by non-free active facilities; adding a facility is blocked at zero available. No cost/period fields exist despite QC A-12/M-01 expecting a currency amount. VERIFIED L:src/pages/admin/AdminLicensing.tsx; L:src/components/CreateFacility.tsx:49-53

People, companies, access

Term Definition Where used / evidence
Persona Data-derived behaviour bundle, not a stored role: Producer (programme_producers rows), Manufacturer (incoming non-archived POs), Retailer Tier 0 (brand/retailer company type + participant rows), Owner (program_owners), fallback “scanner”. VERIFIED L:src/hooks/usePersonaContext.ts:36-41; L:src/hooks/usePersona.ts:34-47
FT Admin FibreTrace staff using the separate /admin console (own layout, own optional login gate adminLoginRequired). Out of monet MVP scope. VERIFIED L:src/components/AdminLayout.tsx:66-72; memory feedback_dashboard_mvp_equals_lovable_gui_no_extend
Team roles company_users.role: owner, admin, auditor, pending (admin-created default “user”). owner/admin gate company edits, billing, partner accept; auditor is scan-only and force-signed-out of the dashboard. VERIFIED L:src/pages/Team.tsx:52-178; L:src/pages/Home.tsx:128-133; L:src/components/InviteTeamFlow.tsx:24-38
Auditor The scan-only field role: may perform verifications (SAT), sees nothing else; dashboards reject it. VERIFIED L:src/pages/Home.tsx:128-133
Partner A company-to-company connection (invite by 3-letter company code, case-insensitive), prerequisite for declaring shipments to/from a company and for nomination sharing. VERIFIED L:src/pages/settings/SettingsPartners.tsx:160-177; BL:demo:72
Company code The 3-letter identifier used for partner invites. VERIFIED L:src/pages/settings/SettingsPartners.tsx:160-177; QC:175-176
Company modules Per-company feature flags toggled by FT Admin: billing, verified_cta, verifications_menu, scanners_menu, program_owner (plus a legacy sdu flag read by the old persona hook). There is no Insights module. VERIFIED L:src/pages/admin/AdminCompanies.tsx:81,250-254
Impersonate Admin-side client context swap to any user (AdminUsers), and the demo modal’s switchUser over 7 hardcoded seed personas. VERIFIED L:src/pages/admin/AdminUsers.tsx:83-86; L:src/components/DemoNavBar.tsx:15-52
Directory Public company directory page (/directory) backed by the is_public-gated catalog; private companies resolve to “Unknown” in monet’s adapter. VERIFIED L:src/App.tsx; memory reference_public_companies_coverage_gap
SAT The mobile scanning PWA (apps/sat) where field verifications originate; single experience for any authenticated company user, no personas. VERIFIED apps/sat/src/ProtectedRoute.tsx (auth-only gating)
Insights Referenced by QC A-08/R-13 as a per-company analytics module. Does not exist anywhere: no route, no module flag, in Lovable, monet or canvas. VERIFIED absence .local/qc-test-script/analysis.md section a.2; L module registry AdminCompanies.tsx:81

Terminology collisions — handled explicitly

C1. Claim Unit (CU) vs credit unit. Code says Claim Unit (claimUnits.ts, CuStat.tsx, fmtCu()); the Owner dashboard copy says “credit units”; the QC script uses both (“1 CU (Claim Unit / credit unit)” QC:6, “Claim Unit (CU) / credit units” QC:276) and therefore canonises the pair, not a winner. Lovable ran a 4-pass copy sweep spelling CU out as “Credit Units” (Aug 17-19) that is itself incomplete at HEAD. Newest source: the QC script — uses both. Status: OPEN (tracked since 2026-08-18; port-plan unit 9 blocked on it). VERIFIED

C2. Purchase Order vs Nomination. The table, routes and hooks are purchase_orders / /purchase-orders / usePurchaseOrders; the UI copy direction is Nominations — QC X-02 mandates “Nominations (not Purchase Order)” (QC:276) while the same script still writes “Create a nomination (PO)” and routes through /purchase-orders. Newest source: QC script — settles display wording only. Whether the domain/table renames is OPEN. VERIFIED

C3. Verification Records vs Scan History vs Claims. Three surfaces share vocabulary: /verifications is called Scan History (manufacturer view of sessions), /claims is called Verification Records (retailer view of claims), and “verification-record” is also the primary evidence-pack type. QC X-02 mandates “Verification Records (not Claims)” for the /claims page and “Scan History” for /verifications. Newest source: QC script — settled as display wording; the route names still say otherwise. STATED, consistent with L route naming |

C4. programme vs program. The codebase mixes both: tables are fibre_programmes/programme_*, admin route renamed to /admin/programs with /admin/programmes redirecting (L:src/App.tsx:215-216), functions say programme. Newest source: the Aug-19 window’s rename commits — “program” is winning in URLs, “programme” persists in data names. No stated ruling on prose spelling. Status: OPEN as a style rule, cosmetic. VERIFIED

C5. Claim vs Activate. Older UI used “Activate” for confirming a claim (walkthrough era buttons “Activate · N MT”); QC X-02 mandates “‘Claim’ (never ‘Activate’)” (QC:276). Separately “Activated” remains the capacity-funnel stage name for produced volume — same word, different concept, both still live. Newest source: QC script. Status: display rule settled; funnel stage name unchanged. STATED

C6. Audit vs verification vs session vs scan. SAT posts audits (one audit = one verification event with multiple scans); the dashboard groups scans into sessions (verification sessions) and calls them verifications; canvas has no session resource at all and monet fakes session_id from the audit’s own id (“a load-bearing coincidence, not a correct mapping” — memory reference_verification_id_obfuscation). Status: real vocabulary alignment is blocked on BE shipping a sessions resource. VERIFIED

C7. Orders vs Purchase Orders. The real Fibretrace /orders API is the Collections domain, unrelated to purchase orders/nominations; purchase_order appears in the real API only as a free-text reference field on audits/invoices. Do not map one onto the other. VERIFIED (port-plan.md:121; integration-audit/README.md:110,216)

C8. Tier labels. Malcolm’s definitions (Tier 3 = spinner, Tier 4 = raw fibre producer/gin) vs the signup wizard’s labels (“Tier 3 — Fibre producer”, “Tier 4 — Raw material”). Newest code source is the signup wizard, but the walkthrough definitions drive the whole persona narrative. Status: OPEN, needs a naming ruling. VERIFIED (L:src/lib/signup.ts:5-19 vs BL:demo:32-35)