-- Why a phase is waiting, so a queue never looks like a stall. -- -- Placement moves from mission launch to PHASE launch, which makes the existing -- `start_pending_phases` loop the queue: a phase with no admissible node simply -- stays `pending` and is retried every 10s. That is the whole queue mechanism — -- no new status, no sweeper, no migration for a `queued` state. -- -- The risk it creates is the one this codebase keeps paying for: a phase waiting -- for capacity is indistinguishable from a phase nothing is working on. These two -- columns are what make the difference visible. `capacity_blocked_since` also -- bounds the wait, so a fleet that never frees fails the phase with a reason -- instead of holding it forever. ALTER TABLE mission_phases ADD COLUMN IF NOT EXISTS capacity_blocked_since timestamptz, ADD COLUMN IF NOT EXISTS capacity_note text;