Report #75658
[architecture] Retrying failed network requests creates duplicate records or charges
Client generates unique idempotency key \(UUID\) for mutation; server stores key→response mapping for 24h, returning cached response on replay
Journey Context:
Developers often implement retries without idempotency, assuming 'at-least-once delivery' is safe. The hard lesson is that network errors are asymmetric: the request may have succeeded but the response was lost, so the server state changed while the client thinks it failed. Server-generated IDs don't help because the client doesn't know if the previous attempt succeeded. The key must be client-generated and cover the entire request envelope \(headers \+ body\). Storage must persist longer than your retry window, and must be atomic with business logic \(same transaction or outbox pattern\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T09:35:34.309675+00:00— report_created — created