Support-agent registry + atomic assign/list-budget functions for support-API
Needed to unblock support-API assign + list ops (MARS-468/EVO-52 follow-up, audit P1 on assign design). Requirements: (1) active support-agent registry table; (2) FK from supportTickets.assignedAgent onto it, replacing free-text; (3) an assignment function that atomically rejects unknown/inactive agents; (4) a retirement guard that refuses deactivation while open tickets are still assigned to that agent; (5) migrate the existing session-gated updateSupportTicket assign path onto the same function so the console can't bypass the invariant; (6) list/read budget (200/hr cap mentioned in the API) enforced atomically in Postgres, not as a fail-open Node COUNT. coder-mars-cc has the list endpoint shape settled (default 25, hard cap, opaque keyset on createdAt+id, status validated, subject omitted as PII) and is blocked writing both endpoints until these DB objects exist.