{
  "id": "OPS-149",
  "slug": "ops-149",
  "title": "Live content has to keep matching the registration",
  "statement": "Traffic must continue to match the registered use case and the registered samples, not merely have matched them at approval.",
  "rationale": "The samples are a promise about the programme, and programmes drift: a transactional campaign starts carrying a seasonal offer, an account-notification campaign adds a survey. Nobody re-reads the registration when writing a new template, so the drift is gradual and nothing flags it until the traffic no longer resembles what was approved.",
  "layer": "OPERATIONAL",
  "layerSlug": "operational",
  "object": "live traffic against the registered use case and samples",
  "severity": "BLOCKING",
  "detectability": [
    "UNDETECTABLE_PRE_SUBMISSION"
  ],
  "failureClass": "TERMINAL_EXTERNAL",
  "authorities": [
    "TCR",
    "T-Mobile",
    "Twilio",
    "Telnyx",
    "Vonage"
  ],
  "applicabilityText": "Applies to every 10DLC registration.",
  "universal": true,
  "remediation": "Review live templates against the registered samples on a schedule, and register a new campaign — or change the use case — before sending a category the registration does not describe. Done when every template in production would be recognised by somebody reading the registration.",
  "notes": "Absorbs MSG-279, the same duty from the message-content side. Requires the live templates. What the user has to own is the review: the approval-side rules — MSG-141 and OPS-USECASE-SCOPE — check what was submitted, and neither of them sees what was added afterwards.",
  "catalogIds": [
    "MSG-279"
  ],
  "phase": "post",
  "automated": false,
  "attestation": {
    "question": "Would somebody reading your registration recognise every template now in production?",
    "howToCheck": [
      "Put the live templates next to the registered samples and read them together, on a schedule.",
      "Register a new campaign — or change the use case — before sending a category the registration does not describe.",
      "Nobody re-reads the registration when writing a new template, so the drift is gradual and nothing flags it."
    ],
    "failureLooksLike": "A transactional campaign starts carrying a seasonal offer; an account-notification campaign adds a survey. The samples were a promise about the programme, and the traffic no longer resembles what was approved."
  },
  "url": "https://ekas.io/rules/10dlc/operational/ops-149/",
  "markdown": "https://ekas.io/rules/10dlc/operational/ops-149.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
