docs(agents): section 2 still prescribes an rc re-pin for toolkit-self, but #456 floats every wrapper at @main #1510
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#1510
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?
AGENTS.md section 2 says that when a cut includes changes to the compose machinery, the toolkit "MUST re-pin its own consumer-side
release.ymlto a fresh tag" withrt repin <vX.Y.Z-rc.N>. Since #456 (e9eca94, 2026-07-07), toolkit-self has pinned every wrapper at@main, and the rc re-pin has not run once. Section 2 does not mention #456.Measured
All reads are on live
origin/maine4c0f35, 2026-10-02.A toolkit-self cut runs the commit under test.
owner/repopins@main. There are 7 such files, includingrelease.yml:79andrelease-cut.yml:60. Nouses: frankenbit/release-toolkit/...line under.forgejo/workflows/pins anything else. The other 4 wrappers call their reusable by local path (uses: ./...).reusable-release.yml, stepresolve toolkit ref(lines 258-354): whenrelease.ymlpins@main, the step setsREF=mainwhatever the baked value says (SOURCE="floating-pin-override (release-toolkit#456)", line 331). The other 8 baked reusables carry the same arm.scripts/bootstrap-rt.sh:45-66: themain)arm buildsrtfrom$GITHUB_WORKSPACEwhen that directory has bothcmd/rtandgo.mod(line 56). On toolkit-self, that directory is the pushed commit.The gate and the post-cut step both treat
@mainas the settled pin.cmd/rt/check_self_bootstrap.go:169-183: when the aligned pin ismain, the check passes before comparing any file ("main matches main by construction"). The alignment check across wrappers runs first (from line 148).cmd/rt/post_cut.go:670-673: the post-cut auto-re-pin skips every wrapper already at@main.docs/adr/0008-go-port-architecture.md:199) gives the toolkit-self@mainpin as the reason the build arm exists.The rc re-pin has not run since #456.
9bca7d5 chore: re-pin self-bootstrap to v0.30.0-rc.2 (#172), 2026-07-07.e9eca94movedrelease.ymlto@mainthe same day.git log --grep='re-pin self-bootstrap' e9eca94..origin/mainreturns nothing.git ls-remote --tags origin) isv0.30.0-rc.2. Cut tags since then run tov0.63.1.rt repinas "not invoked by any workflow — it is a manual rc-cut verb".What #456 kept, and what the Go port dropped.
repin.sh"for adopter emergency use" and kept check-self-bootstrap to catch accidents.repin.shheader (git show 25c2fb3:scripts/repin.sh) said it was no longer the routine mechanism for toolkit-self between cuts. It named two remaining uses: an adopter's emergency re-pin to an rc tag, and toolkit-self recovery if a wrapper is hand-pinned back to a tag.cmd/rt/repin.gocarries no #456 note.rt repinaccepts onlyvX.Y.Z-rc.N(rcTagShape, line 24), so it cannot restore an@mainpin.Other parts of section 2 describe mechanisms that have since changed.
ref = $BUILD_BAKED_TOOLKIT_REF" and has "no fallback". It now has the #456@mainoverride, a full-SHA arm (#336) and a wrapper-ref fallback (#1222). Build-bake also names 2 baked reusables;internal/bake/marker.gocanonicalFileslists 9.rt repin. Under@main, the check passes by construction.forgejo_list_tagshonouringFORGEJO_TEST_TAGS_FILE) is gone from the tree.rt prune-rc-tagstakes an injected forge instead.cmd/rt/check_self_bootstrap.go:155,internal/gates/selfboot_check.go:64). AGENTS.md has no section 2.3.Why it matters
PR #1496 was a Go-only fix on
rt prep's path. Following section 2, its body first said "Re-pin before the next cut". Review 7179 caught that, and the body was corrected before merge.If
rt repinhad been run, it would have opened a PR moving every toolkit-self wrapper off@mainto an rc tag, a posture change nobody intended. It would also have put the cut onbootstrap-rt.sh's FETCH arm (v[0-9]*), which downloads the asset published for the pinned tag. Goreleaser asset publishing began at v0.34.0 (goreleaser.yml:464), and no rc tag has been cut since, so that path has never run for an rc. Not measured: whether goreleaser would publish assets for one.AGENTS.md tells every author of a release-path PR to read these sections first, so each compose-machinery change meets the same instruction.
What the doc should say (each point verified above)
push: mainruns it.@vX.Y.Z, take the FETCH arm, and get a change from the first cut tag that contains it.rt repinis its tool. Under a tag pin, check-self-bootstrap compares onlygates.DefaultComposeScripts(the reusable YAML andscripts/workflow-parse-check.sh). So it would not flag a Go-only change.@mainin an ordinary reviewed PR.rt repincannot do that.Out of scope
The same staleness exists in other files:
check-self-bootstrap.yml(lines 10-16) still says a red on a compose-script PR is expected.cmd/rt/check_self_bootstrap.go:233-235still tells the reader to tag an rc and re-pin.docs/architecture/contracts/cli-surface.md:98givesrt repin's caller ascheck-self-bootstrap.yml (at RC cut time). That workflow does not invoke it.cmd/rt/repin.golacks the #456 note thatrepin.shcarried.Acceptance criteria
@main, why a toolkit-self cut runs the commit under test, and that a routine compose-machinery change needs no re-pin. — DONE @ #1511 (aa9521b, reviewed asaa9521b). Section 2.1 opens the section with the chain table (wrapper pin, resolve-ref override,main)build arm, drift-gate exit, post-cut skip) and "A change to the compose machinery needs no re-pin."aa9521b, reviewed asaa9521b). Section 2.2 marks it dormant and names both cases: a deliberate tag pin usesrt repin; an accidental one goes back to@mainin a reviewed PR. Sections 2.4 and 2.5 each open with a dormant note.@mainearly exit, not the behaviour from before #456. — DONE @ #1511 (aa9521b, reviewed asaa9521b). Build-bake lists the #456, #336 and #1222 arms. Section 2.3 lists the check's three steps in code order, including themainearly exit.aa9521b, reviewed asaa9521b). The heading is "2.3. Structural backstop and single-ref alignment (added per #124)", whichcmd/rt/check_self_bootstrap.go:155andinternal/gates/selfboot_check.go:64cite.aa9521b, reviewed asaa9521b). Section 2.4 now names thercTagPrunerfake incmd/rt/prune_rc_tags_test.go.main, andrt register-checkpasses on AGENTS.md. — DONE @ #1511 (aa9521b, reviewed asaa9521b).rt register-check AGENTS.mdreports 0 hits locally, andregister-check / register-drift check (pull_request)is green. One deviation: most rows are anchored by file plus a named step or function rather than by line, because line numbers drift. The exact lines ate4c0f35are in #1511's "Verified at source" list.All six acceptance criteria are ticked above. The PR used
Refs, so this issue is being shut by hand.mainat 15:34 asaa9521b7b8754049352950d494b2e8971cbbf18e.merge_commit_shaequals it, and a localgit range-diff e4c0f35..aa9521b e4c0f35..origin/mainshows=.git ls-remotereturns nothing for it, and the branches API returns 404.aa9521b, official and not stale.aa9521b, read at 13:37 UTC:pull_requestcontexts were green at merge, includingcheck-self-bootstrap,ac-closure-check,fragment-check / coverageandregister-check.check-self-bootstrap / check (push)andgo-ci / record reviewed vs landed commit (push), run 19010. Record comment 114111 on #1511 reports "no identity change".release / fire-cut (push)is waiting to run. In the same run (19012),rt decidechosemode=update, sofire-cutwill skip. No release is being cut.@main(AGENTS.md section 2.1, as landed).The out-of-scope items listed above are not addressed here.