#Vibe Coding#AI Agent#TypeScript#开源

Vibe Coding 行为保持改动账本:用特征测试约束每个小步

一次大重构即使最终测试绿色,也难判断中途哪一步改变了行为。本文把基线、单一转换、同一验证集和停止结论记录成逐步账本,让每个小 diff 都可审阅、可撤销。

本文要点

  • 主题聚焦:Vibe Coding、AI Agent、TypeScript、开源
  • 适合人群:独立开发者、全栈工程师、AI 应用开发者
  • 核心价值:快速理解背景、实践路径、常见误区和工程建议
作者 @admin·发布于 2026年7月30日·更新于 2026年7月30日

“先让 AI 重构完,再跑测试”把所有风险压到最后。若一个 800 行 diff 同时抽函数、改名、移动文件、替换错误类型并清理空值,即使最终绿色,也不知道测试是否漏掉了五种语义变化;失败时更难判断哪一步负责。小步不是把大提示拆成多轮聊天,而是让每一步都有固定前态、单一转换、同一观察面和独立结论。

在没有可靠规格的遗留模块上,先按Vibe Coding 特征测试采集当前可观察行为。特征测试只说明“基线如此”,不证明行为正确;关键断言的依据仍按Vibe Coding 测试预言审查区分需求、历史样本和当前输出。本文从基线已经批准的位置继续,建立逐步执行账本,而不是重讲如何生成测试。

冻结一份可重复的起点

账本首页记录 BASE_SHA、工作树状态、锁文件摘要、运行时、测试命令、fixture、时区和随机种子。共享脏工作树必须先列出已有改动及 owner,遵循Vibe Coding 脏工作树安全改码,不能让重构步骤覆盖或吸收别人的 diff。基线验证连续运行得到相同结果后,才允许第一步。

选择观察面时优先公开返回值、错误类别、持久化结果、对外请求和状态转换。Jest 快照适合聚焦、可审阅且稳定的输出,不适合把整个对象或页面当作不可解释的金块;官方文档同样要求把快照当代码审阅。Node Test Runner 提供测试执行能力,但测试框架不会判断断言是否覆盖了业务合同。

每条基线标记 preserve、approved-change 或 unknown。当前任务只允许前两类进入自动步骤:preserve 必须保持,approved-change 由独立需求测试描述新结果,unknown 触发人工澄清。这样 AI 不能把自己不理解的分支归类为死代码或顺手统一。

一步只做一种结构转换

单步可以是移动一个函数而不改内容、抽取一个纯计算、引入一个适配入口、重命名一个内部符号、把副作用包进已有接口,或删除已经证明不可达的叶子。不要在同一步同时换异常类型、调整默认值和重排并发。若某转换无法在小 diff 内成立,先增加隔离层,而不是扩大本步授权。

每一步开始前写:目标坏味道、允许文件、明确非目标、预期纯结构差异、验证命令和停止条件。完成后记录 before/after tree、git diff 摘要、测试结果、静态检查、人工观察与剩余未知。Git diff 能展示文本变化,不能自动证明语义等价;账本必须把 diff 与固定行为集合放在一起审阅。

推荐节奏是“改一小步 -> 跑最窄可靠测试 -> 审 diff -> 跑受影响回归 -> 固定新基线”。测试影响范围可由编程 Agent 的测试影响分析辅助,但图谱陈旧、动态入口或高风险逻辑会升级到更广测试。任何验证后继续编辑,都会使该步结果失效。

失败时回到最近一个已证步骤

特征测试失败后,禁止直接把期望更新成实际值。先分类:真实行为改变、测试绑定内部实现、fixture 漂移、环境不一致,还是已批准的新需求。若行为改变不在本步目标内,撤销本步并缩小转换;若测试过度绑定,独立修正测试后重新建立基线,不能和重构混在同一不透明 diff 中。

设置硬停止条件:同一步连续两轮无法解释差异;影响文件超出批准范围;出现新的外部副作用;需要更改公开 API;基线测试开始 flaky;或必须依赖模型猜测的业务规则。停止时输出已完成步骤、最近可信状态、失败工件和需要的 owner,不让 Agent 通过扩大改动寻找偶然绿色。

如果多步后才发现回归,可使用Vibe Coding Git Bisect 回归隔离定位首个改变判定的步骤;前提是每一步都保持可构建、测试语义一致。账本中的细粒度边界让二分结果有意义,而不是落到一个包含十种转换的“大重构”提交。

最后再合并长期测试

重构完成后,把真正的业务合同保留为长期回归;只服务移动过程的内部快照可以删除;unknown 项要么得到 owner 决策,要么继续阻塞相关路径。运行完整批准验证集,并由编程 Agent 的改动验证门把结果绑定最终代码。最终摘要列出哪些行为被保持、哪些经批准改变、哪些仍未知。

小步重构的价值不是让 diff 看起来勤奋,而是缩短“变化发生”与“证据确认”的距离。Vibe Coding 可以快速执行重复移动和抽取,但每一步是否仍在行为合同内,必须由固定测试、清晰 diff 和预先停止条件共同决定。只要某一步无法解释,就停在最近一个已经证明的状态,而不是把不确定性滚进下一步。

延伸阅读

Related

相关推荐