Follow Discord
Sweep 06 Nov 2026 · 01:32Z Build v2.1.319 537 read Stable v2.1.311 Latest v2.1.318 Next v2.1.319 Feeds RSS JSON llms.txt llms-full.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

Group of 2 Under the hood Internal Changes
JSON All of v2.1.271
Under the hoodTier: how much it should matter to you
2Useful: my rating, 1 to 5
2Signal: worth watching, 1 to 5
Self-Hosted RunnerArea: what it touches
Internal ChangesKind: in v2.1.271,
Internal ChangesSection of the release

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 →

Feedback