Skip to content

ci: the self-hosted fleet restarts mid-run, killing all in-flight jobs and reporting them as failures #862

Description

@avrabe

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

  1. 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.
  2. 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.
  3. Failing that, at least record it here so the next person diagnosing three
    simultaneous unrelated failures finds this issue first.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions