-- When the judge may next be attempted for this phase. -- -- The retry was a fixed 10s sweep for 30 minutes: up to 180 full re-evaluations -- of one phase. A verdict is not one request either — the evaluator is agentic -- and loops up to MAX_TOOL_CALLS + 1 times, resending the whole growing history -- each round. So one unjudgeable phase could issue on the order of 2,000 model -- requests, and a transport error (which is billed — the request was processed, -- only its response failed to decode) issued them for real. -- -- That is most of why the z.ai weekly plan kept emptying with no mission having -- obviously done anything expensive. Nothing recorded it, because usage_events -- carries no provider or model column. -- -- NULL means "attempt on the next sweep", so existing rows and the first -- attempt of every new phase behave exactly as before. ALTER TABLE mission_phases ADD COLUMN IF NOT EXISTS judge_retry_after TIMESTAMPTZ; COMMENT ON COLUMN mission_phases.judge_retry_after IS 'Earliest next judge attempt; set on a retryable judge error, cleared on a verdict.';