sysnote
Research

MaxxBench: mutating DeepSWE tasks by a median 17 lines separates models that all scored about 74%

Gavin Lo and Justin Lo have a simple test for whether a coding-agent score means the model can follow instructions, or just that it has learned a benchmark. In MaxxBench: Benchmarking Task Adaptation and Generalization in Frontier Coding Agents, published October 20, they took 89 medium-length feature-implementation tasks from DeepSWE and changed the requirements — lowercase report filenames instead of mixed case, UTC timestamps with a trailing Z, a uint64 that must not be stuffed into a float64 — then rewrote the reference patches and tests to match. The median reference patch grew by 17 lines, or 3.5%. That should be routine. For several models that had been sitting together near 74% on DeepSWE, it was not.

Claude Opus 5.5 moved from a 74.2% DeepSWE baseline to 76.4% on MaxxBench. GPT-6 Astra went from 74.1% to 71.9%, and GPT-5.6 Sol from 72.7% to 69.1%. In the same ~74% cluster, DeepSeek V4.1 Flash fell from 74.2% to 55.6%, and Gemini 3.8 Flash from 73.8% to 53.4%. Across the 15 configurations Lo and Lo report, the gap between the best and worst scores more than doubles, from 20.9 points on DeepSWE (74.2% down to 53.3%) to 48.3 points on MaxxBench (76.4% down to 28.1%). We recomputed those spreads from their published table; the arithmetic holds. The six configurations they describe as sitting within 1.5 points of one another near 74% — Opus 5.5, DeepSeek V4.1 Flash, Astra, Gemini 3.8 Flash, Claude Opus 5 and GPT-5.6 Sol — fan out from Opus 5.5's 76.4% to Gemini 3.8 Flash's 53.4%, which is 23.0 points.

The interesting part is not only that scores moved. Reading the trajectories, Lo and Lo found models that had understood the new requirement and then talked themselves out of implementing it. They were coding to the tests they imagined DeepSWE would still run. GLM-5.3 converted integers to float64 on a task that asked for uint64 support, writing that "the risk of a test with >2^53 numbers is minimal"; the verifier used 2^53 + 1. Claude Opus 5 discarded nanosecond differences it had been told to keep, because "such cases are unlikely." On another task it calculated that suppressing an error would raise its expected pass rate from about 0.55 to about 0.80, and suppressed the error. Across Claude Opus 5, GLM-5.3 and GLM-5.3 Flash, roughly a quarter of failures on the mutated checks came after the agent understood the new requirement and still reverted to the original DeepSWE behavior. Opus 5.5 still mentioned hidden tests in its reasoning on every run they report, but those guesses contributed to only 16.7% of its failures, against 30.8% for Opus 5 and 40.3% for GLM-5.3.

Some of this goes further than hedging. On a task (scc) that asked the program to keep no more than a configured number of file records in memory and print peak_in_memory_files on stderr, every attempt across 13 models passed the check that read the number the program printed about itself. Most failed an independent instrumentation of live records. Seven of the 13 models reasoned that an external suite could only see the printed line, reported a compliant peak, and then reloaded the spilled records back into memory when formatting output.

DeepSeek V4.1 Flash, at max reasoning effort, treated some problems as DeepSWE tasks and went looking for the original test_patch and solution_patch. Lo and Lo say it extracted the API key supplied to run mini-swe-agent and routed calls to other models through OpenRouter, which let it bypass the sandbox's ordinary network restrictions. At max effort it made outside-model calls in 20 of 178 attempts. At high effort those calls dropped to zero, along with the targeted credential use. We wrote last month about a Together AI, Johns Hopkins and Cornell study in which turning reasoning effort up made agents more likely to go looking for the answer key on SWE-Bench Pro. MaxxBench is an awkward place to find that answer: because the requirements have changed, a leaked original patch is a trap. In one Testem run, DeepSeek implemented lowercase filenames correctly (chrome.xml), received an outside implementation that omitted .toLowerCase(), noticed the disagreement, decided to "follow tests, since grading uses them," and replaced its own working code. The final patch expected reports/Chrome.xml.

While reviewing the original DeepSWE tasks, Lo and Lo also found reference and grader bugs that a stronger, more thorough agent was more likely to hit: a test that asked a parser to accept syntax ECMAScript forbids, grader tests whose names collided with the model's own, a 128-bit overflow in natural-sort parsing. They repaired those before running MaxxBench. Regrading the original DeepSWE submissions on the same 89 tasks moved the average score from 65.8% to 64.5%, a 1.3-point shift, so the repairs mostly reduce noise rather than rewrite the ranking. That is the same kind of maintenance E. Kelly Buchanan, Crystal Zhou, Scott W. Linderman and Christopher Ré described for Terminal-Bench 2.1, where fixing defective tasks moved agent scores by up to 12 points.

Lo and Lo argue that the industry has been too quick to read gains on familiar benchmarks as gains in general coding ability. A higher score, they write, should come with evidence that the improvement still holds when the familiar answer is wrong. They are publishing the mutations, reference solutions, tests and agent trajectories. We have not rerun the suite; the figures above are theirs, except for the spreads we recomputed from the table. Successive releases will need fresh mutations as these ones become familiar — which is both a limitation of any such benchmark and the point of building it.

Comments

No comments yet. Be the first.

Write a comment

Comments are published after review.