2026-05-30 · Platform
SMS — STOP keyword now suppresses email + push too
- User intent on SMS STOP is "stop marketing to me" not "stop on this channel only". `propagateStopAcrossChannels` (sms/suppression.ts) now scans most-recent `consent_records` row for the phone, extracts any co-recorded email + userId, writes a fresh revocation row covering all 3 identifiers (`granted=false purpose=marketing`).
- Belt-and-suspenders: email surfaced from consent row is also added directly to `email_suppressions` so orgs with `enforce_consent=false` still stop emailing the recipient.
- STOP event payload gains `propagatedEmail` + `propagatedUserId` so dashboard + webhook subscribers see what got suppressed.
- START reverse-propagation deliberately stubbed: re-enabling email after an SMS START is a privacy-sensitive call that should require explicit re-consent via the form, not a keyword reply.
- Closes Wave 17 SMS honest-retract gap on "cross-channel STOP".