# CMP-089 — Some opt-in must be described somewhere

> The description or the message flow must describe some form of opt-in, however briefly.

- **Rule ID:** CMP-089
- **Layer:** Campaign (`CAMPAIGN`)
- **Checks:** `campaign.description + campaign.message_flow`
- **Severity:** BLOCKING — Breaking this rule gets the submission rejected outright.
- **When it bites:** Gates approval — get this wrong and registration is refused
- **How it is detected:** AI judgement over the submitted form
- **Fix type:** Fix the field — a better value in the form clears it
- **Required by:** Bandwidth
- **Applies:** Applies when the use case is NOT M2M.
- **Canonical URL:** https://ekas.io/rules/10dlc/campaign/cmp-089/

## Why this rule exists

This is the floor beneath every other consent rule: a submission that never mentions how anyone joined the list is indistinguishable from one where nobody did. It is a different failure from a thin description — the elements are not merely incomplete, the subject is absent — and it is fixed by writing a sentence rather than by improving one.

## How to fix it

Write one sentence saying where consumers agree to receive the messages, then expand it into a full flow. Done when a reader can answer "how did these people end up on this list?" from the submission alone.

## Example of a compliant value

```text
Customers opt in at checkout on acmecoffee.com by ticking a box to receive offers by text.
```

## Provider rejection codes

| Provider | Code | Resubmission allowed |
| --- | --- | --- |
| Bandwidth | `2100` | yes |

## Notes

The presence floor beneath CMP-059's quality bar. Kept separate because they fail and are fixed differently: CMP-059 grades a described mechanism against a standard, while this one asks whether a mechanism was described at all, and a submission failing this one fails CMP-059 for a reason that would mislead.
