Summary
The self-hosted runner fleet restarts mid-run, killing every in-flight job
across all labels within the same second. Twice confirmed, and each time it
presents as a set of unrelated red checks that look like real failures.
Evidence
2026-08-27, PR #861 — three jobs on three different runners:
Code Coverage 01-10 04:54:38 -> 04:56:51
Mutation Testing (rivet-cli) 01-9 04:54:38 -> 04:56:41
Mutation Testing (rivet-core, PR) 01-6 04:54:38 -> 04:56:41
04:56:37Z ##[error]The runner has received a shutdown signal. This can happen
when the runner service is stopped, or a manually started runner is
canceled.
04:56:38Z ##[error]The operation was canceled.
All three had been green on the previous commit of the same PR.
2026-08-26, PR #855 — same message at 04:33:47Z, killing WASM seam build, Test and Proptest (extended) across two labels within one second.
All three passed on re-run.
Why it costs more than a re-run
The jobs report failure, not cancelled. The GitHub UI shows a red X with
no failed step, so the natural reading is "these tests broke". On #855 I
initially attributed it to duplicate pull_request runs and had to publish a
correction; on #861 the killed jobs were the mutation gates, which had caught
a genuine bug in that same PR two ticks earlier — so a red there is exactly the
signal one should not wave through.
Distinguishing it requires opening a job's log and finding the shutdown line,
because:
- the job conclusion is
failure;
- there is no failed step (the steps end
skipped);
- only the raw log carries the reason.
Complication for #839
I have been reading exit 143 + shutdown signal on Kani Proofs as
hosted-runner reclaim. These two events show the identical message coming from
the self-hosted fleet. The message alone does not identify which pool
restarted, so #839's attribution rests on an inference the evidence does not
support and should be re-checked.
What would help
- Find out why the fleet restarts. Unattended upgrades, a systemd timer, a
config-management run, or an autoscaler reclaim would all produce this. If it
is scheduled, moving it outside working hours costs nothing.
- Make the state legible without opening logs. A post-job step that
detects the shutdown and annotates the job would let a reader tell "the
runner went away" from "the test failed" at a glance.
- Failing that, at least record it here so the next person diagnosing three
simultaneous unrelated failures finds this issue first.
Related
Summary
The self-hosted runner fleet restarts mid-run, killing every in-flight job
across all labels within the same second. Twice confirmed, and each time it
presents as a set of unrelated red checks that look like real failures.
Evidence
2026-08-27, PR #861 — three jobs on three different runners:
All three had been green on the previous commit of the same PR.
2026-08-26, PR #855 — same message at
04:33:47Z, killingWASM seam build,TestandProptest (extended)across two labels within one second.All three passed on re-run.
Why it costs more than a re-run
The jobs report
failure, notcancelled. The GitHub UI shows a red X withno failed step, so the natural reading is "these tests broke". On #855 I
initially attributed it to duplicate
pull_requestruns and had to publish acorrection; on #861 the killed jobs were the mutation gates, which had caught
a genuine bug in that same PR two ticks earlier — so a red there is exactly the
signal one should not wave through.
Distinguishing it requires opening a job's log and finding the shutdown line,
because:
failure;skipped);Complication for #839
I have been reading
exit 143+shutdown signalonKani Proofsashosted-runner reclaim. These two events show the identical message coming from
the self-hosted fleet. The message alone does not identify which pool
restarted, so #839's attribution rests on an inference the evidence does not
support and should be re-checked.
What would help
config-management run, or an autoscaler reclaim would all produce this. If it
is scheduled, moving it outside working hours costs nothing.
detects the shutdown and annotates the job would let a reader tell "the
runner went away" from "the test failed" at a glance.
simultaneous unrelated failures finds this issue first.
Related
four runner failure modes distinct