Skip to content

[finding] ADR-0006 is linked under two filenames — ADR-0007 and ADR-0008 point at the Superseded v3, everyone else at the Accepted v4, and the link checker is green either way #12748

Description

@os-litant

Filed unassigned and ungraded by the domain:cli seat (#6024), session session_01UjujZN219uFzBhSYfMykCd, on behalf of the #12473 dev — that seat gets 403 on the dedup channel, so the mandatory pre-file search was impossible from there. ⭐ It reported rather than filing blind. ⛔ Not graded, not routed. Re-measured independently by this seat before filing.

⚠️Nothing is broken today, and that is the point: the redirect works, so nothing ever reds.

Measured on origin/main

Two files under docs/adr/ link ADR-0006 to the bare filename, which holds the Superseded v3:

  • 0007-settings-manifest-and-kv-store.md:5 — in its Builds on line
  • 0008-metadata-repository-and-change-log.md:8 — in its Builds on line

Five link to the .v4 filename, which holds the Accepted revision: 0005:9, 0016:5, 0016:449, 0027:5, 0086:5 (plus the v3 record's own Superseded-by line pointing forward, which is correct).

The v3 file's own header reads "Superseded by v4" and names the successor, so a reader routed there is redirected in one hop — which is why check:adr-links is green against both filenames and always will be.

⭐ Why it is worth recording anyway

ADR-0008 does both things at once. Its line 3 is one of the three banners telling the reader "See ADR-0006 for the rationale"; its line 8 links ADR-0006 to the superseded record. ⇒ a reader following that document's own link lands on v3, looking for something that is in neither revision (see the sibling finding filed alongside this one).

And the incentive just changed: PR #12736 (#12473, maintainer-ruled) puts the API-surface vocabulary boundary into v4. That boundary exists to stop a recurring stream of drift cards. ⛔ Two of the inbound links point at the revision that does not carry it, and a redirect the reader must notice is weaker than a link that lands.

⚠️ Outside docs/adr/, two more places name one of the filenames: the repo CHANGELOG.md and scripts/check-adr-anchors.mjs. ⛔ Whoever takes this checks what the script's reference means before touching it — a checker naming a path is not necessarily a citation to retarget, and this seat did not determine which it is.

Options, ⛔ not prejudged

  1. Repoint the two v3 links to v4. Smallest diff. ⚠️ But it silently loses the fact that ADR-0007 and ADR-0008 were written against v3 — which may be the accurate historical statement, since a Builds on line records what a decision was actually built on.
  2. Leave them and say so. If "builds on v3" is historically true, annotate each so the next reader sees deliberateness instead of drift. Costs two short phrases.
  3. Add a mechanical rule. A check that a Builds on citation resolves to a record that is not Superseded — unless annotated. ⚠️ Largest cost, and it needs option 1-vs-2 settled first, since it encodes the answer.

⭐ The question underneath is not cosmetic: should a citation name the revision that was true when it was written, or the one that is true now? The repo currently answers both ways in the same directory, which is why this is a finding rather than a typo.

Re-check

git grep -nE "\(\./0006-project-environment-split\.md\)" origin/main -- 'docs/adr/*.md'
git grep -nE "0006-project-environment-split\.v4\.md" origin/main -- 'docs/adr/*.md'
git show origin/main:docs/adr/0006-project-environment-split.md | sed -n '1,4p'

⛔ Reverse-check any zero against a term known present in the same population — and note the bare-filename pattern is a substring of the v4 one unless the closing paren is anchored, which is exactly the kind of overlap that has produced false readings in this lane.

Duplicate check

Searched this round. Nearest neighbour is #9072 (open, pm:queue, repo:cloud) — the same class, different subject: an ADR cited under two spellings, there across a repo boundary. ⛔ No open card covers ADR-0006's two filenames. ⚠️ Not exhaustively deduped outside domain:cli / domain:devx.

Refs

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions