fix(check-self-bootstrap): tolerate transient build-bake diff on cut-prep merge (operator-flagged v0.13.0 regression) #184
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#184
Loading…
Add table
Add a link
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?
Why
Operator-flagged 2026-06-27 evening: "v0.13.0 has some issues in the workflows."
Source-probe of the v0.13.0 cut sequence (release-toolkit/actions):
check-self-bootstrap.ymlreliably red-fails on the cut prep merge commit, every cut, post-#173.Empirical evidence (v0.13.0 cut, 2026-06-27)
caadf757caadf757(rc.2 self-bootstrap)5a2efa75(prep merge)5a2efa755d4bb67f(post-cut bake-reset)5d4bb67fThe same false-positive pattern fired on the substrate-PR merges that introduced the build-bake (#173) + post-cut reset (#177):
c59176fc64c4aed05a2efa75Source-confirmation
Both compose-scripts at the prep-merge HEAD differ from
v0.13.0-rc.2. The diff is entirely in the build-bake line:check-self-bootstrap.shcompares blob hashes (no awareness of the build-bake marker) → red.Root cause
The build-bake design (#148) requires the cut prep commit to bake the to-be-cut version into
BUILD_BAKED_TOOLKIT_REF, so the cut tag carries the baked ref (construction-enforces consumer-pin per AGENTS.md §2). But the rc.N pin used for the cut's actual execution doesn't have this bake. So between prep-merge and post-cut bake-reset,_release.yml+_manifest-check.ymlat HEAD legitimately differ from the pinned rc tag — andcheck-self-bootstrap.shsees this as drift requiring re-pin.The structural backstop was designed pre-#148 when no compose-script line was expected to differ between HEAD and pin. Build-bake introduces a single tolerated-diff line marker-anchored as
# release-toolkit-build-ref.Option tree
(A) Normalize the bake line before hash-compare (recommended)
In
check-self-bootstrap.sh, when comparing each compose-script's HEAD vs pinned content, strip or normalize lines containing therelease-toolkit-build-refmarker before computing the comparison hash. This treats the build-bake value as a tolerated diff while still detecting:Implementation sketch:
Pros: surgical; preserves structural-backstop intent; uses the same marker as the bake mechanism (single source of truth).
Cons: introduces awareness of the build-bake marker into check-self-bootstrap (new coupling, but bounded — both are part of the self-bootstrap mechanism per AGENTS.md §2).
(B) Skip check-self-bootstrap on prep-PR merge commits
Detect the commit subject
^chore(release): prepare v[0-9]and skip. Brittle (depends on commit-subject convention), leaks domain knowledge into the check.(C) Pin self-bootstrap to v0.13.0 immediately as part of cut prep
Have the cut prep also self-bootstrap the pin to the to-be-cut version (alongside the build-bake), so HEAD and pin stay aligned. Chicken-and-egg: the tag doesn't exist yet when the prep PR is open.
Surveyor calibration
Lean (A). It uses the structural marker that the bake mechanism itself relies on, scopes the tolerated diff narrowly, and keeps the backstop's mechanism-of-touch intent intact for everything else. Bats tests assert that:
Composition
What this PR will NOT do
#179's paths-ignore handling (separate surface)Refs
5a2efa75Labels
priority/2-soon (recurs every cut; cosmetic-red but noisy), size/S, kind/fix
Closed by #185 (merged
87d7aa22→ v0.13.1 released 2026-06-27 13:44:53).Empirical close: task 13524 = check-self-bootstrap on the v0.13.1 cut-prep merge (sha
df6b25da, BUILD_BAKED='v0.13.1' baked, divergence from pinned rc) = SUCCESS — the EXACT formerly-red surface (was task 13495 on v0.13.0). The normalization works on live CI on the same shape that produced the false-positive operator flagged.Surveyor verify-at-source confirmation: Forgejo PR #186 + #187 reviews + de0f closeout.
uses: @ref#172rt check-self-bootstrap#758