156e9fe176
Replace the overloaded "text + no tool call = done" terminator that made the weak CPU model stall mid-task or give up after a failing command. Termination is now a structural `DONE:` text sentinel; a text-only turn is resolved by an output-aware verdict (DONE: marker / unresolved non-zero exit / no action / filler language) and re-prompted with an exit-code-aware nudge, bounded by MAX_NUDGES on top of max_turns. On exhaustion the summary is honest rather than echoing the model's false "run successfully" — it reports when no tool ran or a command exited non-zero. Live-validated on qwen2.5:3b: the multi-step stall is fixed (proj3 completes end-to-end, ground-truth confirmed); the nudge fires on a 126; residual give-up is model-bound. 23 offline unit assertions pass. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>