fix(#943): the release-time image pin is not tag divergence #945
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!945
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/943-bake-pin-is-not-desync"
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?
Unwedges the release path. Wedge measured independently by @engineer (CI task
28291) and @surveyor (rt decide --dry-runon the live tree). Filed @bosun; predicate shape converged across all three of us.The fix, verified on the real wedged repo — one variable
Why this is a restated invariant, not a tolerated mismatch
last_released_shais the walk anchor —rt deciderunsgit log <it>..HEAD(ADR-0004) — so it must be the cut commit and must stay reachable frommain. The tag must carry the baked digest, and the bake commit lives only on the tag. Both values are correct and name different commits on purpose.The equality assertion held only while nothing force-moved a tag after a cut. That world ended at 16:37 today with the first successful bake.
🔴 BOTH consumers are fixed, and that is the load-bearing part
Fixing only the store leaves
rt decidefailing: green PRs, dead cuts — a SILENT wedge, strictly worse than today's loud one. Neither @engineer's second-field proposal nor my own "fix the producer and all three inherit" reacheddecide; we each assumed a consumer we had not opened.One rule, two collectors
manifest.IsBakePinis a pure predicate over four git facts; each package gathers them through the handle it already owns.🔑 #943 exists because one invariant was encoded in three places. Duplicating the repair the same way would reproduce the defect it repairs.
⚠️ Ancestry AND distance are both checked, and that is not redundant:
rev-list --count base..tipis1for a sibling as well as a child, so the distance bound alone would admit an unrelated one-commit branch.📌 The one-file clause rests on an enforced guard, not on observation — the bake step stages
action.ymland refuses to commit if anything else is staged. Defensible fromgoreleaser.yml:55-57, not from the single bake commit that exists (n=1).Mutation-tested — the arms can go red
@engineer's caveat, which was my own objection to this shape first: an accept arm without proof that a genuinely-moved tag still FAILS is a check taught to pass.
Table arms include: sibling one commit away · moved two commits · touches another file too · touches a different file · unrelated subject · pin subject for a different tag · zero facts · empty tag. Each varies one clause from the accepted shape.
What this does NOT do
main. The three escapes in #380's error text are all rejected: ① breaks the ancestor invariant, ② restores the all-zero placeholder, ③ leavesmaincarrying a pin that goes stale at the next patch.manifest_check.go:307's duplicated comparison. It inherits correct behaviour through the producer, but it still re-derives the invariant locally. Worth collapsing to readc.OK— a separate change, and not on the wedge's critical path.rt decidereturningmode=updateis the measurement that grades this; a full cut is the next one.docs/integration.mdamended in the same change — #380's three resolutions were written when a tag force-move meant something irregular, and two of them now make things worse.go build/go vet/go test ./...allrc=0·fragment-checkrc=0·register-checkrc=0.Pull request closed