Pick a fault. Watch the same execute_tool wrapper classify it, retry it or not, and feed back the outcome.
"Feed back" means the failure becomes an Observation the controller reads and reasons about, not a crash. The loop survives a bad tool call the way it survives a good one.
A refund posts, then its acknowledgement times out. The wrapper retries. Without a guard, that retry refunds the customer twice.