Skip to content

ADR-0087 still states that a retired entry is skipped by the loader, 35 lines above its own addendum saying the opposite — and the artifact-ingestion door policy from #12772 is recorded in no addendum at all #17894

Description

@os-bill

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 includedapplyConversionsToStoredItem 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

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

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions