130-delivery-status-skipped.sql
1 -- Migration 130: Add 'skipped' to delivery_status CHECK constraint 2 -- 3 -- 'failed' = we attempted delivery and the transport rejected it (API error, bounce, bad number) 4 -- 'skipped' = we chose not to attempt delivery (opted out, compliance block, exclusion list) 5 -- 6 -- Separating these makes failure-rate metrics accurate — compliance non-sends 7 -- should not inflate the failed count or trigger channel reputation guards. 8 9 ALTER TABLE messages DROP CONSTRAINT IF EXISTS messages_delivery_status_check; 10 ALTER TABLE messages ADD CONSTRAINT messages_delivery_status_check 11 CHECK (delivery_status IN ( 12 'queued', 'sending', 'sent', 'delivered', 'failed', 'bounced', 'retry_later', 'skipped' 13 )); 14 15 -- msgs schema (shared with 2Step and future projects) 16 ALTER TABLE msgs.messages DROP CONSTRAINT IF EXISTS messages_delivery_status_check; 17 ALTER TABLE msgs.messages ADD CONSTRAINT messages_delivery_status_check 18 CHECK (delivery_status IN ( 19 'queued', 'sending', 'sent', 'delivered', 'failed', 'bounced', 'retry_later', 'skipped' 20 ));