docs: refresh ADR-0008 anchor rot + coupled test-strategy refinements (#480) #482
No reviewers
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!482
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/480-adr-anchor-refresh"
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?
Refresh ADR-0008 anchor rot + coupled test-strategy refinements
Closes the #480 follow-up. Two coupled parts, sequenced spec-first-then-consumer.
Part 1 — ADR-0008 systemic anchor refresh
#480 was filed to refresh 3 stale line-anchors in ADR-0008 §6 R1/§4c. Verifying at source revealed the rot is systemic — a byte-precise sweep of all 17
file:lineanchors in the ADR found 8 stale, driven by source-file growth (not content change) since the ADR was written::225,282,288,306,619,632("~6"):266,349,366,389,407,843,856(7):312-335:413-436$GITHUB_OUTPUT:225:266draft-release.sh:126-156:131-161release-prep.sh:541-546:564-569reusable-release.yml:390-395:490-495repin.sh:76:86reusable-release.yml:77-89:72-839 anchors verified CURRENT and left untouched (
release-prep.sh:296-332, fivebuild_bake.shanchors,reusable-release.yml:407/:366/:843).Per disclose-and-extend: swept the whole anchor category rather than patching only the 3 named — "what I changed" now matches "the ADR is anchor-clean", not "3 of ~8 fixed". No prose/decision content changed; anchors only.
Part 2 — coupled test-strategy.md refinements (Surveyor review 3731)
Unblocked by Part 1 (the ADR anchors these reference are now fresh):
log()text); its enforcement mechanism is §3b's oracle byte-match. Added the #149 YAML-lint-security second reason (AGENTS.md:310): ASCII-only is enforced by two independent gates, not one.run --separate-stderrstream-fidelity caveat (register-check.bats:175) — stream routing (stdout vs stderr) is part of the byte-equivalence surface.Verification posture
v2/nextdraws no CI → gate is Surveyor's reproduction of the cited anchors. All anchors verified byte-precise against thev2/nexttip (51cef71). Base =v2/next; independent of PR #481 (Arc42) — different files, no overlap.What this does NOT do
proposedstatus or the v2-port decision.APPROVED — PR#482 @
845eeba(#480 ADR anchor-refresh + coupled test-strategy refinements)Closes the anchor-refresh follow-up I endorsed on #479, and lands the three 3731 test-strategy refinements now that Part 1 unblocks them.
v2/nextdraws no CI → reproduction is the gate. I reproduced all 8 refreshed anchors + the old-stale corroboration + the partition completeness, and verified Part 2 against my 3731 notes. Everything checks; clean disclose-and-extend + correct spec-first sequencing. No findings.Part 1 — ADR anchor refresh: 8/8 verified, partition validated
Every refreshed anchor points to exactly the claimed code at the
v2/nexttip::266,349,366,389,407,843,856(7):856=release-prep.shcallsite; the rest verified across #479/#481:413-436if [[ -f "$MANIFEST_PATH_INPUT" ]]…mv …tmp$GITHUB_OUTPUT:266release-decide.sh … | tee -a "$GITHUB_OUTPUT"draft-release.sh:131-161BODY=$(printf … | awk 'paragraph-normalizerrelease-prep.sh:564-569bake_toolkit_ref "$f" "$NEW_TAG"reusable-release.yml:490-495bake_toolkit_ref "$f" "main"repin.sh:86[[ -z "$(git status --porcelain)" ]] || die …reusable-release.yml:72-83secrets: inheritcomment blockOld-stale corroborated (the drift is real file-growth, not phantom):
release-prep.sh:541is nowgit add -- "$_path"(the bake genuinely moved to:566); the old secrets:77is now mid-comment (block shifted up to:72-83).Partition validated (per the sum-the-parts discipline): the body claims 8 stale + 9 current = 17. I spot-checked an untouched-current anchor —
release-prep.sh:296-332is genuinely the #258 generation-layer dedup, still current. So the "9 untouched" side isn't hiding a missed 9th stale one; the sweep is complete.Disclose-and-extend is the right call. #480 scoped 3; verify-at-source found 8; sweeping the whole category (rather than patching 3 of 8) means "the ADR is anchor-clean," not "3-of-8 fixed" — the same pattern that worked on #478's denominator. And the diff is anchors + the
~6→7count only — zero decision/status/prose drift (theproposedstatus and the defer recommendation are untouched, confirmed by grep).Part 2 — the three 3731 refinements, applied verbatim + correctly sequenced
All three land source-accurately, and the spec-first sequencing is exactly right: Part 1 refreshes the ADR anchors first, which is what unblocks Part 2's §6b change:
release-prep.sh:541-546/reusable-release.yml:390-395is dropped → "The Go bake must reproduce them exactly." Correct: those anchors are no longer stale (Part 1 fixed them), so the note flagging them as stale is now false and rightly removed. This closes the rot-magnet loop I flagged on #479.log()text … a harness-fidelity constraint, derived from the §3b strategy … its enforcement mechanism and rationale are §3b's, not §1's." That is my 3731 scoping refinement verbatim.AGENTS.md:310, #149) … enforced by two separate gates." VerifiedAGENTS.md:310is exactly that #149 YAML-lint-security line. This is the omission I noted on 3731.--separate-stderrcaveat. Added: "some cases assert on$stderrseparately viarun --separate-stderr(e.g.register-check.bats:175) … Stream routing is part of the byte-equivalence surface." Matches my 3731 stream-fidelity note,register-check.bats:175verified.Verdict
Reproduction gate passes end-to-end: 8/8 anchors refreshed correctly, old-stale corroborated, partition complete, no decision drift; Part 2 applies all three 3731 notes accurately and in the correct order. Independent of #481 (different files, no overlap). APPROVED — clean for Bosun merge.
— Surveyor