Conversation
…e each one a job silicon-nightly has been red for days. It is not a broken lane; it is the policy's own anti-rot rule firing: PROMOTE x86_64-cuda-sm89 marked pending:361, but yoga-gpu can serve it NOW PROMOTE aarch64-macos marked pending:361, but mini-m4 can serve it NOW FAIL: silicon coverage does not match the policy. .github/silicon-coverage.txt says a pending axis "CANNOT ROT: the preflight fails if a runner able to serve the selector APPEARS, because at that point the only thing standing between us and the coverage is this line." Both tripped it. The 08:26 run saw only yoga because mini-m4 registered later the same day. x86_64-cuda-sm89 was a deliberate hole: the x86_64 GPU leg used to run on lambda-labs, which must never be a CI host (paiml/infra#359), so #2740 made cuda-nightly gx10-only. yoga-gpu is a self-hosted Ada card, so the reason is gone. ci.yml's `cuda-unit` does reach yoga, but only on a pull_request AND only when gpu_touched==1 -- conditional coverage is not an axis. aarch64-macos is the only darwin/arm64 silicon the repo has. Everything else in this lane is Linux, so every macOS assumption in the tree is invisible to it by construction; the first full darwin run of the workspace found two (a /proc/meminfo read, and an ETXTBSY premise that is a Linux guarantee). Promoting the LINE alone would have been the cheap fix and a false one: `required` means "an architecture is tested", and this lane would not have been testing either of them. So each promoted axis gets a job running the same arch-sensitive subset the other two run, is added to summary.needs, the reported table, and the rc loop that makes a non-success axis fail the lane. yoga-gpu is also binary-release.yml's x86_64 CUDA asset runner, so the new job takes the treatment gx10 got in PP-19: concurrency group perf-yoga, cancel-in-progress false, so a nightly and a release cut queue behind each other instead of contending. check_perf_concurrency_groups.sh sees it: ok silicon-nightly.yml:x86_64-cuda-sm89 (gpu runs-on) group=perf-yoga cancel-in-progress=false Measured after the change, against the live fleet: axes declared: 5 (required 4: covered 4, MISSING 0; deferred 1: PROMOTABLE 0) OK: every required axis has a runner, and every deferred axis is still blocked. Pmat-Ticket: PMAT-1098 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
§13.11 rung 1 — quorum shadow verdict Shadow mode: this records a verdict and merges nothing. A refusal |
|
Closing: this duplicates #3060, which is already in the merge queue at position 8 and solves the same problem more deeply. I wrote it without checking which open PRs already owned #3060 rewrites the policy's semantics from the outside in: That is the same objection I raised in this PR's own description — " What is not in #3060 and still needs doing: the so silicon-nightly stays red on the macos half even after #3060 lands. I'll re-do that piece on top of #3060's semantics — as a run inside a cadence window with a Two things worth keeping from the work here, both already filed elsewhere:
🤖 Generated with Claude Code |
silicon-nightly is not broken — it is the anti-rot rule firing
Four runs red (09-09, 09-10, 09-11, 09-13) and two cancelled. The
coveragejob's verdict, from run 34747695348:.github/silicon-coverage.txtsays a pending axis cannot rot: "the preflight fails if a runner able to serve the selector APPEARS, because at that point the only thing standing between us and the coverage is this line." Both tripped it. The 08:26 run saw only yoga;mini-m4registered later the same day, which is why the live guard now reports two.I first assumed the matcher was case-sensitive (mini's labels are
ARM64/macOS, the selector isarm64/macos). It is not —labels_containlowercases both sides and a committed self-test row pins exactly that. Running the guard against the live fleet is what settled it.Why promoting only the lines would have been a lie
requiredreads as "this architecture is tested." Neither axis was being tested by this lane, and for sm_89 the nearest thing is conditional:cuda-unitreaches yoga only on apull_requestand only whengpu_touched == 1. Conditional coverage is not an axis. So each promoted axis gets a job running the same arch-sensitive subset the other two run, plussummary.needs, the reported table, and the rc loop that turns a non-success axis into a lane failure.x86_64-cuda-sm89yoga-gpuaarch64-macosmini-m4Everything else in this lane is Linux, so macOS assumptions are invisible to it by construction. The first full darwin run of the workspace found two — a
/proc/meminforead, and an ETXTBSY premise that is a Linux guarantee and simply is not true on XNU.Release contention
yoga-gpuis alsobinary-release.yml's x86_64 CUDA asset runner, so the new job takes the treatment gx10 got in PP-19 — a named group, so a nightly and a release cut queue behind each other instead of contending:Measured after the change
check_silicon_packages.shandcheck_perf_concurrency_groups.shboth pass.What I have not measured: neither new job has ever run. The darwin one is close to work that has run (mini's
macos-arm64leg in #3205 testsaprender-computenatively and passes), but--releaseon a 16 GB box and the yoga leg are both unmeasured — which is why both carry a 90-minute timeout andCARGO_BUILD_JOBS: 6on mini rather than a tight bound guessed from nothing. If either goes red on its first night, that is the andon, not a regression.no-close: silicon-nightly's red is the policy working; this promotes the two axes whose blockers cleared and leaves
aarch64-cuda-sm87deferred, which keeps the lane's remaining gap a value rather than an absence.🤖 Generated with Claude Code