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)