Skip to content

docs(adr): renumber the second ADR-0041 to 0042, and unbreak main - #504

Closed
Gerrrt wants to merge 1 commit into
mainfrom
gerrrt/adr-0041-collision-a42eb1
Closed

Gerrrt wants to merge 1 commit into
mainfrom
gerrrt/adr-0041-collision-a42eb1

Conversation

@Gerrrt

@Gerrrt Gerrrt commented Sep 17, 2026

Copy link
Copy Markdown
Owner

main is red, and has been since 23:28Z. Every open PR inherits it.

README.md:95 claims 41 ADRs; the repository has 42
README.md:96 claims 26 runbooks; the repository has 27
ADR-0041 is claimed by 2 files: 0041-run-the-crs326-…, 0041-terminate-the-remote-path-…
  — renumber the one that landed second

How

#491 gave ADR-0041 to Run the
CRS326 on RouterOS
at 23:27:57Z.
#495 gave the same number to
Terminate the remote path on the lab at 23:28:52Z. Fifty-five seconds
apart, each green against a main that did not yet hold the other.

check_docs.py's ADR-numbering assertion is precisely the check for this. It is
not at fault and it needs no change — it fired the moment both files were in one
tree, which is the first moment the collision existed. A pre-merge branch cannot
see an ADR number that is still sitting in another branch.

What changed

The remote-path ADR landed second, so it becomes ADR-0042 — the file
check_docs.py names. git records it as a rename, so its history follows it.

Filename and its own H1 0042-terminate-the-remote-path-on-the-lab-and-route-it.md
Links retargeted 11
Bare ADR-0041 mentions renumbered 13
Files touched 12

Every remaining ADR-0041 in the tree is the CRS326 one, and each was
classified by hand rather than by pattern — the whole difficulty here is that
two different ADRs shared one number, so a search-and-replace would have
renumbered both. The survivors are in roadmap.md, hardware.md, ADR-0018's
amendment and swap-the-switch.md, and all four are about the switch.

Two of the renumbered mentions sit inside other ADRs' amendment blockquotes
(ADR-0011, ADR-0014). Updating a pointer to a renumbered file is not revising a
decision, so ADR-0001's immutability is not in question — and the alternative is
leaving a reference to a number that now means a different ADR.

open-the-remote-path.md's pfSense rule descriptions move with it
(WireGuard peers — ADR-0042), which is safe because nothing has been typed
into a firewall yet: that runbook is gated on the jumpbox of
#436, and
restore-the-firewall.md still counts the tripwires as though the tunnel were
unbuilt — which it is.

The two README numbers are the arithmetic of the same two merges: one ADR and
two runbooks arrived, and the sentence that counts them did not move.

Blast radius

  • No change to network segmentation or firewall rules
  • No new port published to a VLAN that could not already reach the service
  • No credential added outside secrets/*.sops.yaml

Documentation only — a file rename and reference updates. No decision text is
altered, and no ADR's content changes.

Verification

make check-docs  docs OK — 82 Prometheus + 18 Loki rules, 7 dashboards, 141 panels, 10 assertions
make lint        PASS  (yamllint, markdownlint-cli2, shellcheck, actionlint, editorconfig-checker)

check-docs went from three disagreements to zero, which is the whole point of
this PR. Verified there is no leftover 0041-terminate reference anywhere in the
tree, including outside markdown.

Note

#502 is rebased onto the broken
main and will stay red until this merges. Nothing is wrong with it.

Refs #491 #495

🤖 Generated with Claude Code

… counts

`main` is red. Three failures, all from two PRs merging within a minute of each
other without seeing one another:

    README.md:95 claims 41 ADRs; the repository has 42
    README.md:96 claims 26 runbooks; the repository has 27
    ADR-0041 is claimed by 2 files — renumber the one that landed second

#491 gave ADR-0041 to *Run the CRS326 on RouterOS* at 23:27:57Z and #495 gave
the same number to *Terminate the remote path on the lab* at 23:28:52Z. The
ADR-numbering assertion is exactly the check for this; it fired one merge too
late, because each branch was green against a `main` that did not yet hold the
other.

The remote-path ADR landed second, so it becomes **ADR-0042** — which is what
`check_docs.py` asks for by name. Renumbered: the filename, its own H1, eleven
links that targeted it, and thirteen bare `ADR-0041` mentions that meant it.
Every remaining `ADR-0041` in the tree is the CRS326 one, checked individually
rather than by pattern, because the two ADRs shared a number and a
search-and-replace would have renumbered both.

Two of the bare mentions are inside other ADRs' amendment blockquotes (ADR-0011,
ADR-0014). Updating a pointer to a renumbered file is not revising a decision,
so ADR-0001's immutability is not in question — and leaving them would be
leaving a reference to a number that now means something else.

`open-the-remote-path.md`'s pfSense rule descriptions change with it
(`WireGuard peers — ADR-0042`). Safe: the tunnel does not exist, its runbook is
gated on the jumpbox of #436, and `restore-the-firewall.md` still counts the
tripwires as though it were unbuilt.

The two README counts are the arithmetic consequence of the same two merges —
one ADR and two runbooks arrived, and the sentence that counts them did not
move.

Refs #491 #495

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Gerrrt
Gerrrt force-pushed the gerrrt/adr-0041-collision-a42eb1 branch from c3d4473 to a54f5b9 Compare September 17, 2026 23:37
Gerrrt added a commit that referenced this pull request Sep 17, 2026
#502's CI fails on three disagreements that are main's, not this branch's:
README's ADR and runbook counts, and two files both claiming ADR-0041. #504
fixes all three and is green. Merged here so this PR can be verified on its
own merits; the diff collapses back to two files once #504 lands on main.
@Gerrrt

Gerrrt commented Sep 18, 2026

Copy link
Copy Markdown
Owner Author

Already landed. Closing as a duplicate of
#503, merged just now as
107256fmain is green again.

Three sessions produced this fix independently and all three were
byte-identical
: #503 at 23:36:31Z, this one at 23:37:07Z (36 seconds later),
and #509 at 01:05:22Z. Same 12
files, same +27/−27, same 54 content lines once blob hashes and hunk offsets
are set aside — the same renumber of the remote-path ADR to 0042, the same
split of the bare ADR-0041 mentions between the tunnel and the CRS326, and
the same two README counts. #509 was closed for the same reason. #503 won only
on being first.

Nothing was wrong with this PR. A red main is visible to every session at
once, so every session picks it up at once; the duplication is structural, not
a mistake anyone made. Worth noting that check_docs.py naming the remedy —
"renumber the one that landed second" — is probably why all three answers
were identical rather than merely equivalent.

One thing none of the three fixed, and that is still open: README.md:210
says "39 architecture decision records", now against 42. check_docs.py's
counted-claims pattern only matches {COUNT} ADRs, so line 210 is unguarded
and has been drifting silently. Fixing the number without widening the check
would just hide it again — worth its own issue.

@Gerrrt Gerrrt closed this Sep 18, 2026
@Gerrrt
Gerrrt deleted the gerrrt/adr-0041-collision-a42eb1 branch September 19, 2026 06:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant