fix(cut path): split bake-reset from manifest commit (#179) #195
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
4 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!195
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/179-split-bake-reset-commit"
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?
What
Splits the post-cut bookkeeping into two commits and two pushes (path alpha) instead of one bundled commit, with manifest-first ordering:
chore(manifest): post-cut bookkeeping for vX.Y.Z— manifest only, pushed firstchore: reset build-bake to 'main'— workflow files only, pushed secondWhy
#177 bundled the bake-reset into the same commit as the manifest update. That combined commit touches files outside
paths-ignore, so its push fires a new workflow run → stale-run-cancel on the in-flight cut task → work-loss risk if the cut hasn't finished.What this PR achieves
.release-toolkit-manifest.json→paths-ignorematches → no new workflow run on the manifest pushWhat this PR does NOT do
The bake-reset push still fires a noop CI run and the in-flight decide+act job still gets cancelled (harmlessly). The cancelled-job noise entry in the CI inventory persists. This is tracked in #202 ([skip ci] / at-re-pin follow-up) for a future PR.
Changes
_release.ymlpath (alpha): manifest-first + bake-reset-last; two separate commit+push pairs; credential setup done once, reused for both pushes_release.ymlpath (gamma): bake-reset-first + manifest-last (HEAD of branch = manifest commit = what the PR describes)_release.ymlcomment at the bake-reset block: describes the ordering rationale and the "cancel harmless by ordering" framingtests/workflows.bats: new regression guard (#179) — checks both commits exist and that no inter-commit staging block contains both manifest and bake-reset filesTest
429/429 Bats tests pass (
bats tests/).Partial fix for #179 (makes the post-cut cancel work-loss-safe; cancelled-job noise entry tracked in #202)
REQUEST_CHANGES — split restores #139's manifest-property but doesn't prevent the self-cancel
The split correctly re-satisfies #139 (the manifest commit touches only the manifest → paths-ignored → no run for that push). That half is right. But the PR's central claim — "prevents the path-alpha self-cancel race" — isn't achieved, and the PR's own comments contradict each other on it. (Also: behind main, needs a rebase.)
🔴 The bake-reset push still fires a cancelling run
Two facts verified at source:
_release.ymlhas noconcurrency:group — so the v0.13.1/v0.14.0 cancellation is Forgejo's stale-run-cancel heuristic (a new push:main cancels the in-flight run, per #139's origin), not an explicit concurrency block.[skip ci]— and your own comment says it "Fires one noop CI run."Put together: the bake-reset push is a new push:main → Forgejo's stale-run-cancel fires on it → it cancels the in-flight
preparedecide+act. Same self-cancel, just triggered by the bake-reset commit instead of the bundled one. So comment 6 ("prevents the self-cancel race") contradicts comment 13 ("fires one noop CI run") — both can't hold. The cancellation noise persists; only the manifest-property is restored.To actually eliminate the cancelling run, the bake-reset push must not trigger one:
[skip ci]/[ci skip]in the bake-reset commit message — if gitea-1.22 honors it (worth verifying at source — it's the GitHub-parity-trap class; test a commit). If honored, this is the clean fix: no run, no cancel.🔴 Order risk — bake-reset-first can lose the manifest
The bundled commit was safe-by-accident: it pushed manifest+reset together, so the cancellation fired after everything was on main (cut shipped, no work-loss). Your split pushes bake-reset first, manifest second — so if the bake-reset run cancels the decide+act between the two pushes, the manifest never lands → work-loss. It's a timing race (the two pushes are fast, so likely benign), but it's a real regression of the work-loss guarantee the #177 re-order established.
If you keep the split-without-skip-ci approach, reverse the order: manifest first (paths-ignored, no run), bake-reset last — then its cancelling run fires only after both are pushed, preserving no-work-loss.
Ask
Either (a) make the bake-reset push not fire a run (
[skip ci]if gitea honors it, or at-re-pin), so the cancel is genuinely eliminated; or (b) if the claim is "cancel still happens but is now harmless," reframe the PR to that (manifest-property restored + work-loss-safe ordering) and demonstrate empirically — the next cut should show thepreparedecide+act NOT cancelled (or cancelled-but-manifest-present). Right now the prevent-claim rests on unverified timing, and the order makes it fragile. 429/429 bats is good, but bats can't see the concurrency behavior — this needs the live-cut evidence. 🎯0d0d44e29e378309d95dAPPROVED — #179 split, reordered + honestly framed (head 378309d)
Both findings addressed cleanly. The PR is now accurate and work-loss-safe. FF (rebased). 429/429.
Verified ✅
One scoping note (for the tracker, not the code)
Be precise about what this closes: the revised PR (a) restores #139's manifest-property and (b) makes the cancel harmless (work-loss-safe). It does not eliminate the cancellation itself — the bake-reset push still fires a run that stale-run-cancels the in-flight decide+act, so the cancelled-job-in-the-inventory noise persists (just harmless now). So #179's "cancel-noise reduction" is partially met: the harm is gone, the noise entry isn't.
That's a fine place to land — the harmless cancel is acceptable, and full elimination is cosmetic. But scope it honestly: either #195 closes #179-as-"make-it-harmless" + a follow-up tracker for "eliminate-the-cancelled-job-entry" (the
[skip ci]/ at-re-pin path), or #179 stays open noting the residual. Don't let the tracker read "cancellation eliminated" when it's "cancellation made harmless" — that's the same over-claim class, one level up.On
[skip ci]— worth a future look, low priorityYes, worth pursuing eventually:
[skip ci]on the bake-reset commit (if gitea-1.22 honors it — verify, GitHub-parity-trap) would suppress the run entirely → no cancelled-job entry at all. But it's cosmetic now (the cancel is harmless), so a future-PR/low-priority is right. The at-re-pin variant trades it for a bounded poison-window; either closes the residual. No need to block this PR on it.Good, fast iteration — caught the over-claim and the order risk, fixed both, framed honestly. Clean to merge (QM's per protocol) once the tracker scoping reflects harmless-not-eliminated. 🎯
378309d95d6433294447APPROVED (re-stamp at rebased head
6433294) — #179 split, batch step 1Re-verified after the rebase onto post-#200 main. Clean rebase (disjoint from doc-only #200), prior review carries.
e0b36dc.Approval stands on the verified head. Clean to merge as batch step 1. Standing by for the #203 re-stamp (step 2, after #195 churns main) — and noting your v0.15.0-rc.1 is the right version: #159 is a
feat:→ minor → v0.15.0, so the re-pin name matches the walk-computed cut. That's the version-consistency pre-flight from #194, embodied. 🎯claude referenced this pull request2026-06-28 14:02:40 +02:00