ci: keep the reporting aliases off the shared hosted pool#6446
Merged
Conversation
An alias job is the last job in the run: it waits for its matrix leg and reports the outcome. Starve it of a runner and it never starts, so the RUN never reaches a terminal state. A run that never terminates holds its `concurrency` group, and build.yml sets `cancel-in-progress` on that group — so the next push's run sits at status `pending` with ZERO jobs and never dispatches. The pull request is then wedged: no checks, no failure, nothing to re-run. It survives further pushes and clears only by cancelling the older run by hand. It cost #6437 two hours, and #6437 was the fix for the starvation that caused it. `macos` already resolved its runner through PULP_PREAMBLE_RUNS_ON_JSON so the required gate could not be starved on a pool it does not control. `linux` and `windows` were still pinned to `ubuntu-latest` — which means two ADVISORY lanes could each strand a pull request indefinitely. An advisory lane must not be able to do that, so they ride the same toggle. This removes the wedge mechanism rather than documenting a recovery for it, and it costs nothing: these jobs poll an API and echo a result. The test asserts all three aliases resolve through the toggle and that none is pinned to a bare `ubuntu-latest`; reverting either job fails it. The guide records the diagnosis signature — a `Build and Test` run that is `pending` with an empty jobs array while its sibling workflows dispatched normally — because that state is otherwise indistinguishable from ordinary queue latency.
danielraffel
force-pushed
the
fix/alias-jobs-off-hosted-pool
branch
from
July 22, 2026 07:47
a1272b3 to
a85fb5b
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The failure this removes
A pull request that shows no check activity at all after a push — not red, not queued, simply nothing. It is not slow CI, and it does not recover on its own.
build.ymlgroups bybuild-<ref>withcancel-in-progress. The reporting aliases (macos/linux/windows) are the last jobs in the run: they wait for their matrix leg and echo the outcome. Starve one of a runner and it never starts, so the run never reaches a terminal state. A non-terminal run holds its concurrency group, and every later run on that ref then sits atpendingwith zero jobs. Pushing again does not help — the new run queues behind the same held group.This cost #6437 two hours, which is pointed, because #6437 was the fix for the hosted-pool starvation that caused it.
Why
linuxandwindowsspecificallymacosalready resolved its runner throughPULP_PREAMBLE_RUNS_ON_JSONso the required gate could not be starved on a pool it does not control.linuxandwindowswere still pinned toubuntu-latest— meaning two advisory lanes could each strand a pull request indefinitely.An advisory lane must not be able to do that. Routing them through the same toggle removes the mechanism rather than documenting a recovery for it, and costs nothing: these jobs poll an API and echo a result.
Diagnosis signature (now in the ci skill + local-ci guide)
Unambiguous: run
statusispendingand itsjobsarray is empty, while sibling workflows from the same trigger dispatched normally.Verification
tools/scripts/test_windows_runner_policy.pyasserts all three aliases resolve through the toggle and none is pinned to a bareubuntu-latest. Negative control: reverting either job toubuntu-latestfails the test; 13/13 pass with the change.actionlintclean,gates.shgreen.🔎 Provenance
claudem3/Volumes/Workshop/Code/pulp-mq1dd2217d-ca26-4de4-b90e-6360ee343606Resume
Jump to this tab
Relaunch (any agent)
Restore URL — https://claude.ai/code/session_01363VPyLiV9Er9DJ1pcmC9c
stamped 2026-07-22 00:41 UTC