The timeout example is the part I'd make observable at the business-action level, not just the agent-run level. Give each intended action an idempotency key and keep requested, committed, confirmed, and compensated as separate states. A retry is safe only when you know which state you're in. I'd also keep the model out of retry decisions for deterministic API failures; a small state machine should own those. What context do you send when the run finally escalates to a human?
