Filed by the domain:spec execution seat (session session_01MkQhmuuJAVDjmeWNixwDDH) while landing #16864's first share. ⛔ Filed unassigned and unlabelled: routing, grading and type are the triage seat's.
This is share 2 of 3 of #16864's correction. Share 1 landed as PR #17888 (the packages/spec carriers). Share 3 is the skills-lane carrier. They were split by which surface the carrier lives on, not by topic.
Two defects in one file, both measured on origin/main
docs/adr/0087-metadata-protocol-upgrade-contract.md
1. A pre-addendum claim still stands 35 lines above its own correction
Line 355 reads, in the present tense:
MetadataConversion.retiredFromLoadPath implements "retired from the load path in N+1 — but never deleted": a retired entry is skipped by the loader (applyConversions) and replayed only by the chain (migrate meta) and the fixture CI
Line 390 of the same file is ## Addendum (2026-07-31) — stored metadata replays the chain (#3903), which supersedes it. Both are present, in document order, and a reader who stops at 355 gets the false one.
The addendum's own words (ratified from PR #4317, which closed #3903):
Every stored-row rehydration seam replays the FULL chain, retired entries included — applyConversionsToStoredItem in spec/conversions/stored.ts is the one primitive … Rationale: retirement is an authoring-surface event. The window exists so a live author is taught the canonical spelling; a row at rest has no author to teach.
2. The artifact-ingestion door's policy is recorded nowhere in the ADR
#12772 ruled that the artifact-ingestion door opens a version-keyed window and replays retired entries, and its ruling text is explicit about the shape:
So the conversion must be a versioned forward conversion keyed off the artifact's authored specVersion, ⛔ not an unconditional strip
That policy lives only in the issue and its review comments. Measured: docs/adr/0087-metadata-protocol-upgrade-contract.md carries eight ## Addendum headings and none of them is the artifact door; artifact-ingestion and applyArtifactForwardConversions return zero hits in that file. ⇒ a reader of the ADR meets the 2026-07-31 stored-row policy and nothing at all about the boot seam.
Why it is filed rather than done
docs/adr/** is a governed surface. A PR touching it is draft-only with a human merge, so it is a separate step from #16864's ordinary-queue share, not a rider on it.
Measurement provenance
The seat verified both readings itself on origin/main (git show origin/main:PATH, with a dark control returning 0). The seam inventory behind them was re-taken by the #16864 determination round: three includeRetired: true literals, four runtime callers (because applyArtifactForwardConversions has two), and stored.ts pins the flag rather than offering it (StoredConversionOptions is Omit over the option, so no caller can turn it off).
Refs
#16864 (the parent correction) · PR #17888 (share 1, landed) · #3903 / PR #4317 (the stored-row ruling) · #12772 (the artifact-door ruling) · #17885 (the default-flip instance the same round measured, a separate question) · #16693 (removed field-required-notnull-explicit)
Generated by Claude Code
Filed by the
domain:specexecution seat (sessionsession_01MkQhmuuJAVDjmeWNixwDDH) while landing #16864's first share. ⛔ Filed unassigned and unlabelled: routing, grading and type are the triage seat's.This is share 2 of 3 of #16864's correction. Share 1 landed as PR #17888 (the
packages/speccarriers). Share 3 is the skills-lane carrier. They were split by which surface the carrier lives on, not by topic.Two defects in one file, both measured on
origin/maindocs/adr/0087-metadata-protocol-upgrade-contract.md1. A pre-addendum claim still stands 35 lines above its own correction
Line 355 reads, in the present tense:
Line 390 of the same file is
## Addendum (2026-07-31) — stored metadata replays the chain (#3903), which supersedes it. Both are present, in document order, and a reader who stops at 355 gets the false one.The addendum's own words (ratified from PR #4317, which closed #3903):
2. The artifact-ingestion door's policy is recorded nowhere in the ADR
#12772ruled that the artifact-ingestion door opens a version-keyed window and replays retired entries, and its ruling text is explicit about the shape:That policy lives only in the issue and its review comments. Measured:
docs/adr/0087-metadata-protocol-upgrade-contract.mdcarries eight## Addendumheadings and none of them is the artifact door;artifact-ingestionandapplyArtifactForwardConversionsreturn zero hits in that file. ⇒ a reader of the ADR meets the 2026-07-31 stored-row policy and nothing at all about the boot seam.Why it is filed rather than done
docs/adr/**is a governed surface. A PR touching it is draft-only with a human merge, so it is a separate step from #16864's ordinary-queue share, not a rider on it.Measurement provenance
The seat verified both readings itself on
origin/main(git show origin/main:PATH, with a dark control returning 0). The seam inventory behind them was re-taken by the #16864 determination round: threeincludeRetired: trueliterals, four runtime callers (becauseapplyArtifactForwardConversionshas two), andstored.tspins the flag rather than offering it (StoredConversionOptionsisOmitover the option, so no caller can turn it off).Refs
#16864 (the parent correction) · PR #17888 (share 1, landed) · #3903 / PR #4317 (the stored-row ruling) · #12772 (the artifact-door ruling) · #17885 (the default-flip instance the same round measured, a separate question) · #16693 (removed
field-required-notnull-explicit)Generated by Claude Code