Show fleet capacity and queues with no live workers.
The registry answers “what is each worker doing”; this answers the fleet-level
question an operator asks during an incident. A queue with a growing backlog and
no consumer looks exactly like a slow queue until you know it is unserved, so
queues lists every queue the store knows about UNIONED with every queue a live
worker claims — an unserved queue appears WITH live_workers: 0 rather than
being absent, because “not in the list” is indistinguishable from “not looked
at”. Staleness uses the same 15-minute heartbeat grace as GET /workers.
Autoscaling signals ride along: utilization = inflight/capacity and
empty_poll_ratio = admits returning zero / total admits over each worker’s
rolling window. Both are ratios of SUMS, not averages of per-worker ratios, so a
1-slot worker does not weigh the same as a 64-slot one. Scale UP on high
utilization with a growing time-to-drain; scale DOWN on a high empty-poll ratio.
headgate publishes the signal and never sizes the fleet.