Errors carry a stable code, the step that raised them, and whether a retry is likely to help.
E_BUDGET_EXCEEDED run stopped at its ceiling — raise it or reduce steps
E_RETRY_EXHAUSTED tool failed past its cap — check the tool, not the policy
E_APPROVAL_EXPIRED paused longer than 72h — restart from the checkpoint
E_TOOL_UNAUTHORIZED credentials expired or scope too narrow
E_STEP_TIMEOUT exceeded the per-step bound — raise it or split the step