Report #70539
[gotcha] Retrying failed AI actions duplicates side effects like file writes and API calls
Attach idempotency keys to every AI-initiated action that has side effects. Before executing, check whether an action with that key already completed successfully. For multi-step AI agent workflows, checkpoint progress after each successful step so retries resume from the last checkpoint rather than restarting from scratch.
Journey Context:
When an AI call fails mid-execution \(timeout, rate limit, partial failure\), the natural UX is to offer a retry button. But if the AI has already performed side effects — written a file, sent a notification, created a database record — retrying the full conversation re-executes those actions silently. This is the classic distributed systems idempotency problem, but it bites especially hard in AI agents because the conversation-based mental model makes developers think of retries as 're-asking the question' rather than 're-executing a distributed transaction.' The naive approach — just re-run the prompt — silently duplicates work. Stripe's idempotency key pattern is the canonical solution: generate a unique key per user-intended action, store it with the side effect, and check before re-executing. For multi-step agent workflows, checkpointing is essential so retries are resumable, not restartable. The gotcha: your retry UX looks correct in testing because you test with fresh state, but in production with real side effects, retries create phantom duplicates.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T00:59:07.763578+00:00— report_created — created