Filed by the domain:devx PM seat from PR #9944 (#9915)'s H4 sibling sweep. Named there rather than fixed, per that dispatch's ruling 4.
The defect
scripts/check-role-word.mjs states its own regenerated baseline's size in two prose sites:
- L133 —
check-role-word: OK (43 baselined file(s), no new occurrences). - L144 —
ledger untouched — `43 problem(s)`, exit 1
scripts/role-word-baseline.json holds exactly 43 entries today, so both are accurate right now.
⇒ Latent, not live. They go wrong on the next --update, which is the sanctioned operation that rewrites that baseline.
Why file it while it is still correct
This is the identical state check-engine-double-contract.mjs's L206/L214 were in — and L214 had been refreshed to a correct value two hours before PR #9944 measured it stale again. Refreshing a self-describing number does not fix it; it resets the clock.
The class, stated once: a script that hardcodes a figure its own sanctioned regenerator invalidates, with nothing to catch the drift.--update is not a mistake anyone makes — it is the supported remedy the gate tells you to run.
The fix shape that worked next door
PR #9944 established that run-time derivation is not available for comments — nothing renders a comment, and making --update rewrite the script's own source would be a behaviour change (and would flip Clause-② to yes).
What worked instead: rest the claim on something the ratchet already guarantees, so the sentence cannot go stale in the direction that matters. Its examples:
308 generated rows → "a census that ALREADY OUTNUMBERS them and, by the opposite polarities below, can only outnumber them further" — monotone-true given grow-only/shrink-only invariants;one problem per census row -- hundreds of them, and growing, since this ledger is grow-only — a floor on a grow-only ledger cannot rot.
⚠️check-role-word's baseline is shrink-only (it is debt being paid down), so the polarity is the opposite one and the phrasing must follow its invariant, not that file's. Do not copy the sentence; copy the method.
⚠️ Both sites are sample output inside comments — text a reader compares against what the gate actually prints. Check whether they are load-bearing as examples of format (in which case the number could go generic) or as measurements (in which case they need the treatment above). Those want different fixes.
Scope
The bound on how this was found
PR #9944's sweep enumerated scripts/ files carrying a --write/--update/--fix mode (11), resolved each one's artifact, computed its array lengths, and grepped the script's comments for those values. Four other regenerators came back clean: check-error-status-conformance (34), check-i18n-coverage (12), check-query-options-erasure-ratchet (29/17), check-slot-lookup-ratchet (25).
⚠️That method only catches a figure still EQUAL to the live size — it finds latent sites and misses already-stale ones. In its author's words: "it would not have found this card's own 308s." So a clean result for those four means "no latent site", not "no stale site". Finding already-stale siblings needs the per-file hand classification #9915 used, and is not this card.
Refs: PR #9944 / #9915 (source, method, and the fix shape) · PR #9931 / #9910 (this file, same morning) · #9943 (the sibling class this card is not: present-tense population sizes that --write does not invalidate).
Generated by Claude Code
Filed by the
domain:devxPM seat from PR #9944 (#9915)'s H4 sibling sweep. Named there rather than fixed, per that dispatch's ruling 4.The defect
scripts/check-role-word.mjsstates its own regenerated baseline's size in two prose sites:check-role-word: OK (43 baselined file(s), no new occurrences).ledger untouched — `43 problem(s)`, exit 1scripts/role-word-baseline.jsonholds exactly 43 entries today, so both are accurate right now.⇒ Latent, not live. They go wrong on the next
--update, which is the sanctioned operation that rewrites that baseline.Why file it while it is still correct
This is the identical state
check-engine-double-contract.mjs's L206/L214 were in — and L214 had been refreshed to a correct value two hours before PR #9944 measured it stale again. Refreshing a self-describing number does not fix it; it resets the clock.The class, stated once: a script that hardcodes a figure its own sanctioned regenerator invalidates, with nothing to catch the drift.
--updateis not a mistake anyone makes — it is the supported remedy the gate tells you to run.The fix shape that worked next door
PR #9944 established that run-time derivation is not available for comments — nothing renders a comment, and making
--updaterewrite the script's own source would be a behaviour change (and would flipClause-②toyes).What worked instead: rest the claim on something the ratchet already guarantees, so the sentence cannot go stale in the direction that matters. Its examples:
308 generated rows→ "a census that ALREADY OUTNUMBERS them and, by the opposite polarities below, can only outnumber them further" — monotone-true given grow-only/shrink-only invariants;one problem per census row -- hundreds of them, and growing, since this ledger is grow-only— a floor on a grow-only ledger cannot rot.check-role-word's baseline is shrink-only (it is debt being paid down), so the polarity is the opposite one and the phrasing must follow its invariant, not that file's. Do not copy the sentence; copy the method.Scope
scripts/check-role-word.mjsonly. Prose/comment sites.Clause-②and bind the entry gate.Scanned:line and a fix to the--updateconfirmation. Read that first: it changed what the success branch prints, so the sample output in these comments may already be stale in a second way the sweep did not test for.The bound on how this was found
PR #9944's sweep enumerated
scripts/files carrying a--write/--update/--fixmode (11), resolved each one's artifact, computed its array lengths, and grepped the script's comments for those values. Four other regenerators came back clean:check-error-status-conformance(34),check-i18n-coverage(12),check-query-options-erasure-ratchet(29/17),check-slot-lookup-ratchet(25).Refs: PR #9944 / #9915 (source, method, and the fix shape) · PR #9931 / #9910 (this file, same morning) · #9943 (the sibling class this card is not: present-tense population sizes that
--writedoes not invalidate).Generated by Claude Code