Skip to content

ADR-0001 is still on the weaker remedy: upgrade it from an UNRESOLVED_ADR_CITATIONS allowlist entry to a tombstone record, now that 0107 is the template #7866

Description

@huangyiirene

Filing unassigned; domain:* routing is the triage seat's. This is the one live remainder of #7329 — named by that card's 2026-08-11T03:10Z triage comment as the real restart condition, and explicitly left open and unclaimed by PR #7838 (merged 21:35Z) with its reason stated. Filing it so it does not die with the card that carried it.

The gap

docs/adr/0001-*.md was deleted on 2026-02-11 in the permission-protocol rewrite (9da8e3e72), while ADR-0002 still cites it as history. Today it is covered by an entry on UNRESOLVED_ADR_CITATIONS in scripts/check-adr-anchors.mjs — an allowlist that says "this citation resolves to nothing, and that is knowingly tolerated".

The gate's own prose says a tombstone record is the preferred remedy, and since #6676 / PR #7316 there is a working template for one: docs/adr/0107-withdrawn-hook-body-write-set-static-gap.md. So ADR-0001 sits on the weaker of two remedies, purely because the better one did not exist when it was written.

A tombstone buys two things the allowlist cannot:

  1. The citations genuinely resolve — ADR-0002's historical reference points at a file that exists and explains what happened, instead of at an allowlist entry a reader has to go find.
  2. The number can never be re-handed out. An allowlist entry is inert against re-use; a record collides loudly in auditAdrDirectory (that path was hardened by docs(adr),chore(devx): tombstone ADR-0107 — 撤回后退役的编号,附考古证据 (#6676) #7316, and PR fix(devx): teach check:adr-anchors that a tombstone is not a decision (#7329) #7838 just added the rule that a tombstone number is refused as an anchor while still resolving as a citation).

Why #7838 did not take it

Not an oversight — the PR says so directly: it "needs a new docs/adr/0001-*.md, which is a #6741 human-merge PR and does not belong on a script-only branch." PR #7838 confirmed the mechanism while it was in flight: its ADR maintainer approval check was green precisely because nothing under docs/adr/ was touched.

⚠️ The merge-channel constraint, and why this card cannot be split

The obvious split — "new tombstone file (human) + drop the allowlist entry (AI)" — does not work, and whoever takes this should know before planning:

  • check-adr-merge-approval.mjs matches on the docs/adr/ path prefix with no size exemption, so the tombstone half is maintainer-merge no matter how small.
  • The two halves are coupled: removing 0001 from UNRESOLVED_ADR_CITATIONS before the tombstone exists turns the gate red, and landing the tombstone while the allowlist entry remains leaves a redundant grandfather clause behind. They have to land together.

So this is a single PR that goes entirely through the maintainer's manual channel — unlike #7783#7837 and #7863, where the halves were genuinely separable. An AI seat may draft and PR it; it must not merge, enqueue, or arm auto-merge on it.

What the change is

  1. Write docs/adr/0001-withdrawn-<slug>.md following the 0107 tombstone's shape — content is "this number's record was deleted on 2026-02-11 in the permission-protocol rewrite; nothing in it is in force; do not reuse", with the commit reference and a pointer to ADR-0002 which cites it as history. Note the slug must start with withdrawn- — PR fix(devx): teach check:adr-anchors that a tombstone is not a decision (#7329) #7838 made that prefix the machine-readable marker for "not a decision", so a tombstone that misses it is silently anchorable.
  2. Drop the 0001 entry from UNRESOLVED_ADR_CITATIONS in scripts/check-adr-anchors.mjs, with its comment.
  3. pnpm check:adr-anchors must stay green, and --self-test should gain a live-tree assertion that 0001 is now in both records and nonDecisions — the same both-directions pin fix(devx): teach check:adr-anchors that a tombstone is not a decision (#7329) #7838 added for 0107.

Worth confirming rather than assuming: whether ADR-0001's deleted content is recoverable from history and worth summarising in the tombstone, or whether the honest record is just "deleted, see 9da8e3e72". The 0107 tombstone is the style precedent either way.

Provenance

#7329's 03:10Z triage comment (the re-scope), and PR #7838's "Out of scope, with the reasoning recorded" section. Filed by the devx PM seat (#6023).

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions