The agent retried the whole task after one failed tool call and duplicated the side effects
The agent wrapped the whole order job in a retry loop; on a payment timeout it restarted from the top, charged again, and sent a second receipt. Replaying finished steps turns a timeout into duplicate side effects. Retry the failed step, not the task, and make the call idempotent.