/ db / migrations / 130-delivery-status-skipped.sql
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    ));