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?
SlopCode: Vetto’s version
Gabriel Albuquerque·Lucas Smaira
Published Oct 21, 2026·24 min read
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%
1GPT 6.1 SolOpenAI83.7%
2Claude Opus 5.5Anthropic75.7%
3Kimi K3Moonshot AI60.4%
4Gemini 3.8 FlashGoogle DeepMind56.2%
5Muse Spark 1.3Meta34.0%
6Grok 4.7xAI23.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.
#
Model
Last checkpoint fully passed
≥95% at last
Tests passed at last
Mean checkpoint rate
1
GPT 6.1 Sol
83.7%
100.0%
99.8%
90.1%
2
Claude Opus 5.5
75.7%
98.6%
99.5%
86.2%
3
Kimi K3
60.4%
90.3%
97.8%
72.5%
4
Gemini 3.8 Flash
56.2%
91.0%
98.4%
73.7%
5
Muse Spark 1.3
34.0%
69.1%
95.0%
53.8%
6
Grok 4.7
23.6%
66.0%
93.2%
47.6%
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
Number of tasks. 368 checkpoints in total.
Nineteen of the originals are written in Go
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
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.
Model
first
25%
50%
75%
last
GPT 6.1 Sol
0.1%
0.1%
0.1%
0.1%
0.2%
Claude Opus 5.5
0.2%
0.4%
0.4%
0.4%
0.5%
Kimi K3
1.1%
1.2%
2.2%
2.4%
2.2%
Gemini 3.8 Flash
0.9%
0.9%
1.1%
1.5%
1.6%
Muse Spark 1.3
0.8%
2.8%
4.5%
5.1%
5.0%
Grok 4.7
3.5%
5.4%
7.0%
7.0%
6.8%
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. 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. 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
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.
Mechanism
Grok 4.7
Muse 1.3
Gemini 3.8
Kimi K3
Opus 5.5
Sol 6.1
What it means
Wrong rule
49
45
17
17
7
2
the feature exists but a rule, precedence, boundary or edge case is wrong
Missing requirement
17
10
7
2
1
1
a required field, case or feature was not implemented or was dropped
Output detail
18
14
3
3
3
0
whitespace, ordering, escaping or number rendering differs from the contract
Regression
19
10
14
2
0
0
behavior that passed earlier broke when a later checkpoint changed the code
Error handling
14
10
4
2
2
0
wrong error kind or exit code, or an error swallowed
Unrequested behavior
10
6
2
3
5
4
something the request did not ask for, often recalled from the real library
Interface contract
13
5
0
2
0
0
CLI flags, file locations or response envelope do not match
Other
12
11
4
2
0
0
—
Total
152
111
51
33
18
7
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
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 checkpoint. Total spend divided by the checkpoints passed outright, in US dollars.
Agent steps per run
Agent steps. Median model calls in one run.
Model
Mean / run
Total (48-task cohort)
Per passed checkpoint
Median steps
Median output tokens
Median hours
Sol 6.1
$2.49
$359
$0.37
116
132k
1.1
Grok 4.7
$7.86
$1,131
$2.16
227
161k
0.7
Opus 5.5
$10.19
$1,467
$1.55
140
248k
0.8
Muse 1.3
$17.88
$2,575
$4.39
354
771k
3.0
Kimi K3
$20.22
$2,912
$3.75
258
456k
2.8
Gemini 3.8
$25.02
$3,604
$4.46
648
921k
2.9
Cost is the platform-billed cost of a whole run, all checkpoints included. The spend totals shown here cover the original 48-task cohort (144 runs per model); the 50-task totals cannot be reconstructed from the aggregate numbers in this page.
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
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
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
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
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
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
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
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
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
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).
Model
Cyclomatic
Cognitive
Smells
Debt
Per-line reading
Tasks
Sol 6.1
231 → 1.1k
315 → 1.4k
15 → 58
214 → 882
cognitive 0.88× · smells 0.86× · debt 0.87×
44
Opus 5.5
366 → 1.2k
494 → 1.5k
19 → 76
262 → 813
smells 0.90×
46
Kimi K3
200 → 1.1k
307 → 1.5k
13 → 50
172 → 800
in step · 0.92–1.06×
46
Gemini 3.8
236 → 1.5k
408 → 2.2k
14 → 87
322 → 2.0k
smells 1.23× · debt 1.18×
46
Muse 1.3
250 → 1.7k
522 → 3.4k
26 → 143
508 → 3.2k
debt 1.15×
46
Grok 4.7
301 → 1.6k
422 → 2.1k
18 → 94
262 → 1.4k
in step · 1.00–1.06×
46
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
Implementation size. Median over tasks, in lines of code.
Model
Lines at first
Lines at last
Growth
Files at first
Files at last
Tasks
Sol 6.1
514
2,274
4.4×
2.0
7.3
50
Opus 5.5
967
3,766
3.9×
6.3
14.2
50
Kimi K3
746
4,285
5.7×
2.0
3.5
50
Gemini 3.8
862
4,905
5.7×
5.7
10.2
50
Muse 1.3
862
5,094
5.9×
1.3
2.0
50
Grok 4.7
966
4,730
4.9×
2.3
3.7
50
Muse 1.3 grows the most, Opus 5.5 the least relative to where it starts
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. Total cognitive complexity of the implementation, median over tasks.
Median cognitive complexity of a function, first → 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
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 19python
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 + 1python
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, vdef 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
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
Length, median
Length, p90
Branching, median
Branching, p90
Worst function
Erosion (median)
Sol 6.1
0.99×
1.19×
1.78×
2.02×
1.60×
62%
Opus 5.5
0.90×
0.90×
1.42×
1.40×
1.27×
43%
Kimi K3
1.19×
1.21×
1.65×
1.58×
1.34×
45%
Gemini 3.8
1.15×
1.75×
1.50×
2.36×
3.29×
70%
Muse 1.3
1.76×
2.20×
2.80×
3.30×
3.78×
76%
Grok 4.7
1.42×
1.43×
2.19×
2.15×
1.90×
58%
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
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
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
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
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
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
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
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)
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
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
Lines per file. The human value is over the 10 coverage-scoped tasks.
Largest file’s share of the code
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
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
Model ÷ human, geometric mean over tasks; 1× is the human project.
Code smells per 1,000 lines
Model ÷ human, geometric mean over tasks; 1× is the human project.
Cognitive complexity per function
Model ÷ human, geometric mean over tasks; 1× is the human project.
Share of functions with cognitive complexity above 15
Median difference from the human project, in percentage points.
Duplicated lines
Median difference from the human project, in percentage points; below zero is less duplication than the human code.
Metric
Sol 6.1
Opus 5.5
Kimi K3
Gemini 3.8
Muse 1.3
Grok 4.7
Technical debt per 1,000 lines
2.39×
2.42×
1.81×
3.47×
6.53×
3.22×
Cognitive complexity per 1,000 lines
1.66×
1.90×
1.52×
1.81×
3.25×
2.25×
Code smells per 1,000 lines
1.72×
2.02×
1.36×
1.67×
3.23×
2.14×
Cognitive complexity per function
1.38×
1.47×
1.74×
2.53×
5.57×
2.59×
Share of functions with cognitive complexity > 15
+1.7 pts
+2.8 pts
+4.8 pts
+4.9 pts
+19.0 pts
+10.2 pts
Duplicated lines
-0.4 pts
-0.4 pts
+0.6 pts
+2.2 pts
+2.4 pts
+0.0 pts
Human medians are over all 50 tasks unless the tab says otherwise.
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 visiblepython
try: raw = json.loads(raw)except (ValueError, TypeError): raise DomainError("policy.errors")if validate and not valid: raise DomainError("policy.errors")
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. 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. 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 lines at the last checkpoint, scanned runs. Each tab has its own scale.
Duplication findings per 1,000 lines
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 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 lines at the last checkpoint, scanned runs. Each tab has its own scale.
Kind
Sol 6.1
Opus 5.5
Kimi K3
Gemini 3.8
Muse 1.3
Grok 4.7
Complexity
7.35
8.25
5.81
6.42
10.81
9.75
Duplication
1.04
1.54
2.02
2.27
4.23
2.50
Error handling
0.52
0.23
0.12
0.23
2.04
0.15
Dead code
0.44
2.19
1.13
1.31
6.52
4.16
Findings per 1,000 lines at the last checkpoint.
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 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 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 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 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 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 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 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 / 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.
Model
Comments in corpus
Sampled
Trivial narration
Section banner
API
Edge-case
Design
Algorithm
Spec
Tooling directive
Sol 6.1
11,917
100
4%
0%
26%
26%
25%
18%
1%
0%
Opus 5.5
24,387
100
15%
15%
50%
8%
2%
5%
2%
3%
Gemini 3.8
37,020
100
45%
21%
14%
7%
0%
4%
9%
0%
Grok 4.7
38,415
100
18%
2%
34%
20%
8%
13%
3%
2%
Kimi K3
48,009
100
16%
21%
39%
7%
4%
4%
7%
2%
Muse 1.3
42,064
100
32%
7%
15%
12%
4%
23%
5%
2%
One theme per comment, assigned by a single reader blind to model and task. With 100 comments per model, differences of a few points are within the intervals; compare the whiskers, not the bar ends.
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
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
Reduction in lines of code versus incremental. Final workspace, tests excluded. Earlier control cohort.
Model
Lines
Debt / kloc
Cyclomatic / kloc
Cognitive / kloc
Smells / kloc
Sol 6.1
-56%
+35%
+32%
+42%
+40%
Opus 5.5
-19%
+13%
+1%
+3%
+20%
Gemini 3.8
-48%
-23%
-8%
-18%
-10%
Grok 4.7
-44%
+8%
+3%
+6%
+14%
Kimi K3
-32%
+13%
+10%
+16%
+11%
Muse 1.3
-52%
+1%
+4%
-3%
+40%
All-at-once against incremental, per 1,000 lines.
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.
Model
Lines versus incremental
Last 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%).
Dimension
Sol 6.1
Opus 5.5
Kimi K3
Gemini 3.8
Muse 1.3
Grok 4.7
Last checkpoint fully passed
1 · 83.7%
2 · 75.7%
3 · 60.4%
4 · 56.2%
5 · 34.0%
6 · 23.6%
Mean checkpoint rate
1 · 90.1%
2 · 86.2%
4 · 72.5%
3 · 73.7%
5 · 53.8%
6 · 47.6%
Final tests passed
1 · 99.8%
2 · 99.5%
4 · 97.8%
3 · 98.4%
5 · 95.0%
6 · 93.2%
Cost per run
1 · $2.49
3 · $10.19
5 · $20.22
6 · $25.02
4 · $17.88
2 · $7.86
Regression-free runs
1 · 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%
Erosion
4 · 62%
1 · 43%
2 · 45%
5 · 70%
6 · 76%
3 · 58%
Largest-file share
3 · 42%
1 · 24%
4 · 72%
2 · 37%
6 · 93%
5 · 73%
Broad or silent handlers per 1,000 lines
1 · 1.5
3 · 3.8
2 · 3.5
5 · 6.2
6 · 36.1
4 · 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.