vetto research

SlopCode: Vetto’s version

Built on our own tasks. Coding agents are usually ranked by whether their final answer works. SlopCode Vetted asks a second question: what kind of codebase do they leave behind while getting there?

A tower of mismatched blocks, hedges and fruit stacked unevenly against a striped sky

Leaderboard

Most coding benchmarks evaluate a single assignment: the agent may take many steps inside one session, but it delivers one final answer to one self-contained task. Real software is not built that way. Requirements arrive one at a time, each change lands on code that an earlier session left behind, and both the work and the mistakes accumulate. SlopCode Vetted is built around that. Each task is one project developed through a sequence of feature requests, the checkpoints. Every checkpoint is a new agent session that inherits the repository but not the conversation, and after it a hidden test suite runs with the new tests plus every earlier one; a checkpoint passes only when the whole suite passes.

We ran 6 models on 50 tasks, three times each; one complete attempt through every checkpoint is a run. The report reads the results in two parts. First, how the models do on the tests: the leaderboard below, then correctness along the way and what it costs. Then, the quality of the code they produce: how it grows, how complex it gets, and how far it is from the code people wrote for the same software.

SlopCode Vetted model results

# model 0–100%
1 GPT 6.1 Sol OpenAI 83.7%
2 Claude Opus 5.5 Anthropic 75.7%
3 Kimi K3 Moonshot AI 60.4%
4 Gemini 3.8 Flash Google DeepMind 56.2%
5 Muse Spark 1.3 Meta 34.0%
6 Grok 4.7 xAI 23.6%

Resolved is the share of runs whose last checkpoint passes every hidden test. 50 tasks, three runs per task and model, one minimal agent scaffold.

Models are ranked by the share of runs whose last checkpoint passes every test. A run can finish near 100% of tests passing while having failed complete checkpoints along the way.

The models end far apart on a fully passing project: 83.7% of Sol 6.1’s runs finish with every test passing, against 23.6% for Grok 4.7. Yet every model still passes most individual tests at the end, from 93.2% to 99.8%. The failures are few at any one moment, but they are spread over many checkpoints and often carried from one to the next. That gap is the cost of building a project one request at a time, and the rest of this report follows it: first in correctness along the way, then in the code each model leaves behind.

The task suite

The idea comes from SlopCodeBench, the original benchmark of coding agents under iterative, multi-checkpoint development. We built our own version of it: 50 tasks derived from open-source projects, each split into a sequence of checkpoints, run on 6 models with three runs per task and model.

Each task is derived from a real open-source project: a library or command-line tool whose behavior is re-specified as a sequence of feature requests. The agent never sees the original code. It receives a runnable workspace, one request per checkpoint, and is graded by hidden tests written against the original project’s behavior. Every original implementation passes every graded scenario.

The projects span parsers and serializers (YAML, CSV, XPath, Markdown, HL7, AIS radio messages), configuration and policy engines (Kconfig, HCL, IAM policy simulation, Helm values), interpreters and template engines, version and dependency tooling, and protocol encoders. Tasks range from 5 to 12 checkpoints (368 in total); the hidden suite at the last checkpoint ranges from 64 to 229 tests (median 126).

Most tasks have six to eight checkpoints
Most tasks have six to eight checkpointsNumber of tasks with each checkpoint count, from 5 to 12: 3, 13, 12, 7, 4, 2, 5 and 2 tasks. tasks 12 checkpoi… 11 checkpoi… 10 checkpoi… 9 checkpoin… 8 checkpoin… 7 checkpoin… 6 checkpoin… 5 checkpoin… 0 3 6 9 12 15 2 5 2 4 7 12 13 3

Number of tasks. 368 checkpoints in total.

Nineteen of the originals are written in Go
Nineteen of the originals are written in GoNumber of tasks by the language of the original project: Go 19, Python 17, TypeScript 5, C 5, JavaScript 4. tasks JavaScript C TypeScript Python Go 0 5 10 15 20 4 5 5 17 19

Number of tasks. Agents may choose their language. Most write Python; on 19 tasks the agents’ majority language matches the original project’s.

The two things we evaluate

  • Does it work? Strict checkpoint success, the final test-pass rate, regressions carried forward, and the cost of getting there.
  • What code is left behind? Size and growth; debt, complexity, smells and duplication; function and file shape; error masking; and the distance from the human project.

Correctness along the way

A final snapshot hides how a run got there. This section follows correctness checkpoint by checkpoint: how failures accumulate as requirements are added, and whether behavior that once worked stays working.

Failures accumulate differently

Tasks have between 5 and 12 checkpoints, so we align them by position: the first checkpoint, the checkpoints a quarter, half and three quarters of the way through, and the last one. The value is the share of that checkpoint’s hidden tests that fail.

The gap between models widens as requirements accumulate
The gap between models widens as requirements accumulateShare of hidden tests failing at five positions within a task, mean over tasks, one line per model. At the last checkpoint: Grok 4.7 6.8%, Muse Spark 1.3 5.0%, Kimi K3 2.2%, Gemini 3.8 Flash 1.6%, Claude Opus 5.5 0.5%, GPT 6.1 Sol 0.2%. hidden tests failing position within the task 0% 1% 2% 3% 4% 5% 6% 7% first 25% 50% 75% last GPT 6.1 Sol Claude Opus 5.5 Kimi K3 Gemini 3.8 Flash Muse Spark 1.3 Grok 4.7

Share of hidden tests failing, over the course of a task. Mean over tasks, by position within the task. Hover a position for every model’s value.

Why does the curve sometimes dip instead of only rising? Not because models go back and repair what they broke: once a hidden test fails, it almost never passes again in the same run. Of the 3,244 tests that started failing at some checkpoint before the last one, 86% were still failing at the end, and the share later fixed ranges from 5% (Sol 6.1) to 19% (Grok 4.7). The dips come from the denominator: every checkpoint adds new tests, so the same failures become a smaller share of a larger suite, and each position mixes tasks of different lengths.

Regressions are carried forward

A carried regression is earlier behavior that passed, later broke, and was still broken at a subsequent checkpoint. Because each session starts without the previous conversation, a break that the next session does not notice stays in the repository.

Regression-free runs: higher is better
Regression-free runs: higher is betterShare of runs that never carried a broken earlier test: GPT 6.1 Sol 87.5% (119 of 136 runs), Claude Opus 5.5 75.0% (108 of 144), Kimi K3 58.3% (84 of 144), Gemini 3.8 Flash 56.9% (82 of 144), Muse Spark 1.3 35.0% (50 of 143), Grok 4.7 23.6% (34 of 144). regression-free runs Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0% 30% 60% 90% 23.6% 35% 56.9% 58.3% 75% 87.5%

Regression-free runs. Runs that never carried a broken earlier test. Run denominators reflect the evaluable subset included in this chart, not 150 runs per model.

Checkpoints inheriting a break: lower is better
Checkpoints inheriting a break: lower is betterShare of checkpoints that start with an earlier test already broken: GPT 6.1 Sol 9.5%, Claude Opus 5.5 14.0%, Gemini 3.8 Flash 27.7%, Kimi K3 32.6%, Muse Spark 1.3 47.9%, Grok 4.7 56.0%. checkpoints inheriting a break Grok 4.7 Muse Spark … Kimi K3 Gemini 3.8 … Claude Opus… GPT 6.1 Sol 0% 10% 20% 30% 40% 50% 60% 56% 47.9% 32.6% 27.7% 14% 9.5%

Checkpoints inheriting a break. Checkpoints that start with an earlier test already broken.

Why runs fail

Failure cases were reviewed across the 50-task suite, test by test, and each mechanism was assigned to one category. The numeric breakdown below still reflects the original 37-task set of classified runs. Counts below are failure occurrences (one mechanism in one run), not failing tests: a single missed rule can fail dozens of tests. Models with few failures have few occurrences, so their mix is less stable.

Wrong rule is the most common mechanism for every model but Sol 6.1
Wrong rule is the most common mechanism for every model but Sol 6.1Share of each model’s failure occurrences by mechanism, eight mechanisms by six models. Wrong rule: Grok 4.7 32%, Muse Spark 1.3 41%, Gemini 3.8 Flash 33%, Kimi K3 52%, Claude Opus 5.5 39%, GPT 6.1 Sol 29%. GPT 6.1 Sol’s largest share is unrequested behavior, 4 of its 7 occurrences. mechanism model Wrong rule Missing req… Output deta… Regression Error handl… Unrequested… Interface c… Other Gro… Mus… Gem… Kim… Opu… Sol… 32% 41% 33% 52% 39% 29% 11% 9% 14% 6% 6% 14% 12% 13% 6% 9% 17% 0% 12% 9% 27% 6% 0% 0% 9% 9% 8% 6% 11% 0% 7% 5% 4% 9% 28% 57% 9% 5% 0% 6% 0% 0% 8% 10% 8% 6% 0% 0% 0% 57%

Failure mechanisms by model. Share of each model’s failure occurrences, on the original 37-task classified subset. Totals per model: Grok 4.7 152, Muse 1.3 111, Gemini 3.8 51, Kimi K3 33, Opus 5.5 18, Sol 6.1 7. Hover a cell for its count.

The most common mechanism overall is “wrong rule”. A few representative mechanisms, described without naming the model:

  • Output detail · cron_dst. The spec gave a full expression and its full description with all day fields wildcard and no trailing every day. The models appended every day to span descriptions whenever the hour field was restricted, contradicting the delivered example word for word.
  • Regression · celpy. A c1 rule says membership with a comparison that raises is an evaluation error. A c2 sentence says a type descriptor is not a string so equality with a string is false. Two trials rewrote all cross-type equality to return false, so the c1 error cases silently returned false from c2 on.
  • Missing requirement · ais_aivdm. Queue entries must carry the framing fields plus the full decode field set, including the message type. Two trials deliberately dropped the message type from each entry because the framing attribute repeated it, against the sentence that fixes the entry’s field set.
  • Error handling · econf. In strict mode a configuration line holding a bare property name with no separator should be a fatal syntax error. Several models had written their parser at the first checkpoint to silently skip such lines, carried it through the strict-mode checkpoint, and returned exit code 0.
  • Interface contract · xpath. The response envelope has a result field that holds the evaluated value directly. Three trials built a response helper that already wrapped its argument and then passed an object with its own result key, so every value came back as nested result objects from c2 to the last checkpoint: respond("ok", {"result": ...}).
  • Unrequested behavior · earley_costs. A grammar whose second rule is never referenced was expected to parse. The models rejected it with an accessibility check on by default, a check the text only introduces later as an opt-in strict mode, apparently reproducing the real library’s validation. Once the opt-in mode arrived they flipped the default and the test passed.

What it costs to get there

Every run used the same minimal agent scaffold, so differences in cost reflect each model’s price and how much work it does per request: how many steps it takes, how many tokens it reads and writes. The most expensive model costs 10× as much per run as the cheapest, and cost is not ordered like score.

The cheapest model per run also finishes most runs fully passing
The cheapest model per run also finishes most runs fully passingEach model’s mean cost per run against its share of runs whose last checkpoint fully passed. GPT 6.1 Sol $2.49 and 83.7%; Grok 4.7 $7.86 and 23.6%; Claude Opus 5.5 $10.19 and 75.7%; Muse Spark 1.3 $17.88 and 34.0%; Kimi K3 $20.22 and 60.4%; Gemini 3.8 Flash $25.02 and 56.2%. last checkpoint fully passed mean cost per run, US$ (log scale) 0% 20% 40% 60% 80% 100% 1 10 100 GPT 6.1 Sol Claude Opus 5.5 Gemini 3.8 Flash Grok 4.7 Kimi K3 Muse Spark 1.3

Score versus cost. Mean platform-billed cost of one run, all checkpoints included, on a log scale. Up and to the left is better. Hover a point for its model.

Cost per passed checkpoint
Cost per passed checkpointTotal spend divided by the checkpoints passed outright, in US dollars: GPT 6.1 Sol 0.37, Claude Opus 5.5 1.55, Grok 4.7 2.16, Kimi K3 3.75, Muse Spark 1.3 4.39, Gemini 3.8 Flash 4.46. US$ per fully passed checkpoint Gemini 3.8 … Muse Spark … Kimi K3 Grok 4.7 Claude Opus… GPT 6.1 Sol 0 1 2 3 4 5 4.5 4.4 3.8 2.2 1.6 0.4

Cost per passed checkpoint. Total spend divided by the checkpoints passed outright, in US dollars.

Agent steps per run
Agent steps per runMedian model calls in one run: GPT 6.1 Sol 116, Claude Opus 5.5 140, Grok 4.7 227, Kimi K3 258, Muse Spark 1.3 354, Gemini 3.8 Flash 648. median agent steps per run Gemini 3.8 … Muse Spark … Kimi K3 Grok 4.7 Claude Opus… GPT 6.1 Sol 0 200 400 600 800 648 354 258 227 140 116

Agent steps. Median model calls in one run.

The cheapest model per run, GPT 6.1 Sol, is also best on runs that end with every test passing. Steps and output volume vary several-fold between models: the median run takes from 116 to 648 agent steps.

Does the code get worse as it grows?

This is the central analysis in SlopCode Vetted. Test rewards tell us whether behavior works. They do not tell us whether the implementation is small, legible, modular, or easy to change at the next checkpoint.

Question 01: does quality deteriorate per line?

Raw totals rise whenever a repository gets larger, so they cannot by themselves show deterioration. For each metric we compare its density (per 1,000 lines) at each run’s first and last checkpoint, and set the metric’s total growth next to the code’s own growth. If the two grow at the same rate, the code got bigger without getting worse per line; if the metric outgrows the code, each new line carries more of it.

Quality per line, metric by metric. Median over tasks, at the first and last checkpoint of each run. Pick a metric.

Total cyclomatic complexity, first → last checkpoint
Total cyclomatic complexity, first → last checkpointMedian total cyclomatic complexity at each run’s first and last checkpoint, by model: GPT 6.1 Sol 231 to 1142; Claude Opus 5.5 366 to 1237; Kimi K3 200 to 1126; Gemini 3.8 Flash 236 to 1494; Muse Spark 1.3 250 to 1676; Grok 4.7 301 to 1567. total cyclomatic complexity Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0 500 1000 1500 2000 301 250 236 200 366 231 1567 1676 1494 1126 1237 1142 first checkpoint last checkpoint

Cyclomatic complexity. The number of independent control-flow paths through the code. Every branch, loop and boolean alternative adds a path; more paths per line means more cases a reader, and a test suite, has to cover. At the last checkpoint Grok 4.7 has the densest code on this measure (377 paths per 1,000 lines) and Gemini 3.8 the least dense (265), a 1.4× gap. No model’s density moved by more than 10% between the first and last checkpoint.

Cyclomatic complexity per 1,000 lines, first → last checkpoint
Cyclomatic complexity per 1,000 lines, first → last checkpointMedian cyclomatic complexity per 1,000 lines at each run’s first and last checkpoint, by model: GPT 6.1 Sol 323 to 302; Claude Opus 5.5 340 to 361; Kimi K3 293 to 272; Gemini 3.8 Flash 259 to 265; Muse Spark 1.3 352 to 360; Grok 4.7 355 to 377. paths per 1,000 lines Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0 100 200 300 400 355 352 259 293 340 323 377 360 265 272 361 302 first checkpoint last checkpoint

The total shows the burden a future session inherits; the per-line value removes the effect of the code simply getting bigger.

Total cognitive complexity, first → last checkpoint
Total cognitive complexity, first → last checkpointMedian total cognitive complexity at each run’s first and last checkpoint, by model: GPT 6.1 Sol 315 to 1398; Claude Opus 5.5 494 to 1544; Kimi K3 307 to 1455; Gemini 3.8 Flash 408 to 2243; Muse Spark 1.3 522 to 3444; Grok 4.7 422 to 2123. total cognitive complexity Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0 1000 2000 3000 4000 422 522 408 307 494 315 2123 3444 2243 1455 1544 1398 first checkpoint last checkpoint

Cognitive complexity. A readability-oriented complexity measure: like cyclomatic complexity, but nested and hard-to-follow control flow costs more, so deep nesting is penalized more than a flat sequence of branches. At the last checkpoint Muse 1.3 has the densest code on this measure (710 points per 1,000 lines) and Kimi K3 the least dense (346), a 2.1× gap. It fell by more than 10% for Sol 6.1 (0.88×). The others stay within ±10%: Opus 5.5, Kimi K3, Gemini 3.8, Muse 1.3, Grok 4.7.

Cognitive complexity per 1,000 lines, first → last checkpoint
Cognitive complexity per 1,000 lines, first → last checkpointMedian cognitive complexity per 1,000 lines at each run’s first and last checkpoint, by model: GPT 6.1 Sol 431 to 381; Claude Opus 5.5 418 to 439; Kimi K3 375 to 346; Gemini 3.8 Flash 431 to 401; Muse Spark 1.3 656 to 710; Grok 4.7 499 to 500. points per 1,000 lines Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0 200 400 600 800 499 656 431 375 418 431 500 710 401 346 439 381 first checkpoint last checkpoint

The total shows the burden a future session inherits; the per-line value removes the effect of the code simply getting bigger.

Total code smells, first → last checkpoint
Total code smells, first → last checkpointMedian total code smells at each run’s first and last checkpoint, by model: GPT 6.1 Sol 15 to 58; Claude Opus 5.5 19 to 76; Kimi K3 13 to 50; Gemini 3.8 Flash 14 to 87; Muse Spark 1.3 26 to 143; Grok 4.7 18 to 94. total code smells Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0 30 60 90 120 150 18 26 14 13 19 15 94 143 87 50 76 58 first checkpoint last checkpoint

Code smells. Maintainability warnings such as oversized signatures, repeated literals, empty branches or unused code. At the last checkpoint Muse 1.3 has the densest code on this measure (32 findings per 1,000 lines) and Kimi K3 the least dense (13), a 2.4× gap. Density rose by more than 10% over the run for Gemini 3.8 (1.23×). It fell by more than 10% for Sol 6.1 (0.86×), Opus 5.5 (0.90×). The others stay within ±10%: Kimi K3, Muse 1.3, Grok 4.7.

Code smells per 1,000 lines, first → last checkpoint
Code smells per 1,000 lines, first → last checkpointMedian code smells per 1,000 lines at each run’s first and last checkpoint, by model: GPT 6.1 Sol 19 to 16; Claude Opus 5.5 20 to 18; Kimi K3 13 to 13; Gemini 3.8 Flash 13 to 16; Muse Spark 1.3 33 to 32; Grok 4.7 19 to 19. findings per 1,000 lines Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0 10 20 30 40 19 33 13 13 20 19 19 32 16 13 18 16 first checkpoint last checkpoint

The total shows the burden a future session inherits; the per-line value removes the effect of the code simply getting bigger.

Total technical debt, first → last checkpoint
Total technical debt, first → last checkpointMedian total technical debt at each run’s first and last checkpoint, by model: GPT 6.1 Sol 214 to 882; Claude Opus 5.5 262 to 813; Kimi K3 172 to 800; Gemini 3.8 Flash 322 to 2004; Muse Spark 1.3 508 to 3240; Grok 4.7 262 to 1438. total technical debt Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0 1000 2000 3000 4000 262 508 322 172 262 214 1438 3240 2004 800 813 882 first checkpoint last checkpoint

Technical debt. Estimated minutes required to repair the static-analysis findings in the code. It is an estimate attached to rule violations, not observed maintenance time, and it sums every kind of finding (complexity, duplication, naming, dead code, error handling). At the last checkpoint Muse 1.3 has the densest code on this measure (656 minutes per 1,000 lines) and Kimi K3 the least dense (220), a 3.0× gap. Density rose by more than 10% over the run for Gemini 3.8 (1.18×), Muse 1.3 (1.15×). It fell by more than 10% for Sol 6.1 (0.87×). The others stay within ±10%: Opus 5.5, Kimi K3, Grok 4.7.

Technical debt per 1,000 lines, first → last checkpoint
Technical debt per 1,000 lines, first → last checkpointMedian technical debt per 1,000 lines at each run’s first and last checkpoint, by model: GPT 6.1 Sol 297 to 259; Claude Opus 5.5 235 to 258; Kimi K3 209 to 220; Gemini 3.8 Flash 318 to 375; Muse Spark 1.3 571 to 656; Grok 4.7 303 to 314. minutes per 1,000 lines Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0 200 400 600 800 303 571 318 209 235 297 314 656 375 220 258 259 first checkpoint last checkpoint

The total shows the burden a future session inherits; the per-line value removes the effect of the code simply getting bigger.

Duplicated lines, first → last checkpoint
Duplicated lines, first → last checkpointMean share of duplicated lines at each run’s first and last checkpoint, by model: GPT 6.1 Sol 0.0% to 0.1%; Claude Opus 5.5 0.0% to 0.3%; Kimi K3 0.1% to 1.3%; Gemini 3.8 Flash 1.6% to 3.7%; Muse Spark 1.3 2.4% to 4.1%; Grok 4.7 0.4% to 1.6%. duplicated lines Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0% 1% 2% 3% 4% 5% 0.4% 2.4% 1.6% 0.1% 0% 0% 1.6% 4.1% 3.7% 1.3% 0.3% 0.1% first checkpoint last checkpoint

Duplication. The share of lines that sit inside a repeated block of at least six normalized lines. Unlike the other measures it is already a share of the code, so no per-line normalization is needed. At the last checkpoint Muse 1.3 has the most duplicated code (4.1% of lines on average) and Sol 6.1 the least (0.1%). Duplication grew by more than half a point over the run for Kimi K3, Gemini 3.8, Muse 1.3, Grok 4.7. Mean over tasks (most task medians are zero).

What this shows

Every codebase grows several-fold over a task (Question 02 shows by how much), and the totals grow with it: median technical debt rises 3.1–6.4× between the first and last checkpoint, while the code itself grows 4.0–6.1× in the same snapshots. For 3 of the six models debt grows within 10% of the code’s own growth, and for the rest the two differ by at most 23%: a large part of the extra maintenance burden is simply more code. Per 1,000 lines, 4 of the six models end the run without any measure rising by more than 10%. Where density does rise, it rises most often in technical debt and code smells.

What separates the models is level, not trend. Muse 1.3 carries 656 minutes of debt per 1,000 lines at the end, Kimi K3 220, and those positions are already visible at the first checkpoint. Sequential delivery mostly multiplies whatever style a model starts with. Question 03 looks at where it collects: per-line averages can stay flat while complexity gathers in a few functions.

Question 02: how much does the codebase grow?

Lines of code here means non-blank lines in the agent’s own implementation files; agent-written tests and vendored or generated code are excluded. More code is not automatically worse, but every additional line expands the surface future sessions must understand and preserve.

Muse 1.3 ends with the largest implementation, Sol 6.1 with the smallest
Muse 1.3 ends with the largest implementation, Sol 6.1 with the smallestMedian lines of code at the first and last checkpoint, by model: GPT 6.1 Sol 514 to 2274; Claude Opus 5.5 967 to 3766; Kimi K3 746 to 4285; Gemini 3.8 Flash 862 to 4905; Muse Spark 1.3 862 to 5094; Grok 4.7 966 to 4730. lines of code Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0 1000 2000 3000 4000 5000 6000 966 862 862 746 967 514 4730 5094 4905 4285 3766 2274 first checkpoint last checkpoint

Implementation size. Median over tasks, in lines of code.

Muse 1.3 grows the most, Opus 5.5 the least relative to where it starts
Muse 1.3 grows the most, Opus 5.5 the least relative to where it startsMedian implementation size relative to the model’s own first checkpoint, at five positions within the task. At the last checkpoint: Muse Spark 1.3 5.8×, Gemini 3.8 Flash 5.4×, Kimi K3 5.3×, Grok 4.7 4.6×, GPT 6.1 Sol 4.4×, Claude Opus 5.5 2.8×. size relative to the first checkpoint position within the task 0× 1× 2× 3× 4× 5× 6× first 25% 50% 75% last GPT 6.1 Sol Claude Opus 5.5 Kimi K3 Gemini 3.8 Flash Muse Spark 1.3 Grok 4.7

Growth relative to the first checkpoint. Median over tasks. 1.0× is the size of the model’s own first checkpoint: a model that starts small can grow fast and still end small.

What this shows

Sol 6.1 solves the same tasks with the least code: its median implementation ends at 2,274 lines, against 5,094 for Muse 1.3, and it also starts smallest (514 lines at the first checkpoint). It is also the model with the highest checkpoint rate, so less code is not bought with less behavior. Opus 5.5 grows least in relative terms (2.8× its first checkpoint), but largely because it starts with the most code (967 lines): it front-loads structure rather than adding less. Muse 1.3 grows the most, 5.8×.

Every model multiplies its codebase several times over a task, and most of that growth happens after the first checkpoint: the first session writes between 514 and 967 lines, the last ends between 2,274 and 5,094. Growth is expected, since every checkpoint adds requirements. This growth is why Question 01 reads quality per line rather than in totals.

Question 03: where does complexity accumulate?

Per-line density can stay flat while logic becomes concentrated in a few difficult functions. We therefore look at cognitive complexity three ways, at each run’s first and last checkpoint: the total, the typical function, and the share of functions above the hard-to-follow threshold.

Total cognitive complexity, first → last checkpoint
Total cognitive complexity, first → last checkpointMedian total cognitive complexity of the implementation, by model: GPT 6.1 Sol 315 to 1398; Claude Opus 5.5 494 to 1544; Kimi K3 307 to 1455; Gemini 3.8 Flash 408 to 2243; Muse Spark 1.3 522 to 3444; Grok 4.7 422 to 2123. total cognitive complexity Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0 1000 2000 3000 4000 422 522 408 307 494 315 2123 3444 2243 1455 1544 1398 first checkpoint last checkpoint

Total. Total cognitive complexity of the implementation, median over tasks.

Median cognitive complexity of a function, first → last checkpoint
Median cognitive complexity of a function, first → last checkpointMedian cognitive complexity of a function, by model: GPT 6.1 Sol 5.6 to 4.6; Claude Opus 5.5 4.8 to 5.5; Kimi K3 5.7 to 5.9; Gemini 3.8 Flash 8.2 to 7.0; Muse Spark 1.3 16.9 to 19.8; Grok 4.7 8.4 to 8.3. cognitive complexity per function Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0 5 10 15 20 8.4 16.9 8.2 5.7 4.8 5.6 8.3 19.8 7 5.9 5.5 4.6 first checkpoint last checkpoint

Per function. Median cognitive complexity of a function, median over tasks.

Share of functions above the hard-to-follow threshold, first → last checkpoint
Share of functions above the hard-to-follow threshold, first → last checkpointShare of functions whose cognitive complexity exceeds 15, by model: GPT 6.1 Sol 9.4% to 7.6%; Claude Opus 5.5 8.1% to 8.7%; Kimi K3 8.3% to 10.2%; Gemini 3.8 Flash 9.7% to 10.7%; Muse Spark 1.3 20.9% to 24.4%; Grok 4.7 15.0% to 14.7%. functions above 15 Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0% 5% 10% 15% 20% 25% 15% 20.9% 9.7% 8.3% 8.1% 9.4% 14.7% 24.4% 10.7% 10.2% 8.7% 7.6% first checkpoint last checkpoint

Functions above 15. Share of functions whose cognitive complexity exceeds 15, the usual threshold for a function that is hard to follow. A typical function that gets harder over the run is a different failure from a codebase that only gets bigger.

What concentration looks like in code: the same rules for reading a key=value line, written two ways. Numbers in the margin are each line’s contribution to cognitive complexity; an if costs more the deeper it is nested.

One function · cognitive 19 python
def parse(line):
  if line:                        # +1
      if line.startswith("#"):    # +2
          return None
      else:                       # +1
          if "=" in line:         # +3
              k, v = line.split("=", 1)
              if k.strip():       # +4
                  if v.isdigit(): # +5
                      return k, int(v)
                  else:           # +1
                      return k, v
              else:               # +1
                  raise ValueError
          else:                   # +1
              raise ValueError
  return None
Three small functions · 2 + 2 + 1 python
def parse(line):
  if not line or line.startswith("#"):  # +2
      return None
  k, v = split_pair(line)
  return k, coerce(v)

def split_pair(line):
  if "=" not in line:   # +1
      raise ValueError
  k, v = line.split("=", 1)
  if not k.strip():     # +1
      raise ValueError
  return k, v

def coerce(v):
  return int(v) if v.isdigit() else v  # +1

A toy example written for this report, not code from a run. Both versions apply the same checks; the first stacks them inside each other, so its single function scores 19 and lands above the hard-to-follow threshold of 15, while no function in the second scores more than 2.

What this shows

Total cognitive complexity grows with the code, as Question 01 would predict. The typical function changes much less: it gets more than 10% harder for Opus 5.5, Muse 1.3, and easier for Sol 6.1, Gemini 3.8. Muse 1.3 is the outlier: its median function ends at 19.8, against at most 8.3 for every other model, and 24% of its functions are above the hard-to-follow threshold.

How far is agent-written code from human code?

Every task is derived from a real open-source project, and every original implementation passes every graded scenario. That gives a human reference for the same behavior. Most tasks cross languages (the original is Go, TypeScript, C or JavaScript while the agents mostly write Python), so the main comparison is about shape: how long and how branchy functions are, how bad the worst function is, how much logic sits in already-complex functions, and how code is split into files. Debt and complexity are compared per line, on every task where the human project was analyzed.

Every model branches more than the human code
Every model branches more than the human codeModel value divided by the human project’s value, geometric mean over tasks, for five function-shape dimensions by six models. Branching, median: GPT 6.1 Sol 1.78×, Claude Opus 5.5 1.42×, Kimi K3 1.65×, Gemini 3.8 Flash 1.50×, Muse Spark 1.3 2.80×, Grok 4.7 2.19×. Worst function: 1.60×, 1.27×, 1.34×, 3.29×, 3.78×, 1.90×. dimension model Length, med… Length, p90 Branching, … Branching, … Worst funct… Sol… Opu… Kim… Gem… Mus… Gro… 1.0× 1.2× 1.8× 2.0× 1.6× 0.9× 0.9× 1.4× 1.4× 1.3× 1.2× 1.2× 1.6× 1.6× 1.3× 1.1× 1.8× 1.5× 2.4× 3.3× 1.8× 2.2× 2.8× 3.3× 3.8× 1.4× 1.4× 2.2× 2.1× 1.9× 0.9× 3.8×

Function shape relative to the human project. Model ÷ human, geometric mean over tasks (47 for Sol 6.1, 50 for the others); 1× is the human project, above 1× is longer or branchier. 6 of 6 models branch more than the human code on the median, the 90th percentile and the worst function alike. Opus 5.5 is closest on cyclomatic p90, Muse 1.3 farthest.

Model functions are about as long as human ones; what differs is how much branching they carry and how the hardest functions look. The tabs below break the comparison out dimension by dimension, with absolute values for every model next to the human median.

Agent code against the human project, dimension by dimension. Median over tasks, at the last checkpoint.

Median function length
Median function lengthMedian function length, median over tasks: Human projects 6.5 lines, Claude Opus 5.5 5.7 lines, GPT 6.1 Sol 7.0 lines, Gemini 3.8 Flash 7.0 lines, Kimi K3 7.7 lines, Grok 4.7 9.3 lines, Muse Spark 1.3 12 lines. lines per function Muse Spark … Grok 4.7 Kimi K3 Gemini 3.8 … GPT 6.1 Sol Claude Opus… Human proje… 0 3 6 9 12 12 9.3 7.7 7 7 5.7 6.5

Lines per function. The median describes the typical function; the 90th percentile describes the long tail that a reader meets in the hardest parts of the code. Human median 6.5 lines. 5 of 6 models are above it; closest Sol 6.1 (7.0 lines), farthest Muse 1.3 (12 lines).

Function length, 90th percentile
Function length, 90th percentileFunction length, 90th percentile, median over tasks: Human projects 27 lines, Claude Opus 5.5 23 lines, Kimi K3 32 lines, GPT 6.1 Sol 33 lines, Grok 4.7 37 lines, Gemini 3.8 Flash 43 lines, Muse Spark 1.3 58 lines. lines per function Muse Spark … Gemini 3.8 … Grok 4.7 GPT 6.1 Sol Kimi K3 Claude Opus… Human proje… 0 10 20 30 40 50 60 58 43 37 33 32 23 27

Human median 27 lines. 5 of 6 models are above it; closest Opus 5.5 (23 lines), farthest Muse 1.3 (58 lines).

Median cyclomatic complexity per function
Median cyclomatic complexity per functionMedian cyclomatic complexity per function, median over tasks: Human projects 2.0, Claude Opus 5.5 2.5, Gemini 3.8 Flash 2.5, Kimi K3 3.0, GPT 6.1 Sol 3.3, Grok 4.7 4.0, Muse Spark 1.3 5.3. cyclomatic complexity Muse Spark … Grok 4.7 GPT 6.1 Sol Kimi K3 Gemini 3.8 … Claude Opus… Human proje… 0 1 2 3 4 5 6 5.3 4 3.3 3 2.5 2.5 2

Independent paths through each function. Model functions are not much longer than human ones, but they branch more: this is where the distance is largest. Human median 2.0. 6 of 6 models are above it; closest Opus 5.5 (2.5), farthest Muse 1.3 (5.3).

Cyclomatic complexity, 90th percentile
Cyclomatic complexity, 90th percentileCyclomatic complexity, 90th percentile, median over tasks: Human projects 7.0, Claude Opus 5.5 10.6, Kimi K3 12.2, Grok 4.7 16.2, GPT 6.1 Sol 17.5, Gemini 3.8 Flash 18.7, Muse Spark 1.3 25.6. cyclomatic complexity Muse Spark … Gemini 3.8 … GPT 6.1 Sol Grok 4.7 Kimi K3 Claude Opus… Human proje… 0 5 10 15 20 25 30 25.6 18.7 17.5 16.2 12.2 10.6 7

Human median 7.0. 6 of 6 models are above it; closest Opus 5.5 (10.6), farthest Muse 1.3 (25.6).

Cyclomatic complexity of the single most complex function
Cyclomatic complexity of the single most complex functionCyclomatic complexity of the single most complex function, median over tasks: Human projects 38, Claude Opus 5.5 50, Kimi K3 58, GPT 6.1 Sol 69, Grok 4.7 75, Gemini 3.8 Flash 136, Muse Spark 1.3 151. cyclomatic complexity Muse Spark … Gemini 3.8 … Grok 4.7 GPT 6.1 Sol Kimi K3 Claude Opus… Human proje… 0 30 60 90 120 150 180 151 136 75 69 58 50 38

Every codebase has a hardest function. This is the cyclomatic complexity of that one function, per task, as a median over tasks. Human median 38. 6 of 6 models are above it; closest Opus 5.5 (50), farthest Muse 1.3 (151).

Share of functions longer than 50 lines
Share of functions longer than 50 linesShare of functions longer than 50 lines, median over tasks: Human projects 2.9%, Claude Opus 5.5 2.4%, GPT 6.1 Sol 4.4%, Kimi K3 4.6%, Grok 4.7 6.0%, Gemini 3.8 Flash 9.1%, Muse Spark 1.3 11.6%. functions over 50 lines Muse Spark … Gemini 3.8 … Grok 4.7 Kimi K3 GPT 6.1 Sol Claude Opus… Human proje… 0% 3% 6% 9% 12% 11.6% 9.1% 6% 4.6% 4.4% 2.4% 2.9%

Long functions are where several responsibilities tend to pile up. The share is small for everyone, so differences of a point or two matter. Human median 2.9%. 5 of 6 models are above it; closest Opus 5.5 (2.4%), farthest Muse 1.3 (11.6%).

Share of all complexity inside functions with CC > 10
Share of all complexity inside functions with CC > 10Share of all complexity inside functions with CC > 10, median over tasks: Human projects 29.2%, Claude Opus 5.5 42.5%, Kimi K3 44.8%, Grok 4.7 58.1%, GPT 6.1 Sol 61.6%, Gemini 3.8 Flash 70.1%, Muse Spark 1.3 75.8%. erosion Muse Spark … Gemini 3.8 … GPT 6.1 Sol Grok 4.7 Kimi K3 Claude Opus… Human proje… 0% 20% 40% 60% 80% 75.8% 70.1% 61.6% 58.1% 44.8% 42.5% 29.2%

Erosion. The share of all cyclomatic complexity that sits inside functions whose complexity is above 10: how much of the program’s logic lives in already-hard functions. Human median 29.2%. 6 of 6 models are above it; closest Opus 5.5 (42.5%), farthest Muse 1.3 (75.8%).

Concentration of complexity across functions (Gini)
Concentration of complexity across functions (Gini)Concentration of complexity across functions (Gini), median over tasks: Human projects 50.1%, Claude Opus 5.5 52.5%, Kimi K3 53.3%, Grok 4.7 55.1%, GPT 6.1 Sol 57.3%, Muse Spark 1.3 61.5%, Gemini 3.8 Flash 65.4%. Gini coefficient Gemini 3.8 … Muse Spark … GPT 6.1 Sol Grok 4.7 Kimi K3 Claude Opus… Human proje… 0% 20% 40% 60% 80% 65.4% 61.5% 57.3% 55.1% 53.3% 52.5% 50.1%

Gini coefficient. How unevenly complexity is spread: higher means a few functions hold most of the decisions. Human median 50.1%. 6 of 6 models are above it; closest Opus 5.5 (52.5%), farthest Gemini 3.8 (65.4%).

Number of files
Number of filesNumber of files, median over tasks: Human projects 42 files, Muse Spark 1.3 2 files, Kimi K3 4 files, Grok 4.7 4 files, GPT 6.1 Sol 7 files, Gemini 3.8 Flash 10 files, Claude Opus 5.5 14 files. files Claude Opus… Gemini 3.8 … GPT 6.1 Sol Grok 4.7 Kimi K3 Muse Spark … Human proje… 0 10 20 30 40 50 14 10 7 4 4 2 42

How the code is split into files at the last checkpoint. Agent tests excluded. The human side here uses only the 10 coverage-scoped projects, because a full project’s file layout includes code the benchmark never exercises.

Median file size
Median file sizeMedian file size, median over tasks: Human projects 84 lines, Claude Opus 5.5 208 lines, GPT 6.1 Sol 216 lines, Gemini 3.8 Flash 342 lines, Kimi K3 850 lines, Grok 4.7 897 lines, Muse Spark 1.3 2055 lines. lines per file Muse Spark … Grok 4.7 Kimi K3 Gemini 3.8 … GPT 6.1 Sol Claude Opus… Human proje… 0 500 1000 1500 2000 2500 2055 897 850 342 216 208 84

Lines per file. The human value is over the 10 coverage-scoped tasks.

Largest file’s share of the code
Largest file’s share of the codeLargest file’s share of the code, median over tasks: Human projects 12%, Claude Opus 5.5 24%, Gemini 3.8 Flash 37%, GPT 6.1 Sol 42%, Kimi K3 72%, Grok 4.7 73%, Muse Spark 1.3 93%. largest file’s share Muse Spark … Grok 4.7 Kimi K3 GPT 6.1 Sol Gemini 3.8 … Claude Opus… Human proje… 0% 20% 40% 60% 80% 100% 93% 73% 72% 42% 37% 24% 12%

Share of final workspaces with all implementation code in one file: Muse 1.3 48%, Kimi K3 18%, Grok 4.7 15%, Gemini 3.8 2%, Opus 5.5 1%, Sol 6.1 0%.

Technical debt per 1,000 lines
Technical debt per 1,000 linesTechnical debt per 1,000 lines, model relative to the human project: Kimi K3 1.81×, GPT 6.1 Sol 2.39×, Claude Opus 5.5 2.42×, Grok 4.7 3.22×, Gemini 3.8 Flash 3.47×, Muse Spark 1.3 6.53×. × the human value Muse Spark … Gemini 3.8 … Grok 4.7 Claude Opus… GPT 6.1 Sol Kimi K3 0× 2× 4× 6× 8× 6.5× 3.5× 3.2× 2.4× 2.4× 1.8×

Per line, against the human project. Per-line density is the comparable view when the human reference is a whole project: a larger project has more lines, but not necessarily more debt per line. This panel draws on the originally analyzed human-reference cohort (43 of 48 projects; the C originals have no analyzer), rather than all 50 tasks. Bars show the model value divided by the human value on the same task, as a geometric mean over tasks (1× = human); for the two shares the bar is the median difference in percentage points. Agent-side values come from the last checkpoint’s static-analysis snapshot, where agent-written tests are part of the code. Rule sets differ by language, so read cross-language ratios as indicative. Human references: 9 coverage-scoped, 34 whole projects.

Cognitive complexity per 1,000 lines
Cognitive complexity per 1,000 linesCognitive complexity per 1,000 lines, model relative to the human project: Kimi K3 1.52×, GPT 6.1 Sol 1.66×, Gemini 3.8 Flash 1.81×, Claude Opus 5.5 1.9×, Grok 4.7 2.25×, Muse Spark 1.3 3.25×. × the human value Muse Spark … Grok 4.7 Claude Opus… Gemini 3.8 … GPT 6.1 Sol Kimi K3 0× 1× 2× 3× 4× 3.3× 2.3× 1.9× 1.8× 1.7× 1.5×

Model ÷ human, geometric mean over tasks; 1× is the human project.

Code smells per 1,000 lines
Code smells per 1,000 linesCode smells per 1,000 lines, model relative to the human project: Kimi K3 1.36×, Gemini 3.8 Flash 1.67×, GPT 6.1 Sol 1.72×, Claude Opus 5.5 2.02×, Grok 4.7 2.14×, Muse Spark 1.3 3.23×. × the human value Muse Spark … Grok 4.7 Claude Opus… GPT 6.1 Sol Gemini 3.8 … Kimi K3 0× 1× 2× 3× 4× 3.2× 2.1× 2.0× 1.7× 1.7× 1.4×

Model ÷ human, geometric mean over tasks; 1× is the human project.

Cognitive complexity per function
Cognitive complexity per functionCognitive complexity per function, model relative to the human project: GPT 6.1 Sol 1.38×, Claude Opus 5.5 1.47×, Kimi K3 1.74×, Gemini 3.8 Flash 2.53×, Grok 4.7 2.59×, Muse Spark 1.3 5.57×. × the human value Muse Spark … Grok 4.7 Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0× 1× 2× 3× 4× 5× 6× 5.6× 2.6× 2.5× 1.7× 1.5× 1.4×

Model ÷ human, geometric mean over tasks; 1× is the human project.

Share of functions with cognitive complexity above 15
Share of functions with cognitive complexity above 15Share of functions with cognitive complexity above 15, model relative to the human project: GPT 6.1 Sol 1.7 pts, Claude Opus 5.5 2.8 pts, Kimi K3 4.8 pts, Gemini 3.8 Flash 4.9 pts, Grok 4.7 10.2 pts, Muse Spark 1.3 19.0 pts. points above the human project Muse Spark … Grok 4.7 Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0 pts 5 pts 10 pts 15 pts 20 pts 19 pts 10.2 pts 4.9 pts 4.8 pts 2.8 pts 1.7 pts

Median difference from the human project, in percentage points.

Duplicated lines
Duplicated linesDuplicated lines, model relative to the human project: GPT 6.1 Sol -0.4 pts, Claude Opus 5.5 -0.4 pts, Grok 4.7 0.0 pts, Kimi K3 0.6 pts, Gemini 3.8 Flash 2.2 pts, Muse Spark 1.3 2.4 pts. points above the human project Muse Spark … Gemini 3.8 … Kimi K3 Grok 4.7 Claude Opus… GPT 6.1 Sol 0.5 pts 1 pts 1.5 pts 2 pts 2.4 pts 2.2 pts 0.6 pts 0 pts -0.4 pts -0.4 pts

Median difference from the human project, in percentage points; below zero is less duplication than the human code.

Reading the comparison together

The models are not far from human code in how long their functions are: the median function is 0.9–1.8× the human length. They are far in how much each function decides. The median function branches 1.4–2.8× as much as the human one, the single worst function is 1.3–3.8× as complex, and every model places a larger share of its complexity inside already-complex functions (43–76%, against 29% for the human projects). Agent code is mostly not much longer; it is denser in decisions, and those decisions concentrate.

No model is closest on everything. Opus 5.5 is closest on long-tail function length (p90), median branching, long-tail branching (p90), worst function, complexity inside complex functions, largest-file share; Sol 6.1 is closest on median function length; Kimi K3 is closest on debt per line. Muse 1.3 is the farthest from the human code on most of these dimensions.

File layout is where the models split most sharply. Human projects spread their code over many files (median 42 on the scoped tasks, largest file 12% of the code); Muse 1.3 keeps 93%, Grok 4.7 keeps 73%, Kimi K3 keeps 72% of its code in the largest file. A single large file is not wrong by itself, but combined with branch-heavy functions it is where every later session has to work.

What forms does slop take?

Aggregate metrics describe the result; run readings show how it happens. The examples below are mechanisms observed in real runs, not claims that every occurrence is harmful or that one example estimates a model-wide rate.

Error masking turns invalid input into silent behavior

Defensive code and error masking count broad exception handlers, errors that are silently swallowed, and type guards that return a default or skip input. A type check used only to dispatch between valid formats is not counted. Measured on the 38 tasks where the agents write Python.

Specific failure · the error remains visible python
try:
  raw = json.loads(raw)
except (ValueError, TypeError):
  raise DomainError("policy.errors")
if validate and not valid:
  raise DomainError("policy.errors")
Broad masking · the input disappears python
try:
  doc = json.loads(doc)
except Exception:
  continue
if isinstance(doc, dict):
  docs.append(doc)

Real functions from one task, anonymized by model. The first converts malformed input into an explicit domain error. The second catches any exception and silently skips the input.

All defensive constructs per 1,000 lines
All defensive constructs per 1,000 linesDefensive constructs per 1,000 lines, median over tasks: Kimi K3 12.6, GPT 6.1 Sol 12.7, Claude Opus 5.5 15.7, Gemini 3.8 Flash 16.3, Grok 4.7 20.4, Muse Spark 1.3 50.4. defensive constructs per 1,000 lines Muse Spark … Grok 4.7 Gemini 3.8 … Claude Opus… GPT 6.1 Sol Kimi K3 0 10 20 30 40 50 60 50.4 20.4 16.3 15.7 12.7 12.6

All defensive constructs. Broad handlers, silent swallows and guards that default or skip input, per 1,000 lines, median over tasks. Lower is better. Measured on the tasks where the agents write Python.

Broad or silent handlers per 1,000 lines
Broad or silent handlers per 1,000 linesBroad or silent exception handlers per 1,000 lines, median over tasks: GPT 6.1 Sol 1.5, Kimi K3 3.5, Claude Opus 5.5 3.8, Grok 4.7 4.5, Gemini 3.8 Flash 6.2, Muse Spark 1.3 36.1. broad or silent handlers per 1,000 lines Muse Spark … Gemini 3.8 … Grok 4.7 Claude Opus… Kimi K3 GPT 6.1 Sol 0 10 20 30 40 36.1 6.2 4.5 3.8 3.5 1.5

Broad or silent handlers. The subset that hides errors outright, per 1,000 lines, median over tasks. Lower is better. Measured on the tasks where the agents write Python.

Muse 1.3 stands apart on masking density: 36.1 broad or silent handlers per 1,000 lines, against 1.5–6.2 for the other models.

Static-analysis findings by kind

The same rule findings that make up technical debt, grouped by kind and normalized per 1,000 lines at the last checkpoint.

Complexity findings per 1,000 lines
Complexity findings per 1,000 linesComplexity findings per 1,000 lines at the last checkpoint: GPT 6.1 Sol 7.35, Claude Opus 5.5 8.25, Kimi K3 5.81, Gemini 3.8 Flash 6.42, Muse Spark 1.3 10.81, Grok 4.7 9.75. findings per 1,000 lines Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0 3 6 9 12 9.8 10.8 6.4 5.8 8.3 7.3

Complexity. Findings per 1,000 lines at the last checkpoint, scanned runs. Each tab has its own scale.

Duplication findings per 1,000 lines
Duplication findings per 1,000 linesDuplication findings per 1,000 lines at the last checkpoint: GPT 6.1 Sol 1.04, Claude Opus 5.5 1.54, Kimi K3 2.02, Gemini 3.8 Flash 2.27, Muse Spark 1.3 4.23, Grok 4.7 2.5. findings per 1,000 lines Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0 1 2 3 4 5 2.5 4.2 2.3 2.0 1.5 1.0

Duplication. Findings per 1,000 lines at the last checkpoint, scanned runs. Each tab has its own scale.

Error handling findings per 1,000 lines
Error handling findings per 1,000 linesError handling findings per 1,000 lines at the last checkpoint: GPT 6.1 Sol 0.52, Claude Opus 5.5 0.23, Kimi K3 0.12, Gemini 3.8 Flash 0.23, Muse Spark 1.3 2.04, Grok 4.7 0.15. findings per 1,000 lines Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0 0.5 1 1.5 2 2.5 0.1 2.0 0.2 0.1 0.2 0.5

Error handling. Findings per 1,000 lines at the last checkpoint, scanned runs. Each tab has its own scale.

Dead code findings per 1,000 lines
Dead code findings per 1,000 linesDead code findings per 1,000 lines at the last checkpoint: GPT 6.1 Sol 0.44, Claude Opus 5.5 2.19, Kimi K3 1.13, Gemini 3.8 Flash 1.31, Muse Spark 1.3 6.52, Grok 4.7 4.16. findings per 1,000 lines Grok 4.7 Muse Spark … Gemini 3.8 … Kimi K3 Claude Opus… GPT 6.1 Sol 0 2 4 6 8 4.2 6.5 1.3 1.1 2.2 0.4

Dead code. Findings per 1,000 lines at the last checkpoint, scanned runs. Each tab has its own scale.

The widest spread between models is in error handling findings (17.0× between the lowest and highest model).

What the comments say

Comments are where a model explains its code to the next session. We drew a fixed random sample of 100 comments per model from the final workspaces and gave each one a primary theme, from content-free narration and section banners to API contracts and the rationale for an edge case.

Trivial narration / restating code
Trivial narration / restating codeTrivial narration / restating code, share of 100 sampled comments per model with its 95% interval: GPT 6.1 Sol 4% (2–10%), Claude Opus 5.5 15% (9–23%), Kimi K3 16% (10–24%), Grok 4.7 18% (12–27%), Muse Spark 1.3 32% (24–42%), Gemini 3.8 Flash 45% (36–55%). share of sampled comments Gemini 3.8 … Muse Spark … Grok 4.7 Kimi K3 Claude Opus… GPT 6.1 Sol 0% 20% 40% 60% 45% [36%, 55%] 32% [24%, 42%] 18% [12%, 27%] 16% [10%, 24%] 15% [9%, 23%] 4% [2%, 10%]

Trivial narration / restating code. Content-free label or a fragment that merely restates the adjacent code or token; the ‘slop tell’. Share of 100 sampled comments per model; whiskers are 95% intervals.

Section banner / structural label
Section banner / structural labelSection banner / structural label, share of 100 sampled comments per model with its 95% interval: GPT 6.1 Sol 0% (0–4%), Grok 4.7 2% (1–7%), Muse Spark 1.3 7% (3–14%), Claude Opus 5.5 15% (9–23%), Gemini 3.8 Flash 21% (14–30%), Kimi K3 21% (14–30%). share of sampled comments Kimi K3 Gemini 3.8 … Claude Opus… Muse Spark … Grok 4.7 GPT 6.1 Sol 0% 10% 20% 30% 21% [14%, 30%] 21% [14%, 30%] 15% [9%, 23%] 7% [3%, 14%] 2% [1%, 7%] 0% [0%, 4%]

Section banner / structural label. Structural divider or section heading (dashed banner or a short noun-phrase label) organizing a file into regions. Share of 100 sampled comments per model; whiskers are 95% intervals.

API / contract documentation
API / contract documentationAPI / contract documentation, share of 100 sampled comments per model with its 95% interval: Gemini 3.8 Flash 14% (8–22%), Muse Spark 1.3 15% (9–23%), GPT 6.1 Sol 26% (18–35%), Grok 4.7 34% (26–44%), Kimi K3 39% (30–49%), Claude Opus 5.5 50% (40–60%). share of sampled comments Claude Opus… Kimi K3 Grok 4.7 GPT 6.1 Sol Muse Spark … Gemini 3.8 … 0% 20% 40% 60% 50% [40%, 60%] 39% [30%, 49%] 34% [26%, 44%] 26% [18%, 35%] 15% [9%, 23%] 14% [8%, 22%]

API / contract documentation. Docstring stating what a function, class or module does, its params, returns and raises — a formal behavioral contract for callers. Share of 100 sampled comments per model; whiskers are 95% intervals.

Edge-case / correctness rationale
Edge-case / correctness rationaleEdge-case / correctness rationale, share of 100 sampled comments per model with its 95% interval: Gemini 3.8 Flash 7% (3–14%), Kimi K3 7% (3–14%), Claude Opus 5.5 8% (4–15%), Muse Spark 1.3 12% (7–20%), Grok 4.7 20% (13–29%), GPT 6.1 Sol 26% (18–35%). share of sampled comments GPT 6.1 Sol Grok 4.7 Muse Spark … Claude Opus… Kimi K3 Gemini 3.8 … 0% 10% 20% 30% 40% 26% [18%, 35%] 20% [13%, 29%] 12% [7%, 20%] 8% [4%, 15%] 7% [3%, 14%] 7% [3%, 14%]

Edge-case / correctness rationale. Explains the handling of a tricky input, boundary, malformed or empty value, overflow, or safety corner — why the code rejects, preserves or special-cases it. Share of 100 sampled comments per model; whiskers are 95% intervals.

Design / architecture decision
Design / architecture decisionDesign / architecture decision, share of 100 sampled comments per model with its 95% interval: Gemini 3.8 Flash 0% (0–4%), Claude Opus 5.5 2% (1–7%), Kimi K3 4% (2–10%), Muse Spark 1.3 4% (2–10%), Grok 4.7 8% (4–15%), GPT 6.1 Sol 25% (18–34%). share of sampled comments GPT 6.1 Sol Grok 4.7 Muse Spark … Kimi K3 Claude Opus… Gemini 3.8 … 0% 10% 20% 30% 40% 25% [18%, 34%] 8% [4%, 15%] 4% [2%, 10%] 4% [2%, 10%] 2% [1%, 7%] 0% [0%, 4%]

Design / architecture decision. Justifies why a structure or approach was chosen: separation of layers, ownership, interface or dispatch, precedence policy, compatibility, or deliberate trade-offs. Share of 100 sampled comments per model; whiskers are 95% intervals.

Algorithm / logic explanation
Algorithm / logic explanationAlgorithm / logic explanation, share of 100 sampled comments per model with its 95% interval: Gemini 3.8 Flash 4% (2–10%), Kimi K3 4% (2–10%), Claude Opus 5.5 5% (2–11%), Grok 4.7 13% (8–21%), GPT 6.1 Sol 18% (12–27%), Muse Spark 1.3 23% (16–32%). share of sampled comments Muse Spark … GPT 6.1 Sol Grok 4.7 Claude Opus… Kimi K3 Gemini 3.8 … 0% 10% 20% 30% 23% [16%, 32%] 18% [12%, 27%] 13% [8%, 21%] 5% [2%, 11%] 4% [2%, 10%] 4% [2%, 10%]

Algorithm / logic explanation. Explains how a non-obvious step, rule, or mechanism works (parsing, precedence, ordering, traversal), without primarily justifying a structural choice. Share of 100 sampled comments per model; whiskers are 95% intervals.

Spec / standard reference
Spec / standard referenceSpec / standard reference, share of 100 sampled comments per model with its 95% interval: GPT 6.1 Sol 1% (0–5%), Claude Opus 5.5 2% (1–7%), Grok 4.7 3% (1–8%), Muse Spark 1.3 5% (2–11%), Kimi K3 7% (3–14%), Gemini 3.8 Flash 9% (5–16%). share of sampled comments Gemini 3.8 … Kimi K3 Muse Spark … Grok 4.7 Claude Opus… GPT 6.1 Sol 0% 5% 10% 15% 20% 9% [5%, 16%] 7% [3%, 14%] 5% [2%, 11%] 3% [1%, 8%] 2% [1%, 7%] 1% [0%, 5%]

Spec / standard reference. Anchors the code to a named external standard, RFC, policy, or task requirement ID (for example RFC 7540, Debian Policy, FR-018, DEC-030). Share of 100 sampled comments per model; whiskers are 95% intervals.

Tooling directive / pragma
Tooling directive / pragmaTooling directive / pragma, share of 100 sampled comments per model with its 95% interval: GPT 6.1 Sol 0% (0–4%), Gemini 3.8 Flash 0% (0–4%), Grok 4.7 2% (1–7%), Kimi K3 2% (1–7%), Muse Spark 1.3 2% (1–7%), Claude Opus 5.5 3% (1–8%). share of sampled comments Claude Opus… Muse Spark … Kimi K3 Grok 4.7 Gemini 3.8 … GPT 6.1 Sol 0% 2% 4% 6% 8% 3% [1%, 8%] 2% [1%, 7%] 2% [1%, 7%] 2% [1%, 7%] 0% [0%, 4%] 0% [0%, 4%]

Tooling directive / pragma. Machine-directed line captured as a comment: shebang, type: ignore, pragma, noqa — not prose for a human. Share of 100 sampled comments per model; whiskers are 95% intervals.

Content-free comments (trivial narration plus section banners) make up 66% of the sample for Gemini 3.8 and 4% for Sol 6.1. Comments that carry information a reader could not get from the code itself (contracts, edge-case rationale, design and algorithm explanations) range from 25% to 95% across models. The corpus counts in the table also differ widely: from 11,917 to 48,009 comments in the final workspaces, agent tests included.

Architecture drifts when old and new patterns remain live

Architecture drift means a checkpoint adds a second parser, validator, registry, or equivalent pattern while leaving the earlier implementation active. Because this requires understanding intent rather than matching syntax, it is an exploratory LLM-as-a-Judge study: one run per task and model in the original 10-task analysis subset, every transition read blind to the model with the full diff, all by the same reader.

Every model leaves a second live pattern behind in a sizeable share of its transitions
Every model leaves a second live pattern behind in a sizeable share of its transitionsShare of checkpoint transitions that add a second live pattern, clear cases only, with an interval: Claude Opus 5.5 23.0% (14 of 61; 14–35%; 57% counting borderline small copies), GPT 6.1 Sol 30.6% (19 of 62; 21–43%; 68% counting borderline small copies), Kimi K3 38.7% (24 of 62; 28–51%; 64% counting borderline small copies), Grok 4.7 47.7% (31 of 65; 36–60%; 68% counting borderline small copies), Gemini 3.8 Flash 49.2% (32 of 65; 38–61%; 72% counting borderline small copies), Muse Spark 1.3 64.5% (40 of 62; 52–75%; 79% counting borderline small copies). transitions with a second live pattern Muse Spark … Gemini 3.8 … Grok 4.7 Kimi K3 GPT 6.1 Sol Claude Opus… 0% 30% 60% 90% 64.5% [52%, 75%] 49.2% [38%, 61%] 47.7% [36%, 60%] 38.7% [28%, 51%] 30.6% [21%, 43%] 23% [14%, 35%]

Transitions that add a second live pattern. AI-read, on the original 10-task analysis subset, six models, clear cases only: a duplicated role of meaningful size with both copies live. Whiskers are the intervals.

Every model leaves a second live pattern behind in a sizeable share of its transitions, from 23% (Opus 5.5) to 64% (Muse 1.3) of transitions in clear cases. Counting borderline small copies as well, every model lands between 57% and 79% and the intervals overlap, so the ordering rests on the clear cases. With ten runs per model, read this as a direction, not a ranking: only the two ends are separated by their intervals.

Incremental versus all-at-once

As a control, we also gave each model the full sequence of requirements in one prompt. The results displayed here are from the earlier control cohort, not a recomputed 50-task comparison. Within that cohort, the share of runs that end with every test passing stays in the same range, but the resulting programs are much shorter. This isolates one cost of sequential work: code and decisions accumulate across sessions.

All-at-once uses less code at similar final correctness
All-at-once uses less code at similar final correctnessReduction in lines of code of the all-at-once final workspace against the incremental one, tests excluded: GPT 6.1 Sol 56.1%, Muse Spark 1.3 51.9%, Gemini 3.8 Flash 48.0%, Grok 4.7 43.8%, Kimi K3 31.7%, Claude Opus 5.5 19.3%. fewer lines than incremental Claude Opus… Kimi K3 Grok 4.7 Gemini 3.8 … Muse Spark … GPT 6.1 Sol 0% 10% 20% 30% 40% 50% 60% 19.3% 31.7% 43.8% 48% 51.9% 56.1%

Reduction in lines of code versus incremental. Final workspace, tests excluded. Earlier control cohort.

All-at-once has a single checkpoint, so the common correctness view is whether the final workspace passes every test. The incremental column is the leaderboard’s last checkpoint fully passed rate.

ModelLines versus incrementalLast checkpoint fully passed, incremental → all-at-once
GPT 6.1 Sol-56%83.7% → 91.0% (+7.3 p.p.)
Claude Opus 5.5-19%75.7% → 90.1% (+14.4 p.p.)
Kimi K3-32%60.4% → 72.3% (+11.9 p.p.)
Gemini 3.8 Flash-48%56.2% → 59.0% (+2.8 p.p.)
Muse Spark 1.3-52%34.0% → 40.9% (+6.9 p.p.)
Grok 4.7-44%23.6% → 27.1% (+3.5 p.p.)

Shorter does not mean cleaner. In all-at-once runs, Sol 6.1 has +35% debt, +32% cyclomatic complexity, +42% cognitive complexity and +40% smells per 1,000 lines. The control points to a tradeoff: incremental delivery encourages accumulation, while one large request compresses similar behavior into fewer, denser structures.

Model profiles

Each profile lists the dimensions on which a model ranks best or weakest among the six; the table after them gives every model’s rank on every dimension (1 = best; for cost, erosion, file concentration and masking, lower is better).

GPT 6.1 Sol

Best on last checkpoint fully passed (83.7%); mean checkpoint rate (90.1%); final tests passed (99.8%); cost per run ($2.49); regression-free runs (87.5%); consistency, all 3 runs perfect (72.9%); broad or silent handlers (1.5 per 1,000 lines).

Claude Opus 5.5

Best on erosion (43%); largest-file share (24%).

Kimi K3

Never best or weakest on these dimensions; mid-table throughout.

Gemini 3.8 Flash

Weakest on cost per run ($25.02).

Muse Spark 1.3

Weakest on erosion (76%); largest-file share (93%); broad or silent handlers (36.1 per 1,000 lines).

Grok 4.7

Weakest on last checkpoint fully passed (23.6%); mean checkpoint rate (47.6%); final tests passed (93.2%); regression-free runs (23.6%); consistency, all 3 runs perfect (10.4%).

DimensionSol 6.1Opus 5.5Kimi K3Gemini 3.8Muse 1.3Grok 4.7
Last checkpoint fully passed1 · 83.7%2 · 75.7%3 · 60.4%4 · 56.2%5 · 34.0%6 · 23.6%
Mean checkpoint rate1 · 90.1%2 · 86.2%4 · 72.5%3 · 73.7%5 · 53.8%6 · 47.6%
Final tests passed1 · 99.8%2 · 99.5%4 · 97.8%3 · 98.4%5 · 95.0%6 · 93.2%
Cost per run1 · $2.493 · $10.195 · $20.226 · $25.024 · $17.882 · $7.86
Regression-free runs1 · 87.5%2 · 75.0%3 · 58.3%4 · 56.9%5 · 35.0%6 · 23.6%
Consistency (all 3 perfect)1 · 72.9%2 · 54.2%3 · 35.4%4 · 29.2%5 · 12.5%6 · 10.4%
Erosion4 · 62%1 · 43%2 · 45%5 · 70%6 · 76%3 · 58%
Largest-file share3 · 42%1 · 24%4 · 72%2 · 37%6 · 93%5 · 73%
Broad or silent handlers per 1,000 lines1 · 1.53 · 3.82 · 3.55 · 6.26 · 36.14 · 4.5

Each cell is the model’s rank among the six, then its value.

Why these findings matter

Correctness remains the first requirement for a coding agent. SlopCode Vetted shows why it is not a complete training signal. Two runs can receive almost the same final test reward while creating very different future work: one leaves localized decisions; another leaves a monolith with broad exception handling, parallel implementations, and behavior outside the request.

This matters for long-horizon agents and reinforcement-learning environments. A reward attached only to the current checkpoint can make locally useful patches rational even when they increase the cost of every later request. Sequential requirements, regression tests, and measurements of the evolving workspace expose that delayed cost.

The results also argue against collapsing a familiar static-analysis total into a quality score. Totals mostly rank how much code a model writes. Density removes part of that confound but can reward compact, highly concentrated logic. Function shape reveals concentration but cannot tell whether the code implements more behavior than requested. Slop is not one existing metric with a new name.

What’s next

We are exploring whether these signals can be compiled into a smaller set of benchmark metrics. The current evidence suggests separating structural slop—concentration of decisions, duplication, error masking, and architecture drift—from excess relative to the request, which requires the specification and a view of how much code or behavior was added for each graded requirement.

We have not selected or validated a combined score. Early candidates were vulnerable to language differences, test coverage, or trivial dilution. We plan to validate the surviving ideas on held-out, same-language tasks and report them as a follow-up rather than presenting an unfinished scalar metric as a result of this release.

Limitations

  • Three trials per cell. 50 tasks and three runs per task and model make aggregate gaps of a few points directional, and single task–model cells indicative only: one run moves a cell by a third of its range.
  • Language mismatch. Most human references are written in a different language from the agents’ solutions, so size and rule-density comparisons with human code are avoided; the human comparison uses function and file shape.
  • Static metrics are not correctness metrics. Tests measure behavior; static analysis describes the implementation left behind.

Appendix

Task set and protocol

The benchmark covers 50 tasks derived from open-source projects originally implemented in Go, Python, TypeScript, C, JavaScript. Each task contains successive feature requests, a runnable workspace, and hidden tests attached to each checkpoint. Every checkpoint is a fresh agent session on the inherited workspace. All models use the same minimal agent scaffold and limits. Results are computed per run, averaged within a task, then averaged across tasks so long tasks do not automatically dominate the aggregate.

Metric definitions

Mean checkpoint rate is the fraction of checkpoints whose complete cumulative test group passes. Final test pass is the fraction of individual tests passing in the last workspace. Last checkpoint fully passed is the share of runs whose last checkpoint passes every test. Regression carried counts earlier-green behavior that fails later and remains broken. Cost is the platform-billed cost of one run; cost per passed checkpoint divides a model’s total cost by the checkpoints it passed outright.

Lines of code are non-blank lines of the agent’s implementation files, excluding agent-written tests, vendored libraries, binaries and generated files. Technical debt sums fixed repair-time estimates for static-analysis findings. Cyclomatic complexity counts independent control-flow paths. Cognitive complexity adds penalties for nested and hard-to-follow flow. Erosion is the share of total cyclomatic complexity inside functions with cyclomatic complexity above ten. p90 is the value below which 90% of functions fall. Ratios to the human project are geometric means over tasks.

Code smells are maintainability findings such as excessive parameters, repeated literals, or empty branches. Duplicated lines are lines inside repeated blocks of at least six normalized lines. Defensive code covers broad exception handlers, silent swallows, and type or attribute guards that default, skip, or raise rather than merely dispatch between supported input shapes.

see the leaderboard explore all research