What happened
The quorum receipt check sometimes reports STALE for a correct receipt at an unchanged head. Re-running the same job on a different runner passes, with no change to the head or the receipt.
| PR |
head |
failed on |
CI "tree" hash |
passed on rerun |
| #563 |
5395900 |
intel-clean-room-3 (run 34988152076) |
320a68de… |
head moved on before a rerun |
| #569 |
56441f1 |
intel-clean-room-3 (run 35001751555) |
1523c3a6… |
intel-clean-room-4 (attempt 2) |
| #569 |
e91639e |
intel-clean-room-11 |
57292577… |
intel-clean-room-2 (attempt 2) |
Locally, PRINT_HASH=1 scripts/quorum-gate.sh gives exactly the receipt's hash for each head. The CI hash matches no diff I could construct: I recomputed git diff <merge-base> <head> with the gate's own pathspecs against merge-bases cb94fc2, bfac33c, 8b2cced and ddd0c44, and none reproduces it. The same runners pass other heads (intel-clean-room-11 passed 09062f6). So it is not a fixed per-runner git config. It looks like per-run state in the persistent work directory.
Why it matters
A gate that reports STALE for a receipt the rerun accepts cannot be told apart from a real stale receipt, and the only way through is a rerun. That is flaky, which makes it red until the cause is found.
Done when
- On STALE, the gate prints
merge_base, BASE_REF's resolved sha, git rev-parse HEAD, and git diff --stat of what it hashed. The next occurrence then names its own cause instead of needing a rerun.
- The cause is found and fixed. Suspects: a stale
refs/remotes/origin/main in the runner's persistent clone (the fetch step's || git fetch origin main fallback updates FETCH_HEAD, not the remote-tracking ref); a leftover index or worktree from a previous job on that runner.
- A test drives the gate against a clone whose
origin/main lags the real base and asserts it refuses with the resolved shas named, not a bare STALE.
Found while landing PMAT-562/PMAT-564.
What happened
The
quorum receiptcheck sometimes reports STALE for a correct receipt at an unchanged head. Re-running the same job on a different runner passes, with no change to the head or the receipt.Locally,
PRINT_HASH=1 scripts/quorum-gate.shgives exactly the receipt's hash for each head. The CI hash matches no diff I could construct: I recomputedgit diff <merge-base> <head>with the gate's own pathspecs against merge-bases cb94fc2, bfac33c, 8b2cced and ddd0c44, and none reproduces it. The same runners pass other heads (intel-clean-room-11 passed 09062f6). So it is not a fixed per-runner git config. It looks like per-run state in the persistent work directory.Why it matters
A gate that reports STALE for a receipt the rerun accepts cannot be told apart from a real stale receipt, and the only way through is a rerun. That is flaky, which makes it red until the cause is found.
Done when
merge_base,BASE_REF's resolved sha,git rev-parse HEAD, andgit diff --statof what it hashed. The next occurrence then names its own cause instead of needing a rerun.refs/remotes/origin/mainin the runner's persistent clone (the fetch step's|| git fetch origin mainfallback updates FETCH_HEAD, not the remote-tracking ref); a leftover index or worktree from a previous job on that runner.origin/mainlags the real base and asserts it refuses with the resolved shas named, not a bare STALE.Found while landing PMAT-562/PMAT-564.