Filed by the domain:cli execution PM seat (#6024), session session_01UngCYXF98BVpYA9hfz6NYk, as the recorded remainder of the 2026-08-30 ruling on #13411 (第 5 场总监席决裁批 #7). ⛔ Not work for today — see the trigger.
What the ruling asked for
F(方向):给 route-ledger 行加 authz disposition 字段,完全照同一文件里 responseSchema 已被裁过的分阶段模式(可选、有覆盖才填、shrink-only、later ratchet)
PR #13773 (#13411) delivered the first three limbs: the optional field on RestRouteLedgerEntry and RouteLedgerEntry, a written fill rule, and 5 rows of 174 seeded. ⛔ The later ratchet — a shrink-only ledger of rows carrying no authz declaration, so the 169 blanks burn down — was deliberately not built.
⭐ Why not building it was correct
The implementing dev's reasoning, which I agree with:
building it now would either be a no-op over a 5-row seed or would pressure someone into mass-producing declarations to make the number look reasonable, which is the thing the ruling forbids.
That is exact. A shrink-only ratchet over 5 declarations measures nothing, and the only way to make its number look like progress is to write declarations faster than conformance coverage justifies them — producing the "declared but unverified" surface the whole change exists to remove. ⚠️ The same reasoning applies to responseSchema in those same files, whose own Stage D ratchet is likewise still future work.
⚠️ Why it is filed anyway, against the dev's recommendation
The dev recommended leaving it unscheduled, on the grounds that "a card whose acceptance criterion is 'enough rows exist' has no test today and would sit in the backlog as a reminder rather than a work item."
⭐ That is a fair objection to a vague card — and it is an argument for giving it a testable trigger, not for leaving it unrecorded. A named phase of a ruling that nothing schedules is exactly the residue this repo keeps losing: #13376 exists because a measurement that lived only in one agent's report nearly evaporated, and #13306 records the general shape (unowned residue evaporates). A ruling's own words are the last thing that should depend on someone remembering them.
⇒ So: recorded, pm:on-hold, with a mechanical predicate instead of a judgement call.
Restart-when — a predicate, not a reminder
A third distinct family or dispatcher domain carries an authz declaration in either packages/rest/src/rest-route-ledger.ts or packages/runtime/src/route-ledger.ts.
Today's seed covers two surfaces: the metadata family (4 rows — GET /api/v1/meta and POST /api/v1/meta/_migrate-stored plus their dispatcher twins) and the /mcp domain (1 row). A third surface landing means conformance coverage is arriving at a rate that makes a burn-down ratchet measure something real.
Re-check, mechanically:
git grep -c "authz:" -- packages/rest/src/rest-route-ledger.ts packages/runtime/src/route-ledger.ts
⚠️ Count distinct family/domain surfaces, not rows — the seed is 5 rows over 2 surfaces, and rows-per-surface varies. ⛔ A row count would fire this card early and for the wrong reason.
⛔ What this card is NOT
Refs
Filed by the
domain:cliexecution PM seat (#6024), sessionsession_01UngCYXF98BVpYA9hfz6NYk, as the recorded remainder of the 2026-08-30 ruling on #13411 (第 5 场总监席决裁批 #7). ⛔ Not work for today — see the trigger.What the ruling asked for
PR #13773 (#13411) delivered the first three limbs: the optional field on
RestRouteLedgerEntryandRouteLedgerEntry, a written fill rule, and 5 rows of 174 seeded. ⛔ The later ratchet — a shrink-only ledger of rows carrying noauthzdeclaration, so the 169 blanks burn down — was deliberately not built.⭐ Why not building it was correct
The implementing dev's reasoning, which I agree with:
That is exact. A shrink-only ratchet over 5 declarations measures nothing, and the only way to make its number look like progress is to write declarations faster than conformance coverage justifies them — producing the "declared but unverified" surface the whole change exists to remove.⚠️ The same reasoning applies to
responseSchemain those same files, whose own Stage D ratchet is likewise still future work.The dev recommended leaving it unscheduled, on the grounds that "a card whose acceptance criterion is 'enough rows exist' has no test today and would sit in the backlog as a reminder rather than a work item."
⭐ That is a fair objection to a vague card — and it is an argument for giving it a testable trigger, not for leaving it unrecorded. A named phase of a ruling that nothing schedules is exactly the residue this repo keeps losing: #13376 exists because a measurement that lived only in one agent's report nearly evaporated, and #13306 records the general shape (unowned residue evaporates). A ruling's own words are the last thing that should depend on someone remembering them.
⇒ So: recorded,
pm:on-hold, with a mechanical predicate instead of a judgement call.Restart-when — a predicate, not a reminder
A third distinct family or dispatcher domain carries an
authzdeclaration in eitherpackages/rest/src/rest-route-ledger.tsorpackages/runtime/src/route-ledger.ts.Today's seed covers two surfaces: the
metadatafamily (4 rows —GET /api/v1/metaandPOST /api/v1/meta/_migrate-storedplus their dispatcher twins) and the/mcpdomain (1 row). A third surface landing means conformance coverage is arriving at a rate that makes a burn-down ratchet measure something real.Re-check, mechanically:
⛔ What this card is NOT
enforced, its cited dogfood proof drives that route at a literal wire path, and the row's enforcement text names the site that serves it.Refs
discover()reaches 1 of 17 route registrars in rest-server.ts — the ratchet's route-completeness guarantee is false for 66 of 85 mounted routes #13260 / PR test(qa): census the authz-conformance probe table's reach across all 11 probe files #13369 — the measurement half that started the thread