--- title: "你的AI代码越写越乱,他72小时合了14个PR每个都更好——差距只在一个机制" sha256: 8550608bb4bd2c555abf12c0b3d248014d4c2f3eb40755b543a6de9bb508598c source_url: https://mp.weixin.qq.com/s/sMoSwp1f0cR6PI8_ZT4oNQ author: 深思圈 publisher: 深思SenseAI published: 2026-05-14 created: 2026-05-14 type: raw tags: - vibe-coding - testing - complexity-ratchet - garry-tan - llm-agent - production - dRE - gbrain review_value: 8 review_confidence: 7 review_recommendation: strong review_stars: 4 summary: Garry Tan复杂度棘轮框架——90%测试覆盖率阈值(DRE拐点)/棘轮三层(测试-文档-评估)/Agent降低执行成本未降低发现成本/TTY终端测试行为契约/测试=机构记忆/速度质量二选一终结,评分56。 --- ## 核心案例 Garry Tan(Y Combinator CEO,GStack 9.3万 GitHub Star,GBrain 作者)72小时: - 14个 PR - 29,000行代码 - 每一次发布比上一次测试覆盖率更高、质量更好 **不是快了但变差——是又快又更好。** --- ## 速度 vs 质量:五十年二选一终结 传统软件工程的二选一:快发 or 少出错。 Garry Tan 的解法:**90% 测试覆盖率 + AI Agent 同时写测试** = 复杂度棘轮——一个只进不退的系统。 --- ## 为什么是 90%(DRE 数据曲线) Capers Jones 研究 10,000+ 软件项目缺陷移除效率(DRE): | 覆盖率 | DRE(缺陷移除效率) | |--------|-------------------| | < 70% | ~65-75% | | **85-95%** | **92-97%** ← 非线性拐点 | **拐点在 ~85%**:低于此线,缺陷逃逸率与覆盖率不兼容;达到此线,缺陷逃逸骤降。 航空电子 DO-178C:A 级软件 MC/DC 覆盖 → 超过 99% DRE。 六西格玛类比:4σ→5σ 是相变(非渐进),测试覆盖率 70%→90% 同样。 --- ## 棘轮(Ratchet)三层 棘轮 = 只允许单向运动的机械装置。每次 AI 编程会话留下三样东西: ### 1. 测试 告诉下一个来的人什么叫"正确"——改动破坏了什么,它会大声报错。 ### 2. 文档 记录不只是代码做了什么,还有**当时为什么这么决定、取舍是什么**。 ### 3. 评估结果 给质量打分,能看出下一个版本是变好还是滑下去。 **效果**:下一轮 Agent 面对的不是空白起点,而是有记忆的现场。它不能退化到测试套件以下(测试会失败),不能无视文档(就在眼前),不能把质量拉到评估基准以下(分数记着)。 **质量地板每一轮都在上升。单向前进。** --- ## GBrain 实例:棘轮的一次完整转动 GBrain 是 Garry Tan 的知识系统——给 AI Agent 提供长期记忆。 ### "认识论提取"功能 横跨 28,000 页,提取"谁相信什么、置信度多少"。 第一版结果:100,720 条观点,跨模型评分(GPT-5.5 + Claude)总分 **6.8/10**。 最大问题:**"持有者混淆"**——"AI 将在 2027 年前取代 80% 软件工程师"这句话是谁的?是写的人说的?引用别人?系统分析引擎从播客文字稿推断出来的?**第一版 35% 的情况搞错这个区分。** ### 棘轮响应 1. **评估结果被记录**,6 个具体失败模式被识别 2. **第二版提示词针对性修复**了全部 6 个 3. **置信度取整规则被强制到数据库层**(不再出现 0.74 假精确,0.75 才是诚实答案) 4. **17 条测试把这份契约锁住** 从此,没有任何未来版本能在不通过这 17 条测试的情况下发布。 --- ## 为什么 90% 以前做不到,现在可以 **人类撑不住那最后 20%**: - 写第 14 个边界情况测试时感到厌烦 - 周五下午五点图省事 - "以后再说"心理 **AI Agent 不感受努力**:它不会在凌晨两点抱怨,会彻底地写完每个边界情况。 但有一个重要区分: - **执行成本**(写测试的意愿):→ 接近零 ✅ - **发现成本**(知道该测试什么):→ **没有跟着降** ⚠️ > 那最后 20% 之所以难,不只是因为人类懒,更是因为那些边界情况本身很难被识别——你不知道你不知道什么。Agent 可以非常勤快地测试它能想到的所有情况,但它能想到的,往往和人类工程师来自同一个分布。 --- ## TTY 终端层面测试 Agent 行为契约 GStack 有"交互式方案审查"功能——Agent 应该逐段问问题,而不是一次性倒出所有发现。 **问题**:Claude Code 有时会跳过交互,直接把所有发现倒出来然后退出。 **怎么测试"AI 有没有对话"**? 用 Bun 的 TTY 功能把 Claude Code spawn 在伪终端里: 1. 喂给特定代码库场景,触发审查技能 2. 实时监控终端输出 3. 观察 Agent 有没有在结束前发出交互式问题 4. 如果没有问任何东西——**测试失败** **棘轮响应三层**: 1. **技能指令里的强制停止门**:"你必须在进入下一节前问用户",防合理化条款 2. **反捷径条款**:"方案文件是交互审查的输出结果,不是它的替代品" 3. **终端层面的门槛测试**:实际把 Claude Code 在受控场景里运行 > 这不是在测试代码。这是在测试 AI Agent 有没有遵守**行为契约**。在终端层面。通过字面上盯着它工作来实现。 --- ## 测试是机构记忆 传统软件公司:机构记忆住在人脑里。知道为什么那个缓存层存在的资深工程师。那次差点摧毁数据库的迁移的架构师。**人会离开,知识消失。** Agent 的上下文窗口不会离职、不会被挖走、不会遗忘。 当测试套件里写着"置信度取整必须用 0.05 的步进",文档里解释着"因为跨模型评估显示假精确会降低对分数的信任"——**这份知识是持久的。任何 Agent、任何模型、任何时候都能加载这个上下文。** > 测试是能熬过人员流动的机构记忆。对一个单人项目来说,它们更关键——那是你唯一拥有的机构记忆。 --- ## 棘轮不只对代码有效 任何计算机能观察到的东西都可以被棘轮: - 操作系统:进程树、文件系统状态、网络套接字 - 终端:每一次按键、每一行输出、每一个交互提示 - 浏览器:渲染后的页面、按钮状态、导航事件 - API:结构化响应供解析验证 - AI Agent:可观察的行为——它说了什么、调用了什么工具、按什么顺序做事、在行动前有没有先询问 **能观察 → 能断言 → 能棘轮。** --- ## 棘轮 + PR → 安全地开放贡献 GStack:37 名贡献者,v1.30 单次发布合并 21 个社区 PR。 GBrain:25 名贡献者,v0.31.1.1 单次 PR 落了 22 个社区修复。 **棘轮让这件事变得安全**:每个外部 PR 必须通过现有测试套件。新贡献者不需要理解整个系统,只需要让测试通过。 --- ## 尚未解决:方向问题 > 棘轮机制解决了退化问题,但没有解决方向问题。一个只升不降的地板,前提是地板在往**正确的方向**升。Garry Tan 把这个叫做"品味",然后用括号一笔带过了。 - 那个括号里装的东西,比这篇文章讨论的其他所有东西都**更难**,也更重要 - 测试通过 = 变好了?但也许只是对覆盖到的部分更有信心,同时让那 **10% 未覆盖的地方更难被发现** --- ## 核心金句 > 五十年来,90% 的测试覆盖率是奢侈品。AI Agent 把那堵墙拆了。 > > **问题不是你能不能负担得起 90%。而是你能不能负担得起没有它。** --- ## 相关页面 → [[raw/articles/karpathy-vibe-coding-to-agentic-engineering|Karpathy Vibe Coding → Agentic Engineering]] → [[raw/articles/erik-schluntz-vibe-coding-in-production|Erik Schluntz Vibe Coding in Production]] → [[raw/articles/gbrain-garry-tan-yanfa-zhili|Garry Tan GBrain 开发效率]]