Repository navigation
Conversation
…upersede a failure (#16025)
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Advanced Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Closing as superseded by #16047 — 46 and I fixed the same two blind spots in parallel, and theirs carries a test mine does not. Two PRs on That is theirs, on one specific test. They mutated their own fix with "ignore skips entirely" and it passed every test they had written — because all of them placed the conclusive run later in the list. The check-runs API returns runs unordered, so a newer My implementation handles both orderings — verified directly: But my test only covered one of them. Same gap, caught by their mutation and not by mine. Their framing is the part worth keeping: when a mutation survives, the missing test is usually one nobody thought to write, not one that exists and is weak. Nothing here is lost. The verification that mattered — running the fixed gate against #16023 (merged), #15978 (open, failing) and #16027 (open, running) — is recorded on this PR and on #16044. What I am NOT closing: #16044. #16046 covers the same two defects; #16044 additionally carries the criterion neither PR implements — that the tool enumerate the conditions it did not examine. It already does this for app-pinned contexts ("matched by name only"); review threads, base-freshness and conflicts are checked by nobody and named by nothing, and that silence is what turns each blind spot into a green. Five instances in, adding one case per incident is the pattern that guarantees a sixth. |
✅ SSOT Configuration Compliance: Passing🎉 No new hardcoded values of either class — Known backlog in |
Closes #16044.
Single-issue rationale: this fixes the merge-decision tool every session on this box uses to decide what to land. It is in flight while other PRs are being merged against its verdicts, so it goes alone rather than sharing a review pass with unrelated work.
Thinking Path
Another session found the fourth blind spot the hard way: it told a third session a merge window was open on three PRs that had merged hours earlier. Its gate said
CONTEXTS-GREEN, and that was true — a merged PR's required contexts are green, because they completed before it landed. True and useless, and read as clearance.That is the fourth:
pendingcontributed to no bucketcancelledoutranked its replacementNot four bugs. One property: a check that enumerates conditions is blind to the conditions it does not enumerate, and every blind spot reads as success. Every previous fix added a case to the list; none changed that.
Which predicted a fifth, and it turned up while fixing the fourth. On #16027
code-qualityconcludedfailureat 06:43 and a path-filtered shim concludedskippedat 06:45 — same commit, same context name. Newest-wins took the skip.What Changed
_pr_head_and_state()reads state and head together, so neither is used without the other. A non-open PR returns "MERGED — not open; required contexts read green because it already landed" with exit 1._supersedes()— askippedrun never supersedes one that actually ran. Everything else stays newest-wins.Verification
Both against the live API, on real PRs:
CONTEXTS-GREENMERGED — not open; …already landedGREEN-BUT-OTHERS-FAILINGBLOCKEDFour tests, and two of them are contrasts — which is the half that matters here, because both fixes are of the form "stop trusting X" and the cheap wrong version of each is to stop trusting everything:
failure→ re-runsuccessmust still supersede, or every fixed PR reads red forever;skipped— the normal path-filtered case — must stay green rather than becoming unreadable.What this does not fix
The design still assumes its list of conditions is complete, and each fix so far has been "add the case that just bit us". #16044 carries that as the open work: the tool says nothing about what it did not examine — review threads, base-freshness, conflicts — and that silence is what turns a blind spot into a green. It already names app-pinned contexts it cannot verify; that pattern needs to cover the rest.
Model Used
Opus 5