# OPS-029 — A revocation must survive punctuation, case and surrounding words

> Opt-out keywords must be matched case-insensitively, tolerantly of punctuation, and when the keyword is surrounded by other text in the same message.

- **Rule ID:** OPS-029
- **Layer:** Operational (`OPERATIONAL`)
- **Checks:** `inbound message normalisation`
- **Severity:** BLOCKING — Breaking this rule gets the submission rejected outright.
- **When it bites:** Falls due after approval, once you are live and sending
- **How it is detected:** Not knowable before submission — reported with its deadline
- **Fix type:** Wait on an external system or a required interval
- **Required by:** FCC, CTIA, T-Mobile, Aerialink
- **Applies:** Applies to every 10DLC registration.
- **Canonical URL:** https://ekas.io/rules/10dlc/operational/ops-029/

## Why this rule exists

Consumers do not send bare keywords. They send "Stop.", "STOP!!", "stop texting me" and "you have the wrong number, stop" — and an exact-match handler treats every one of those as an ordinary reply, so the messages keep arriving from someone who plainly asked them not to. The FCC treats de minimis variance as a revocation regardless of what the handler did, which means the gap between the two is not a bug in the product, it is a violation already in progress.

## How to fix it

Normalise the inbound body before matching: upper-case it, strip punctuation and whitespace, then look for any declared keyword as a whole word anywhere in the message rather than as the entire message. Done when "Stop.", "please STOP" and "wrong number, stop" all suppress the number in a test send.

## Example of a compliant value

```text
Inbound "Please stop texting me!" → normalised "PLEASE STOP TEXTING ME" → matches STOP → suppressed.
```

## Common mistakes

- Matching a keyword as a substring rather than as a whole word turns "stopwatch giveaway" into an opt-out; match on word boundaries.

## Check this yourself

**Do "Stop.", "STOP!!", "please STOP" and "wrong number, stop" each suppress your own number in a live test?**

1. Send all four variants to your own programme after launch, from a real handset.
2. Confirm each one lands in the suppression list — not just the bare keyword.
3. Check the matcher uses word boundaries, so "stopwatch giveaway" is not read as an opt-out.

*What wrong looks like:* An exact-match handler files every one of those as an ordinary reply and the messages keep arriving. The FCC treats de minimis variance as a revocation regardless, so the gap is a violation already in progress.

## Notes

Nothing at registration time can settle this — the handler is code on the sending platform. What the user has to do is test it: send those four variants to their own number after launch and confirm each one lands in the suppression list. OPS-026 and OPS-027 check the declared keyword set, which is a different question from how the set is matched.
