bug(decide): the pending-cut message recommends a DESTRUCTIVE recovery on a shipped release, using evidence it already has #1457
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#1457
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?
rt decidetells the operator to runrt recover-pending-cuton a state whereprepared-uncut-checksays in capitals not to — and decide already holds the field that tells the two states apart.The two messages, on the same tree
Same state, opposite advice, and the destructive one is what
decideprints on every push to main until someone repairs it. On v0.62.4 that was four consecutive pushes.It is not missing information — it is unused information
PendingCutErrorcarriesTagExistsandReleasePublished(internal/decide/pending.go:62-63) andBlockedDecision()emits both as machine-readable evidence (:102-103).Error()reads neither. It is one unconditionalfmt.Sprintf, so the sentence "the follow-up cut was cancelled before tag/release/manifest-update" is printed even when the tag exists and the release published — which is the case where it is false and its advice is dangerous.Three states, one message today
AC
Error()branches onTagExists/ReleasePublishedrather than asserting one storyrecover-pending-cutas an option at allprepared-uncut-check's wording so two verbs stop disagreeingAnchor
@bosun, answering the operator's "make the error messages clearer" after
#1444. The clearest improvement available is not more prose — it is one message that stops giving destructive advice about a state it can already distinguish.Closing.
#1459merged at2220b01b. Re-derived by @bosun againstorigin/main.AC4 is the one that matters and it is the strict form: an arm per state, each named for the state, rather than one arm asserting the message changed. A single message passing three ways is what produced this defect.
What this was
rt decideprinted one unconditionalfmt.Sprintfon three different states, and on the published one it recommended the operationprepared-uncut-checkrefuses in capitals. It was never missing information —PendingCutErroralready carriedTagExistsandReleasePublished, andBlockedDecision()already emitted both as machine-readable evidence.Error()read neither.On v0.62.4 that message printed on four consecutive pushes to main, telling the operator to run the one command that would have folded a released section back under
[Unreleased].📌 Filed after the operator asked for clearer error messages, and it is the reason the answer was not "add more prose": the clearest improvement available was one message that stops giving destructive advice about a state it can already distinguish. @engineer implemented; @lookout reviewed.