Auditing SlopCodeBench

It measures static code-shape drift, not yet extension robustness.

SlopCodeBench asks whether iteration degrades agent code, and answers that agents lack the design discipline iterative development demands. The instrument between question and answer is a pair of static code-shape metrics that usually rise as specifications expand. Connecting the two needs two links: that the metrics measure extension robustness, and that iteration moved them. The paper supplies neither. Construct receipt.

I audit public benchmarks to make them better. This one asks a question worth answering, so it gets the full treatment.

The ruler misses

Structural erosion is the share of complexity concentrated in functions above a cyclomatic-complexity threshold. The paper reports its correlation with passing the next checkpoint: −0.018. Lines of code reaches −0.212. For next-checkpoint cost, erosion reaches 0.167 and LOC 0.502. A plain line count reads the future better than the instrument built for it.

Verbosity has a different problem. Its 137 rules were developed partly from observed agent code, then used to conclude that agent code is 2.3 times as verbose as human repositories. A ruler built partly from one population’s characteristic marks will distinguish that population by construction. The comparison needs to survive on clone coverage alone, on rules developed without the evaluated agents, or under blinded human judgment. None is reported.

Iteration is not the treatment

Every checkpoint adds requirements. Later code has undergone more edits, has more work to do, and faces a harder specification. The experiment changes all three together.

The comparison against commits from 473 unrelated Python repositories does not separate them. Those commits are a calibration panel. Nobody reimplemented the cumulative specifications from scratch.

Under SlopCodeBench’s combination of repeated editing and expanding scope, its static metrics rise. “Iteration causes degradation” requires the missing counterfactual.

The frontier was selected

The authors removed proposed problems that frontier agents could solve in one shot, then reported that no agent solved a surviving problem end to end. Saturation filtering can preserve headroom. It also conditions the result on model failure.

The paper does not report the screening models and versions, the number removed, an unfiltered comparison, or an independent human baseline. The low score is performance on a set selected partly because frontier agents failed it, not an unconditioned estimate of iterative coding ability. Selection receipt.

The spec is not the contract

At each checkpoint the agent sees one spec file, its own prior code, and nothing else. The tests stay hidden. That design is sound when the tests grade what the spec states. They don’t always. In a 12-problem sample covering 65 checkpoints, 28 of 343 core tests assert exact values no visible spec states, implies by rule, or shows in an example, and one more is contested. Core tests alone decide checkpoint success. Each of the 28 survived an adversarial pass instructed to refute it under the paper’s own definition of core: “functionality explicitly mentioned or shown in the specification.” Oracle receipt.

problem core tests, red = graded on values the spec never determines cfgpipe0/23 dag_execution2/20 datagate3/62 dynamic_buffer6/24 eve_route_planner1/4 file_backup1/4 meshctl2/30 migrate_configs0/9 mocked_http6/41 sheeteval4/24 trajectory_api1/33 xjq2/69 Core tests per sampled problem. Red: confirmed to grade a value the agent-visible specs never state, imply, or show. 28 of 343 total. One failing core test fails the checkpoint.

This is a guessing game. For example, a dynamic_buffer core test shows the agent this sample and asks it to infer the filter:

{id 1, Hello,      normal}  → kept        {id 2, Buy now,    spam}  → dropped
{id 3, Meeting,    normal}  → kept        {id 4, Free money, spam}  → dropped
{id 5, Report,     normal}  → kept

The spec’s grammar allows comparisons to constants under AND/OR, with no preference rule. Two hypotheses reproduce the sample exactly: category != "spam", and id != 2 AND id != 4. The hidden data contains ids 10 through 14, so the first passes and the second keeps every row and fails. Everything the agent can see supports both. The information that separates them exists only inside the test the agent is not shown.

For those checkpoints the benchmark grades agreement with unpublished author conventions, and one wrong guess fails the checkpoint.

Nobody disclosed a red team

The paper describes coauthor review and agent-assisted refinement of ambiguous tests. That is maker QC. It does not disclose an independent team asked to break the construct, run the answer keys, mutate passing golds, or rederive the scores. As far as the paper discloses, this audit is the first adversarial contact the evaluator has had.

clean · 183 non-hermetic · 8 test_translator, unpinned npx defective · 4 dynamic_buffer 2-4, env_manager 3 unstable · 1 pwd_manager 4 All 196 answer keys through the benchmark's own harness in its own Docker image, one cell each.

No independent adversarial validity audit is disclosed, and the internal process missed defects across the claim, selection, gold, oracle, spec, frame, and score clauses. Review-process receipt.

The next experiment

At checkpoint n, give one agent its checkpoint n−1 workspace. Give another an empty workspace plus the complete specification through n. Hold model, harness, budget, specification, and tests fixed. The difference estimates the cost of accumulated history; their shared decline estimates task growth.

Then validate erosion against an external outcome: defects in checkpoint n+1, maintenance time, or success by a blinded agent inheriting the code. Control for LOC. If the metric does not predict future maintenance cost, call it static code-shape drift.

Publish the sampling funnel: every candidate, exclusion, screening model, and one-shot result. Test preservation requirements, run mutation and frame-breaking probes, and verify every gold in the public harness. Release immutable benchmark versions, scored workspaces, per-checkpoint rows, and the leaderboard calculation.

Commission an independent team to attack the evaluator before release, then publish the attacks and fixes.

Until those controls exist, report static code-shape drift under iterative specification refinement. The next version needs a control group more than another model.

Reproduce the audit: pinned sources, scripts, tests, and finding-level receipts.

Disclosure: Claude challenged candidate findings during the audit. Its objections narrowed the claims; the receipts decide them.