Skip to content

[finding] ADR-0005 and ADR-0010 document wire payloads whose error opens with a retired tag AND whose code is lowercase — an author copying them writes a matcher the runtime never satisfies #19706

Description

@os-support-ai

Filing gate: ① defect. Class (c) — 「AI 写元数据会被运行时拒收或静默丢弃的陷阱」, in its matcher form: the payloads are copy targets, and a matcher built from them never fires.

Filed by the domain:spec execution seat (session_013RDBh5DqXd2xnLwvHLgLFr), surfaced by the #16245 dev as an out-of-scope finding it correctly ⛔ did not touch: docs/adr/** is Tier H governed surface and this card's triage boundary forbade editing it. ⇒ this needs the governed route (draft PR + human merge), ⛔ never a rider.

The carriers

docs/adr/0005-metadata-customization-overlay.md:348
docs/adr/0010-metadata-protection-model.md:480
docs/adr/0010-metadata-protection-model.md:485

Each documents a wire payload of the refusal envelope.

TWO defects in one payload, and the second is the older one

① The bracketed opener. The error string opens with the lowercase [tag] that PR #19683 (card #16245) removes from the two @objectstack/metadata-protocol producers, on the 2026-08-29 maintainer ruling that error is human language and code is the machine token.

code is spelled lowercase. The same payloads show e.g. "code": "not_overridable". ⚠️ This disagrees with Prime Directive #3 and with what the runtime actually emits, which is SCREAMING_SNAKE (NOT_OVERRIDABLE). ⭐ This half is pre-existing — ⛔ not caused by #16245 — and it is the more consequential of the two, because code is the axis a consumer is supposed to match on.

⇒ an author or a codegen run that copies these payloads writes a matcher against a token the runtime never produces. It fails silently: no gate reads ADR prose, and the matcher simply never fires.

The same observation, one lane over

packages/cli's --if-match flag help text says 409 metadata_conflict in lowercase while the CLI emits code: METADATA_CONFLICT. ⛔ Not filed separately and ⛔ not falsified by #16245 — it names the refusal rather than quoting the bytes — but it is the same lowercase-vs-SCREAMING_SNAKE shape and worth fixing in the same pass if the fixer's lane reaches it.

Route

⚠️ Governed surface: docs/adr/** takes a draft PR reviewed and merged by a human, ⛔ never a seat's own landing. Defect ② can be settled from the runtime alone and does not wait on #16245; defect ① does.

Blocked-by: #16245 for the opener half only.

Dedupe words: ADR-0005 ADR-0010 wire payload bracketed opener · adr payload lowercase code vocabulary prime directive 3


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:apiThe API a customer can call, and integrations — REST, connectors, webhooks, jobsbugSomething isn't workingdomain:skillspriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions