Observed while widening check:error-code-casing's emission recognizer for #10658 (PR #10760). Filed rather than absorbed: it is a different file, a different gate, and the drift is in the safe direction.
What is now inaccurate
scripts/check-dispatcher-error-vocabulary.mjs documents its delegation contract with check:error-code-casing in three places (around the header notes and isMine), each enumerating that gate's recognizers:
check:error-code-casing owns the lowercase sweep, and every pattern it has needs a QUOTED lowercase literal beside the token code - code: 'x', .code = 'x', code === 'x', code?: 'x' | 'y'.
After #10760 there is a fifth: our default reached through an || / ?? fallback chain, code: parsed?.code || 'x'. The enumeration is now short by one.
Why it is worth a line
The drift understates coverage, so nothing goes unreported today — this is not a live hole. It matters because of what the same file's header warns about in its own words: the owd_widening_forbidden case sat unswept for two vocabulary batches because "two gates, each assuming the other". The delegation map is the artifact that prevents a repeat, and it is now slightly wrong about where one shape lives.
There is a second, related fact the map does not record. Under #9568 a ||/?? chain reduces ALL-OR-NOTHING, so a chain with one runtime limb (parsed?.code || 'lit') reduces to nothing and this gate contributes no site for it. That was correct when neither gate could see the shape — it is exactly how the two live SSO codes shipped — and it stays correct now, but for a new reason: the shape is owned by check:error-code-casing rather than by nobody. Worth stating so the next reader does not re-derive the hole and "fix" it in the wrong gate.
Suggested shape
Comment-only, in scripts/check-dispatcher-error-vocabulary.mjs: add the fallback spelling to the three enumerations, and one clause beside the #9568 all-or-nothing note recording that a runtime-limbed chain is delegated, not dropped. No behaviour change, and no self-test case should move — if one does, the delegation is not what the comments claim.
Refs
#10658 · PR #10760 (the widening) · #9460 / #9568 (the delegation contract and the all-or-nothing reduction) · #10716 (the two codes themselves, services lane) · ADR-0112 D1
Generated by Claude Code
Observed while widening
check:error-code-casing's emission recognizer for #10658 (PR #10760). Filed rather than absorbed: it is a different file, a different gate, and the drift is in the safe direction.What is now inaccurate
scripts/check-dispatcher-error-vocabulary.mjsdocuments its delegation contract withcheck:error-code-casingin three places (around the header notes andisMine), each enumerating that gate's recognizers:After #10760 there is a fifth: our default reached through an
||/??fallback chain,code: parsed?.code || 'x'. The enumeration is now short by one.Why it is worth a line
The drift understates coverage, so nothing goes unreported today — this is not a live hole. It matters because of what the same file's header warns about in its own words: the
owd_widening_forbiddencase sat unswept for two vocabulary batches because "two gates, each assuming the other". The delegation map is the artifact that prevents a repeat, and it is now slightly wrong about where one shape lives.There is a second, related fact the map does not record. Under #9568 a
||/??chain reduces ALL-OR-NOTHING, so a chain with one runtime limb (parsed?.code || 'lit') reduces to nothing and this gate contributes no site for it. That was correct when neither gate could see the shape — it is exactly how the two live SSO codes shipped — and it stays correct now, but for a new reason: the shape is owned bycheck:error-code-casingrather than by nobody. Worth stating so the next reader does not re-derive the hole and "fix" it in the wrong gate.Suggested shape
Comment-only, in
scripts/check-dispatcher-error-vocabulary.mjs: add the fallback spelling to the three enumerations, and one clause beside the #9568 all-or-nothing note recording that a runtime-limbed chain is delegated, not dropped. No behaviour change, and no self-test case should move — if one does, the delegation is not what the comments claim.Refs
#10658 · PR #10760 (the widening) · #9460 / #9568 (the delegation contract and the all-or-nothing reduction) · #10716 (the two codes themselves, services lane) · ADR-0112 D1
Generated by Claude Code