MA

Pipelines & gates

K3
Gates live on TRANSITIONS (stage_gates: from → to, gate_expr, allow_roles) — advance_stage() evaluates the predicates and, on refusal, names exactly which ones failed.
Stages and gates are DATA, but changes ship as audited migrations — this is a viewer, not a settings editor. Custom status editors rot (teardown verdict).

Roofing — Insurance · 13 stages · 12 transitions

Roofing
Transitiongate_expr — required predicatesallow_rolesBackwardJobs at gate
12 LeadInspection
owner: Rep
  • property
  • contact
  • rep assigned
reprep_manageradminreason required
role-gated · ledgered
23 InspectionClaim filed
owner: Rep
  • inspection shot-list 100%
  • damage assessment
reprep_manageradminreason required
role-gated · ledgered
J-1054
34 Claim filedAdjuster meeting
owner: Rep
  • carrier
  • claim # on job
reprep_manageradminreason required
role-gated · ledgered
45 Adjuster meetingCarrier decision
owner: Rep
  • meeting held
  • outcome recorded
reprep_manageradminreason required
role-gated · ledgered
56 Carrier decisionContract signed
owner: Rep/Kareem
  • approved / partial / denied recorded
reprep_manageroffice_opsadminreason required
role-gated · ledgered
J-1043
67 Contract signedSupplementing
owner: Closer
  • signed contract on file (e-sign)
reprep_manageradminreason required
role-gated · ledgered
78 SupplementingProduction prep
owner: Kareem
  • parallel flag — blocks FINAL invoice, not production
office_opsadminreason required
role-gated · ledgered
89 Production prepScheduled
owner: Corey/Ethan
  • material ordered
  • permit (if req)
  • sub confirmed
office_opsadminreason required
role-gated · ledgered
J-1042
910 ScheduledInstalled
owner: Ops
  • WO(s) dispatched
  • confirmed
office_opsadminreason required
role-gated · ledgered
1011 InstalledQC / punch
owner: Waylon/subs
  • all WOs complete (shot-list + checklist)
office_opsadminreason required
role-gated · ledgered
1112 QC / punchInvoiced → Paid
owner: Ops
  • QC pass recorded
office_opsadminreason required
role-gated · ledgered
1213 Invoiced → PaidClosed
owner: Rachel
  • ACV/deductible/depreciation/supplement
  • balance 0
ar_apadminreason required
role-gated · ledgered
J-1052
Backward moves (to → from) are real life: always allowed to the listed roles, but ledgered with a required reason (MD§5) — never silent. “Jobs at gate” = jobs currently sitting at the from-stage, held by these predicates.

Want a stage or gate changed? It's a migration PR with a reason and an approver — the change lands in the ledger like everything else. Boards over this data live in the console (D1).