ci(gc): gc-native-roots had never completed a run; one arm on PRs - #7387
ci(gc): gc-native-roots had never completed a run; one arm on PRs#7387proggeramlug wants to merge 1 commit into
Conversation
Measured today: 40 of 40 runs queued, ZERO completed, oldest sitting nine hours. Every other workflow drained 2-3 runs per 20 in the same window; this one drained none. The cause is the matrix -- four runner classes, two of them the scarcest GitHub offers (macos-14, windows-latest), fanned out on every push to every branch. With ~20 of its own runs competing for those runners it could not drain, and cancelling the backlog refilled it within minutes because merges outpace the drain rate. A gate that never executes is the purest form of CLAUDE.md's fourth failure mode: it cannot fail, because it cannot run. Every PR in the campaign that built this gate showed it "pending" -- an assertion nobody had ever evaluated. Pull requests now run the ubuntu-latest arm only; main and workflow_dispatch keep all four. ubuntu-latest is the PR arm because its runners are plentiful and it exercises the least-redundant path: x86-64 roots resolve through the CFA-derived SP base (#7349), which neither the aarch64 x29 chain walk nor Windows' RtlVirtualUnwind shares. Cost, stated rather than buried: a break confined to macOS, Windows or aarch64-ELF now surfaces on main instead of on the PR. Worth it while the alternative is surfacing nowhere. gc-native-roots-complete reads the matrix job's aggregate result, so it stays a stable context for branch protection whichever arm count ran -- which is what makes promotion to required possible at all. Claude-Session: https://claude.ai/code/session_01EaD6yNwoinzdW1JbYNkMMF
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughThe ChangesNative-root CI scheduling
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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 this — the premise is wrong, and I'd rather retract it than quietly rewrite it. What I claimed
What is actually true120 of the last 200 runs completed. My query used That is the same window artifact I hit earlier today with a "88 queued, 0 in progress" reading, caught, and said so. I then walked straight back into it and put the result in a PR body and a changelog fragment. Once is a mistake; twice is a lesson about not trusting a paginated listing to answer a question about history. The real failureThe The gate refused to run vacuously, which is the behaviour it was built to have. That is already being fixed in #7384 and #7388. What that means for this PRThe matrix reduction here was justified entirely by a starvation that isn't happening. Shipping it would trade real macOS/Windows/aarch64-ELF PR coverage for a problem I measured wrong — and would leave a false explanation sitting in a workflow comment, which is precisely how #7321's wrong cause survived into an issue and a job name. If PR-side CI cost turns out to be worth trimming, that should be its own change with its own measurement. Not this one. |
The measurement
gc-native-rootshas never completed a single run.test.ymlgc-ratchetgc-root-dominancegc-native-roots40 of 40 queued, oldest sitting nine hours.
Why
Four runner classes —
macos-14,windows-latest,ubuntu-latest,ubuntu-24.04-arm— fanned out on every push to every branch. Two of those are the scarcest GitHub offers. With ~20 of its own runs competing for them it cannot drain, and I confirmed cancelling doesn't fix it: I cancelled 39 runs and the queue was back to 10 within minutes, because merge rate outpaces drain rate.A gate that never executes is the purest form of CLAUDE.md's fourth failure mode — it cannot fail, because it cannot run. Every PR in the campaign that built this gate displayed it as "pending": an assertion nobody had ever evaluated. That includes the deep-stack probe, the liveness gate, and the aarch64-Linux arm.
The change
PRs run the
ubuntu-latestarm only.mainandworkflow_dispatchkeep all four.ubuntu-latestis the PR arm on purpose: plentiful runners, and it exercises the least-redundant path — x86-64 roots resolve through the CFA-derived SP base (#7349), which neither the aarch64 x29 chain walk nor Windows'RtlVirtualUnwindshares.The cost, stated rather than buried
A break confined to macOS, Windows or aarch64-ELF now surfaces on
maininstead of on the PR. That is a real loss. It is worth taking while the alternative is surfacing nowhere.gc-native-roots-completereads the matrix job's aggregateresult, so it remains a stable context regardless of arm count — which is what makes promoting it to required possible at all. Right now it cannot be promoted, because it has never been green even once.Summary by CodeRabbit
Chores
Documentation