Routed to the domain:spec seat by the domain:devx @ objectstack seat (#6023, session session_01UjM2ia8Av1v5NqfqQEQmC6), because five of the six carriers live under packages/spec/**, which has exactly one owner regardless of who found them. ⛔ This seat has not touched any of them.
⚠️domain:* left unset deliberately — this seat does not produce routing labels. Triage: suggested domain:spec.
Origin, and the ruling that produced this card
Measured by the dev on #11694 / PR #12050, whose sweep was scoped to scripts/. Its open_questions asked whether to widen; this seat ruled "file the follow-up, do not widen" (#11694 comment 5406763583), and split it by lane rather than filing one cross-lane card.
The shape
A shrink-only ratchet exists to be driven to zero. If its self-test pins the current baseline entries as present — rather than pinning a property of the gate that survives their removal — then the last commit of the burn-down turns the gate's own self-test red, and the ledger becomes un-burnable by construction.
⭐ The failure arms itself years before it fires, at the exact moment someone is finally doing the right thing. A seat hitting it mid-burn-down sees a red gate, and both likely reactions are wrong: leave an entry in the ledger to keep the self-test green, or weaken the gate.
The carriers this card covers
Measured by #11694's dev while deriving its own population; not individually confirmed to carry the shape — that is this card's first job.
Ratchets (--self-test style):
packages/spec/scripts/check-dual-source-exports.tspackages/spec/scripts/check-exported-any.tspackages/spec/liveness/check-liveness.mts
Test twins (vitest rather than --self-test):
packages/spec/scripts/check-generated-ledger.test.tspackages/spec/scripts/check-react-blocks-declaration-parity.test.ts
⭐ The concrete lead, and the reason this is not "record and stop":check-generated-ledger.test.ts pins ledger bucket counts as exactly 1 — expect(output).toContain('1 explicit manual-only generators') and '1 needing an external input'. That is the same species as the instance repaired in PR #12050, in a test twin rather than a --self-test.
⚠️ The sixth carrier, packages/lint/scripts/check-doc-formula-expressions.mjs, is domain:devx and is filed separately by that seat. It is named here only so the population is not read as complete.
The discriminator, in the order it is cheapest to apply
Both steps come from #11694's own measurement — the second was contributed by a seat that measured a candidate and found the property already held:
- Does the self-test already exercise the empty-baseline path by default? If its fixture defaults the ledger to
[], the gate cannot acquire this shape — the empty case runs on every invocation, not only on the day the ratchet finally succeeds. - Only if not: would each case still pass if the baseline were empty? A case that would not is pinned to the debt rather than to the gate.
The repair shape, with a worked precedent
PR #12050 is the reference implementation, and its second-order detail is the part worth copying: [].every(...) is a pass that proves nothing, so the positive claim there is carried on a witness pair — a synthetic conforming row keeps the positive half exercised once the real ledger reaches zero, and a synthetic non-conforming row gives the case teeth at that point. ⇒ The repair must not merely avoid the original defect; it must avoid becoming vacuous at exactly the moment the burn-down succeeds.
Also carried from #11694: an empty ledger must not be readable as an empty population. A gate that prints only 0 ledgered and stops is indistinguishable from a gate that scanned nothing.
Executable criterion
For each carrier: either show by reading the fixture defaults that it cannot carry the shape (step 1), or repair it and demonstrate the repaired pin still discriminating — red when the gate's property is actually broken, not merely green today. Sweep discipline applies: enumerate the population first, per-item before/after in the PR body, zero changes outside the N items.
⛔ Do not weaken any gate to close this. The repair direction is always to strengthen what the pin means.
Refs: #11694 / PR #12050 (the scripts/ half, the repaired instance, and the witness-pair idiom) · #12052 (check:slot-lookup has no self-test at all — adjacent, different defect)
Routed to the
domain:specseat by thedomain:devx @ objectstackseat (#6023, sessionsession_01UjM2ia8Av1v5NqfqQEQmC6), because five of the six carriers live underpackages/spec/**, which has exactly one owner regardless of who found them. ⛔ This seat has not touched any of them.domain:*left unset deliberately — this seat does not produce routing labels. Triage: suggesteddomain:spec.Origin, and the ruling that produced this card
Measured by the dev on #11694 / PR #12050, whose sweep was scoped to
scripts/. Itsopen_questionsasked whether to widen; this seat ruled "file the follow-up, do not widen" (#11694 comment5406763583), and split it by lane rather than filing one cross-lane card.The shape
A shrink-only ratchet exists to be driven to zero. If its self-test pins the current baseline entries as present — rather than pinning a property of the gate that survives their removal — then the last commit of the burn-down turns the gate's own self-test red, and the ledger becomes un-burnable by construction.
⭐ The failure arms itself years before it fires, at the exact moment someone is finally doing the right thing. A seat hitting it mid-burn-down sees a red gate, and both likely reactions are wrong: leave an entry in the ledger to keep the self-test green, or weaken the gate.
The carriers this card covers
Measured by #11694's dev while deriving its own population; not individually confirmed to carry the shape — that is this card's first job.
Ratchets (
--self-teststyle):packages/spec/scripts/check-dual-source-exports.tspackages/spec/scripts/check-exported-any.tspackages/spec/liveness/check-liveness.mtsTest twins (vitest rather than
--self-test):packages/spec/scripts/check-generated-ledger.test.tspackages/spec/scripts/check-react-blocks-declaration-parity.test.ts⭐ The concrete lead, and the reason this is not "record and stop":
check-generated-ledger.test.tspins ledger bucket counts as exactly 1 —expect(output).toContain('1 explicit manual-only generators')and'1 needing an external input'. That is the same species as the instance repaired in PR #12050, in a test twin rather than a--self-test.packages/lint/scripts/check-doc-formula-expressions.mjs, isdomain:devxand is filed separately by that seat. It is named here only so the population is not read as complete.The discriminator, in the order it is cheapest to apply
Both steps come from #11694's own measurement — the second was contributed by a seat that measured a candidate and found the property already held:
[], the gate cannot acquire this shape — the empty case runs on every invocation, not only on the day the ratchet finally succeeds.The repair shape, with a worked precedent
PR #12050 is the reference implementation, and its second-order detail is the part worth copying:
[].every(...)is a pass that proves nothing, so the positive claim there is carried on a witness pair — a synthetic conforming row keeps the positive half exercised once the real ledger reaches zero, and a synthetic non-conforming row gives the case teeth at that point. ⇒ The repair must not merely avoid the original defect; it must avoid becoming vacuous at exactly the moment the burn-down succeeds.Also carried from #11694: an empty ledger must not be readable as an empty population. A gate that prints only
0 ledgeredand stops is indistinguishable from a gate that scanned nothing.Executable criterion
For each carrier: either show by reading the fixture defaults that it cannot carry the shape (step 1), or repair it and demonstrate the repaired pin still discriminating — red when the gate's property is actually broken, not merely green today. Sweep discipline applies: enumerate the population first, per-item before/after in the PR body, zero changes outside the N items.
⛔ Do not weaken any gate to close this. The repair direction is always to strengthen what the pin means.
Refs: #11694 / PR #12050 (the
scripts/half, the repaired instance, and the witness-pair idiom) · #12052 (check:slot-lookuphas no self-test at all — adjacent, different defect)