Skip to content

Latest commit

 

History

History
32 lines (26 loc) · 1.7 KB

File metadata and controls

32 lines (26 loc) · 1.7 KB

Fixed

gc-native-roots had never completed a single run. It runs one arm on PRs now, all four on main.

Measured 2026-08-04: 40 of 40 runs queued, zero completed, the oldest sitting nine hours. Every other workflow in the repo drained 2–3 runs per 20 in the same window — gc-ratchet 2/20, gc-root-dominance 2/20, test.yml 3/20, gc-native-roots 0/20.

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 green PR that showed this workflow "pending" was showing an assertion nobody had ever evaluated, including every PR in the campaign that built it.

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.

The cost, stated rather than buried: a break confined to macOS, Windows or aarch64-ELF now surfaces on main instead of on the PR. That is worth taking 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 promoting it to required possible at all.