# CMP-061 — Each declared method needs its own complete workflow paragraph

> Every declared opt-in method must carry its own description satisfying that method's own rule set.

- **Rule ID:** CMP-061
- **Layer:** Campaign (`CAMPAIGN`)
- **Checks:** `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:** TCR, Twilio
- **Applies:** Applies to every 10DLC registration.
- **Canonical URL:** https://ekas.io/rules/10dlc/campaign/cmp-061/

## Why this rule exists

A compliant web form does not make a verbal opt-in compliant — the two have different required elements, different evidence, and different failure modes. One combined paragraph covering "various channels" satisfies neither rule set and is graded against both.

## How to fix it

Give each method its own paragraph carrying that method's required elements: the web form needs the checkbox and disclosure, the verbal path needs the script elements, the keyword path needs the advertised CTA and confirmation. Done when each paragraph would pass on its own if the others were deleted.

## Example of a compliant value

```text
Web: customers tick an unchecked box at acmecoffee.com/checkout reading "…". Verbal: agents read the attached script capturing an explicit yes. Keyword: in-store signage reads "Text JOIN to 55512. Msg frequency varies…".
```

## Notes

The per-method formulation is marked [INFERRED] in the research — derived from the TCR "you must list them all" instruction plus Twilio 30909 rejection causes, not published as a rule in those words. Cite the underlying obligation, not this phrasing, when a user pushes back. Applies only when more than one method is declared; the applicability model cannot express "more than one", so the judgement carries that condition instead.
