关于 prove-patch
Prove Patch 是用于验证补丁是否修复指定案例的 skill,通过与原始基线对照来检查。它要求保存执行凭据、比较基线与回退状态,并验证证明记录。
主要功能
- 01在基线和补丁上运行案例
- 02保存执行凭据
- 03检查基线、补丁及回退行为
- 04运行相关项目检查
- 05验证证明记录与清单
适用场景
- 01验证指定范围内的补丁修复
- 02比较补丁前后的行为
- 03为补丁审查记录证据
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ trailofbits/ skills --skill prove-patch安装后在 Claude Code 中输入/prove-patch确认已加载。
详细介绍
证明补丁
使用原始基线、最终补丁提交、声明的 repair_scope 和未更改的复现包。阅读记录契约。不要编辑补丁,也不要验证未提交的工作树。新尝试须返回失败项。在运行目标命令前,遵循其项目指南。
- 不参考补丁作者的结论,审查范围内的案例和补丁。在干净的基线树和补丁树上,使用相同的保留版测试框架源码和命令,执行每个计划输入。测试框架必须根据实际执行的输入和观察到的结果,恰好打印一行
PATCH_CASE {"input": ..., "actual": ...},然后在断言前将PATCH_REACHED作为其最后一行标准输出立即打印。代表性案例必须在基线上失败、在补丁上通过。有效对照必须在两者上都通过。将基线和补丁的标准输出、标准错误、退出状态、耗时、命令和测试框架源码保存在receipts/下。超时、设置失败、缺少标记、输入不匹配或观察结果含糊,均属于证据缺口。可信的补丁失败属于发现。绝不要把缺口重新标记为通过。 - 在补丁上运行相关项目检查,并保留相同的原始收据。行为检查须与基线比较,并据此判断失败的项目检查是否由补丁导致;通过的补丁测试套件可以不运行基线。酌情包含重点测试、回归检查和安全检查。记录具体的未证实限制;列表为空会使结果无法定论。
- 按照记录契约中的证明类型配方,使用
reproduce.baseline_commit和最终的patch_commit,运行三臂辅助脚本。要求基线失败、补丁通过、完整回退补丁后再次失败。要求receipts/source.json标明固定的提交,并且回退后的树与原始基线树一致。要求获得该类型的构建身份结果。保留所有源码树、构建和执行收据。 - 编写
prove.json和最终清单,将其及每份收据都纳入其中。使用验证器运行uv run --no-project <script> manifest <prove-attempt-dir>,然后运行uv run --no-project <script> check <run-dir>。在报告结果前,独立检查原生证明评估和原始收据。完整证明不得包含发现或缺口。向协调器返回准确的失败项和收据路径。
{
"schema_version": 2,
"attempt": 1,
"failure_type": "runtime",
"baseline_commit": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"patch_commit": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"reverted": "pass",
"build_identity": "pass",
"hashes": {
"baseline": "1111111111111111111111111111111111111111111111111111111111111111",
"patched": "2222222222222222222222222222222222222222222222222222222222222222",
"reverted": "1111111111111111111111111111111111111111111111111111111111111111"
},
"reverted_hash_note": null,
"cases": [{
"check_id": "reported-input",
"argv": ["python", "receipts/case.py", "reported-input"],
"source": "receipts/case.py",
"runs": {
"baseline": {"exit_code": 1, "elapsed_ms": 15, "stdout": "receipts/case-base.stdout", "stderr": "receipts/case-base.stderr"},
"patched": {"exit_code": 0, "elapsed_ms": 14, "stdout": "receipts/case-patched.stdout", "stderr": "receipts/case-patched.stderr"}
}
}],
"project_checks": [{
"check_id": "focused-suite",
"kind": "suite",
"argv": ["pytest", "tests/test_upload.py"],
"baseline": null,
"patched": {"exit_code": 0, "elapsed_ms": 860, "stdout": "receipts/suite.stdout", "stderr": "receipts/suite.stderr"}
}],
"unproven": ["Inputs outside the declared boundary were not assessed."],
"agent": "prover-1"
}
对于有界类别,至少包含两个不同的失败代表案例和一个有效对照。记录必须通过唯一的 check_id 覆盖每个计划案例。在两个提交上使用相同的测试框架和命令;不得向测试框架透露当前执行在哪一侧,也不得按侧更改预期结果。审查所选案例的相关性;保留的收据仅能证明这些案例实际覆盖的内容。
评论
支持 Markdown