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
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
frankenbit/release-toolkit!1504
Loading…
Reference in a new issue
No description provided.
Delete branch "claude/1500-recovery-body-1173"
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?
Refs #1500
What changed
The recovery (B) PR body that
reusable-recover-pending-cut.ymlwrites no longer prints its**Tagged-adopter dependency:**paragraph. That paragraph claimed release-toolkit#1173 had not landed, and that a tag-pinned adopter could therefore run an older recovery binary. Three commits:50d132ffix(recovery)removes the printf. Both twins change, andchangelog.d/1500-recovery-body-1173.fixed.mdis added. The commit was rebased ontoaa6f603with the forge's update-branch;git range-diffshows it is unchanged from the originalb9997ae.e5e61cachore(recovery)adds a bash comment in the run block saying why the body carries no pin-floor caveat. It names each supported pin shape (review 7199, item 1).c231c21docs(recovery):docs/integration.mdrecovery (B) said toolkit-self's "local@maininvocation" was never affected. It now says the wrapper's@mainpin goes through the release-toolkit#456 floating-pin override. The wording comes from the withdrawn duplicate #1522 (comment 114308).The
.giteatwin was regenerated withrt gitea-twin --writein both workflow commits, not hand-edited.Measured (2026-10-02)
1347777adds the file tocanonicalFiles(internal/bake/marker.go) andbd28bddadds it tobakeRefFiles(cmd/rt/prep.go). Both first ship in v0.58.0 (2026-09-05).BUILD_BAKED_TOOLKIT_REFin the file at each tag. It was read through the forge's raw API at every tag, and every tag SHA matchedgit ls-remote:dfe9a85, #1166) first ships in v0.57.3. So a tag pin runs it only from v0.58.0 on.docs/integration.mdrecovery (B) was corrected indc9df38. This PR brings the workflow text into line with it.Remove or rewrite
resolve toolkit refandscripts/bootstrap-rt.sh:@mainpin takes the #456 arm and builds rt from main. Toolkit-self builds it from its own checkout.55a12b9it was already refused as "unsupported toolkit ref".v...ref, and that ref then fetches its own tag's rt.Removal is right for every supported pin. Review 7199 found two off-contract shapes that break the "same ref" property:
@mainthrough a second wrapper;dfe9a85.In neither shape would a pin floor in the body point at the cause, and no remote branch is that old (all 8 heads checked). The bash comment now claims only the supported shapes. The floor still matters when an adopter chooses a pin, and
docs/integration.mdcovers that.Self-bootstrap (AGENTS.md section 2.1)
By mechanism-of-touch this is a compose-script change: the file is in
DefaultComposeScripts(internal/gates/selfboot_check.go:242) and incanonicalFiles. No re-pin is needed: toolkit-self floats@main(AGENTS.md section 2.1).rt check-self-bootstrappasses amainpin before it compares any content (cmd/rt/check_self_bootstrap.go:177). Measured atc231c21:The previous compose-script change agrees.
dc9df38landed with29b541b, and the job log of that push:main run (#18600, read in the web UI) prints the same floating-pin pass.Tag-pinned adopters get the change from the next cut tag, which bakes the file to that tag.
Tests
These ran at
c231c21, in an LF clone, in a container with go, bats, jq, PyYAML and minisign:go vet ./...: clean.go test ./...: every package ok.bats tests/: 221 ok, 0 not ok, 0 skipped, rc=0. That includes the recovery arms (#1135, #1138, #1160).rt gitea-twin --check: PASS, 11 twins.FRAGMENT_CHECK_COVERAGE=content rt fragment-check changelog.d: PASS. Coverage needs PR metadata, so CI grades it.rt tag-action-digest-checkover README.md,docs/integration.mdand examples: PASS.scripts/dated-examples-check.pyandscripts/contract-paths-check.sh: rc=0.scripts/anchor-check.pycould not grade locally because its renderer was unreachable. CI grades it. The docs change adds no link or anchor.recoverstep'srun: |scalar, in the{ ... } > "$body_file"group, so they are bash comments. The added workflow lines are ASCII-only (AGENTS.md section 11).bash -npasses on the body group, and all three body variants render.docs/integration.md:991, the only1173hits under tests/, cmd/ and internal/ are census history (internal/bake/marker.go:151,marker_test.go:102,140).Verify at source (AGENTS.md section 6)
Review 7199 verified
50d132f. The two commits after it carry that review's items.dismiss_stale_approvalsdismissed review 7198, soc231c21needs a fresh approval. Please check:git show v0.58.0:.forgejo/workflows/reusable-recover-pending-cut.yml | grep BUILD_BAKED_TOOLKIT_REF, and the same for.gitea.resolve toolkit refandscripts/bootstrap-rt.sh.docs/integration.md:991sentence matches the resolve step'sfloating-pin-override (release-toolkit#456)arm, given.forgejo/workflows/recover-pending-cut.yml:33.rt gitea-twin --check).🤖 Generated with Claude Code
Duplicate note: #1522 (issue #1499) made the same removal independently and is withdrawn in favour of this PR. One item from it is not here yet. I'm offering it as a suggestion for a new commit:
docs/integration.md:991(onmain@aa6f603) ends with "Toolkit-self's local@maininvocation was never affected." The word "local" is wrong:.forgejo/workflows/recover-pending-cut.yml:33) pinsfrankenbit/release-toolkit/...@main.SOURCE="floating-pin-override (release-toolkit#456)").toolkit-self local invocationarm handles only a./.forgejo/...uses line.The wording #1522 used:
Two notes for the reviewer, both measured on
main@aa6f603:v0.64.0was cut after this PR's base (55a12b9). It also bakes'v0.64.0'in both twins, so the bake table now holds for v0.58.0 through v0.64.0.bootstrap rtrefuses a commit-SHA pin (composite/bootstrap-rt/action.yml:9-11). The SHA arm of the remove-or-rewrite list therefore ends in a refusal rather than a run. The conclusion holds either way.b9997ae99550d132f592Verdict: APPROVE at
50d132f592387685ca38c1af8e75b605fe31cb51, with no blocking findings. I'm posting it as a COMMENT because the forge identityclaudeauthored this PR, and self-approval is a global 422 (AGENTS.md section 8). alex's approval (review 7198) is already on this head. bosun's is still requested.Which head. This review was briefed at
b9997ae. The forge head is now50d132f, alex's update-branch rebase ofb9997aeontoaa6f603(21:22:21).git range-diff 55a12b9...b9997ae aa6f603...50d132fgives1: b9997ae = 1: 50d132f.b9997aeontoaa6f603with the tests.yml recipe gives tree1195474, the same as50d132f's.rt review-submit-checkrefusedb9997ae(rc=1, the head moved) and passed50d132f(rc=0).Everything below ran at
50d132f. That is the landing tree: its base is live main,aa6f603.Verified at source
aa6f603: 3 files, +13/-2. Each twin drops the one printf and gains the 5-line comment, and the fragment is added. Nothing else changes.git ls-remote.BUILD_BAKED_TOOLKIT_REFat each tag through the forge's raw API, for both twins. v0.57.0 to v0.57.4 carry'v0.57.0'. Each of the 13 tags from v0.58.0 to v0.64.0 carries its own name.1347777andbd28bddfirst ship in v0.58.0 (2026-09-05). The restore commitdfe9a85(#1166) first ships in v0.57.3.50d132fYAML against sample wrappers:@main->main (source=floating-pin-override (release-toolkit#456))@<tag>with its own bake ->source=baked, so bootstrap FETCHes that tag's rt@<40-hex>->source=consumer SHA pin (release-toolkit#336), which the*)arm ofscripts/bootstrap-rt.shthen refuses. It already refused at55a12b9("unsupported toolkit ref"); #1514 only sharpened the message. So the body's SHA bullet never described a run that gets as far as an rt.source=baked50d132f:rt gitea-twin --check: PASS, 11 twins.rt check-self-bootstrap:floating-pin (release-toolkit#456): main matches main by construction, rc=0. No re-pin is needed (AGENTS.md section 2.1).FRAGMENT_CHECK_COVERAGE=content rt fragment-check changelog.d: PASS.go vet ./...: clean.go test ./...: every package ok.bats tests/: 221 ok, 0 not ok, 0 skipped, with minisign installed.recoverstep'srun: |scalar, in the{ ... } > "$body_file"group. That group is not a heredoc, so the lines are bash comments.REMAINING, andRECHECK_UNGRADED. Each returned rc=0, the body now ends at "...stays manual.", and the follow-on sections still open with their own\n---.aa6f603, excluding CHANGELOG.md,Tagged-adopter,older recovery binary,canonical file setandbake-population fixhit only the two twins anddocs/integration.md:991.1173hits under tests/, cmd/ and internal/ are the census history atinternal/bake/marker.go:151andmarker_test.go:102,140.(#1500)ends a 17-word summary..fixed(patch,### Fixed, docs/conventions.md section Recognized kinds) is the right kind, because the change corrects output adopters read in their recovery PR bodies. That rules outinternal.closeKeywordRE(internal/gates/ac_closure_check.go:21) finds no match in the title, body or commit message.50d132f:base-divergence-check.readme-pin-check / mirror (pull_request), and branch protection does not require it (it requiresreadme-pin-check / digest).Non-blocking
The new comment overstates the mechanism (
.forgejo/workflows/reusable-recover-pending-cut.yml:427-431,.giteatwin:440-444). "The rt that ran is resolved from the same ref as this file" holds for every supported pin, but nothing structural enforces it. The same is true of item 2 in the body's verify list. Two shapes break it:@main, while their.forgejo/workflows/recover-pending-cut.ymlpins@v0.57.0. The simulated resolve printsresolved toolkit ref: v0.57.0 (source=wrapper-ref fallback (release-toolkit#1222)).dfe9a85, while the body prints the new text.@mainneeds Go on the runner.main)arm ofbootstrap-rt.shbuilds from$GITHUB_WORKSPACE, while the workflow file comes from@main.4445750(the wrapper was added) anddfe9a85would pair the new text with an rt that lacks the restore.dfe9a85(checked), so no live branch can do this.Neither shape argues for keeping or rewriting the caveat. In neither case would a pin floor in the body point at the cause, so removing it is still right. If a new commit lands for another reason, this ASCII wording claims only the supported shapes:
Two body statements went stale with the rebase:
aa9521b(#1511) is inaa6f603but not in55a12b9, and section 2.1 now says no re-pin is needed.29b541b, which landed together withdc9df38, and itsrun check-self-bootstrapstep prints the floating-pin pass.#1500 wording. "shipped five weeks ago" overstates it: v0.58.0 is dated 2026-09-05, 27 days before today.
Carried-over docs suggestion (comment 114308)
The finding is correct:
docs/integration.md:991says "Toolkit-self's local@maininvocation"..forgejo/workflows/recover-pending-cut.yml:33pinsfrankenbit/release-toolkit/...@main, and the simulated resolve takesfloating-pin-override (release-toolkit#456)../.forgejo/...uses line.The sentence's conclusion, "never affected", is right. Only the mechanism name is wrong.
50d132fis approved and green on every required context, and a docs-only wording change should not reset that.I lean towards a follow-up. Either way it needs a tracker: #1499 carried it as AC 2 and is now shut, and #1500 has no matching AC.
HOLD. The operator has asked me to fold review 7199's items into this PR and then land it. I'm pushing two new commits on top of
50d132f592387685ca38c1af8e75b605fe31cb51, with no rebase and no force-push:chore(recovery): the no-caveat comment now names each supported pin shape (review 7199, item 1). Both twins change; the.giteaone was regenerated withrt gitea-twin --write.docs(recovery):docs/integration.mdrecovery (B) now says toolkit-self's@mainpin goes through the release-toolkit#456 floating-pin override, not a "local" invocation (comment 114308).dismiss_stale_approvalsis on, so this push dismisses review 7198. The new head needs a fresh approval before it can merge. The full new head SHA and a corrected body follow.New commits pushed, approval review dismissed automatically according to repository settings
HOLD released. The new head is
c231c21f8ebb06d5467c9142f632455e49893352, a fast-forward from50d132f:e5e61cachore(recovery): names each pin shape in the no-caveat comment. Both twins change.c231c21docs(recovery): the@mainpin indocs/integration.md:991now goes through the release-toolkit#456 override.I've corrected the body and checked the read-back against what I sent, byte for byte. What changed in it: the commit list, the bake table now runs to v0.64.0, the SHA and #1222 arms now end at bootstrap, it cites section 2.1 for the no-re-pin note, and the run #18600 log has been read. All local checks passed at
c231c21: the gates,go test, and bats (221/221). CI is running.Review 7198 is dismissed, so the merge needs a fresh
crewapproval at this head. Pin it first:Landing identity record
c231c21f8ebb06d5467c9142f632455e49893352c231c21f8ebb06d5467c9142f632455e49893352This is a post-merge identity record. It does not retroactively review the landed object; it records whether the server landed the object that an official approval named.