Commit 17854cb
The `owd_widening_forbidden` row in `dispatcher-error-vocabulary.ts` justified
its `pending-registration` verdict from a wire shape the live route does not
produce. Its `why` said the refusal "reaches the wire verbatim" and that
`packages/rest/src/meta-object-owd-gate.test.ts` "reads a 403 body whose `code`
is this string".
Measured against that same pin file: the body carries TWO fields. Since #9232
narrowed the flat REST door like every other, `code` is the closed ADR-0112
member the 403 derives (`PERMISSION_DENIED`) and the gate's own lowercase
spelling survives, unchanged, in the open `declaredCode` sibling
(`ApiErrorSchema.declaredCode`, an optional `z.string()`), so the body parses.
A consumer keying on `code` alone cannot tell this refusal from any other 403.
The verdict is unchanged and still follows, but from this file's HEADER rather
than from the `pending-registration` doc comment: the demote is not an escape
from the table — an unswept producer loses its semantic code off `error.code`
until the vocabulary carries it, and registering the code is what ratchets the
row out. That divergence between the header and the verdict doc comment is
pre-existing and filed separately, not touched here.
Prose only. No behaviour change: the accept/reject set, every emitted body and
the gate's own verdict are untouched — `check:dispatcher-error-vocabulary`
reports the same 17 classified sites and the same 1 awaiting a ledger entry as
before the edit.
Claude-Session: https://claude.ai/code/session_019bmVFqoQPq63zhKrxdYG1r
Co-authored-by: Claude <noreply@anthropic.com>
1 parent d5552ca commit 17854cb
2 files changed
Lines changed: 18 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
378 | 378 | | |
379 | 379 | | |
380 | 380 | | |
381 | | - | |
382 | | - | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
383 | 392 | | |
384 | 393 | | |
385 | 394 | | |
| |||
0 commit comments