fix(release): move v0.2.0 back under [Unreleased] (#417 recovery B) #8
Loading…
Reference in a new issue
No description provided.
Delete branch "recover-pending-cut/0.2.0"
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 #1
Recovery (B) for the stranded v0.2.0 cut. This is the staged field test for release-toolkit#1166: the restore of consumed fragments, then a re-prepare.
State before
masteris8c63cebf: the v0.2.0 preparee0d43fa6(rolling PR #4, merged withreleasedisabled) with #7'sfix:above it.rt decide:mode=blocked,pending_cut,pending_version=0.2.0,pending_tag_exists=false,pending_release_published=absent. Release run 30 on #7's merge blocked and wrote nothing.What
rt recover-pending-cut(v0.67.0) didRestored the 2 fragments the prepare consumed, from the prepare's first parent:
e0d43fa6^1-release-toolkit-v0.67.0.changed.mdb1433b764876e4e2…b1433b764876e4e2…IDENTICAL5-readme-links.fixed.md5a5ea3382c0eeff8…5a5ea3382c0eeff8…IDENTICALBoth carry their indented bodies, which the rendered
CHANGELOG.mddoes not have.Folded back under
[Unreleased]only the prose the fragments do not render: Added (version display) and Fixed (keyboard cells).#7's later fragment
1-readme-release-notes.fixed.mdis untouched.Which route
recover pending cut:restored_fragments=2, both names), thengit pushfailed with HTTP 400.actions/checkout@v4persists a URL-scopedAuthorizationextraheader in the local git config. The step adds its own throughGIT_CONFIG_GLOBALwithout unsetting the first, so git sends twoAuthorizationheaders. With two headers,git ls-remotegets exactlyThe requested URL returned error: 400; with one it gets the normal auth challenge.rt prep'swithTokenConfigunsets the checkout header first (internal/prep/git.go:393). The recovery workflow does not, onv0.67.0and on current release-toolkitmainalike. I'll file it there.docs/integration.md§ Cut-cancellation recovery, (B)). Samertv0.67.0, same verb, committed by hand with theRelease-Notes: skiptrailer.Measured locally on this head
rt decide --dry-run:mode=update,next_version=0.2.0.rt prep --dry-run:After merge, which is the measurement release-toolkit#1166 needs
The push's
decideshould route toupdate, and the bot should open the rolling PR for v0.2.0 with the restored fragments consumed. Itspr / gatesfragment coverage must pass with nobody editing its body.🤖 Generated with Claude Code
https://claude.ai/code/session_01TaK1qBbnCPpuc7FYj4pZG1
Verdict: APPROVE at
932f25e52bRecovery (B) for the stranded v0.2.0, done by the documented local route. Measured with
rtbuilt from release-toolkitv0.67.0.The change is exactly what the tool writes
8c63cebf,rt decide --dry-rungivesblocked,pending_cut, 0.2.0.rt recover-pending-cutfor real on a scratch checkout of master and staged its output. That output is byte-identical to this PR's tree:git diff --cached refs/pr/8is empty. It changes 3 files (CHANGELOG.md −20, plus the two restored fragments).e0d43fa6^by sha256:1-release-toolkit-v0.67.0.changed.mdb1433b76…,5-readme-links.fixed.md5a5ea338…, bodies included.On this head
rt decide --dry-rungivesupdate,next_version=0.2.0,bump_level=minor. Thefix(release):commit withRelease-Notes: skipadds no bullet and changes no bump.manifest-checkandfragment-check(3 fragments, density) pass.rt prep --dry-runconsumes all 3 fragments. Each entry appears exactly once: Added 1, Changed 1, Fixed 3. Its output shows 10 PASS, 0 FAIL.pr / gatesis green.The run-32 push failure: diagnosis reproduced
reusable-recover-pending-cut.yml:363writes anextraheaderinto aGIT_CONFIG_GLOBALfile and pushes with it (l. 395). It never unsets the URL-scoped local extraheader thatactions/checkout@v4(l. 79, 226, default persist) leaves behind. This is the same on v0.67.0 and onmain.internal/prep/git.go:388-394does unset it.Please file it on release-toolkit as you planned.
Non-blocking
In the composed
### Fixed, a blank line separates the v0.1.1 bullet from the two fragment bullets, so it renders as a loose list. That is cosmetic, and check 5 passes.Not measured
The post-merge push run, and #1166's measure: the bot's rolling PR passing fragment coverage with no body edit.