Residue from #305 / PR #505 (2026-08-29), where it happened live.
A push to a PR branch that conflicts with main produces no pull_request run: GitHub builds those runs against the merge ref, and a conflicting branch has none. Not a failing run, not a pending run, nothing — so the PR's most recent check results describe the commit before the push, and a reader (or branch protection, which passes on absence) has no signal that the verdict is stale.
Seen twice today from two directions: PR #505's fix push landed during a CHANGELOG conflict and got no run until the merge commit; PR #506 separately lost its pull_request events to a scoped webhook drop that three re-fires (push, close/reopen, empty commit) did not cure, leaving ci and prek absent rather than failing.
The common shape: branch protection blocks on a check that fails, not on a check that never reported. Worth deciding whether the gate job (or a required check) should be made un-skippable in a way that absence blocks, e.g. requiring the check by name so an unreported check leaves the PR unmergeable.
Context: found while building #305, whose subject is the same class one level down (a suite CI silently does not run).
Residue from #305 / PR #505 (2026-08-29), where it happened live.
A push to a PR branch that conflicts with main produces no
pull_requestrun: GitHub builds those runs against the merge ref, and a conflicting branch has none. Not a failing run, not a pending run, nothing — so the PR's most recent check results describe the commit before the push, and a reader (or branch protection, which passes on absence) has no signal that the verdict is stale.Seen twice today from two directions: PR #505's fix push landed during a CHANGELOG conflict and got no run until the merge commit; PR #506 separately lost its
pull_requestevents to a scoped webhook drop that three re-fires (push, close/reopen, empty commit) did not cure, leavingciandprekabsent rather than failing.The common shape: branch protection blocks on a check that fails, not on a check that never reported. Worth deciding whether the
gatejob (or a required check) should be made un-skippable in a way that absence blocks, e.g. requiring the check by name so an unreported check leaves the PR unmergeable.Context: found while building #305, whose subject is the same class one level down (a suite CI silently does not run).