chore(release): v0.11.0 #145
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!145
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "release-prep/rolling"
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?
Added
Structural backstop for self-bootstrap re-pin (#124).
Per Surveyor's 116b/cf2c/fc7d framing: the self-bootstrap re-pin discipline (AGENTS.md §2) is sound in principle but at-action-time engagement has slipped twice (v0.8.0 + v0.9.0 cuts both hit the same OWNER-unbound bug because the fix on main wasn't in the pinned ref). I've embodied the discipline manually 10 times across this session via the in-cycle re-pin pattern; this PR automates it as a check-or-fail.
How it works
scripts/check-self-bootstrap.sh— compares each compose-script's blob hash atHEADvs at the pinnedtoolkit_ref. Exits 1 if any differ, listing which.Compose-scripts list (the load-bearing surfaces from AGENTS.md §2):
.forgejo/workflows/_release.ymlscripts/release-decide.sh,release-prep.sh,draft-release.sh,manifest-precheck.sh,manifest-check.shscripts/lib/forgejo-api.sh,fragments.sh,changelog.sh,conventional-commits.sh,config.sh,semver.shThe toolkit_ref is read from
.forgejo/workflows/release.yml(viayqwith agrep+sedfallback). Test seamPINNED_REF_OVERRIDElets bats simulate any pinned ref state..forgejo/workflows/check-self-bootstrap.yml— runs the script on every PR-to-main + push:main. The push:main run usespaths-ignore: ['.release-toolkit-manifest.json']matching the consumer template's #139 fix (manifest-only commits don't trigger the check either).What this would have prevented
Tests
360/360 bats green (was 350; +10 new tests in
tests/check-self-bootstrap.bats):release.ymlmissing + noPINNED_REF_OVERRIDEtoolkit_reffromrelease.ymlwhen no override setThe
git cat-file -eexistence check was a subtle implementation choice:git rev-parseoutputs the input revision string on stdout even when the path doesn't exist, so the empty-string-detection-on-rev-parse-output approach was unreliable;cat-file -ecleanly separates existence from hash retrieval.What this PR does NOT do
release.yml'stoolkit_refpins external tagged toolkit code that doesn't drift relative to their main; the check is toolkit-self-specific.Refs
Closes: #124
Surveyor 116b/cf2c/fc7d: the forward-thought + repeated calibration that filed and refined the tracker
Empirical artifacts: v0.8.0 + v0.9.0 OWNER-unbound failures; 10 in-cycle re-pins this session
Related: AGENTS.md §2 (mechanism-of-touch); #139 (paths-ignore for manifest-only commits)
structural backstop for self-bootstrap re-pin (closes #124)
Fixed
Path-α self-cancel noise eliminated (#139).
The phenomenon (n=4 reproducible streak)
Across v0.8.0, v0.9.0, v0.10.0, v0.10.2 cuts, the same pattern fired:
v0.10.0 even amplified the noise: operator's manual re-run hit the release-create 409 conflict (pre-#131 idempotency), making it look like a real failure. v0.10.2 hit the manifest non-fast-forward push (pre-#140 remote-aware pre-check).
Primary fix: paths-ignore
docs/integration.mdquick-start template now shows:The toolkit's own consumer wrapper (
.forgejo/workflows/release.yml) updated the same way. The cut path's manifest commit is the only commit that touches ONLY the manifest — so excluding.release-toolkit-manifest.jsonfrom the push trigger means the manifest commit doesn't fire a new workflow run. The race window goes away entirely.Substrate-state-care call-out: if a consumer customizes the
manifest_pathworkflow input, thepaths-ignorelist must be updated to match. The integration.md docs surface this explicitly.Defense-in-depth: re-ordered stale-cleanup
_release.ymlcut path: the stale-rolling-PR cleanup step (#87) now runs BEFORE the manifest write+commit+push (was after). This means:The manifest push remains the last substantive substrate mutation in the cut path, so any cancellation hits idle workflow state.
Test count
350/350 bats green (was 349; +1 new regression guard in
tests/workflows.batsasserting the consumer wrapper haspaths-ignoreset to[.release-toolkit-manifest.json]).What this PR does NOT do
tests/workflows.batsguard. paths-ignore + re-order is the substrate-compatible mitigation.Composition
git fetch --quiet origin mainin manifest-precheck.sh implicitly fix #139 on the v0.10.3 cut? — this PR makes that question moot; paths-ignore is the deterministic primary fix.Refs
Empirical artifacts: v0.8.0, v0.9.0, v0.10.0, v0.10.2 cuts (all cancelled mid-cut); v0.10.3 clean but inconclusive (n=1 vs n=4)
Surveyor 211f: the validation-axis bilateral discipline that turned the partial-completion matrix's empirical-close-pending into verified
Forgejo Actions constraint: top-level
concurrency:rejected pertests/workflows.bats(rules out the simpler concurrency-block fix)cut: eliminate path-α self-cancel noise (closes #139)
595067fa3086b15541dfchore(release): v0.10.4to chore(release): v0.11.086b15541dfto00038a500d