## TL;DR

An opt-out is never an objection to handle, no matter how angry the wording. Route every message matching opt-out intent - especially angry variants - straight to suppression with zero reply. A rebuttal to "stop emailing me" is a compliance incident, so the fix is structural: opt-out detection runs first, and nothing downstream can override it.

```
lead's angry 'stop emailing me' got classified as 'objection to handle' and the agent sent a rebuttal - legal got involved
```

## Steps

1. Pull the exact message and the classifier trace. Confirm the label was "objection" and that a rebuttal template was sent. Save this as the regression test case.
   Expected: the failure is reproducible from a stored example.

2. Extend the opt-out pattern list with angry and blunt variants: stop emailing me, leave me alone, do not ever contact me again, remove me now, this is harassment, take me off your list immediately. Anger does not make it an objection.
   Expected: the new patterns catch the incident message and its variants.

3. Enforce ordering: the opt-out check runs before objection classification, and an opt-out hit short-circuits the pipeline. No downstream stage, human template, or "handle objection" skill may re-label it.
   Expected: classification order makes the rebuttal path unreachable for opt-outs.

4. Set the response policy for opt-outs to silence: suppress the address, cancel scheduled sends, log the event. Do not send a confirmation, an apology, or a rebuttal. The only acceptable outbound is nothing.
   Expected: the lead hears nothing more, which is what they asked for.

5. Audit history: run the extended patterns over past replies that were labeled "objection" or "negative". Any opt-out that got a rebuttal goes to legal review, and the addresses get suppressed immediately.
   Expected: past incidents are surfaced and contained, not just future ones prevented.

## Use this when

- An opt-out was answered with a rebuttal or any reply at all
- Objection handling has no hard opt-out pre-check
- You need to audit past "objection" labels for missed opt-outs

## Not for this skill when

- The reply is a genuine objection ("too expensive", "we use a competitor") with no opt-out language
- The message is a spam complaint to the provider (that is a deliverability incident, different runbook)
- The lead opted out on one channel only (channel suppression rules apply)
- The classifier never saw the message at all (fix the ingestion path first)

## Variant phrasings

- "'stop emailing me' classified as objection, agent sent rebuttal"
- "angry unsubscribe got a sales rebuttal"
- "opt-out treated as objection to handle"

## Why it happens

Objection-handling prompts are trained to reframe resistance: "too expensive" becomes a pricing conversation. Without a hard opt-out gate, angry unsubscribe language looks like strong resistance to a model tuned for persistence, so it fires the rebuttal template. The classifier optimized for "never give up" in a category where giving up is legally required.

## Edge cases

- Profanity-laced opt-outs still count. Do not let a profanity filter discard the message before the opt-out check runs.
- "Stop emailing me but call me" is a channel opt-out, not a global one. Suppress email, keep the phone path only if consent for calls exists.
- Opt-outs in a foreign language need localized patterns; the angry variants differ by language.
- If legal is already involved, loop them into the audit step before suppressing anything, so the evidence trail stays intact.

## Provenance

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