{
  "schema": "vedokrok.public-item.v1",
  "release_id": "MHC-RPUB-20260920-75ad787a",
  "url": "/knowledge/treat-a-timeout-as-an-unknown-outcome",
  "id": "MHC-D-RESEARCH-0349",
  "version": "0.1.0",
  "title": "Treat a timeout as an unknown outcome",
  "summary": "No response is not the same thing as no effect.",
  "kind": "principle",
  "body": "After a timeout, keep both possibilities alive: the server may have applied the change and lost the response, or it may not have applied it. Use the service's request identity, status endpoint, reconciliation data or another authoritative check before deciding to issue a new logical mutation. This avoids duplicate actions and false recovery.",
  "limits": [
    "Some services cannot reveal a definitive state immediately; preserve the uncertainty instead of inventing certainty."
  ],
  "topics": [
    "union-safe-change-operations"
  ],
  "intents": [],
  "source_ids": [
    "RS-56B6FA675EBAA1EF"
  ],
  "evidence": [
    {
      "claim": "Amazon's idempotency guidance treats a timed-out mutating request as potentially having completed, which is why a retry needs stable request identity rather than a new logical operation.",
      "source_id": "RS-56B6FA675EBAA1EF",
      "role": "supports",
      "note": "The exact state must be checked using the specific service's contract; timeout does not mean either success or failure by itself.",
      "locator": "Retry scenarios where the response is lost"
    }
  ],
  "use_when": [
    "A mutating remote request times out after it was sent."
  ],
  "avoid_when": [
    "Some services cannot reveal a definitive state immediately; preserve the uncertainty instead of inventing certainty."
  ],
  "example": "A payment call times out; query or safely retry the same idempotent operation instead of creating a second payment.",
  "check": "The recovery procedure does not equate communication failure with application failure.",
  "sources": [
    {
      "id": "RS-56B6FA675EBAA1EF",
      "title": "Making retries safe with idempotent APIs",
      "url": "https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/"
    }
  ],
  "relations": [],
  "collections": [
    {
      "id": "RC-4F77BDBBF2481574",
      "title": "Change live systems without turning one mistake into a large one",
      "url": "/collections/change-live-systems-without-turning-one-mistake-into-a-large-one"
    }
  ]
}
