bug(docs): five broken relative links on main, and the anchor gate grades in-document anchors only #1557
Labels
No labels
bump
major
bump
minor
bump
patch
kind
bug
kind
chore
kind
docs
kind
epic
kind
feature
loop/paused
mirror-drift
priority
critical
priority
high
priority
low
priority
medium
size
L
size
M
size
S
size
XL
status
blocked
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
frankenbit/release-toolkit#1557
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptom
A repo-wide relative-link and anchor check, run on 2026-10-04 while splitting ADR-0013 (PR #1544), found broken links in files that PR did not touch. Re-measured on live
origin/mainata4aab90(2026-10-06). The anchors were graded withscripts/anchor-check.py's own renderer call (ForgejoPOST /api/v1/markdown), not by slug guessing.docs/dead-script-namespace.md:4640001-language-shell.mddocs/0001-language-shell.md, which does not exist. The file isdocs/adr/0001-language-shell.md. The link sits in an excerpt quoted from ADR-0004, where it was relative todocs/adr/.docs/dead-script-namespace.md:4650002-conventional-commits-from-day-one.mddocs/adr/.docs/adr/0006-rna-integration-design-note.md:272../../AGENTS.md#10-substrate-grounding-arc-converged-at-v062-2026-06-2610-substrate-grounding-arc-converged-at-v0-6-2-2026-06-26(the dots inv0.6.2become hyphens).docs/integration.md:686conventions.md#pre-10-opt-in-pre_v1_breaking_to_minorpre-1-0-opt-in-pre_v1_breaking_to_minor.docs/migration/tmux-tell.md:27../integration.md#post-bump-hooksPost-bump hooks: post_bump_hooks, which renderspost-bump-hooks-post_bump_hooks.Why CI let them through
Measured by the reviewer on PR #1544 (reviews 7220 and 7229):
scripts/anchor-check.py, step c6 oftests / checks) extracts only](#...)links. A cross-file anchor such asY.md#missing-headingis never graded, and a link to a missing file is never graded either (mutant M2 in review 7229 stayed rc=0).TestCitedDocPathsResolvescans.gofiles only, so a broken relative link in markdown stays green (review 7220).So no gate on main grades a relative file link or a cross-file anchor in markdown.
Plan
Extend
scripts/anchor-check.pyrather than add a new gate. It already has the renderer, the could-not-grade control and its CI step (c6) plus controls (c7). The extension:.mdtarget with a fragment, renders that file's headings and refuses an anchor it does not emit;The c7 controls gain two mutations, so no new step and no new verdict id is needed.
Acceptance criteria
11aba7f, reviewed as11aba7f): all five retargeted, none dropped; dispositions in the PR body's table.scripts/anchor-check.pygrades relative file links and cross-file anchors in README.md, AGENTS.md and docs/**/*.md, and is clean on the PR's tree. — DONE @ #1558 (11aba7f, reviewed as11aba7f): 0 unresolved on the merged tree (62 files, 246 relative file links, 54 cross-file anchors).tests / checks. — DONE @ #1558 (11aba7f, reviewed as11aba7f): c7 runs both mutants, plus a titled-link mutant from review 7267. Each exits 0 on thea4aab90script and 1 on the merged one.11aba7f, reviewed as11aba7f): both files carry 0 non-ASCII bytes.tests / checks, it writes its own verdict and is declared in GATE_IDS and both guard steps (the #1540 guards). — DONE @ #1558 (11aba7f, reviewed as11aba7f): not triggered. The mutants were folded into c7, so GATE_IDS and both guard steps are unchanged.Landed on main via PR 1558 as a fast-forward:
9726eabgrades relative links and cross-file anchors, and retargets the five links.11aba7ffixes the four nits from review 7267.Landed vs reviewed:
git range-diff a4aab90..11aba7f a4aab90..origin/mainshows both commits as identical (=), and the trees match.Approval: alex, review 7269, on
11aba7f75c9daf987f0dc018cff292f135039e47. The verify-at-source verdicts from the claude identity are reviews 7267 (on9726eab) and 7268 (on11aba7f).Checks: the push run on main at
11aba7fhas 30 of 30 statuses success, includingtests / checks, which runs the extended gate (c6) and its controls (c7).All five acceptance criteria are ticked above. The head branch is deleted. Closing this by hand.
Not done here (non-blocking nits from review 7268):
scripts/anchor-check.py:184is missing a space after=..mdfile exits 1 with a traceback instead of could-not-grade. This predates the PR, and nothing in the tree triggers it.