Sweep 19 Sep 2026 · 02:36Z Build v2.1.278 500 read Stable v2.1.267 Latest v2.1.278 Next v2.1.278 Feeds RSS JSON llms.txt Unofficial
Claude Code v2.1.271 ·

Self-hosted runner reports drain details when it shuts down

Self-hosted runners now send a reason and detailed drain-hold outcome when they deregister on shutdown

TierUnder the hoodhow much it should matter to you
Useful2my rating, 1 to 5
Signal2worth watching, 1 to 5
AreaSelf-Hosted Runnerwhat it touches
KindInternal Changesin v2.1.271,
Group of 2 Under the hood

Self-hosted runners now send a reason and detailed drain-hold outcome when they deregister on shutdown

What

When a self-hosted session runner shuts down, its deregistration call (deregisterRunner) now carries more detail about how the shutdown happened.

  • A reason field records why the runner is deregistering: host_drain, shutdown_signal, retire_at, or idle_release.
  • A drain_hold object records what happened while the runner waited for in-progress work to finish: an outcome (RUNNER_DRAIN_HOLD_OUTCOME_NOT_NEEDED, _CAP_EXPIRED, or _FINISHED), how long the hold was capped at (cap_ms) and actually lasted (held_ms), and a capped list of session IDs that were still busy when the runner was released (busy_session_ids_at_release).

Both fields are sent in the deregisterRunner POST body and logged.

Why

This gives operators visibility into why and how a self-hosted runner drained on shutdown, including whether it had to wait for busy sessions and what was still running when it let go.

See this entry in the whole of v2.1.271 →