Three open PRs are about to add ADR files whose numbers already belong to something else. All of them merge clean, so nothing will go red and nothing will tell a reviewer.
Measured, not argued
main (cf10ee6ec) already carries one duplicate, which is the precedent:
$ git ls-tree --name-only origin/main docs/adr/ | grep -oE '^ADR-[0-9]+' | sort | uniq -d
ADR-018
Two more are queued right now.
Collision 1 — two open PRs both claiming ADR-027, opened three minutes apart:
$ git merge-tree --write-tree --messages refs/remotes/pr/1399 refs/remotes/pr/1401
exit=0
$ git ls-tree --name-only <result> docs/adr/ | grep ADR-027
docs/adr/ADR-027-pm-tool-projection-contract.md
docs/adr/ADR-027-work-claims-and-decision-ledger.md
Collision 2 — #1295 vs a file already merged. ADR-025-connector-substrate.md has been on main since before #1295 was opened; #1295 adds ADR-025-user-scoped-connectors-and-channel-routing.md:
$ git merge-tree --write-tree --messages origin/main refs/remotes/pr/1295
exit=0
$ git ls-tree --name-only <result> docs/adr/ | grep ADR-025
docs/adr/ADR-025-connector-substrate.md
docs/adr/ADR-025-user-scoped-connectors-and-channel-routing.md
(#1256 and #1083 also touch docs/adr/, but they edit existing filenames — those conflict normally and are fine. The defect is specific to adding a new file under a taken number.)
Why it's invisible
Disjoint filenames share no text, so git has nothing to conflict on. docs/adr/ has no index and no numbering check in CI. Highest number on main is ADR-026; every author independently and correctly reasoned "next is 027". Nothing they could have run would have shown them the other PR.
This is not carelessness by any of the three authors. It is a missing guard, and it has already fired once (ADR-018, undetected for 22 days).
Decision needed
Who keeps ADR-027. #1399 has seniority by 3 minutes; renumbering the other to ADR-028 is a filename change plus its internal self-references. Same call for #1295 — either renumber to the next free number, or, if it's genuinely an amendment to the connector substrate, fold it into the existing ADR-025-connector-substrate.md so it conflicts honestly.
Suggested guard
A CI check that fails when two files in docs/adr/ share an ADR-NNN prefix. It is a one-line uniq -d — the same command run above — and it would have caught all three instances, including the one that has been on main for 22 days.
Worth noting for whoever picks this up: #1401 is itself the ADR that documents the ADR-018 duplicate as evidence for a decision ledger. It is about to reproduce its own finding, which is the most concrete argument for the guard that I can offer.
Three open PRs are about to add ADR files whose numbers already belong to something else. All of them merge clean, so nothing will go red and nothing will tell a reviewer.
Measured, not argued
main(cf10ee6ec) already carries one duplicate, which is the precedent:Two more are queued right now.
Collision 1 — two open PRs both claiming ADR-027, opened three minutes apart:
docs/adr/ADR-027-pm-tool-projection-contract.md(opened 03:08:18Z)docs/adr/ADR-027-work-claims-and-decision-ledger.md(opened ~03:11Z)Collision 2 — #1295 vs a file already merged.
ADR-025-connector-substrate.mdhas been onmainsince before #1295 was opened; #1295 addsADR-025-user-scoped-connectors-and-channel-routing.md:(#1256 and #1083 also touch
docs/adr/, but they edit existing filenames — those conflict normally and are fine. The defect is specific to adding a new file under a taken number.)Why it's invisible
Disjoint filenames share no text, so git has nothing to conflict on.
docs/adr/has no index and no numbering check in CI. Highest number onmainis ADR-026; every author independently and correctly reasoned "next is 027". Nothing they could have run would have shown them the other PR.This is not carelessness by any of the three authors. It is a missing guard, and it has already fired once (ADR-018, undetected for 22 days).
Decision needed
Who keeps ADR-027. #1399 has seniority by 3 minutes; renumbering the other to ADR-028 is a filename change plus its internal self-references. Same call for #1295 — either renumber to the next free number, or, if it's genuinely an amendment to the connector substrate, fold it into the existing
ADR-025-connector-substrate.mdso it conflicts honestly.Suggested guard
A CI check that fails when two files in
docs/adr/share anADR-NNNprefix. It is a one-lineuniq -d— the same command run above — and it would have caught all three instances, including the one that has been onmainfor 22 days.Worth noting for whoever picks this up: #1401 is itself the ADR that documents the ADR-018 duplicate as evidence for a decision ledger. It is about to reproduce its own finding, which is the most concrete argument for the guard that I can offer.