{
  "id": "OPS-131",
  "slug": "ops-131",
  "title": "A validity period shorter than the queue drops messages silently",
  "statement": "The message validity period must be long enough for the message to survive queueing at the sender's actual throughput.",
  "rationale": "Validity period is a per-message expiry, so a large send at a modest throughput will have messages expire in the queue before they are ever attempted — and they are discarded rather than failed, so the delivery report shows nothing wrong. The default is short relative to the time a hundred-thousand-message send takes at fifteen a second.",
  "layer": "OPERATIONAL",
  "layerSlug": "operational",
  "object": "message validity period against queue depth",
  "severity": "LOW",
  "detectability": [
    "EXTERNAL_DATA"
  ],
  "failureClass": "TERMINAL_EXTERNAL",
  "authorities": [
    "Twilio"
  ],
  "applicabilityText": "Applies to every 10DLC registration.",
  "universal": true,
  "remediation": "Divide the send size by the granted throughput to get the drain time, and set the validity period comfortably above it. Done when the last message in a large send is still valid when its turn arrives.",
  "example": "200,000 messages at 60/second ≈ 56 minutes to drain → validity period 4 hours, not the 15-minute default.",
  "notes": "A per-message parameter in the sending API. What the user has to check is the arithmetic for their largest send — the default is fine for small ones, which is why the problem only appears at scale.",
  "phase": "post",
  "automated": false,
  "attestation": {
    "question": "At your granted throughput, will the last message of your largest send still be valid when its turn arrives?",
    "howToCheck": [
      "Do the arithmetic: send size divided by granted throughput is the drain time.",
      "Set the validity period comfortably above it. The default is fine for small sends, which is why this only appears at scale."
    ],
    "failureLooksLike": "Messages expire in the queue before they are attempted and are discarded rather than failed, so the delivery report shows nothing wrong at all."
  },
  "url": "https://ekas.io/rules/10dlc/operational/ops-131/",
  "markdown": "https://ekas.io/rules/10dlc/operational/ops-131.md",
  "registry": "https://ekas.io/rules/10dlc/",
  "updated": "2026-07-25",
  "licence": "CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/"
}
