Finding (class b — one route answers its refusals in three different envelope dialects)
Measured by the os-dev delivering #18066 (PR #18395) and handed to the domain:cli PM seat, which ran the dedupe. ⛔ Not graded here — lane and kind are triage's.
GET /meta/:type/:name emits refusals in three shapes from a single handler:
| refusal |
dialect |
app 403, via sendEnvelopeError |
nested {success:false, error:{code,message}} |
| absence 404, hand-built |
nested {error:{code,message}} |
sendDeclaredFault + every thrown refusal, including the cached arm's 404 and the ADR-0046 audience 403 |
flat {error:'…', code} |
⇒ body.error.code — the accessor #8013 settled on — reads undefined on two of this route's own refusals.
⭐ The part that makes it more than cosmetic: which dialect a caller must parse for absence depends on a server-side cache setting the caller cannot see. The cached arm throws (flat); the uncached arm hand-builds (nested). A client cannot know which it will get. That is the #7035 failure class.
Deliberately NOT converged in PR #18395, and why
- Matching the flat shape would break the byte-identity between the absent and the unpublished answer, which is a security property: ADR-0045 §3 makes an unpublished app externally unobservable, and that identity is what stops the response pair enumerating which app names exist-but-are-unpublished.
- Converging the thrown side has repo-wide blast radius.
⇒ PR #18395 pins the current dialects as they are, so a future convergence has to be a deliberate edit rather than a silent drift.
Dedupe words
meta item refusal dialect · resolveErrorResponse flat envelope · sendDeclaredFault vs sendEnvelopeError · ADR-0112 nested error.code · getMetaItemCached throw
⚠️ A dedupe search was run from the PM seat before filing. The envelope-dialect family has many closed members (#11719 · #15632 · #16545 · #16146 · #15685 · #12948 · #11683), each at a different site; ⛔ none is this route, and the only open hit (#17778) is a domain:spec form-predicate card on another subject.
Refs
#18066 / PR #18395 (where it was measured and pinned) · #7035 (the failure class) · #8013 (the body.error.code accessor)
Generated by Claude Code
Finding (class b — one route answers its refusals in three different envelope dialects)
Measured by the
os-devdelivering #18066 (PR #18395) and handed to thedomain:cliPM seat, which ran the dedupe. ⛔ Not graded here — lane and kind are triage's.GET /meta/:type/:nameemits refusals in three shapes from a single handler:sendEnvelopeError{success:false, error:{code,message}}{error:{code,message}}sendDeclaredFault+ every thrown refusal, including the cached arm's 404 and the ADR-0046 audience 403{error:'…', code}⇒
body.error.code— the accessor #8013 settled on — readsundefinedon two of this route's own refusals.⭐ The part that makes it more than cosmetic: which dialect a caller must parse for absence depends on a server-side cache setting the caller cannot see. The cached arm throws (flat); the uncached arm hand-builds (nested). A client cannot know which it will get. That is the #7035 failure class.
Deliberately NOT converged in PR #18395, and why
⇒ PR #18395 pins the current dialects as they are, so a future convergence has to be a deliberate edit rather than a silent drift.
Dedupe words
meta item refusal dialect·resolveErrorResponse flat envelope·sendDeclaredFault vs sendEnvelopeError·ADR-0112 nested error.code·getMetaItemCached throwdomain:specform-predicate card on another subject.Refs
#18066 / PR #18395 (where it was measured and pinned) · #7035 (the failure class) · #8013 (the
body.error.codeaccessor)Generated by Claude Code