{
  "id": "CMP-061",
  "slug": "cmp-061",
  "title": "Each declared method needs its own complete workflow paragraph",
  "statement": "Every declared opt-in method must carry its own description satisfying that method's own rule set.",
  "rationale": "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.",
  "layer": "CAMPAIGN",
  "layerSlug": "campaign",
  "object": "campaign.message_flow",
  "severity": "BLOCKING",
  "detectability": [
    "AI_FORM"
  ],
  "failureClass": "RETRY_FIELD",
  "authorities": [
    "TCR",
    "Twilio"
  ],
  "applicabilityText": "Applies to every 10DLC registration.",
  "universal": true,
  "remediation": "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": "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.",
  "catalogIds": [
    "CON-005"
  ],
  "phase": "approval",
  "automated": true,
  "url": "https://ekas.io/rules/10dlc/campaign/cmp-061/",
  "markdown": "https://ekas.io/rules/10dlc/campaign/cmp-061.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
