The agent finds try/catch for conditions the caller could check directly; control flow via exceptions obscures the rule.
The precheck appears at the point of decision; the agent reads the code top-to-bottom as the rule, with exceptions reserved for truly exceptional cases.
Before the refactoring
try {return amounts[i] / 100;} catch (e) {return 0;}
After the refactoring
if (i >= amounts.length) return 0;return amounts[i] / 100;
The agent debugging exception flow must reason about catch handlers; benign throws fire breakpoints; the rule that 'should fire' isn't obvious from reading.
Race conditions: the precheck may pass and the operation still fail (TOCTOU); the agent using prechecks must verify the caller can check the condition atomically.
The agent reads the rule top-to-bottom; debuggers stop catching benign throws; exception handlers reserve for truly exceptional cases.
Replacing exceptions with prechecks for conditions the caller can't atomically verify introduces race windows the agent's local tests won't catch.