{
  "id": "CMP-003",
  "slug": "cmp-003",
  "title": "Message flow must not begin or end with whitespace",
  "statement": "The opt-in / message-flow field must carry no leading or trailing whitespace.",
  "rationale": "A newline pasted in front of the text, or a run of spaces left after it, is invisible in the textarea it was typed into — and the validator rejects the field rather than trimming it, naming a field the submitter can see nothing wrong with. It is almost always an artifact of copying the flow out of a document, so the author has no memory of doing anything that would explain the error.",
  "layer": "CAMPAIGN",
  "layerSlug": "campaign",
  "object": "campaign.message_flow",
  "severity": "BLOCKING",
  "detectability": [
    "DETERMINISTIC"
  ],
  "failureClass": "RETRY_FIELD",
  "authorities": [
    "AWS"
  ],
  "applicabilityText": "Applies to every 10DLC registration.",
  "universal": true,
  "remediation": "Strip the blank first line and any trailing spaces or newline before submitting. Done when the value starts on the first character of the first word and stops on the final full stop — paste it into a plain-text editor if you cannot see the difference.",
  "example": "message_flow begins at \"Customers opt in at https://acmecoffee.com/checkout…\" and ends at \"…Screenshot: https://cdn.acmecoffee.com/compliance/optin.png\" — nothing before the C, nothing after the g.",
  "notes": "Catalog CMP-003 records this as AWS form validation only. Kept universal rather than provider-tagged because trimming a field costs nothing anywhere else, and the strict-superset model prefers a free precaution to a provider-conditional rule that silently stops firing when the submission target is unknown.",
  "phase": "approval",
  "automated": true,
  "url": "https://ekas.io/rules/10dlc/campaign/cmp-003/",
  "markdown": "https://ekas.io/rules/10dlc/campaign/cmp-003.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
