mcpField
P
prove-patch

prove-patch

github.com/trailofbits安全7.9k170 次安装今天更新
代码仓库

关于 prove-patch

Prove Patch 是用于验证补丁是否修复指定案例的 skill,通过与原始基线对照来检查。它要求保存执行凭据、比较基线与回退状态,并验证证明记录。

主要功能

  1. 01在基线和补丁上运行案例
  2. 02保存执行凭据
  3. 03检查基线、补丁及回退行为
  4. 04运行相关项目检查
  5. 05验证证明记录与清单

适用场景

  1. 01验证指定范围内的补丁修复
  2. 02比较补丁前后的行为
  3. 03为补丁审查记录证据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/trailofbits/skills --skill prove-patch

安装后在 Claude Code 中输入/prove-patch确认已加载。

详细介绍

证明补丁

使用原始基线、最终补丁提交、声明的 repair_scope 和未更改的复现包。阅读记录契约。不要编辑补丁,也不要验证未提交的工作树。新尝试须返回失败项。在运行目标命令前,遵循其项目指南。

  1. 不参考补丁作者的结论,审查范围内的案例和补丁。在干净的基线树和补丁树上,使用相同的保留版测试框架源码和命令,执行每个计划输入。测试框架必须根据实际执行的输入和观察到的结果,恰好打印一行 PATCH_CASE {"input": ..., "actual": ...},然后在断言前将 PATCH_REACHED 作为其最后一行标准输出立即打印。代表性案例必须在基线上失败、在补丁上通过。有效对照必须在两者上都通过。将基线和补丁的标准输出、标准错误、退出状态、耗时、命令和测试框架源码保存在 receipts/ 下。超时、设置失败、缺少标记、输入不匹配或观察结果含糊,均属于证据缺口。可信的补丁失败属于发现。绝不要把缺口重新标记为通过。
  2. 在补丁上运行相关项目检查,并保留相同的原始收据。行为检查须与基线比较,并据此判断失败的项目检查是否由补丁导致;通过的补丁测试套件可以不运行基线。酌情包含重点测试、回归检查和安全检查。记录具体的未证实限制;列表为空会使结果无法定论。
  3. 按照记录契约中的证明类型配方,使用 reproduce.baseline_commit 和最终的 patch_commit,运行三臂辅助脚本。要求基线失败、补丁通过、完整回退补丁后再次失败。要求 receipts/source.json 标明固定的提交,并且回退后的树与原始基线树一致。要求获得该类型的构建身份结果。保留所有源码树、构建和执行收据。
  4. 编写 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