SWE Refactor Bench: Can Coding Agents Complete a Long-Horizon, Whole-Repository Stack Migration?
Deyao Hong, Yizhe Chi, Wenyi Li, Xiaoqiu Wang, Mingju Gao, Kaisen Yang, Bingxiang He, Youjie Zheng, Calvin Xiao, Qinhuai Na
cs.CL, cs.AI, cs.SE
2026-08-25
Navers Lab 与清华提出 SWE Refactor Bench:20 个真实仓库的全库迁栈,三关分别查迁没迁、行为对不对、固定测试漏了什么。8 个模型 520 次运行,只有 28 次(5.4%)全过,最好的 claude-opus-5 得 47.0/100。
SWE-bench 一类评测吃的是「红变绿」:补丁前测试失败,补丁后通过。全仓库迁栈没有这个信号。仓库一开始就是绿的,把原实现原样交回去,固定测试照样全过。论文把这个漏洞叫 Blindness:只看行为的评测,会给一份从未迁过的仓库满分。
Navers Lab(Einsia.AI)和清华大学做了 SWE Refactor Bench。20 个真实开源仓库,覆盖语言、框架、平台、构建工具链四类技术债,要求整库迁到目标栈,旧栈从源码和构建闭包里消失,可观察行为还得一模一样。任务包括 cmark 的 C→Rust、SQLite 的 POSIX→WASI、GraphHopper 的 Dropwizard→Spring Boot。仓库合计约 86.7 万行实现代码,单题给 6 到 30 小时,全程离线。
Agent 拿到能编过的 State A、目标栈的具体版本、离线镜像和时间预算,没有外网。评测分三关,测试套件不挂进 agent 容器。
计分是连乘。Stage I 不过就是 0;Stage II 必须全过;过了前两关至少拿 0.4,六个 verifier 各贡献 0.1。六个都没找到反例,才是 1.0。
8 个前沿模型、26 种模型-effort 配置,每配置跑全部 20 题,共 520 次。GPT 系列用 Codex,其余用 Claude Code。
| 最强配置 | 分数 | 全过三关 | 单任务均费 |
| claude-opus-5 xhigh | 47.0 | 5/20 | $74.9 |
| gpt-5.6-sol max | 28.5 | 4/20 | $143.5 |
| kimi-k3 max | 19.5 | 2/20 | $28.9 |
| claude-sonnet-5 medium | 15.0 | 1/20 | $11.9 |
全场 520 次里,340 次过 Stage I(65.4%),118 次固定测试全过(22.7%),两关都过的只有 88 次,再扛住六个 verifier 的只剩 28 次(5.4%)。20 题里 13 题没有任何一次被接受。全场均分 13.44/100;进了 Stage III 的 88 次均分 79.43,难关在进第三关。
迁完和测过是两件能力,agent 经常只做成一件。30 次把行为保住了,因为根本没迁,卡在 Stage I;252 次迁完了但行为坏了,卡在 Stage II。cmark 的 C→Rust 最典型:5 次固定测试全绿,全是 Blindness。Rust 把 C 的控制流逐句搬过来,所有权没重做,手动内存管理原样进了 unsafe Rust。acorn 的 JavaScript→Rust 正好反过来:26 次里 20 次过了 Stage I,一次都没把固定测试跑满。
过了 Stage I 的 340 次里,58% 能摸到固定检查的 99%,只有 26% 摸到 100%。最后这 1% 不是边角:Conduit 的 Vue→React,四个模型都卡在 21768/21769,差的那条是 hash 路由,访问 / 原站落到 /#/,React 版停在 /,书签和分享链接全断。PyCryptodome 的 setuptools→Meson,五个模型卡在 380/381,wheel 的 METADATA 长描述是 0 字符,上 PyPI 项目页是空白。
进了 Stage III 的 88 次里,60 次(68.2%)在一小时内被 verifier 找出反例,中位耗时 17.0 分钟。ChartMuseum 的 Gin→chi 就是固定套件写不到的那种:原实现按空格或分号截 Content-Type,迁完的版本只按分号截,多一个空格就进了另一条上传路径。
按债务类别,构建工具链均分 31.4,语言改写只有 5.6。构建工具链 Stage I 通过率最高(80.8%),Stage III 存活率却最低(17.6%);框架改写反过来,Stage II 只有 18.9%,Stage III 存活 56.0%,贡献了 28 次接受里的 14 次。
gpt-5.6-luna、DeepSeek V4 Flash、GLM 5.2 一次都没解出来。只看固定测试,它们各自有几次「全绿」;三关协议下分数是 0。
对做 coding agent 的人,这篇把「测过了」和「迁完了」拆开。SWE-bench 的红变绿在迁栈上失效:起点已经是绿的。加再多行为检查也堵不上 Blindness,原实现按构造就会过那些检查。
对要真把仓库迁走的团队,数字更直接:现在的 agent 能把大部分检查跑到 99%,交不出可替换的制品。构建脚本换掉相对容易,语言重写几乎做不成。时间预算给到 30 小时、单次 API 花到一百多美元,也改变不了这个格局。
这是评测工作,不是新的迁栈算法。价值在于把 Blindness 做成硬门,并把「测试作者没想到的行为」交给 agent 去找。
论文没有单独写 Limitations。能读到的边界如下。
任务集只有 20 个,而且是先定债务类型再挑仓库,不能外推到「所有迁栈项目谁更难」。每配置每题只跑一次,分数没有误差条。agent 离线、无外网,真实迁栈常常要查文档和 issue。git 历史被压成单 commit,避免 agent 从 log 里抄到现成迁栈方案。
Stage I 用 gpt-5.6-sol 当法官。和人类在 156 次上的一致率 89.7%(κ=0.795),14 次偏严、2 次偏松。偏严的 14 次里 12 次后面 Stage II 也会挂,没把人类认为伪装的提交放进接受集,但可能少计了最多 2 次「人类认迁、法官判零、行为全过」的解。三条采样取多数是承重的:不用多数票,过 Stage I 的会从 340 掉到 305。
Stage III 不是形式化等价。论文自己写,六个 verifier 都找不到,只说明在这场对抗里没被打穿。模型变强,同一批 20 题会判得更严:拿掉两个 opus verifier,接受数会从 28 升到 46。两个 opus verifier 的打破率是 55.7% 和 53.4%,另外四个只有 21.6%–26.1%。Stage II 全或无也很硬:错 1 条和错 1000 条一样是 0,对 drop-in 替换说得通,也会把「几乎能用」压成零分。