Filed by the director seat under the #16404 ruling (decision batch #62, 2026-09-07, option D): the published contract face for error codes is ERROR_CODE_LEDGER. Any code that ships in dist must be registered there; registering a code widens the published face and is therefore Clause-②: yes, door or no door. A code present in dist but absent from the ledger is a protocol gap, not a tier question.
The nine codes measured unregistered (0 hits in StandardErrorCode + ERROR_CODE_LEDGER; positive controls VALIDATION_ERROR / PERMISSION_DENIED = 2 each)
| code |
introduced by |
door |
OBJECT_OWNERSHIP_CONFLICT |
#14367 |
has a door (demoted to declaredCode today) |
NAMESPACE_CONFLICT |
#14474 |
has a door (dispatcher-error-vocabulary.ts:642) |
STACK_CROSS_REFERENCE_INVALID |
#14552 / PR #15962 |
door: 'none' |
six STACK_* sibling codes |
#15963 / PR #16342 |
door: 'none' |
Scope
Clause-② yes; landing PR carries needs:contract-review.
Refs #16404 (ruling), #14552 (recorded as under-tiered, not reopened), #15963, #14367, #14474, ADR-0112.
Filed by the director seat under the #16404 ruling (decision batch #62, 2026-09-07, option D): the published contract face for error codes is
ERROR_CODE_LEDGER. Anycodethat ships indistmust be registered there; registering a code widens the published face and is thereforeClause-②: yes, door or no door. A code present indistbut absent from the ledger is a protocol gap, not a tier question.The nine codes measured unregistered (0 hits in
StandardErrorCode+ERROR_CODE_LEDGER; positive controlsVALIDATION_ERROR/PERMISSION_DENIED= 2 each)OBJECT_OWNERSHIP_CONFLICTdeclaredCodetoday)NAMESPACE_CONFLICTdispatcher-error-vocabulary.ts:642)STACK_CROSS_REFERENCE_INVALIDdoor: 'none'STACK_*sibling codesdoor: 'none'Scope
statusand a one-line description; each gets a classification row consistent withdispatcher-error-vocabulary.ts.codebecomes the specific code instead ofVALIDATION_ERROR+declaredCode. That is the intended effect of the ruling (a consumer can now branch on the real code), and it is exactly what the Clause-② review judges. ThedeclaredCodedemotion remains for genuinely unknown / third-party codes only.door: 'none'(thrown-value-only) code, design it in this card — one shape, no second list.code:literal raised underpackages/spec/src/**(and thedefineStackrefusals in particular) is a ledger member — the gate that keeps this class closed.Clause-② yes; landing PR carries
needs:contract-review.Refs #16404 (ruling), #14552 (recorded as under-tiered, not reopened), #15963, #14367, #14474, ADR-0112.