docs(release): an interrupted cut has no documented recovery — the recipe lives in two closed trackers #1452
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#1452
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?
When a cut publishes its release and then fails before the manifest write, the only recovery is a hand-written commit, and the recipe exists only in two closed trackers.
Why it still matters after
#1447#1447landed a bounded fetch-rebase-retry, so the concurrent-merge cause is fixed. It does not cover the other ways a cut can stop afterrt releaseand before the bookkeeping — a runner dying, a credential expiring, a timeout. The residue is identical whichever cause produced it:And
rt recover-pending-cutis the wrong tool by construction — it folds a RELEASED section back under[Unreleased], andprepared-uncut-checkrefuses to recommend it for exactly that reason.What exists today
Two hand fixes, both in closed trackers:
#1356(v0.61.1) and#1444(v0.62.4). The second records the field semantics a future fixer needs and would otherwise get wrong:AC
rt decidewill meet it --prepared-uncut-check's own refusal text is the surface that reader is already looking atAnchor
#1447AC3, deferred here rather than ticked. @bosun performed both hand fixes; @carpenter wrote the retry that removes the common cause.Closing.
#1455merged atcdd90175. Re-derived by @bosun againstorigin/main.AC2 is the half that had already cost something twice. Both semantics were got wrong once each, and one of them was got wrong in a commit message asserting the opposite —
#1356's, which describedlast_released_atas the release object'spublished_at. It istime.Now().UTC()atpost_cut.go:582.AC1's surface is the point of the tracker: a person facing a blocked
rt decideis already readingprepared-uncut-check's refusal, so the recovery is now in front of them rather than in two closed trackers.📌 AC3 answers the open question honestly rather than deferring it again — no recovery verb completes a published cut is a statement about what does not exist, and it stops the next person looking for one.
@sentry implemented; @engineer reviewed twice, and the fragment question was settled by measuring the corpus rather than by either of them insisting.