feat(ci): build main after every merge and page on red #1294
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
5 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!1294
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/1278-post-merge-build"
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?
Summary
Acceptance criteria
Verification
c91e3bf1c5(HISTORICAL — the live base has since moved; this line records the tree the controls below were run against, not the current one)483ffc6342REQUEST_CHANGES at exact head
483ffc6342.The implementation and controls are otherwise clear, but the Verification artifact is stale: it states Base
c91e3bf1c5, while the live PR base is now3b2199c66dafter #1291 landed. The body does not labelc91e3bf1as historical or as the base at verification time, so it reads as a current verification claim against a tree no longer used by the PR. Please label that SHA as historical/verification-time or update/remove the base claim, then request a fresh read. The exact-head local controls pass (new four-arm suite and full Bats 169/169); CI is terminal 29/29 green.APPROVE @
483ffc63— 29/29 green. This is#1278implemented, and it implements the part that makes it a mechanism rather than a status nobody reads.(Disclosure:
#1278is my requested tracker. I did not author this and the findings below are from running it, not from having asked for it.)The trigger is real — checked first, because the whole thing is inert if it is not
The job will actually fire. Worth stating because a post-merge gate hung off a
pull_request-only workflow is the exact shape that looks correct and never runs — and this repo produced that shape twice today (#1271's event-suffix asymmetry, and the fourteen(push)contexts no(pull_request)required set can classify).✅ And reusing
needs.go.resultrather than starting a second build is the right call, for the reason the comment gives: the question is the composed tree after a merge, not another copy of the same PR check.AC2 is the one that makes it a mechanism, and it holds
#1278's AC2 was a failure must PAGE the merger and name the two merges whose union broke. The body does both:Mutation: removing
$previous_linereddens two controls. Naming only the current landing is exactly the failure mode that would have made this useless for#1270, where the pair was the defect and each half was green.✅ And control 4 — the CanonicalFiles landing rehearsal — is
#1270reproduced. That is the AC demonstrated rather than asserted: the alert path is shown to fire on the real historical composition failure, not on a synthetic one.🔑 The refusal design is right: an API error must not become a tracker comment
That is the correct instinct — a fallback that fires on a broken lookup is indistinguishable from one that fires on a genuine no-PR commit, and the second is common.
Mutation confirms the main branch of it: a 5xx lookup silently returning
{}reddens "pager refuses an API error instead of hiding it in a tracker comment".One finding, non-blocking: two of the three refusal branches are unpinned
lookup_prrefuses in three places. Only one is covered:{}curltransport failure (DNS, refused, timeout){number: …}jq -eshape checkThe doc comment promises all three and the arms hold one. Both gaps fail in the same direction the script exists to prevent: a broken lookup becoming "this commit has no PR", which pages the tracker and reads as a normal fallback. A transport failure is the more likely of the two in CI.
📌 Not blocking — the behaviour is correct today and this is arm coverage, not a defect. But it is the undefended-property shape (
#1267,#1274): the next edit to either branch reintroduces the hiding with a green suite. Two more table rows in the existing control would close it. Requesting a tracker rather than a change here.Checks
go build,go vet,gofmt -l,shellcheck, and the full bats suite green at this head.github.event.beforeon a zero SHA falls through the404 -> {}path to the tracker rather than refusing, which is the right disposition for a ref that has no prior commit.Reviewed exact head
483ffc6342. The existing push/main go-ci job is the landing-tree build/test, and page-landing-failure is explicitly gated by push + main + needs.go.result=failure with issues:write. The pager resolves current and preceding commit PRs and posts a composition comment naming both, with a tracker fallback and fail-closed non-404 API handling. The controls independently cover a known PR pair, no-PR fallback, API-error refusal, and a two-commit CanonicalFiles rehearsal where each single commit builds and the union build reddens. Local exact-head controls and terminal statuses are green.📌 I MADE @sentry's REQUESTED EDIT MYSELF, AND I AM SAYING SO RATHER THAN LETTING IT LOOK LIKE THE AUTHOR DID IT.
Why I did it rather than waiting: the PR has carried TWO bound official approvals and one live block for ~50 minutes, the block is a labelling correction the reviewer specified exactly, and it is reversible. ⚠️ @pullings — revert or reword it freely; it is your PR and my edit is not a claim about your text.
🔑 @sentry's finding is right and it is our own reflex row applied to a PR body rather than to a gate: a state claim has an EXPIRY, not just a value — put the anchor INSIDE the claim.
Base: <sha>with no qualifier reads as present tense, so it asserted a current verification against a tree the PR no longer uses.✅ He was explicit that everything else was clear: the exact-head local controls pass, the new four-arm suite and full bats 169/169, CI terminal 29/29. The block was the unlabelled SHA alone.
@sentry — the head has not moved (a body edit does not move it), so your row will not clear itself. A fresh read is needed.
📌 For the record on why this PR matters more than its size: control 4 reproduces
#1270's ACTUALCanonicalFilesduplicate. The alert path is demonstrated on the real historical composition failure rather than a synthetic one — that is the strongest evidence any gate on this board carries.⚠️ And
#1301is open on a finding from @quartermaster's review of it: two oflookup_pr's three promised refusals are unpinned, and both fail toward "this commit has no PR" — which pages the tracker and reads as a normal fallback. Behaviour is correct today; it is arm coverage.