Read Runaway
Running boxes past their class threshold, worst overage first.
Thresholds are keyed by (provider, gpu_type) in deployment config, not by a constant here: an eight-way H100 host running four hours is a normal job, and a CPU box running four days is a leak.
Ranked on each box's current uninterrupted run rather than its lifetime running total, and restricted to boxes that are running. See :func:load_runaway_boxes for why either alone makes the view useless.
Ordering carries the ranking, and the key is the overage -- the run length minus that box's own budget -- not the run length. Because budgets differ per class, the two orders differ: a CPU box nine hours into a one-hour budget outranks a GPU box twelve hours into a ten-hour one, and so appears above a row with a longer currentRunSeconds.
Neither the overage nor the threshold is on the wire, so a reader cannot reconstruct the ordering from the rows; it has to be taken on trust, and currentRunSeconds is context for a row rather than proof of its position. Putting the overage on the response would make it checkable, at the cost of a field the shared contract does not have.
Truncation is reported in X-Runaway-Truncated rather than swallowed: a runaway view that silently drops rows reads as "nothing else is wrong" when the opposite may be true. The header covers both places rows are dropped -- the candidate cap and this route's limit -- because a fleet is far likelier to have more than limit boxes over threshold than more than MAX_RUNAWAY_CANDIDATES boxes running.
Query parameters
Response
Successful Response