The scary failure
Agent pays → network lags → agent thinks it failed → pays again → two transfers, one product.
Rule
**txHash is the redeem key.** Retry unlock with the same hash. Do not broadcast a new transfer unless the first is known failed/dropped.
Attempt ledger (minimal fields)
When a new payment is allowed
Only if:
Takeaway
Idempotency is product safety for agent wallets.