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
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:specexecution 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
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
errorstring opens with the lowercase[tag]that PR #19683 (card #16245) removes from the two@objectstack/metadata-protocolproducers, on the 2026-08-29 maintainer ruling thaterroris human language andcodeis the machine token.②⚠️ This disagrees with Prime Directive #3 and with what the runtime actually emits, which is SCREAMING_SNAKE (
codeis spelled lowercase. The same payloads show e.g."code": "not_overridable".NOT_OVERRIDABLE). ⭐ This half is pre-existing — ⛔ not caused by #16245 — and it is the more consequential of the two, becausecodeis 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-matchflag help text says409 metadata_conflictin lowercase while the CLI emitscode: 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
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: #16245for the opener half only.Dedupe words:
ADR-0005 ADR-0010 wire payload bracketed opener·adr payload lowercase code vocabulary prime directive 3Generated by Claude Code