Claude Opus 4.8 lost 15 Terminal-Bench tasks to XYEval's bad advice and won back 10: its drop is inside the noise
We rebuilt per-task flip counts for XYEval's 20 pass-or-fail cells from two of its own tables. Every cell gains tasks under misleading advice as well as losing them, and the two drops no test resolves are the ones that make Opus look hardest to mislead.
Under XYEval's misleading suggestions, Claude Opus 4.8 lost 15 Terminal-Bench tasks it had solved and solved 10 it had failed. That nets to the 6.2-point drop in the paper's Table 1, and a paired McNemar test on 15 against 10 gives p = 0.42. We reconstructed those flip counts for every binary-scored cell of XYEval (arXiv:2609.23939, posted 20 September 2026) from its Table 1 and its solved-only Table 16. Every one of the 20 cells shows gains under bad advice as well as losses, which is what one run at temperature 1.0 looks like, and the paper has no rerun of the unmodified tasks to say how much of the churn is the advice.
Two papers in two days, one arithmetic
XYEval, by Zhengxuan Wu, Yuxuan Li, Oyvind Tafjord and co-authors, takes six existing benchmarks and inserts a plausible but wrong suggestion from the user (the "XY problem": asking about your attempted fix rather than your problem). Table 1 gives the original score, the score under the misleading suggestion and the relative change for five models. The largest relative drop is 46.7%, Gemini 3.1 Pro on Terminal-Bench, 67.4 to 36.0. Tables 9 to 13 give the settings: temperature 1.0 for every model, and task counts that differ by model. Opus 4.8 and GPT 5.5 ran 200 SWE-bench Verified tasks against the Gemini models' 500, 500 HLE questions against 2,500, and 100 MCP-Atlas tasks against 500. The paper's text contains no variance estimate and no repeated run.
One day later, on 21 September 2026, Chetan Pathade, Prathamesh Pawar and Shubham Patil posted "Attack Success Rate Is Not a Number" (arXiv:2609.25173). Their meta-analysis of 259 agentic-security papers finds 65.3% report neither a variance estimate nor repeated runs for the headline metric, and only 29.7% of the papers that use an LLM judge report agreement with human labels. Their Section V gives the resolution of a single run over m units at 80% power and alpha 0.05: a difference no smaller than (1.96 + 0.84) × √(2p(1−p)/m). At a 30% base rate and m = 100 that is 18.2 points, and two systems 5 points apart are ranked backwards about 21% of the time. We recomputed both: 18.2 points and 22% under the same normal approximation.
What the paired counts show
Table 16 of XYEval reports the share of control-solved tasks each model fails under the suggestion. For a benchmark scored pass or fail, that share times the solved count is the number of tasks lost, and the difference from Table 1's XY score is the number gained. That works for SWE-bench Verified, SWE-bench Pro, Terminal-Bench and HLE. It does not work for τ²-bench, where the reconstruction gives negative gains (average reward is not a per-task 0 or 1), or for MCP-Atlas, which is scored by claim coverage. For those ten cells we report only the unpaired test. Counts are rounded from percentages, so a borderline p can move with a one-task rounding: Opus 4.8 on HLE ranges from 0.030 to 0.079 across ±1 on each count.
| Benchmark | Model | Tasks | Original | XY | Drop (pts) | Unpaired p | Detectable gap (pts) | Lost | Gained | McNemar p | Source |
|---|---|---|---|---|---|---|---|---|---|---|---|
| tau2-bench | Gemini 3.1 Pro | 278 | 88.8 | 65.8 | 23.0 | <0.001 | 10.0 | not reconstructable | Tables 1, 9 to 13, 16; tests ours | ||
| tau2-bench | Gemini 3.5 Flash | 278 | 85.6 | 53.8 | 31.8 | <0.001 | 10.9 | not reconstructable | Tables 1, 9 to 13, 16; tests ours | ||
| tau2-bench | Gemini 3.7 Flash | 278 | 91.4 | 67.2 | 24.2 | <0.001 | 9.6 | not reconstructable | Tables 1, 9 to 13, 16; tests ours | ||
| tau2-bench | Claude Opus 4.8 | 278 | 89.2 | 79.2 | 10.0 | 0.001 | 8.7 | not reconstructable | Tables 1, 9 to 13, 16; tests ours | ||
| tau2-bench | GPT 5.5 | 278 | 89.1 | 68.8 | 20.3 | <0.001 | 9.7 | not reconstructable | Tables 1, 9 to 13, 16; tests ours | ||
| SWE-bench Verified | Gemini 3.1 Pro | 500 | 77.2 | 68.8 | 8.4 | 0.003 | 7.9 | 64 | 22 | <0.001 | Tables 1, 9 to 13, 16; tests ours |
| SWE-bench Verified | Gemini 3.5 Flash | 500 | 78.0 | 70.8 | 7.2 | 0.009 | 7.7 | 55 | 19 | <0.001 | Tables 1, 9 to 13, 16; tests ours |
| SWE-bench Verified | Gemini 3.7 Flash | 500 | 79.8 | 71.4 | 8.4 | 0.002 | 7.6 | 52 | 10 | <0.001 | Tables 1, 9 to 13, 16; tests ours |
| SWE-bench Verified | Claude Opus 4.8 | 200 | 90.0 | 75.5 | 14.5 | <0.001 | 10.6 | 32 | 3 | <0.001 | Tables 1, 9 to 13, 16; tests ours |
| SWE-bench Verified | GPT 5.5 | 200 | 80.5 | 64.0 | 16.5 | <0.001 | 12.5 | 46 | 13 | <0.001 | Tables 1, 9 to 13, 16; tests ours |
| SWE-bench Pro | Gemini 3.1 Pro | 731 | 53.8 | 37.2 | 16.6 | <0.001 | 7.3 | 141 | 20 | <0.001 | Tables 1, 9 to 13, 16; tests ours |
| SWE-bench Pro | Gemini 3.5 Flash | 731 | 53.8 | 42.8 | 11.0 | <0.001 | 7.3 | 101 | 21 | <0.001 | Tables 1, 9 to 13, 16; tests ours |
| SWE-bench Pro | Gemini 3.7 Flash | 200 | 61.5 | 63.0 | -1.5 | 0.757 | 13.6 | 8 | 11 | 0.648 | Tables 1, 9 to 13, 16; tests ours |
| SWE-bench Pro | Claude Opus 4.8 | 200 | 71.0 | 59.5 | 11.5 | 0.015 | 13.3 | 31 | 8 | <0.001 | Tables 1, 9 to 13, 16; tests ours |
| SWE-bench Pro | GPT 5.5 | 200 | 57.5 | 48.0 | 9.5 | 0.056 | 14.0 | 22 | 3 | <0.001 | Tables 1, 9 to 13, 16; tests ours |
| Terminal-Bench | Gemini 3.1 Pro | 89 | 67.4 | 36.0 | 31.4 | <0.001 | 21.0 | 30 | 2 | <0.001 | Tables 1, 9 to 13, 16; tests ours |
| Terminal-Bench | Gemini 3.5 Flash | 89 | 68.5 | 44.9 | 23.6 | 0.001 | 20.8 | 25 | 4 | <0.001 | Tables 1, 9 to 13, 16; tests ours |
| Terminal-Bench | Gemini 3.7 Flash | 89 | 67.4 | 53.9 | 13.5 | 0.063 | 20.5 | 15 | 3 | 0.008 | Tables 1, 9 to 13, 16; tests ours |
| Terminal-Bench | Claude Opus 4.8 | 89 | 67.9 | 61.7 | 6.2 | 0.385 | 20.1 | 15 | 10 | 0.424 | Tables 1, 9 to 13, 16; tests ours |
| Terminal-Bench | GPT 5.5 | 89 | 76.5 | 58.0 | 18.5 | 0.007 | 19.7 | 19 | 3 | <0.001 | Tables 1, 9 to 13, 16; tests ours |
| HLE | Gemini 3.1 Pro | 2500 | 46.8 | 41.5 | 5.3 | <0.001 | 3.9 | 248 | 116 | <0.001 | Tables 1, 9 to 13, 16; tests ours |
| HLE | Gemini 3.5 Flash | 2500 | 43.6 | 38.5 | 5.1 | <0.001 | 3.9 | 249 | 121 | <0.001 | Tables 1, 9 to 13, 16; tests ours |
| HLE | Gemini 3.7 Flash | 2500 | 51.8 | 48.5 | 3.3 | 0.020 | 4.0 | 236 | 153 | <0.001 | Tables 1, 9 to 13, 16; tests ours |
| HLE | Claude Opus 4.8 | 500 | 45.5 | 41.6 | 3.9 | 0.213 | 8.8 | 57 | 37 | 0.049 | Tables 1, 9 to 13, 16; tests ours |
| HLE | GPT 5.5 | 500 | 45.4 | 38.2 | 7.2 | 0.021 | 8.7 | 61 | 25 | <0.001 | Tables 1, 9 to 13, 16; tests ours |
| MCP-Atlas | Gemini 3.1 Pro | 500 | 79.6 | 58.8 | 20.8 | <0.001 | 8.2 | not reconstructable | Tables 1, 9 to 13, 16; tests ours | ||
| MCP-Atlas | Gemini 3.5 Flash | 500 | 83.0 | 68.1 | 14.9 | <0.001 | 7.6 | not reconstructable | Tables 1, 9 to 13, 16; tests ours | ||
| MCP-Atlas | Gemini 3.7 Flash | 500 | 66.9 | 55.0 | 11.9 | <0.001 | 8.6 | not reconstructable | Tables 1, 9 to 13, 16; tests ours | ||
| MCP-Atlas | Claude Opus 4.8 | 100 | 80.0 | 75.2 | 4.8 | 0.415 | 16.5 | not reconstructable | Tables 1, 9 to 13, 16; tests ours | ||
| MCP-Atlas | GPT 5.5 | 100 | 77.8 | 61.8 | 16.0 | 0.012 | 18.2 | not reconstructable | Tables 1, 9 to 13, 16; tests ours |
"Detectable gap" is the minimum difference an unpaired single run resolves at 80% power, from the formula above at the pair's mean score. Unpaired, six of 30 cells have p ≥ 0.05. Paired, two of those resolve: GPT 5.5 on SWE-bench Pro (22 lost, 3 gained, p = 0.0002) and Gemini 3.7 Flash on Terminal-Bench (15 lost, 3 gained, p = 0.0075). Opus 4.8 on HLE (57 lost, 37 gained) lands at p = 0.0495, which rounding can push either side of 0.05. Two stay unresolved: Opus 4.8 on Terminal-Bench (15 lost, 10 gained, p = 0.42) and Gemini 3.7 Flash on SWE-bench Pro (8 lost, 11 gained, p = 0.65, a net gain). Opus 4.8 on MCP-Atlas, 100 tasks and a 4.8-point drop, cannot be reconstructed and is unresolved unpaired (p = 0.41).
The gains column is the noise floor the paper did not measure
Nothing in a misleading suggestion should help an agent solve a task it failed without one. Yet every binary cell has gains, from 2 tasks (Gemini 3.1 Pro, Terminal-Bench) to 153 (Gemini 3.7 Flash, HLE). At temperature 1.0 a second run of the unmodified benchmark would also flip tasks in both directions, and without that run the losses in Table 16 mix advice-induced failures with ordinary run-to-run churn. Opus 4.8's solved-only drop on Terminal-Bench is 25.5%; its net relative drop is 9.1%. The gap between those two numbers is the churn, and the paper reports the first as the effect.
This bears on the paper's most quotable comparison. Opus 4.8 has the smallest relative drop in three rows: τ²-bench (11.2%), Terminal-Bench (9.1%) and MCP-Atlas (6.0%). Its τ²-bench drop, 10.0 points on 278 tasks, is solid. The other two are the two cells in the table that no test resolves, run on the paper's two smallest task sets, 89 and 100. "Opus resists bad advice best" rests on one benchmark, not three.
The curve is the unpaired resolution at three base rates, and it flattens slowly: halving the detectable gap takes four times the tasks. At a 50% base rate it is 39.6 points at 25 tasks, 19.8 at 100, 14.0 at 200, 8.9 at 500 and 6.3 at 1,000. Pairing does better whenever losses and gains are lopsided, as GPT 5.5 on SWE-bench Pro shows, and no better when they are balanced, as Opus on Terminal-Bench shows. McNemar only sees the flips.
What this means on an 80-task phone benchmark
Our public suite is 80 tasks on a physical iPhone, graded from device state. At a 50% base rate an
unpaired run of 80 tasks resolves 22.1 points; at 90%, where frontier models sat on our last sweep
(89.7% to 96.6%), it resolves 13.3. phoneshell/bench/stats.py runs McNemar's exact test
instead, and min_discordant_for_significance() returns 6: no pair separates at p < 0.05
with fewer than six one-directional flips, whatever the suite size. On our 58-task sweep, 46 tasks
were passed by every model and no pair separated.
XYEval's gains column names the step we have not taken either: a rerun of the same model on the same tasks with nothing changed. Without it, a McNemar test compares two conditions but cannot say how many flips the phone, the network and sampling produce on their own. Two decisions follow for anyone running agent ablations. Publish the per-task pass/fail matrix, because Table 16 was only useful here by accident of how it was defined. And run the control condition twice; the flips between those two runs are the floor any claimed effect has to clear.
Check it yourself
curl -sL https://arxiv.org/html/2609.23939v1 -o xy.html # Table 1, Tables 9-13, Table 16
curl -sL https://arxiv.org/html/2609.25173v1 -o asr.html # Section V formula, 18.2 pp at m=100
python3 - <<'PY'
import math
from math import comb
def mcnemar(b, c):
n, k = b + c, min(b, c)
return min(1.0, 2 * sum(comb(n, i) for i in range(k + 1)) / 2**n)
def flips(orig, xy, solved_only_drop, n):
solved = round(orig / 100 * n)
lost = round(solved_only_drop / 100 * solved)
gained = round(xy / 100 * n) - (solved - lost)
return lost, gained, round(mcnemar(lost, gained), 4)
print(flips(67.9, 61.7, 25.5, 89)) # Opus 4.8, Terminal-Bench -> (15, 10, 0.4244)
print(flips(57.5, 48.0, 19.1, 200)) # GPT 5.5, SWE-bench Pro -> (22, 3, 0.0002)
print(flips(45.5, 41.6, 24.9, 500)) # Opus 4.8, HLE -> (57, 37, 0.0495)
mdd = lambda p, m: 2.801585 * math.sqrt(2 * p * (1 - p) / m) * 100
print(round(mdd(0.3, 100), 1), round(mdd(0.5, 80), 1), round(mdd(0.9, 80), 1)) # 18.2 22.1 13.3
PY
# our paired floor, from the phoneshell repository root
python3 -c "from phoneshell.bench.stats import min_discordant_for_significance as m; print(m())" # 6
What would prove this wrong
The claim is that Claude Opus 4.8's Terminal-Bench and MCP-Atlas drops, and Gemini 3.7 Flash's SWE-bench Pro change, are not resolved by the runs XYEval reports, and that its solved-only drops include run-to-run churn. It is wrong if the authors release per-task outcomes and the true flip counts give McNemar p < 0.05 for Opus on Terminal-Bench, or if a second control run of any model shows fewer than a quarter as many flips as its control-versus-XY comparison. The second would mean the gains column is mostly an effect of the advice, not noise. We will check the paper's repository and any v2 on 31 December 2026 and publish what we find, including a note that nothing was released if that is the case. On our side, the next sweep will include one repeated control run per model.
Sources
- Wu, Li, Tafjord et al., XYEval: Agents say yes to bad advice, arXiv:2609.23939, 20 September 2026
- XYEval HTML edition, Table 1 (Orig, XY, relative change), Tables 9 to 13 (temperature 1.0, task counts per model), Table 16 (solved-only drop)
- Pathade, Pawar and Patil, Attack Success Rate Is Not a Number: On Measurement Validity in Agentic AI Security Evaluation, arXiv:2609.25173, 21 September 2026
- ASR paper HTML edition, Section V minimum detectable difference (18.2 pp at m=100, 21% inversion at 5 pp) and Table II (259-paper reporting practice)
- phoneshell bench/stats.py: Wilson intervals, McNemar exact test, min_discordant_for_significance
- Blolabel, The published leaderboard could not rank anything (earlier note on the 58-task sweep)