Prune Tests 是 leek/agent-skills 仓库中的一项测试精简技能。其目标是从一个测试区域中删掉低价值测试,让测试套件更小但更能保护实际行为,而不是维持大量只为提高覆盖率数字的测试。
用途与原则 每个周期只处理一个测试区域:一个测试目录,或某个模块对应的测试。技能会删除该区域内那些不会发现真实缺陷、只因更强测试缺失才显得有用的测试,并验证覆盖率没有明显下降,然后为该区域开一个 PR。一个周期、一个区域、一个 PR。测试是否保留依据 tdd 测试最佳实践中的价值门槛判断;该文件是“好测试”定义的唯一来源,第一次周期前应先阅读。
授权范围 调用该技能获得与 sweep 每周期相同的权限:创建分支和工作树、提交、推送该分支、开启并标记 PR。它不授权合并或推送到默认分支。
重复运行 同一仓库会反复运行,之前的 PR 可能保持打开数天。已有打开、已合并或已关闭的 prune-tests/* PR 会排除其涉及的文件,但不会终止本次运行,而是继续处理下一个区域。保留规则优先于数量目标:通过价值门槛的测试必须保留,即使该周期未达到目标;如果一个区域的所有测试都值得保留,则该周期没有 PR,只报告检查了什么,这也算正确结果。
参数 在任何发现步骤之前解析参数。无效输入应停止并报告。数量:1 到 10 的整数;不提供时运行 1 个周期;超过 10 按 10 处理并说明。区域:其余词元;路径将周期限制在其下的测试,其他词被视为产品区域(如 billing),需搜索确认对应真实代码,否则停止并报告;不提供区域时所有测试都符合条件。
工作流程
- 加载上下文和已知工作:读取 AGENTS.md / CLAUDE.md 及其指向的规则文件,找到测试运行器、覆盖率运行方式和测试分层(单元、集成、功能、E2E);执行 git fetch origin 并解析默认分支;保存台账,然后按路径而非全量查询。
- 选择一个区域:按“坏味道”密度对范围内测试文件排序,例如大量 mock 的设置、无断言的测试、快照或复制断言、以方法而非规则命名的测试、一个小类上大量测试、功能测试已覆盖的单元测试;选择最密集且未被台账 PR 覆盖的区域,保持可审查,约不超过 40 个测试文件。
- 基线:在从获取的基础创建的工作树中工作,分支为 prune-tests/<area>(不在 taken_branches 中)。运行该区域测试;失败的测试永不删除,写入 .scratch/prune-tests/findings/ 作为可能的产品缺陷并保持原样。测量该区域生产所有者代码的覆盖率;记录数字和命令。基线完成条件是拥有测试数量、通过/失败列表和覆盖率数字及命令。
- 审计每个测试:为每个测试给出保留、重写、移动或删除的处置,并附一行证据。删除需说明理由;若与更强测试重复,需按 file:line 指明该测试。阅读每个测试及其生产所有者代码;测试名称不是证据。若因断言呈现而删除,先运行 git log;由修复提交添加的测试应保留。区域超过约 10 个文件时可并行审计;在 Claude Code 中调度 leek-skills:test-auditor 代理,每批约 8 个文件;在 Codex 中使用 spawn_agent 和 wait_agent;否则内联审计。每个返回的删除决定都要自行检查;找不到更强测试的删除改为保留。
- 精简并验证:执行删除,移除仅由这些测试维持的夹具、辅助器、测试专用导出或包装器,记录删除的生产代码行。仅在小范围且留在区域内时重写,例如循环预言机改为字面量、自有类的 mock 改为真实类;破坏其声称的行为看是否变红,然后恢复代码。更大的重写或移动记录为发现文件。运行区域和整个套件;基线通过的测试仍须通过。用相同命令再次测量覆盖率,必须保持在基线 2 个百分点以内;若下降更多,先找丢失覆盖的行;被删除测试偶然覆盖的真实分支应新增测试;其余按最弱理由优先恢复删除的测试,直到达标。恢复测试说明它保护了某些内容,在 PR 中说明。目标:删除区域内至少 20% 的测试;若价值门槛保留更多,PR 按保留组说明原因,不能只说“看起来没问题”。
- 提交并结束:按 sweep 的 references/submit.md 提交,分支为 prune-tests/<area>,每次台账运行带 --prefix prune-tests。PR 标签为 test。正文添加删除测试表(含原因)、覆盖前后对比及命令、删除的生产代码行。周期一个接一个运行,每次从新的获取和台账开始。按 sweep 的清理步骤清理,保留 .scratch/prune-tests/findings/。结束时检查仓库 AGENTS.md 中 references/agents-rules.md 的规则;若没有且无台账 PR 添加,开一个额外 PR prune-tests/agents-rules 添加规则,不计入周期数。
报告 每个周期报告一项:PR 链接、删除和保留的测试(含保留原因)、删除的生产代码行、覆盖前后、检查、发现文件及不确定之处。无 PR 的周期说明检查了什么及为何没有合格对象。每项以 ✅ PR opened 或 ⚠️ no PR 开头。