Parsewave / Benchmark Research / SWE-sweep

We PR’d fixes to 47 of SWE-sweep’s 100 tasks

SWE-sweep, released by Meta on 1 October 2026, asks a coding agent to find and fix hidden bugs in a real open-source repository, with no hints. Each of its 100 tasks is one repository, and together they hold 4,068 bugs. The leaderboard's top agent, Astra 6, fixes 9.5% of the bugs in the 93 tasks it was run on.

We found grading errors in 47 of those tasks: 17 regression-test lists that were empty or thin, 136 bugs that should not count (126 duplicates and 10 that an empty patch passes), and 7 tasks where SWE-sweep's own official fixes scored 0. We opened pull requests to fix them, and we are working with the SWE-sweep team to get the fixes merged. The rest of this report walks through what we found.

Glossary

Task
A SWE-sweep task is a frozen commit of one open-source repository, known to contain bugs for the agent to find and fix.
Bug
One defect in a task's code. Each comes with SWE-sweep's own official fix and with hidden tests that the agent never sees. A bug passes when its hidden tests pass.
Patch
What the agent submits: one set of changes to the task's code, covering every bug it fixes. SWE-sweep grades the whole patch at once.
Score
A task's score is the fraction of its bugs that pass. The benchmark score is the bugs that count across all tasks, out of 4,068.
Regression tests
The repository's own existing tests that pass on the untouched code. They have to keep passing after the agent's patch, so they check that fixing one bug does not break anything else.
Zero rule
If any regression test newly fails, the whole task scores 0, so none of its bugs count, however many passed.
Golden solution
All of a task's official fixes applied together as one patch. It should score close to full marks.
Empty patch
A patch that changes nothing. It should score 0.
As released
SWE-sweep at commit 5968c69, before our fixes.

The 47 tasks we fixed

We grouped our changes into six fixes in five pull requests (#53 to #57, none merged yet; Fixes 3 and 4 share one). Together they change these 47 tasks. Select a row to open its record.

Sort
  • passed and counted
  • passed, task scored 0
  • did not build
  • –no grading

The 47 SWE-sweep tasks we fixed. Select a row to open its record.
Language Changed by
    Values read as released → with our fixes.
    Notes
    • Bugs: the task's bugs as released, and how many remain once Fix 3 removes bugs an empty patch passes and Fix 4 removes duplicates.
    • Regression tests: the number of tests on the task's regression-test list; “none” means the list was empty. The “with our fixes” count merges the lists from the fixes' branches file by file; that merged list has not been graded as a whole.
    • Golden solution: the share of the task's bugs whose hidden tests pass with the golden solution. Hatched: they passed, but the zero rule scored the task 0. Dashed outline: the task image did not build. Dash: no grading was published.
    • Each fix was graded on its own branch, and the six have not yet been graded together, so the “with our fixes” column is an estimate. A branch holds only its own fix, so a task that several fixes change still has, on each branch, the problems the other fixes remove: keycloak passes 8 of 57 bugs on the branch of Fixes 3 and 4, which lacks Fix 1's build repair, and 61 of 64 on Fix 1's branch. The table shows a task's best branch, except that a 0 on any branch always wins (rails shows 0 because of Fix 5's lists). A task that scored 0 as released shows the branch of the fix that changes it. An official fix marked “left out” does not apply on top of the others, so its bug does not pass.
    • Changed by: the fixes that change the task. Its record lists every grading of its golden solution and empty patch, branch by branch, and what each fix changes in it.
    • Sources: the validation gradings in each fix's pull request, and our audit (working draft).

    Fix 1 · 16 tasks · pull request #54

    Keep correct fixes the grader threw out

    Before grading, the grader undoes any edit the agent made to a test file. As released, it decides what a test file is by name alone, so in rails it undid 4 official fixes whose files have test-like names. In trino, one official fix changes a constructor that an existing test still calls; because test edits are undone, most other bugs' tests stop compiling. Elsewhere, official fixes broke the build as packaged, and compiled hidden tests ran from binaries built before the fix. Fix 1 declares each task's test and source folders, rebuilds compiled hidden tests, adjusts four official fixes and adds a command that grades a task's empty patch and official fixes.

    Figure 1. Share of each task's bugs whose hidden tests pass with the golden solution, as released and with Fix 1; whether the task then scores depends on its regression tests. ‡ tarantool's 39 includes one bug an empty patch also passes, which Fix 3 removes. The released values for rails, keycloak and swc are from Fix 1's description. Source: Fix 1's validation.

    Fix 2 · 3 tasks · pull request #57

    Remove official fixes from the task images

    Three task images were built without pinned dependency versions, so they pulled in newer code that already contains some of the fixes the agent is asked to write: 10 of syn's 13, 7 of go's 98 and 1 of symfony's 149. One of our own Astra 6 trials found that shortcut by comparing go's bootstrap compiler sources with the task's own; 3 of the 4 go bugs whose hidden tests it passed were among the 7 leaked ones. Fix 2 pins all three images to versions without these fixes and makes each image build fail if the leaked code comes back. The golden solution scores the same before and after (syn 13 of 13, symfony 148 of 149).

    Figure 2. Official fixes already present in files the agent can read, before Fix 2's pins; one square per bug. go's bootstrap compiler came from the tag golang:1.17-bullseye, which has pointed at Go 1.17.13 since August 2022. Sources: Fix 2's branch; go checked by reverse-applying each official fix to the Go 1.17.13 sources.

    Fix 3 · 9 tasks · pull request #56

    Remove bugs an empty patch passes

    An empty patch changes nothing, so it should pass nothing. For 10 bugs in 9 tasks it passes anyway, because the hidden test can already pass on the unfixed code; in tarantool that happens only once Fix 1 rebuilds the hidden tests. Fix 3 removes all 10 bugs, which lowers the score of any agent they counted for.

    Figure 3. Gradings of an empty patch, one square per grading. ¹ 5 of 5 in Fix 3's gradings; in our audit an empty patch passed in 14 of 30 runs made without Go's race detector (-race). ² Only once Fix 1 compiles its hidden test. As released, no patch passes it, so removing it costs nothing. Source: the validation gradings of Fixes 3 and 4.

    Fix 4 · 16 tasks · pull request #56

    Remove duplicate bugs

    In 16 tasks the same bug appears more than once, with the same official fix, the same hidden test, or both, so fixing it counts twice and missing it costs twice. In hdf5, proj and sunpy more than a quarter of the bugs were duplicates. Fix 4 removes 126 duplicates and keeps one of each. With Fix 3's 10 removals, SWE-sweep goes from 4,068 bugs to 3,932. Of our model gradings, 33 are on tasks that Fixes 3 and 4 change, and the fixes move 8 of those scores up and 3 down.

    Figure 4. Bugs removed as duplicates of another bug in the same task, with the same official fix, the same hidden test, or both; 6 of them were confirmed by grading. All rows use one scale, up to pandas's 228 bugs. rxjava and duckdb also lose bugs an empty patch passes (Figure 3), which are not counted here. The paper's rule removes a bug whose official fix or hidden test patch is identical to another bug's. Only 2 of the 126 removed fixes are byte-identical to the fix that stays, and none of the removed hidden test patches is; most differ only in line numbers or context. Source: the branch of Fixes 3 and 4.

    Fix 5 · 17 tasks · pull request #55

    Rebuild regression-test lists that checked little or nothing

    The zero rule only works if the regression-test list holds the repository's tests. In 11 of these 17 tasks the list was empty, so a patch could break existing behaviour and still score full marks. In the other 6 it checked only 3 to 519 tests. Fix 5 rebuilds all 17 lists from repeated runs on the untouched code, taking them from 784 regression tests to 165,757, and adds a checker that flags empty or inconsistent lists. In elixir the old list held one entry for the whole Mix app, so one correct fix that changes 3 tests in the app's deps_test.exs made that entry fail. Fix 5 sets the file aside, and elixir's golden solution scores again.

    Figure 5. Regression tests in the 17 lists Fix 5 rebuilds, as released and with Fix 5, log scale; an empty list sits in the “none” lane. symfony's and syn's lists were built on Fix 2's pinned images. Source: base_tests.json.gz as released and on Fix 5's branch.
    Notes

    Most lists were empty or thin because the grader could not read the test run. The whole-suite run never finished in netty (a test that resolves real host names hangs offline) and stopped early in rails; v's own test runner broke its file paths and failed 1,089 of 1,424 files; nim's and symfony's results came in a form the grader's reader did not parse; and Maven stopped at the first module with a failing test, so keycloak's list covered 49 tests and dolphinscheduler's 109. Fix 5 repairs these test drivers so that each test reports its own result.

    Each list was then re-recorded from repeated runs on the untouched code. Tests that did not pass in every run, or that an official fix is meant to change, are set aside instead of listed (148 in rails, 56 in nim), so the zero rule does not fire on them. The new checker, tasks/check_base_lists.py, flags empty lists, placeholder entries and counts that disagree with the task's metadata.

    Fix 6 · 14 tasks · pull request #53

    Stop false regression-test failures from scoring tasks 0

    The zero rule counts one regression-test failure the same as four hundred, and it does not ask why the test failed. In 14 tasks a regression test can fail even when the patch is right. When the benchmark was renamed, the prefix its Julia driver puts on test names became swesweep/ (9 characters), but the grader still read each name from character 9. Julia counts from 1, so every name kept the slash and matched nothing on the regression-test list. Some of testify's test names contain memory addresses, which move when a fix changes the code size. In other tasks the failing test is unreliable (flaky), or a correct fix is meant to change it, or the task image no longer builds. Fix 6 corrects the names, masks the addresses, sets those tests aside and lets the images build again.

    Figure 6. The golden solution in the 7 tasks where it scored 0 as released and Fix 6 removes every regression-test failure†. Under each task are its regression-test failures as released and their cause. Select a task to see why it scored 0. Source: Fix 6's validation, which graded SWE-sweep as released and Fix 6's branch.
    Notes

    Fix 6 was graded on its own branch, without the other fixes; the fixes have not yet been graded together. A golden solution leaves out any official fix that does not apply on top of the others, so that fix's bug does not pass.

    † On Fix 6's branch tarantool had no regression-test failures in 4 of 4 gradings, but on one audit server another tarantool test failed in every run, so in at least one grading environment the task still scores 0. In Fix 6's grading the golden solution leaves out one official fix, and 4 bugs do not pass because their compiled hidden tests need Fix 1's rebuild. On Fix 1's own branch it passes 39 of 40 (Figure 1); one of the 39 is tarantool-c2e562efa2e4, a bug an empty patch also passes and Fix 3 removes.

    The published leaderboard shows non-zero scores on both Julia tasks, so it was probably graded before the rename, when the prefix was pandora/ (8 characters) and reading from character 9 was right. If so, the slip affects people who run the released code, not the paper's numbers.

    Thanks

    We thank the SWE-sweep authors for releasing the full benchmark, with every task's official fixes, hidden tests and the grader, which made this work possible.