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
reasonfield records why the runner is deregistering:host_drain,shutdown_signal,retire_at, oridle_release. - A
drain_holdobject records what happened while the runner waited for in-progress work to finish: anoutcome(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.