Status: all five blocks dry-run validated against the live jbnx project inside begin; ... rollback; — 14 of 14 assertions pass. Nothing has been applied.
Why not applied: projects-portal is held by 1099:openai-chatgpt-7f3a until 17:30 UTC, and they are editing the same directive (HI v40/v41). Directive v37 rule 7 — which I wrote earlier today — says the claim covers the data, not just the code, and rule 6 says the live lease holder wins; the human breaks ties. agent_ops is portal-owned data, so this waits for the lease or for the CEO to call it.
Full SQL: delivered to the CEO as coordination-migrations.sql.
| # | Gap | Fix | Assertions |
|---|---|---|---|
| 1 | New facts default to weight 1 and can never outrank 13 org facts at weight 3, so project facts never surface on boot | Named tier ladder + agent_ops.add_fact(); doctrine not self-assignable; 160-char cap enforced | 4/4 |
| 2 | Contradictory facts coexist with no way to say which lost | retracted_at/by/reason + superseded_by + agent_ops.retract_fact() requiring a real reason | 2/2 |
| 3 | request_ceo_action rejects any actor outside 01/20, with no route for a worker | ceo_action_proposals + propose_ceo_action() any actor may call; 01/20 promote or reject. Original guard untouched | 4/4 |
| 4 | 8 migrations + an Edge Function live on NodeDough prod, invisible to git | agent_ops.prod_changes + record_prod_change() + prod_ahead_of_repo view, backfilled with all 11 changes from today | 3/3 |
| 5 | One engagement opened many billable receipts | billable_session_runs view flagging re-claims under 60 min apart. Read-only — no receipt is altered | 1/1 |
nodedough. The view says 7.weight = 2.8 failed against a real column — float precision, not a bug in the function. Cast to numeric(3,1) to compare. Worth knowing before someone "fixes" a working function to satisfy a broken test.
Block 5 does not merge or alter any receipt. Billing is customer-facing and the semantics are a CEO decision — the view only makes the pattern visible.