Skip to content

fix(agy): declare failure_markers for the print-timeout watchdog - #109

Merged
fnnzzz merged 2 commits into
mainfrom
fix/agy-print-timeout-false-success
Sep 10, 2026
Merged

fnnzzz merged 2 commits into
mainfrom
fix/agy-print-timeout-false-success

Conversation

@fnnzzz

@fnnzzz fnnzzz commented Sep 10, 2026

Copy link
Copy Markdown
Member

Summary

  • agy's own --print-timeout watchdog exits 0 and writes ... with turn in progress; returning partial output to stderr when it fires mid-turn, regardless of whether anything was accomplished.
  • Reproduced live against the real agy 1.2.0 binary. In production, agy-claude-opus-4-6-thinking and agy-gpt-oss-120b-medium each logged outcome:"success" after running ~486s (within seconds of the registry's --print-timeout 8m) with no file changed — the model had streamed some visible prose before the cutoff, and that non-blank stdout was enough for the existing empty-run guard to wave the run through.
  • The failure_markers mechanism already exists for exactly this class (see kiro's "Monthly request limit reached"); the agy family's six registry entries never declared one. This adds failure_markers: ["with turn in progress; returning partial output"] to all twelve agy-* edit_exists/read_only transports.
  • hasSubstantiveOutput still wins when real files changed before the cutoff, so a genuine partial edit is untouched — only an empty, cut-off turn is re-scored as a failure.
  • No lib/dispatch.js changes — this is a registry-data-only fix using an existing, deliberate mechanism.

Test plan

  • Added unit tests on declaredMarkerExitCode (marker + no files → failure; marker + real files → untouched)
  • Added end-to-end runDispatch tests via a fake CLI reproducing agy's exact stderr line + partial stdout prose (with marker declared → failure; without → documents the pre-fix false success)
  • node --test lib/*.test.js: 506 pass, 1 pre-existing skip, 0 fail
  • agents.yaml re-parses cleanly (35 entries)
  • Consensus gate: 3/4 reviewers responded (groq-gpt-oss-120b, qwencloud-qwen-flash-character, qwencloud-qwen-plus-character), all APPROVE, no critical issues raised

🤖 Generated with Claude Code

fnnzzz and others added 2 commits September 10, 2026 10:21
agy's own `--print-timeout` fires mid-turn, writes "... with turn in
progress; returning partial output" to stderr, and exits 0 regardless
of whether anything was accomplished. When the model had streamed some
visible prose before the cutoff, that non-blank stdout was enough for
the existing empty-run guard to wave the run through: dispatch-log
shows agy-claude-opus-4-6-thinking and agy-gpt-oss-120b-medium each
logged outcome:"success" after running ~486s (within seconds of the
registry's --print-timeout 8m) with no file changed.

Confirmed live against the real agy 1.2.0 binary. The failure_markers
mechanism already exists for exactly this class (see kiro's "Monthly
request limit reached"); the agy family just never declared one. All
twelve agy-* edit_exists/read_only entries now do. hasSubstantiveOutput
still wins when a real edit landed before the cutoff, so genuine
partial completions are unaffected.

Consensus: 3/4 reviewers responded (groq-gpt-oss-120b,
qwencloud-qwen-flash-character, qwencloud-qwen-plus-character), all
APPROVE, no critical issues — only optional doc suggestions, one of
which (a explanatory comment) is included here.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@fnnzzz
fnnzzz merged commit 42fb4e8 into main Sep 10, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant