关于 implement-patch
用于在独立验证缺陷后实施修复的技能,指导编写回归测试、修正不变量并比较测试结果;要求记录本地提交,不推送或创建 PR。
主要功能
- 01编辑前验证修复记录
- 02添加基线版本失败的回归测试
- 03在声明范围内修正不变量
- 04运行并比较项目测试套件
- 05记录变体并创建本地提交
适用场景
- 01实施已验证缺陷的修复
- 02确认回归测试在修复前失败
- 03记录已修复与未修复的变体
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ trailofbits/ skills --skill implement-patch安装后在 Claude Code 中输入/implement-patch确认已加载。
详细介绍
实施补丁
适用场景
在独立验证确认某项声明后使用。阅读 记录约定。 运行目标命令前,请遵循其中的项目指南。
不适用场景
不要用于推测性地查找 Bug、证明补丁已完成,或处理无法通过本地编译器或运行时验证的更改。
流程
-
编辑前,运行
uv run --no-project <script> check --before-repair <run-dir>并使用记录验证器。如果检查失败, 请停止并返回错误,以便生成 INCONCLUSIVE 报告。此门禁要求提供finding.repair_scope,其中包含可用的案例计划和一致的尝试次数。 将声明的范围用作修复说明。找出被破坏的不变量,并在其边界内查找所有 相同违规的实例。阅读威胁模型仅用于保留预期行为;它 不是门禁条件。 -
运行项目现有的测试套件并记录结果。编写一个回归测试,确保针对所述 Bug 及任何已修复变体,该测试在基线上会失败。观察失败情况。在修复说明范围内, 以最小且便于审查的更改修复该不变量。
-
再次运行回归测试和完整的现有测试套件。比较修复前后的失败情况。修复新增的 失败,或根据凭据解释预先存在的失败。
-
将每个变体记录为
fixed或not_fixed,并说明原因。只创建一个本地提交。 切勿推送或创建 PR。从基线开始,在patch/attempt-N/中为生产更改编写fix.patch,为测试更改编写tests.patch。 -
在
patch.json中写入两个提交 SHA、更改的文件数和行数、变体、测试套件结果 以及 Agent 身份。如果此次尝试未生成提交,记录patch_commit: null并将其 作为失败返回。使用以下命令清单化整个尝试目录,包括两个补丁文件和记录:uv run --no-project <script> manifest <patch-attempt-dir>。使用 记录验证器检查。
{
"schema_version": 1,
"attempt": 1,
"baseline_commit": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"patch_commit": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"files_changed": 2,
"lines_added": 3,
"lines_removed": 1,
"variants": [],
"suite_before": {"command": "pytest", "passed": 9, "failed": 1, "skipped": 0},
"suite_after": {"command": "pytest", "passed": 10, "failed": 0, "skipped": 0},
"agent": "patcher-1"
}
应当拒绝的借口
| 捷径 | 必须采取的行动 |
|---|---|
| 只有报告中指出的那一行才重要。 | 搜索相同的不变量违规。 |
| 最小化意味着行数最少。 | 以最小且便于审查的方式修复不变量。 |
| 补丁应用后测试通过了。 | 证明回归测试在应用补丁前失败。 |