gatelineAPI reference
BUDGET_REASON: "budget-exhausted" = ...

A run the orchestrator paused because its next dispatch would exceed budget.cost_limit_usd (or, under --require-budget, because it has none). A condition, not an event (#96): the deriver recomputes it from the same facts every tick, so the only resume that sticks is one that changes a fact — a higher limit, written in the same commit.