feat(gates): a refusal should name the repair, not just the discrepancy #1077
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 project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#1077
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 gate refuses, it names the discrepancy and not the repair. An adopter reading
tag points at X but last_released_sha is Yhas no way to know what to do next.We spent an afternoon on exactly that: four candidate repairs tested against the shipped check before one was viable, and a fifth that passed the check while making the next cut wrong. An adopter has none of that context.
Scope
Refusals an adopter can actually reach.
manifest_check.gohas 22fail()sites and most are toolkit-self; those are not on the road. Eight done properly and four named beats 22 done mechanically.post_cutis in scope. This is about refusals naming repairs, not about one file — and the absent-manifest case is the first one an adopter hits, on their first cut.The conditioning that makes this correct
bake-digestis invoked only by our owngoreleaser.yml, never byreusable-release.yml, which is the wrapper adopters get. SoTagPinsDigestcan explain that failure as a digest-pin case only on this repo. An adopter reachingmanifest_check.go:321sees plain, unexplained drift.Offering an adopter the specific repair would leak toolkit-self context into an adopter-facing message, which is the defect this tracker exists to remove.
AC
On the override question
The operator asked whether a "known outage" override belongs here, and refined it himself to a workflow-level flag rather than a repo variable — a variable set during an outage is one nobody unsets. That refinement is the whole distinction: a per-run dispatch input cannot persist. Our own record: a correct refusal left a chamber's rotation half-finished for 29 days because nothing retried it. No general skip.
Sequencing
--allow-first-manifestis landed in #1074; the unreadable-config follow-up is #1086. Neither is duplicated here.Corrections in this body are @pilot's, from reading the code rather than the tracker: the 22-vs-3 count,
post_cutbeing outside the original wording, the toolkit-self conditioning, and that #1074 was unmerged when the tracker was written; it is now landed. The original version named an internal verb as an adopter repair — the failure this tracker describes, inside the tracker.AC verification after release-toolkit PR #1078 merged at
9a09987eb0: all five criteria are DONE. Sentry review 6228 was official, non-stale, and exact-head-bound to852500cc22; it verified the adopter-facing refusal/repair wording, toolkit-self conditioning, ambiguous-site handling, the #1019 named per-case override shape, and the inverse/mutation evidence. The tracker sequencing note now records #1074 and #1086 as landed.Record correction completed: the #1077 sequencing paragraph now renders Markdown bold correctly and the closing historical note says #1074 was unmerged only when this tracker was written. AC state and merge evidence are unchanged.