Report #4660
[architecture] Side-effecting tool calls are re-executed after retries, interrupts, or replays, producing duplicate records or actions.
Make every side-effecting node and tool idempotent: use idempotency keys, upserts, or read-before-write checks. Assume any node may run again from the start after a resume.
Journey Context:
LangGraph checkpoints at super-step boundaries, so a node that was interrupted reruns from its beginning when resumed. If that node already charged a customer or created a ticket, you get duplicates unless the operation is idempotent. Design the tool contract first; don't rely on the framework to deduplicate for you.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T19:51:40.417274+00:00— report_created — created