用途:在操作者要求进行保持行为的代码改动(重构、重命名、拆分、合并、提取、内联,或删除已确认的死代码)时,证明行为确实被保留,而不只是产出一份看起来正确的 diff。该技能主要针对 LLM 改代码时最常见的静默回归:移动函数后更新了定义却漏掉部分调用点,而测试因覆盖不全仍然通过。
主要能力与四项不变量:改动只有以下四项全部通过才算完成——符号集差异(原有公开/导出名称仍存在或已被有意移除)、AST 主体差异(被移动的函数/类主体在归一化空白与注释后结构等价)、行为验证(类型检查、lint、冒烟测试、测试套件全绿)、调用点闭合(被移动符号的引用在前后数量一致)。任一失败需修复并重新运行全部四项。
使用方式:先写显式 Assumptions 块(改动类型、范围文件、基线状态、删除置信度),对移动未指定目标文件、含糊的“清理”、低置信删除等情况暂停询问。随后按六步执行:1. 快照与隔离(优先 git worktree,禁止用 git stash;记录 $SNAP、导出符号集、测试/构建/lint 基线到 /tmp/verify-baseline-*.txt,基线为红则停止);2. 以依赖树形式规划(如 Mikado Method,叶子先于父节点,写入 .verify-plan.md);3. 自叶向上执行,只提交结构性改动,遵循 Tidy First 不混入行为变更;4. 逐节点 AST(或归一化文本)diff;5. 行为验证,按语法解析、类型检查、lint、导入冒烟、单元测试、集成测试、本地运行的顺序快速失败;6. 调用点闭合,优先 LSP find-references,grep 仅作下限,重命名与删除分别按两断言校验。
适用场景:结构性重构与已确认死代码的安全删除。限制:不适用于单条注释的错别字修改、新增功能、未经死代码确认的删除;单文件重命名虽可跳过依赖树但仍应做步骤 5、6。基线为红时无法验证,需先告知操作者失败项并询问是否先修复。grep 计数为零不能证明未引用,动态派发、反射、字符串拼接名称和跨语言边界都会绕过 grep,据此删除需标记 MEDIUM 置信并要求第二信号或操作者确认。该技能还列出需防范的 LLM 失败模式:漏调用点、幻觉导入、静默字段遗漏、作用域提升、部分编辑、文档字符串漂移、误删“死”代码。