Skip to content

Every claude-code run ends in error_max_turns, and partial stops the fallback chain before the third tier #65

Description

@rssrn

Summary

Every claude-code run ever recorded has ended partial with error_max_turns. Four for
four. Because partial counts as a result rather than a failure, it terminates the
fallback chain
— the third tier is never reached — and the run posts a comment that says
only that the agent failed.

Combined with #64 (codex has not authenticated since July), this means the proactive lane
has produced nothing usable since early July, at roughly $1 per attempt.

Evidence

agent model outcome failure_reason n last
claude-code claude-opus-4-8 partial error_max_turns 4 2026-08-28T06:25:05Z

There is no success row for claude-code at any point.

The 2026-08-28 run (b5a7c4eb, issue #63):

06:25:15  invoking agent claude-code (slug=claude-code:claude-opus-4-8)
06:26:56  WARNING claude error subtype: error_max_turns
06:27:00  labelled issue #63: +ai-failed +ai-contributed
06:27:00  run complete: outcome=partial dur=116s turns=16 cost=$1.0714 tokens=471,909

turns_used=16 against max_turns=15, actions_taken=[], wip_branch_url empty. 101
seconds of agent time, $1.07 and 472k tokens spent to produce the comment "investigated
this suggestion but reported failure. Reason: error_max_turns"
.

Two distinct defects

1. max_turns = 15 is too low for the proactive persona

[defaults] max_turns = 15 in labro.toml, with no override on any
proactive-improvement task source. A perspective audit asks the agent to explore an
unfamiliar repo, form a thesis, and then act on it. Fifteen turns is plausible for a
labelled-issue task with a known target; it is not enough to read a codebase from cold.
The 100% failure rate across four runs and two repos suggests this is systematic, not bad
luck.

Worth deciding whether the fix is a higher max_turns on the proactive sources
specifically, or a tighter prompt that narrows what the agent has to read before it can act.

2. partial terminates the fallback chain

The proactive model list is:

model = ["codex", "claude-code:claude-opus-4-8", "opencode:opencode/deepseek-v4-flash-free"]

Tier 3 has never run. Codex 401s (a hard failure, so the chain advances); claude-code
returns partial (a result, so the chain stops). The cheap free-tier fallback that exists
precisely for this case is unreachable in practice.

Whether error_max_turns should advance the chain is a genuine design question — a
partial result carries real work and re-running from scratch discards it. But the current
behaviour means a permanently-degraded tier-2 agent silently consumes every proactive run
and the configured safety net never engages. At minimum error_max_turns with
actions_taken=[] is indistinguishable from a failure and should be treated as one.

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions