Switchbordswitchbord
v0.18.131

v0.18.131 — worker realtime capacity under campaign storms

Reserve true realtime worker capacity so campaign/status storms cannot starve inbound webhooks and replies.

Fixed


  • Worker realtime capacity under campaign/status storms. Convert WORKER_FAST_LANE_RESERVED loops into a true realtime lane via atomic claim_next_realtime_outbox_job. Inbound/user-preference webhooks, non-campaign transactional sends, and reactions stay admitted while delivery-status receipts and campaign/batch template traffic are excluded regardless of numeric priority. Prevents the 2026-07-21 failure mode where ~4,000 campaign template jobs at priority 5 preempted priority-10 inbound/reply work and produced multi-minute inbound queue waits.
  • Campaign activation/priority database guard. Transactional migration 20260721000000_outbox_realtime_lane_campaign_guard.sql enforces the priority-40 floor for campaign-owned template dispatch and fails closed on malformed/cross-workspace/inactive campaign references. Standalone migration 20260721000001_outbox_realtime_lane_index.sql builds the realtime partial index concurrently.

Rollout


Apply both migrations before deploying the worker. Reserved realtime loops and the Realtime wake path call the new RPC.


See docs/operations/worker-realtime-lane-campaign-guard-rollout.md.