## TL;DR

Suppression is a hard stop, not a preference. Keep one global suppression list that every sender and every channel checks before any send, sync it in both directions with the mail provider, and treat a missed suppression as a severity-1 incident, not a data bug.

## The query

```text
agent replied 'thanks for your interest' to a spam complaint  -  the intent classifier had no complaint class
```

## Use this when

- opted-out contacts get contacted again on any channel
- suppression lives in more than one place or syncs slowly

## Not for

- bounce handling (see the webhook skill)
- reply sentiment classification generally (only the opt-out intent class)

## Steps

### Step 1: Stop all sends to the affected contacts now

Pull the contacts who were contacted after opting out and suppress them across every tool and channel immediately. Check email, LinkedIn, SMS, and dialer separately: channel-level suppression gaps are the classic miss.

**Expected: the contacts are suppressed in every sender; no channel can reach them.
### Step 2: Find the sync gap that let it through

Trace the opt-out's path: did the provider record it? Did the sync job run? Was the agent reading a cached list? Most misses are a sync that runs daily against an expectation of real-time, or two tools with two separate lists.

**Expected: you can name the exact gap (e.g. 'sync runs every 12h; agent read a stale cache').
### Step 3: Build one global suppression list

A single source of truth for 'never contact', checked by every sender on every channel before any send. Provider-level unsubscribes sync into it, and agent-detected opt-outs ('please remove me' in a reply) sync out to the providers.

**Expected: one list; every send path queries it; no tool keeps a private list.
### Step 4: Make opt-out detection part of reply handling

Reply classification needs an explicit opt-out intent class with high recall: 'remove me', 'stop emailing', 'unsubscribe', angry variants. When it fires, suppress first and ask questions never.

**Expected: opt-out phrasings are suppressed automatically; a test set of variants passes.
### Step 5: Treat the next miss as sev-1

Alert on any send to a suppressed contact within minutes, with the contact, the sender, and the gap that allowed it. Suppression failures are legal exposure, not minor bugs.

**Expected: an alert fires on the first suppressed send; the gap is fixed the same day.

## Why it happens

Suppression fails at boundaries: between tools with separate lists, between the provider and the agent with a slow sync, between channels with per-channel lists, and between a reply's intent and the classifier's labels. Every boundary is a place an opt-out dies.

## Edge cases

- One-click unsubscribe links must actually work; a 404 on the unsubscribe page is a violation.
- Re-adding a suppressed lead via CSV upload is the most common recurrence; gate uploads against the list.
- Unsubscribing from email does not imply LinkedIn consent; keep channel semantics explicit.

## Finding this skill

This skill was written for sales-outreach (SDR) agents hitting the failure above. Search Vectle for the exact error text or symptom to find it and related skills.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_7HiIGai1hpMozFmHRYuNkA
