Communitygithub.com

prove-it

验证一个 pytest 回归测试能否在修复提交前捕获指定缺陷,并在修复提交后通过。通过多次运行和可审查的证据来确认。适用于验证缺陷修复声明或检查某个测试是否也能在无修复时通过。

prove-it 是什么?

Prove It 是一个 AI 代理技能,用于精确验证一个 pytest 回归测试是否能在修复提交前捕获指定缺陷,并在修复提交后通过。它通过将修复前后的测试文件叠加到两个 Git 快照上,多次运行(默认三次),并分析结果来确认测试的行为变化。该技能支持 Claude Code、Cursor 等 AI Agent 平台,要求用户提供两个本地 Git ref(其中 after ref 必须包含修复和测试),并选择一个特定的 pytest 节点。它生成详细的证据报告(包括 report.md、report.json、测试文件 diff 等),并给出支持、不支持或不确定的结果。Prove It 特别适用于验证缺陷修复声明是否被测试覆盖,但不会证明整体正确性或测试质量。它提供清晰的退出代码和解释,帮助开发者快速理解缺陷是否被正确捕获。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/K-kiron/ProveIt/tree/main/skills/prove-it

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Prove It

建立一个狭窄的声明:同一个测试在修复前捕获指定的缺陷行为,并在修复后通过。仅凭测试套件通过不足以建立此声明。

选择见证者

检查修复和相关测试。识别预期的输入/输出或状态转换,并选择一个特定的 pytest 节点。使用两个已提交的本地 Git ref;after ref 必须同时包含修复和测试。未提交的编辑不包括在内。不要为了运行此工具而提交他人的工作。

缺陷断言需要一条特定的消息,例如:

assert expired(now=10, deadline=10), "PROVEIT:expiry-boundary"

该消息必须位于所选测试函数中的某个断言上。不要将其放在无关的断言、fixture、应用程序代码或 print 语句中。检查该断言是否实际观察到了缺陷所描述的行为。如果现有测试需要消息,仅限在授权的编辑范围内添加,并将该测试包含在 after 修订中。否则,请解释缺失的输入。

运行比较

使用其绝对安装路径运行捆绑脚本。所选解释器需要已安装 pytest 和项目依赖。不执行依赖安装、网络访问、Git 检出、重置、贮藏或提交。

python <skill-directory>/scripts/proveit.py --repo <repository> --before <old-ref> --after <fixed-ref> --test tests/test_expiry.py::test_at_deadline --expect PROVEIT:expiry-boundary --output <new-directory-outside-repository>

运行器将 after 修订中选定的测试文件叠加到两个快照上,每次使用新的副本,默认每次修订运行三次,每次运行超时 10 秒。仅根据任务需要使用 --python、--repeat 2..5 或 --timeout。如果测试是参数化的,请选择完整的参数 ID。

快照隔离文件,而不是执行环境。仅运行本环境中已被授权的代码。测试保留用户的文件系统、网络和凭据访问权限。不要将临时目录解释为安全沙箱。切勿清理无关的工作树或目录。运行器仅移除自己的临时快照,并将证据目录保留以供审查。

审查证据

阅读 report.md、report.json、selected-test.py、fix.diff 和相关日志。检查观察到的断言、所选节点、阶段记录以及更改的路径。

结果解释退出码
supported每次旧运行都命中声明的断言;每次新运行都通过。0
not_supported旧测试也通过,或修复后的修订仍然命中该断言。1
inconclusive环境、无关失败、超时、跳过、不完整或不稳定的执行。2

即使新修订通过,由于无关的调用失败也属于不确定结果。收集、依赖、语法、设置和拆卸失败永远不能作为见证。不要将其重新标记为已捕获的缺陷。在范围内解决观察到的原因并重新运行到新的证据目录中;不要重复未更改的失败设置。

在接受 supported 之前,检查特定于修订的 fixtures/配置,并确认它们不能解释变化。只有选定的测试文件会被叠加。已安装的依赖项是共享的,第三方 pytest 插件的自动加载被禁用,项目的 addopts 已被清除。需要外部插件或构建的项目可能需要单独准备的环境;如实报告不支持的执行情况。

报告测试、ref、结果、证据位置以及关键限制。说明此见证者在这些运行中捕获了指定的行为。不要声称证明了整体正确性、没有随机性、一般测试质量或可衡量的生产力提升。在未审查并获取适用的发布授权前,不要发布包含本地路径或日志的报告。

相关技能