Skip to content

fix(eval): raise triage max_turns budget from 30 to 35 - #967

Closed
waynesun09 wants to merge 1 commit into
mainfrom
fix/triage-eval-max-turns
Closed

fix(eval): raise triage max_turns budget from 30 to 35#967
waynesun09 wants to merge 1 commit into
mainfrom
fix/triage-eval-max-turns

Conversation

@waynesun09

Copy link
Copy Markdown
Member

Summary

Merge-queue functional tests for #965 flaked twice on functional-tests (triage), each time a different eval case exceeding max_turns: 30:

  • attempt 2: case 006 hit 31 turns
  • attempt 3: case 003 hit turn cap

Observed turn counts across 4 runs on the current sandbox image: 17–31, median ~24 — the budget sits inside normal variance for these cases rather than signaling a real regression. Raising the ceiling is safer than retrying #965 blind (roughly a coin flip each attempt).

Changes

Bump max_turns: 3035 in all 8 eval/triage/cases/*/annotations.yaml files, uniformly, since it's a different case each time that tips over.

Testing

  • Diff is a single-line value change per file, no other content touched

Post-script verification

  • Branch is not main/master (fix/triage-eval-max-turns)

Merge-queue functional tests for #965 flaked twice on
different triage eval cases exceeding max_turns: 30 (observed 17-31
turns across runs on the current sandbox image, median ~24). The
budget sits inside normal variance rather than signaling a real
regression, so raise the ceiling instead of retrying blind.

Signed-off-by: Wayne Sun <gsun@redhat.com>
@waynesun09
waynesun09 requested a review from a team as a code owner August 23, 2026 15:03
@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

fix(eval): raise triage eval max_turns from 30 to 35

🐞 Bug fix ⚙️ Configuration changes 🕐 Less than 5 minutes

Grey Divider

AI Description

• Raise triage eval turn budget to reduce flaky functional-test failures.
• Apply the same max_turns increase across all triage cases for consistency.
• Keep cost ceilings unchanged while allowing normal variance in conversation length.
Diagram

graph TD
  A["CI: functional-tests (triage)"] --> B["Triage eval runner"] --> C["Case annotations (8x YAML)"] --> D["Turn budget: max_turns=35"] --> E["Agent + judge run"]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Increase max_turns only for observed flaky cases
  • ➕ Keeps stricter budgets on most cases
  • ➕ Limits extra runtime to known outliers
  • ➖ Flake moved across cases in prior runs; may not actually fix the suite
  • ➖ Requires repeated whack-a-mole adjustments as variance shifts
2. Make the eval more deterministic (e.g., fixed seed/temperature/model pin)
  • ➕ Attacks the root cause of turn-count variance
  • ➕ Improves reproducibility of failures beyond just this threshold
  • ➖ May not be feasible depending on provider/agent behavior
  • ➖ Larger change surface and potentially impacts eval realism
3. Add a small retry/auto-rerun policy for turn-cap failures
  • ➕ Avoids loosening budgets while mitigating sporadic spikes
  • ➕ Can localize retries to only the failing cases
  • ➖ Masks genuine regressions unless paired with reporting
  • ➖ Adds complexity and increases CI time unpredictably

Recommendation: Given the observed run-to-run variance and that different cases exceeded 30 turns, a uniform bump to 35 across all triage cases is a pragmatic, low-risk stabilization. If flakes continue, the next step should be improving determinism (model/prompt/runtime controls) rather than repeatedly raising the cap.

Files changed (8) +8 / -8

Other (8) +8 / -8
annotations.yamlBump max_turns cap to 35 +1/-1

Bump max_turns cap to 35

• Increase the per-case triage eval turn limit from 30 to 35 to prevent spurious failures from normal turn-count variance. Other limits (e.g., max_cost_usd) remain unchanged.

eval/triage/cases/001-bug-url-encoding/annotations.yaml

annotations.yamlBump max_turns cap to 35 +1/-1

Bump max_turns cap to 35

• Increase the per-case triage eval turn limit from 30 to 35 to reduce flakiness when the conversation runs slightly longer than expected. No other annotations are modified.

eval/triage/cases/002-needs-info-vague-crash/annotations.yaml

annotations.yamlBump max_turns cap to 35 +1/-1

Bump max_turns cap to 35

• Raise max_turns from 30 to 35 for this triage eval case to avoid failures at the previous cap. Cost budget and expectations text are unchanged.

eval/triage/cases/003-feature-request/annotations.yaml

annotations.yamlBump max_turns cap to 35 +1/-1

Bump max_turns cap to 35

• Raise the max_turns threshold from 30 to 35 so the eval can complete under typical variance without tripping the turn cap. All other settings are preserved.

eval/triage/cases/004-duplicate-issue/annotations.yaml

annotations.yamlBump max_turns cap to 35 +1/-1

Bump max_turns cap to 35

• Increase max_turns from 30 to 35 to provide more headroom for longer triage dialogs. No other annotation fields are adjusted.

eval/triage/cases/005-not-planned-out-of-scope/annotations.yaml

annotations.yamlBump max_turns cap to 35 +1/-1

Bump max_turns cap to 35

• Increase the turn budget from 30 to 35 to prevent this case from failing when it marginally exceeds the prior cap. All other parameters remain the same.

eval/triage/cases/006-not-planned-guardrail/annotations.yaml

annotations.yamlBump max_turns cap to 35 +1/-1

Bump max_turns cap to 35

• Increase max_turns from 30 to 35 to stabilize triage functional tests in the presence of minor dialogue-length variance. No other content changes.

eval/triage/cases/007-self-evident-bug-redundancy/annotations.yaml

annotations.yamlBump max_turns cap to 35 +1/-1

Bump max_turns cap to 35

• Raise the max_turns limit from 30 to 35 to reduce test flakiness due to occasional longer runs. The cost cap and expectations remain unchanged.

eval/triage/cases/008-split-bundled-issues/annotations.yaml

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 23, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 3:05 PM UTC · Completed 3:14 PM UTC

Commit: c99efc4 · View workflow run →

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (0) 📜 Skill insights (0)

Grey Divider


Informational

1. Weaker turn-regression gate 🐞 Bug ⚙ Maintainability
Description
Raising max_turns to 35 makes the triage eval stop failing runs that take 31–35 turns, so a
turn-count regression in that band will no longer be caught by the max_turns judge. Only other
constraints (e.g., max_cost_usd or harness timeouts) will catch those regressions.
Code

eval/triage/cases/001-bug-url-encoding/annotations.yaml[9]

+max_turns: 35
Relevance

●● Moderate

No close rejection precedent; accepted eval changes support reliability fixes, but this
gate-weakening concern is subjective and context-dependent.

PR-#381
PR-#177

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The triage eval’s max_turns judge reads the limit from annotations.yaml and fails only when
num_turns > limit; increasing the per-case max_turns value therefore directly relaxes that gate.

eval/triage/eval.yaml[137-153]
eval/triage/cases/001-bug-url-encoding/annotations.yaml[4-11]


Grey Divider

Context sources
✅ Compliance rules (platform): 56 rules
✅ Skills: 4 invoked
  code-review
  code-implementation
  pr-review
  docs-review

Grey Divider

Tip of the day
💡 Did you know, you can turn these tips off under Display preferences

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

- bug

max_turns: 30
max_turns: 35

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Informational

1. Weaker turn-regression gate 🐞 Bug ⚙ Maintainability

Raising max_turns to 35 makes the triage eval stop failing runs that take 31–35 turns, so a
turn-count regression in that band will no longer be caught by the max_turns judge. Only other
constraints (e.g., max_cost_usd or harness timeouts) will catch those regressions.

@waynesun09

Copy link
Copy Markdown
Member Author

Folding this into #965 directly instead — can't self-approve a separate PR, and #965 already has the human + bot approval it needs.

@waynesun09 waynesun09 closed this Aug 23, 2026
@waynesun09
waynesun09 deleted the fix/triage-eval-max-turns branch August 23, 2026 15:08
@fullsend-ai-retro

fullsend-ai-retro Bot commented Aug 23, 2026

Copy link
Copy Markdown

🤖 Finished Retro · ✅ Success · Started 3:10 PM UTC · Completed 3:20 PM UTC

Commit: c99efc4 · View workflow run →

@fullsend-ai-review

Copy link
Copy Markdown

Review skipped — this PR is already closed.

The /fs-review command only reviews open PRs/MRs.

Posted by fullsend post-review check

@fullsend-ai-retro

Copy link
Copy Markdown

Retro: PR #967 — raise triage eval max_turns from 30 to 35

Timeline: PR #967 was opened at 15:03 UTC on 2026-08-23 by waynesun09 as a standalone fix for flaky merge-queue functional tests observed during PR #965's merge-queue runs. Two triage eval cases (003 and 006) exceeded max_turns: 30 — one hit 31 turns. The author analyzed 4 runs showing turn counts ranging from 17–31 (median ~24) and determined this was normal variance, not a regression. The PR uniformly raised max_turns to 35 across all 8 triage eval case annotation files. Five minutes later (15:08 UTC), the author closed the PR and folded the commit directly into PR #965, noting they couldn't self-approve a separate PR and #965 already had the needed approvals.

Review agent: Dispatched at 15:03 on the opened event (run 32647344178), agent resolved from fullsend-ai/agents@main. The review agent was still running when the PR was closed at 15:08, so its work was wasted. The qodo-code-review bot provided a reasonable low-severity finding noting that raising max_turns weakens the regression gate for turns 31–35.

Root cause: The triage agent's turn counts are inherently non-deterministic — the eval framework uses claude-opus-4-6 with no temperature override, and the max_turns judge does a simple numeric comparison (actual > limit → fail). With a median of ~24 turns and observed max of 31, a static limit of 30 sits within the natural variance tail, causing intermittent failures.

One proposal filed about making the eval turn-count threshold more resilient to LLM non-determinism. Existing issue #515 (model specifier standardization) is adjacent but addresses model ID format consistency rather than turn-count variance handling.

Proposals filed

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