规范先行收敛:AI 编码智能体在 71.7 万行代码库中拆除核心架构不变量的案例研究 Specification-first convergence with an AI coding agent: a case study of dismantling a core architectural invariant across 189 files in a 717k-line codebase with no test oracle and no human code review
AI 智能体经 31 轮审计、修正 201 处缺陷,无人工审查完成 189 文件大重构
前置知识
架构不变量
指系统在整个生命周期内始终成立、且被大量代码隐式依赖的结构性保证。本文针对的不变量是“UI 面板在 AI 请求存续期间必须保持打开”,拆除它会影响请求生命周期、内存所有权、缓存恢复、异步事件顺序以及部分消费流的重新挂接,波及面极大。
本文的全部难度都来自拆掉这条保证。理解“不变量被周边代码隐式依赖”意味着什么,是理解任务定义、规范精化为何必要的前提。
测试 oracle(正确性参照)
判定程序输出正确与否的既定标准,通常是人写好的测试套件。SWE-bench 类评测假定 oracle 已存在,智能体的任务是找到能通过它的补丁;但当目标行为是此前不存在的新行为时,世界上没有任何现成测试能判定对错。
本文任务正是“无 oracle”场景,这解释了为何不能套用 SWE-bench 范式,而必须先自建书面规范充当正确性参照物。
规范精化循环
让智能体反复把规范与真实源码对照、报告缺陷并重写规范的循环,每轮是独立会话。本文跑了 14 轮、累计约 85 处规范修正,任务范围从 110 个文件扩到 160 个,直到第 14 轮零发现才冻结规范。
精化是“控制权前移”的具体机制:先让书面意图逼近真实代码,再谈生成代码,缺陷修复被推到最便宜的阶段。
冻结规范与收敛准则
精化结束后规范被冻结为唯一参照,实现与验证阶段只对照这份不再变动的文档。收敛准则是经验性停止规则:验证持续到连续两轮零发现,即 $findings(v_{16}) = findings(v_{17}) = 0$ 时才停止。
它是无测试环境下替代“测试通过”的质量门,理解它才能理解协议在没有 oracle 时如何宣布“完成”。
循环工程(loop engineering)
2026 年 6 月由 Addy Osmani 提出、Anthropic 同月文档化的模式:外层系统自动找活、派给智能体、用第二个智能体检查结果、把进度记录在模型上下文之外,其最自治形态的完成判据是测试通过加 lint 干净。
本文协议与其互补而非竞争:处理无法拆成独立可检单元、没有测试可判对错的单个原子大改动。
原子性提交
规范要求全部相互依赖的改动一次性落地:部分实现会让仓库处于不一致状态、同时破坏 Prompt 与 EasyAgents 两个子系统。实现智能体据此主动拒绝了初次请求,自行提出 10 步分解后按 3 段执行,每段由人工显式确认。
它解释了为何改动不可拆分,从而无法走常规循环工程“小单元加独立测试”的路径,必须另建协议。
研究动机
当前主流 AI 编码智能体(Claude Code、Codex、Copilot、Cursor)在孤立的小任务上吞吐量很高,但业界默认必须由人工审查生成的代码。审查存在固有的规模上限:当一次改动横跨数百个相互依赖的文件、需同时保持数十条隐式不变量时,没有任何审查者能把整张依赖图装进工作记忆,审查本身成为瓶颈,超过一定规模后彻底失去质量门作用。一项覆盖数千名开发者的遥测研究显示,AI 辅助工作让提交的 PR 变多,但审查时间最多上升 91%,整体交付指标却持平。主流评测范式 SWE-bench 假设存在人工写好的测试套件作 oracle,其 Pro 版下解决率不足 45%。本文的具体场景是:一个 717,725 行 TypeScript、3,648 个文件的 VS Code 扩展(单开发者、约 4,000 次提交维护),其核心保证是“面板在 AI 请求期间保持打开”;而期望的新行为——流式生成在面板关闭后存活并可重连——此前并不存在,没有任何现成测试能充当 oracle。现实诱因是一个既有 bug:Electron 内存溢出使视图变灰,用户只能盲等跑完或杀掉请求丢掉工作。
本文的目标是论文的目标是论证并实证“控制权前移”:不再事后审查生成的代码,而是在生成之前以书面规范的形式反复审计意图本身,直到规范对真实源码的审计不再产生发现,再以冻结规范为唯一参照去生成并验证代码。具体任务是一次被作者评估为“增量重构事实上不可行、惯例上应整体重写”的手术:拆除上述生命周期不变量,使得关闭会话面板不再终止底层生成;会话在活动侧栏保持可见,仅在“面板关闭且进程运行”时出现分离式停止按钮(点击后禁用防双击);重新打开面板时必须把显示恢复到与从未关闭无差别,并无丢失、无重复地续播流式 token。整个操作要求在无人工代码审查、无预设测试 oracle 的条件下完成,并被全程记录为可公开检验的证据。
与已有工作不同的是,已有工作各自只覆盖相邻问题:循环工程(2026 年 6 月 Addy Osmani 提出,Anthropic 同月发文)假定工作能拆成可独立检查的单元,并以“测试通过、lint 干净”为完成判据;Bun 重写(535,496 行 Zig 转 Rust,11 天、最多 64 个 Claude 智能体并行、超百万行通过完整既有测试套件)依赖百万断言级 oracle、编译器与对抗性审查;Cloudflare 的 AI 审查系统(48,000+ 合并请求、5,169 个仓库、7 个领域特化审查智能体)是人工代码之上的辅助层;Anthropic 报告的 vLLM 7 小时单次运行也有既存数值精度参照可验。本文的配置独此一份:目标行为必须被推导而非移植、改动原子不可拆分、没有任何测试可判定对错,因此正确性的参照物必须被构造出来——这正是规范先行协议的独特切入点。
核心方法
直觉上,缺陷修复得越早越便宜:规范阶段的一处缺陷只需改一段文字,生成之后再修同一处缺陷则牵动一组相互依赖的代码改动。据此论文设计了五阶段协议:ideate(口述意图与约束)→ specify(生成正式规范)→ refine(×14 轮:智能体把规范与真实源码对照、报告缺陷、重写规范,直到零发现后冻结)→ code(按冻结规范生成补丁,补丁不经人工检查直接应用)→ verify(×17 轮:智能体把代码与冻结规范对照、报告并修正偏差,直到连续两轮零发现)。每个阶段都作为独立会话运行。所用智能体为作者公司的 AICode,运行 ChatGPT 5.6 Sol 模型的 max reasoning 模式;其系统提示约 250,000 字符,编码了数百条从历史失败中沉淀并增量修正的规则,用于减少对人工监督的需求。最终判定采用经验性收敛条件 $findings(v_{16}) = findings(v_{17}) = 0$。
核心创新是把质量控制点从“生成的代码”搬到“生成之前的书面规范”。与 Anthropic 建议的“用无记忆的第二个智能体做审查”不同,本协议的检查者是同一个智能体的全新会话——真正起隔离作用的不是审查者的身份,而是参照物:一份在代码存在之前就写好并冻结的规范。这与已有研究一致:模型在没有任何外部参照的情况下修订自己的输出不会变好甚至更糟,冻结规范恰好提供了那个外部锚点。其次,收敛靠重复而非单次可靠:31 轮审计共修正 201 处缺陷,并不要求模型在任何单轮上不出错,只要“审计—修正”循环能持续发现并消除与冻结参照的偏差即可。规范期缺陷与代码期缺陷的成本差(一段文字 vs 一组相互依赖的改动)为精化阶段提供了经济学动机。
方法步骤详情
第一步 ideate:输入是一段纯自然语言请求(描述“关闭面板不杀死生成、活动侧栏为隐藏中的运行会话增加第三行分离式停止按钮、重开恢复显示”的 UX 目标,以及动机——Electron 内存溢出致视图变灰的既有 bug),加一轮范围澄清;产出 110 文件的正式规范。第二步 refine:14 轮循环,每轮平均 35 分钟,累计约 85 处修正,范围随隐式依赖暴露从 110 扩到 160 个文件(110→160),第 14 轮零发现,遂冻结第 13 轮产出的 55 页规范。第三步 code:智能体初次拒绝实现,理由是部分实现会让仓库不一致并违反规范的原子性要求,并自行提出 10 步分解;经协商改为 3 段执行、每段人工显式确认,共 2 小时 21 分 44 秒。第四步 feedback loop:独立会话内修完残余语法、类型与单元测试错误,用时不到 1 小时。第五步 verify:17 轮审计,每轮审计 7–45 分钟、自动生成修正 15–60 分钟,累计 116 处代码修正;第 16、17 轮连续零发现触发停止。全程 31 轮审计、201 处缺陷在任何人工运行程序之前被清除。
技术新颖性
新颖性体现在三点。其一,任务定位:SWE-bench 范式衡量“满足既有 oracle”的能力,Bun 重写有语言级 oracle 与百万断言测试,而本文的改动是新创造的行为,参照物必须自建——论文首次完整公开了这条无 oracle 路径的全部原材料(1,500+ 页法语日志加 55 页冻结规范)。其二,机制定位:以“冻结参照物”而非“审查者身份”实现检查独立性,为对抗自我修订失效提供了不同于第二智能体方案的答案,并与 25 万字符系统提示、Davis 等人 1.16 MLOC 治理基座共同指向“用更长的约束自动化更多工作”的行业趋同。其三,证据形式:不止结果叙事,而是把每轮修正数、每轮日志页数全部表格化(精化第 10 轮 11 处峰值;验证第 4 轮 21 处峰值、第 15 轮反弹到 10 处),使外部研究者可以直接用语言模型对日志与论文声明做一致性核查。
实验结果
核心结果:31 轮审计在任何人工执行前清除了 201 处缺陷(规范约 85 处、代码 116 处);Phase 2 全程没有运行过一次程序,首次人工执行发生在第 17 轮验证之后。操作触及 189 个文件(31 个新建);加上抽取阶段(commit ed3bd94:99 文件,+11,107/−4,572),两个提交合计 288 个文件、+34,770/−16,422,代码库从 717,725 行增至约 73.6 万行。首次人工运行即呈现全部规范行为:面板关闭/重开、显示恢复、分离式停止按钮、既有子系统行为均正常;重构前就存在、覆盖受影响与未受影响模块的大型单元测试套件无回归;此后约 30 个会话的实际使用未发现任何 bug。耗时 3 天,推理成本 2,430 美元,当天以 v2.3.0 发布,构建公开可下载、行为可由任何人直接验证。后续一次界面决策回调只改了 1 个源文件及其测试,作者以此作为职责未散落、架构清洁的旁证。值得注意的是验证发现数并非单调下降:第 14 轮报 4 处后第 15 轮又出现 10 处,说明审计过程本身存在随机方差。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| 无 oracle 的大型架构重构(拆除生命周期不变量) | 验证收敛(连续两轮零发现) | 17 轮验证达成,第 16、17 轮均为 0 发现 | SWE-bench Pro:有 oracle 任务在统一脚手架下解决率不足 45% | 不可直接比较:本文针对无 oracle、不可拆分单元的原子大改动,属互补配置而非同题竞争 |
| 代码变更规模与速度 | 变更文件数 / 插入删除行数 / 工期 | 189 文件(31 新建);两提交共 288 文件,+34,770/−16,422;3 天完成 | 作者评估:同类拆除核心不变量的任务惯例是整体重写受影响组件;Bun 重写需 64 智能体并行 11 天且有 oracle | 以重构而非重写完成同类“应重写级”任务,成本 2,430 美元,无需人工逐行审查 |
| 执行前缺陷清除 | 31 轮审计修正的缺陷/偏差数 | 201 处(规范约 85 处 + 代码 116 处),全部在任何人工运行之前 | 常规流程无此阶段:代码审查发生在生成之后,且大改动下审查本身不可行 | 缺陷修复前移:规范期每处缺陷只需修改一段文字而非一组相互依赖的代码 |
局限与改进
作者自认七条结构性局限:单案例(无法给出成功率或分布)、无对照条件(未让其他智能体在可比条件下执行同一任务)、自我报告(作者既造工具又做操作,日志虽公开但报告本身不独立)、“未见 bug”只是首次人工运行加约 30 个会话加测试套件上的观察而非无潜在缺陷的证明、闭源导致第三方无法在同样材料上复放、模型依赖(仅在特定前沿模型 max reasoning 下验证,弱模型行为未刻画)、仅本次操作被完整记录(4,000 次提交均按同方法论完成只是作者声明)。我的补充观察:收敛准则是事后经验规则而非预注册协议;验证发现数非单调(第 14 轮 4 处、第 15 轮 10 处),“零发现”也可能反映审计器饱和而非代码无缺陷;单元测试由同一智能体按常设指令编写,存在自我评分风险;写规范与查代码用同一模型家族,可能有相关盲区;约 810 美元/天的推理开销与 31 个会话的时间成本未被逐项归因;规范以法语写成也抬高了国际社区核查门槛。
独立分析的弱点
独立分析可见的弱点:其一,无 oracle 意味着最终正确性只剩“模型审计加人工冒烟”两道闸,若用于安全攸关代码,零发现收敛远不够,应叠加性质测试、运行时监控或类型级证明作为部分 oracle。其二,约 25 万字符的系统提示是不透明黑箱,规则来源与对应失败案例不可审计,更换模型或版本时可能整体失效,改进方向是把规则沉淀为可版本化、可测试的检查清单。其三,没有消融实验:不知道 14 轮精化中前几轮贡献了多少、17 轮验证的边际收益曲线如何,后来者无法据此决定投入多少轮,建议拟合每轮“缺陷数—成本”曲线。其四,操作者是该代码库的唯一作者、深度熟悉系统,规范讨论可能隐含了操作者的上下文知识,普通用户在陌生代码库上未必能复现同等质量,应在真实团队中测试协议。其五,发布后仍需回调一处界面决策(第三行停止按钮的交互),说明规范精化对 UX 细节的覆盖有限,可在规范中强制加入用户旅程走查。
未来方向
作者明确提出的下一步:由独立操作者在公开代码库上执行同一协议,可一次性消除单案例、自我报告、闭源三条局限。在此之上可延伸:一是刻画协议对更弱模型的行为边界,给出“模型能力—轮数—成本”的可行域;二是给验证循环加装部分 oracle(性质测试、不变量断言、差分测试),把零发现收敛与可执行证据交叉验证;三是做控制变量实验,正面对比“冻结参照物”与“第二智能体身份隔离”两种审查机制在缺陷检出率上的差异;四是量化每轮精化/验证的边际价值,回答多少轮最划算、何时该停;五是研究能否从遗留代码半自动抽取规范,降低 ideate/specify 阶段对操作者领域知识的依赖;六是把 31 轮日志用于训练或评测专用的“规范审计器”,让缺陷发现本身成为可度量的子任务。
复现评估
精确复现不可能:代码库闭源且私有,智能体 AICode 是作者公司产品,运行的是特定前沿模型(ChatGPT 5.6 Sol,max reasoning)。但证据与半复现条件出奇地好:全部 31 轮原始会话日志(法语,1,500+ 页)与 55 页冻结规范按轮次以 PDF 公开,包括 323 页的实现日志和逐轮标注页数的精化/验证日志,作者还建议直接投喂语言模型做与论文声明的一致性核查;v2.3.0 构建公开可下载,任何人可亲手验证“关面板不断流、重开无缝续播、停止按钮仅在隐藏运行时出现”。在自己的代码库上复现协议属中等难度:需要前沿模型 API 预算(本文 3 天 2,430 美元)、支持会话隔离的智能体脚手架,以及愿意冻结规范、接受“不做逐行人工审查”的纪律。
论文图表
展示改动涉及的两个界面区域:左侧的活动侧栏与中间必须变为可关闭的会话面板,即被拆除不变量在界面上的载体。
让读者直观理解任务对象:拆掉的是“面板必须在请求期间保持打开”这一生命周期保证,图中两块界面正是新行为(关闭面板、侧栏重开、分离式停止按钮)的发生地。