REVIEW 4 major objections 5 minor 21 references
SWE-Dev: Building Software Engineering Agents with Training and Inference Scaling
T0 review · 4 major / 5 minor · reviewed 2026-08-07 · deepseek-v4-flash
Pith's one-line read SWE-Dev shows that synthesizing fail-to-pass tests from GitHub issues, training on verified trajectories, and letting the agent take up to 75 rounds in one run lets a 32B open-weight model resolve 36.6% of SWE-bench-Verified issues.
desk verdict The headline 36.6% is credible but provisional until the authors rule out SWE-bench overlap in their training crawl. read the letter →
The pith
A machine-rendered reading of the paper's core claim, the machinery that carries it, and where it could break.
The reading
What carries the argument
The load-bearing mechanism is a two-stage test-synthesis pipeline: first a description model writes a Gherkin-style scenario capturing the issue, then a code model writes a pytest test that must fail on the unpatched repository and pass after the golden patch is applied. This turns each collected issue into an executable reward signal. The same signal filters the 17k sampled trajectories down to 2.3k correct ones for rejection-sampling fine-tuning, and the paper's iteration-scaling strategy extends a single evaluation episode to more interaction rounds so the agent can revise its own work.
What would settle it
Run the trained SWE-Dev-32B on SWE-bench-Verified instances, score its patches with the pipeline's synthetic tests, then score the same patches with the official developer-written tests; if many patches pass the synthetic tests while failing the official tests (or vice versa), the oracle assumption fails.
Extended reading notes
Core claim
The paper sets out to show that the bottleneck in training software-engineering agents is the missing test oracle, and that this bottleneck can be removed by synthesis. Its core discovery is a scaling relationship: as the number of sampled agent trajectories grows from 574 to 16,639, the 7B model's resolve rate rises from 13.0% to 22.8% along a near-log-linear curve, and when the interaction budget is extended from 30 to 75 rounds, the 32B model improves from 34.0% to 36.6%. Along the way, rejection-sampling fine-tuning beats the offline reinforcement-learning methods tried (KTO, OREO, and their hybrids), and an LLM-based patch filter keeps 65% of trajectories without hurting performance. These results together claim that a 32B open model can exceed prior open-source agents and match or beat a frontier proprietary model without relying on verifiers or repeated sampling.
Load-bearing premise
The whole training signal rests on LLM-generated fail-to-pass tests being faithful to the issue; if a test passes for reasons unrelated to the fix, the trajectory filters and rejection-sampling labels built on it are wrong.
Editorial extensions
If this is right
- Training a SWE agent no longer requires pull requests to come with test cases: synthesized fail-to-pass tests provide the reward signal at scale.
- Resolve rate grows roughly linearly with log training trajectories in the tested range, so collecting more trajectories should keep helping before saturation.
- Extending a single run from 30 to 75 rounds gives a 2.6-point gain for the 32B model, a cheaper route than repeated pass@k sampling when test oracles are expensive.
- Rejection-sampling fine-tuning outperforms the offline reinforcement-learning methods tried (KTO, OREO, and RFT+OREO hybrids), so high-quality positive trajectories matter more than the optimization objective.
- A 32B open-weight agent can beat GPT-4o on SWE-bench-Verified, narrowing the gap between open and proprietary systems.
Reading between the lines
- If the synthetic oracle has a systematic blind spot, for example tests that encode the patch's behavior rather than the issue's actual requirement, the reported gains could overstate true repair ability; the paper's own validation benchmark is also built from synthetic tests, so it cannot fully exclude this risk.
- Only 2,097 of 26k instances yielded fail-to-pass tests, so the trained models' behavior on issues without an available synthetic oracle may differ from the headline benchmark numbers.
- The log-linear training-scaling trend implies that even larger trajectory pools should help, but only if oracle quality is preserved; with noisy labels, scaling would amplify the noise.
- The iteration-scaling result invites an adaptive early-stopping or learned 'done' check that spends rounds only where they pay off, which the paper lists as future work rather than testing.
Editorial analysis
A structured set of objections, weighed in public.
Referee Report
Summary. The paper introduces SWE-Dev, an open-weight software-engineering agent built on Qwen2.5-Coder, Llama-3.1, and GLM-4 backbones. It constructs a large training set by crawling PyPI/GitHub repositories (38k instances from 4,413 repos), synthesizes test cases with an LLM pipeline, and uses DeepSeek-V3-generated trajectories under an OpenHands scaffold. Post-training comparisons cover RFT, KTO, OREO, and hybrid variants, and the paper studies scaling in training-trajectory count and in the number of interaction rounds. On SWE-bench-Verified, SWE-Dev-7B achieves 23.4% and SWE-Dev-32B achieves 36.6%, with the authors claiming state-of-the-art performance among open-source SWE agents.
Significance. If the headline numbers survive scrutiny, the paper makes a useful empirical contribution: it shows that a 32B open-weight model can exceed larger open models and match a proprietary model (GPT-4o) on SWE-bench-Verified, and it identifies RFT as the most effective post-training method among those tested. The public release of code, models, and data is a concrete strength that enables direct verification of the claimed results. However, the significance is currently conditional on two structural risks: possible overlap between the training crawl and SWE-bench-Verified source repositories, and the reliance on LLM-generated tests as training oracles without human validation. The scaling claims are interesting but confounded by the simultaneous change of context length and interaction budget in the inference-scaling experiment. The paper's tables and figures are internally consistent, and the dataset comparison against Nebius in Table 3 is a good external anchor.
major comments (4)
- [§3.1] The training-set construction follows the extraction methodology of Jimenez et al. (2024) from the same PyPI/GitHub repository pool that underlies SWE-bench and SWE-bench-Verified, yet the paper never states that SWE-bench or SWE-bench-Verified instances were excluded from the 38k-instance training set or from the 2.3k correct trajectories used for RFT. Since an SWE-bench instance is defined by a specific repo, PR, and issue, any overlap would directly inflate the 36.6% resolve rate reported in Table 4 and Figure 1. The authors should report a decontamination analysis (e.g., exact and near-duplicate matches by repo+PR number, issue text, and patch similarity) and re-evaluate the models after removing any overlapping instances.
- [§3.2 / Table 3] The synthesized fail-to-pass tests are generated from the golden patch and the issue description, which makes them a plausible training signal but also creates a self-referential oracle: the validation in Table 3 compares two datasets under the same synthetic oracle, so it cannot detect a systematic flaw such as tests that pass for reasons unrelated to the fix or tests that are too permissive. Because trajectory filtering (Figure 6) and RFT labels (Figures 4–5) depend entirely on these tests, a systematic oracle error would corrupt the training signal. The paper should add a human-evaluation study of a random sample of generated tests and/or a cross-check of a subset of synthesized F2P tests against developer-written tests on SWE-bench-Verified instances.
- [§4.2 / Table 4] The claim of state-of-the-art performance among open-source SWE agents is not fully supported by the comparison set. Table 4 omits several systems cited in the paper itself (e.g., SWE-Search from Antoniades et al., 2024, and open-weight baselines under scaffolds other than OpenHands/Agentless), and no error bars or significance tests are reported for the main resolve rates. The difference between 36.6% and the 32.8% of SWE-Fixer-72B may not be meaningful if the evaluation was run once. The authors should expand the baseline set, report the number of runs and variance, and ideally include a paired or bootstrap significance test.
- [§5.2 / Figure 7] The inference-scaling experiment changes two variables at once: the number of interaction rounds (30 to 75) and the context configuration (RoPE extended from 32k to 160k; max_tokens set to 160k for these runs). The text states that the RoPE change alone caused a drop for the 7B model, so the improvement in Figure 7 cannot be attributed solely to more interaction rounds. The authors should decouple these factors, for example by comparing 30 rounds with 160k context against 75 rounds with 160k context, and 75 rounds with 32k context if feasible.
minor comments (5)
- [§3.3] The sentence 'These experiments collectively highlight the strengths of our dataset in generating high-quality test cases and its utility for downstream tasks' appears twice in succession; one copy should be removed.
- [§4.2] The text says that SWE-Syninfer-72B and SWE-Fixer-72B 'have a resolve rate of 36.6%,' but Table 4 reports 30.2% and 32.8%, respectively; the sentence should be corrected to avoid an internal inconsistency.
- [Table 3] The caption refers to a '7B base model' with a 13.6% resolve rate, while Table 4 reports 13.6% for the 9B GLM-4 model; the model size should be stated consistently.
- [Table 1] The abbreviation 'F2F' is not defined; readers may confuse it with 'fail-to-fail' tests, so please spell it out or define it in the caption.
- [§3.1] The sentence 'Following the methodology outlined in Jimenez et al. (2024) with minor modifications' is too vague; the exact modifications and extraction filters should be specified so that the contamination risk can be assessed precisely.
Circularity Check
No significant circularity: the benchmark result is externally evaluated on developer-written SWE-bench tests, and the synthetic-test loop is training-data construction rather than a derivation-equivalent-to-input.
full rationale
The paper's central claim, a 36.6% resolve rate on SWE-bench-Verified, is measured against developer-written unit tests from an external benchmark, not against the synthetic tests generated from golden patches. The synthetic fail-to-pass tests are explicitly constructed from the golden patch and issue description (see Appendix A.1 prompts: 'Given a GitHub issue description and the golden patch, your task is to build test cases that reproduce the error according to the patch'), and they are used only to filter trajectories and provide RFT labels. This is a training-data construction loop, but the paper does not present the synthetic tests as independent predictions, and the headline evaluation does not reduce to them by construction. Table 3 additionally grounds the training signal by comparing SWE-Dev against the Nebius dataset on the external benchmark, so the result is not forced by the self-referential oracle alone. Self-citations to Hou et al. (2024, 2025) support general scaling observations but are not load-bearing for the main result. The most serious risk is potential train/test contamination: Section 3.1 crawls instances following the Jimenez et al. (2024) methodology from the same PyPI/GitHub pool used to build SWE-bench, and no deduplication against SWE-bench-Verified is reported. That is a leakage/correctness risk, not a circularity defect under the specified patterns, because the paper's equations or definitions do not make the benchmark outcome equivalent to its training inputs.
Assumptions & free parameters
free parameters (4)
- Interaction rounds (iteration budget) =
30 to 75
- RoPE max_tokens context extension =
160k (from 32k)
- Trajectory filtering retention threshold =
~65%
- RFT fine-tuning scales =
4 epochs for 7B, 8 epochs for 32B, lr 1e-5
assumptions (4)
- domain assumption LLM-generated test cases, derived from golden patch and issue description, are valid fail-to-pass oracles for trajectory labeling.
- domain assumption Trajectories labeled 'correct' because the generated patch passes the synthetic test actually solve the underlying issue.
- domain assumption SWE-bench-Verified is a fair, contamination-free evaluation of the trained agents.
- domain assumption The OpenHands ReAct scaffold and DeepSeek-V3 trajectories represent a useful training distribution for the final agents.
Cite this review
Pith. "Pith review of SWE-Dev: Building Software Engineering Agents with Training and Inference Scaling." pith.science (2026). https://pith.science/paper/VVRPXSVZ
@misc{pith2026250607636,
author = {Pith},
title = {Pith review of: SWE-Dev: Building Software Engineering Agents with Training and Inference Scaling},
year = {2026},
howpublished = {\url{https://pith.science/paper/VVRPXSVZ}},
note = {Machine review of arXiv:2506.07636}
}
read the original abstract
Large language models (LLMs) have advanced rapidly from conversational problem solving to addressing real-world tasks involving tool use, such as software engineering (SWE). Recent LLM-powered toolkits, such as OpenAI Codex and Cursor, have offered end-to-end automation of the software development process. However, building effective SWE agents remains challenging due to the lack of high-quality training data and effective test cases. To address this issue, we present SWE-Dev, an SWE agent built upon open-source LLMs. First, we develop a robust pipeline to synthesize test cases for patch evaluation. Second, we scale up agent trajectories to construct the training data for building SWE-Dev. Experiments on the SWE-bench-Verified benchmark show that the SWE-Dev models can achieve top performance among all open SWE agents. Specifically, the success rates of the SWE-Dev 7B and 32B parameter models reach 23.4% and 36.6%, respectively, outperforming state-of-the-art open-source models. All code, models, and datasets are publicly available at https://github.com/THUDM/SWE-Dev.
Figures
Figures from the paper (4 more)
Reference graph
Works this paper leans on
-
[1]
Differences in logging or documentation can be ignored
When comparing patches, focus only on code changes that affect actual functionality. Differences in logging or documentation can be ignored
-
[2]
•mostly: Patch 2 implements most of the functionality correctly with minor differences
The evaluation levels are: •identical: Patch 2’s functionality is exactly the same as Patch 1. •mostly: Patch 2 implements most of the functionality correctly with minor differences. •partially: Patch 2 only implements some of the required functionality. •different: Patch 2’s functionality is completely different or incorrect
-
[3]
If Patch 2 is rated aspartiallyormostly, please specify the functional differences in the explanation. Final Instructions: • Provide your analysis and judgment in the following format: [Explanation] Explanation of the reason why the patch is judged as ’identical’, ’mostly’, ’partially’, or ’different’. [Judgment] The judgment of the patch is ’identical’, ...
-
[4]
Instructions:- Wrap each Gherkin test description in triple backticks (“‘gherkin)
Avoid including unimportant test cases, such as modifications to README files. Instructions:- Wrap each Gherkin test description in triple backticks (“‘gherkin). - Example format: ```gherkin {{YOUR DESCRIPTION}} ``` Prompt for Test Case Generation You are a test engineer. Given a GitHub issue description and the golden patch, your task is to build test ca...
-
[7]
Ensure the test triggers this behavior reliably and consistently
Fail with the unpatched code: Demonstrate the specific bug, issue, or limitation that the patch is designed to address. Ensure the test triggers this behavior reliably and consistently
-
[8]
Focus Areas: • Exercise uncommon or edge-case code paths
Pass with the patched code: Confirm that the patch resolves the issue without introducing new problems or regressions. Focus Areas: • Exercise uncommon or edge-case code paths. • Test for boundary conditions or unexpected input. • Mimic realistic usage scenarios where the original behavior fails. Information provided: •Repository name: {} •GitHub issue de...
-
[9]
Use theGiven-When-Thenstructure of Gherkin syntax
-
[10]
Clearly describe: • Preconditions (Given). • Triggering events (When). • Expected outcomes (Then)
Show all 21 references
-
[11]
Ensure the test logic is clear, concise, and covers all relevant scenarios
-
[13]
Identify the required packages and the types of test cases to write
Identify the incorrect code: Analyze the provided information to locate the error that the patch addresses. Identify the required packages and the types of test cases to write
-
[14]
Each test case must be enclosed within < testcase ></ testcase > tags
Generate the test case: Write test cases that willfail without the correction patchandpass with the correction patch. Each test case must be enclosed within < testcase ></ testcase > tags
-
[15]
" " C a l c u l a t et h e sum o f a l l numbers i n a CSV f i l e
Ensure that no additional execution beyond your test case is performed. Avoid unsafe commands or unnecessary changes to the project. Format Requirements: • Test Case: –Wrap each test case in < testcase ></ testcase > tags. –Use triple backticks (```) to enclose the test code w...
-
[16]
It tries to convertrow[0]to an integer usingint()
-
[17]
The goal is to write test cases that:
Ifrow[0]is not a valid integer, it skips that row using atry...exceptblock. The goal is to write test cases that:
-
[18]
Test case with non-numeric data in the CSV (should raise an error in the original code)
-
[19]
" " F i x t u r e t o c r e a t e a t e m p o r a r yCSV f i l e f o r t e s t i n g
Same test case should now correctly handle non-numeric rows and calculate the sum of valid numeric values. Example Test Case: < t e s t c a s e > ```python importos importp y t e s t froms r c . u t i l s . c s v _ u t i l simportread_csv_and_sum @pytest . f i x t u r e defc r...
-
[20]
For example: • Rewrite wrong test cases if errors occur on specific tests
Analyze the error history carefully: Review the error history to understand why the previous test cases passed without the patch. For example: • Rewrite wrong test cases if errors occur on specific tests. • Considerimportdependencies when encounteringImportErroror similar errors
-
[21]
fix the issue,
Preserve the original intent: Ensure the new test cases still target the original issues that the patch is designed to fix. 3.Format Requirements: Your test case should strictly follow the original format. Specifically: • Setup commands should be wrapped in <env></env> tags. T...
-
[2022]
Hao Liu, Matei Zaharia, and Pieter Abbeel
Competition-level code generation with alpha- code.Science, 378(6624):1092–1097. Hao Liu, Matei Zaharia, and Pieter Abbeel. 2023. Ring attention with blockwise transformers for near- infinite context.Preprint, arXiv:2310.01889. Yizhou Liu, Pengfei Gao, Xinchen Wang, Jie Liu, Y...
2023 arXiv
-
[2024]
Hao Bai, Yifei Zhou, Mert Cemri, Jiayi Pan, Alane Suhr, Sergey Levine, and Aviral Kumar
Scaling data collection for training software engineering agents.Nebius blog. Hao Bai, Yifei Zhou, Mert Cemri, Jiayi Pan, Alane Suhr, Sergey Levine, and Aviral Kumar. 2024. Di- girl: Training in-the-wild device-control agents with autonomous reinforcement learning.Preprint, ar...
2024 arXiv
-
[2025]
Advancing language model reasoning through reinforcement learning and inference scaling. In ICML. Jian Hu, Xibin Wu, Zilin Zhu, Xianyu, Weixun Wang, Dehao Zhang, and Yu Cao. 2024. Openrlhf: An easy- to-use, scalable and high-performance rlhf frame- work.Preprint, arXiv:2405.11...
2024 arXiv
Reviewed August 7, 2026 · model on record in the stance chip above.
Discussion (0). Sign in to comment.