docs(self-bootstrap): check-self-bootstrap, rt repin and arc42 still prescribe the rc re-pin that #456 made dormant #1512
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#1512
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?
#1511 (
aa9521b) rewrote AGENTS.md section 2 for the #456 floating pin. Toolkit-self floats every wrapper at@main, so a routine change to the compose machinery needs no re-pin (2.1), and the rc re-pin is dormant (2.2). #1510 named four other surfaces that still describe the old posture and left them out of scope. This issue covers those four. A sweep oforigin/mainfound three more files making the same claim, and they are included too.Measured
All reads are on live
origin/mainaa9521b, 2026-10-02.Under
@main, the check cannot go red for drift.cmd/rt/check_self_bootstrap.go:177-183: when the aligned pin ismain, the check logsfloating-pin (release-toolkit#456): main matches main by constructionand returns before comparing any file. The drift comparison (lines 185-247) never runs.uses: frankenbit/release-toolkit/...lines under.forgejo/workflows/pin@main..forgejo/workflows/reusable-release.yml, the first entry ingates.DefaultComposeScripts. In itscheck-self-bootstrap / checkrun (run 18568, job 0, commitdc9df38), therun check-self-bootstrapstep logged the floating-pin line, and the job passed.rt repinis run by hand, never by a workflow.git grep repinover.forgejo/workflowsand.gitea/workflowsfinds only comments. Each baked reusable carries the marker comment# release-toolkit-build-ref (auto-updated by rt prep / rt repin), andreusable-release.ymlmentions it in two more comment lines (192, 263).check-self-bootstrap.ymlhas threerun:steps: replay onto the base, buildrt, andrt check-self-bootstrap. None of them callsrt repin.rt repin"is not invoked by any workflow".rt repinrewrites only the top-level wrappers in.forgejo/workflows(repinWrappers,cmd/rt/repin.go:103-126). It finds them withwrappers.Discover, which reads that one directory and does not recurse, so it never touchesexamples/*/.forgejo/workflows.rcTagShape(cmd/rt/repin.go:24) accepts onlyvX.Y.Z-rc.N, sort repincannot put a wrapper back on@main.Surfaces that still describe the pre-#456 posture
@main.forgejo/workflows/check-self-bootstrap.yml:3-17(header)@main, a red means alignment drift or a failed precondition (AGENTS.md section 2.3). The file has no.gitea/twin.cmd/rt/check_self_bootstrap.go:233-235(drift failure)@mainin a reviewed PR, andrt repincannot do that (AGENTS.md section 2.2).:154-156(alignment failure)@main, alignment drift means one wrapper slipped off@main. Section 2.2 says to restore that wrapper by hand.:58-60(--helpLong text)docs/architecture/contracts/cli-surface.md:98repinis invoked by "check-self-bootstrap.yml(at RC cut time)" and re-pins "example/consumer-wrapper refs"docs/architecture/arc42/11-risks-technical-debt.md:13(Bootstrap-lag)check-self-bootstrap"goes (correctly) red post-merge to signal 're-pin needed'"@main, a toolkit-self cut runs the commit it cuts (AGENTS.md section 2.1). There is no lag, and the check does not go red.docs/architecture/arc42/07-deployment-view.md:82-99(section 7.3, which row 4 cites)cmd/rt/repin.goLongtextscripts/repin.shheader (git show 25c2fb3:scripts/repin.sh, lines 25-31) said it was no longer the routine mechanism for toolkit-self. Neitherrt repin --helpnor the source says so now.docs/SECURITY.md:33check-self-bootstrap.yml"fires on any PR that touches a compose-script and requires the baked ref to be re-pinned"#1510 did not list rows 2a, 2b, 4a and 6. A
git greponorigin/mainfor the same phrases found them.Do not port all of the retired
repin.shheader. Its case (2) reads "toolkit-self recovery if a wrapper is hand-pinned back to a versioned tag by accident ... repin.sh restores discipline". That contradicts AGENTS.md section 2.2:rt repinaccepts only an rc tag, so it cannot restore@main.No test asserts on the text in rows 2, 2a or 2b. A
git grepover*_test.goandtests/finds no assertion on "Resolution:", "lockstep" or "catch main up".cmd/rthas nocheck_self_bootstrap_test.go, and no test callsrunCheckSelfBootstrap. Nothing tests the command's output.Why it matters
An author reads the check's header and its failure text when the check goes red or when they touch a compose script. Both still give the advice AGENTS.md section 2.1 now warns against. Running
rt repinfor a routine change would move every toolkit-self wrapper off@mainto an rc tag, a posture change nobody intended. The old AGENTS.md text led #1496's body into the same mistake (review 7179).Under
@main, the check does go red in one case: when a wrapper slips to a tag. The current message then points the reader atrt repin, which cannot repair it.docs/SECURITY.mdis written for adopters, and it describes a protection that toolkit-self no longer exercises.Acceptance criteria
check-self-bootstrap.yml's header says what a red means in each posture. Under@main, a red can only be alignment drift or a failed precondition. Under a tag pin, it is pin drift. The header stays ASCII-only (AGENTS.md section 11). — DONE @ #1513 (4ffde69, reviewed as4ffde69). The header now has an@mainarm (cannot go red for drift; a red is alignment drift or a failed precondition) and a tag-pin arm (pin drift, with both remedies).workflow-parse-check / workflow parse and schema(run 19046, job 2) logged.forgejo/workflows/check-self-bootstrap.yml workflow schema validation OK. One deviation: the AC says the header "stays" ASCII-only, but it never was. The PR added no non-ASCII line and removed two em-dashes (old lines 6 and 12). Two untouched header lines (32 and 37 at4ffde69) still carry an em-dash. Below the header, 14 more lines carry non-ASCII: 8 comments and 6echostrings inrun:steps. The PR touched none of them.rt check-self-bootstrapnames both remedies:rt repinfor a deliberate tag pin, and restoring@mainin a reviewed PR for an accidental one. The alignment failure message and the--helpLong text agree with it. — DONE @ #1513 (4ffde69, reviewed as4ffde69). Both reds calllogPinRemedies(cmd/rt/check_self_bootstrap.go), which prints the accidental arm (restore@mainin a reviewed PR;rt repincannot) and the deliberate arm (rt repin <vX.Y.Z-rc.N>). The--helpLong text describes both postures.@mainremedy is removed. — DONE @ #1513 (4ffde69, reviewed as4ffde69).cmd/rt/check_self_bootstrap_test.go(3 tests, fixture repo with nomainref). Mutant M1, which drops the@mainremedy, is killed by both the pin-drift and the alignment-drift test; M2-M5 are each killed by their intended test (PR body, Tests).cli-surface.md'srepinrow says no workflow invokes it and names what it actually rewrites.TestSubcommandsMatchC5ContractandTestC5ExclusionsAreDocumentedstay green. — DONE @ #1513 (4ffde69, reviewed as4ffde69). The row says no workflow invokes it and that it rewrites the top-level.forgejo/workflows/wrappers, not theexamples/ones. Both C5 tests passed locally and ingo-ci / lint + build + test (pull_request).@mainand returns with a tag pin. — DONE @ #1513 (4ffde69, reviewed as4ffde69). Both say the lag is dormant under@mainbecause a toolkit-self cut runs the commit it cuts (AGENTS.md section 2.1), and that it returns with a tag pin.cmd/rt/repin.gocarries the #456 note:rt repinis dormant for toolkit-self, is meant only for a deliberate tag pin, and is not a way back to@main. — DONE @ #1513 (4ffde69, reviewed as4ffde69). A doc comment onnewRepinCmdand aLongtext.repin.sh's accidental-tag-pin use is deliberately not ported: the script also refused any tag without-rc..docs/SECURITY.md:33describes how the check behaves in each posture. — DONE @ #1513 (4ffde69, reviewed as4ffde69). It also says the gate guards release-toolkit's own pin, not the adopter's.rt register-checkpasses on every changed doc, andgo test ./...passes. — DONE @ #1513 (4ffde69, reviewed as4ffde69). Locally:rt register-check0 hits on the four docs and the YAML;go test ./...all packages ok. On the forge:register-check / register-drift check (pull_request)andgo-ci / lint + build + test(pull_request and push) are success.Out of scope
check-self-bootstrap's blob-compare running "on every PR". See01-introduction-goals.md:45,04-solution-strategy.md:46,08-crosscutting-concepts.md:21-24,10-quality-requirements.md:43,11-risks-technical-debt.md:12and12-glossary.md:27. Under@mainthe check compares nothing. Whether the bake's Go tests andbuild-ref-check.ymlnow do that job is a separate question that needs its own measurement.11-risks-technical-debt.md:14attributes the single-ref check toregister-check. The only caller ofgates.AlignRefsisrt check-self-bootstrap.docs/architecture/arc42/02-constraints.md:24citesAGENTS.md:131, a line number from before #1511.Landed through #1513 at 2026-10-02 16:05:59 +02:00 as a fast-forward: the PR's
merge_commit_shaand its head are both4ffde692129e10c252ec29dea53e910b268452f8.git range-diff aa9521b..4ffde69against the reviewed range shows both commits (1545552,4ffde69) as=.4ffde69, the head that landed.4ffde69:pull_requestcontexts are success.pushcontexts are success. The 16th,release / fire-cut (push), is pending with "Waiting to run". In the same run (19054), thedecide + actjob (job 2) loggedmode=update, so no cut was decided.check-self-bootstrap / check (push)(run 19050) loggedfloating-pin (release-toolkit#456): main matches main by construction.workflow-parse-check / workflow parse and schema(run 19046, job 2) logged.forgejo/workflows/check-self-bootstrap.yml workflow schema validation OK.claude/1512-self-bootstrap-456-framingno longer exists (branches API 404).Every acceptance criterion is done, so I am shutting this issue by hand. The items under "Out of scope" are not addressed here and still need their own issues.
bootstrap rtin 16 of 18 reusable files; resolve-ref emits the SHA and bootstrap-rt.sh has no arm for it #1514