
Apageoflove/DSH-changeproof
51最近提交 2026年8月15日
DSH-changeproof DSH 插件
ChangeProof 解决“测试通过”不等于“改动被验证”的问题。它能根据代码引用关系自动找出相关测试,执行测试后逐行核对改动行是否被覆盖。证据绑定代码指纹,代码一变旧结论自动失效,确保只有真正经过验证的改动才能通过。
如何安装 DSH-changeproof DSH 插件
dsh plugin add dsh-changeproof复制不会执行命令。安装 DSH-changeproof DSH 插件前请核对仓库和版本。
DSH-changeproof DSH 插件数据来源
DSH-changeproof DSH 插件快照日期:2026年8月16日
discovered
DSH-changeproof DSH 插件能做什么
- 自动根据代码引用关系找出与本次改动相关的测试,而非全量运行或猜测
- 执行测试后逐行核对改动行,未覆盖的行不予通过并明确指出
- 证据绑定代码指纹,代码修改后旧结论自动失效,避免过期结论被误用
- 支持多种测试适配器(vitest、jest、pytest),提供 Istanbul 和 coverage.py 覆盖率格式
DSH-changeproof DSH 插件适合哪些场景
- 在合并请求(PR)中确保每一行改动都有测试覆盖证据
- 防止测试通过但只覆盖了无关文件或部分行导致的假绿
- 在代码审查中自动提供覆盖证据,减少人工核查负担
- 集成到 CI/CD 流程中,强制要求每次改动都有有效的覆盖验证
DSH-changeproof DSH 插件适合谁
- 希望确保代码修改被充分测试的开发者
- 需要客观覆盖证据的质量保证工程师和代码审查者
DSH-changeproof DSH 插件的限制
- 需要在项目根目录放置 .changeproof.yml 配置文件,定义包、测试适配器和覆盖率路径
- 依赖 DSH(DeepSeek Harness)和 API Key,模型修改代码后自动触发验证
- 目前仅支持输出 Istanbul 格式覆盖率的测试适配器(vitest、jest)或 coverage.py 的 pytest;其他框架需要手动配置
DSH-changeproof DSH 插件的仓库 README 摘录
以下文字摘自 DSH-changeproof DSH 插件的上游仓库 Apageoflove/DSH-changeproof 的 README,版权归原作者,仅作引用。
DeepSeek Harness(DSH)插件:代码改动后,确认改动的行真的被测试覆盖到。 ## 解决的问题 "测试通过"不等于"改动被验证": - 改的是 A 文件,测试跑的是 B 文件,全绿但改动没被测到; - 测试跑了,但只执行到改动行的一部分,剩余行没测到,照样报通过; - 验证完成后代码又被修改,旧结论仍然有效,无人察觉。 插件做三件事: 1. **关联测试**:根据代码引用关系,找出与本次改动相关的测试(不是全量跑,也不是猜); 2. **行级核对**:执行测试后逐行核对,改动行未被执行到则不予通过,并明确指出未覆盖的行; 3. **结论过期**:证据绑定代码指纹,代码一变,旧结论自动失效。 结论状态:`VERIFIED`(通过)、`PARTIAL`(部分覆盖)、`FAILED`(测试失败)、`STALE`(结论过期)、`UNVERIFIED`(无有效证据)、`NOT_APPLICABLE`(无可验证内容)。 底线:**没有覆盖证据,或证据与当前代码不一致,一律不给 VERIFIED。** ## 部署到 DSH 以下步骤在 Windows 实测通过(macOS / Linux 命令相同)。 ### 前提 - Node.js ≥ 24(DSH 要求 `^22.19 || >=24`) - pnpm 11.7(`npm install -g pnpm@11.7.0`) - Git ### 1. 获取 DSH 源码 ```bash git clone --depth 1 https://gitee.com/mirrors/deepseek-harness.git DSH # GitHub 直连:git clone --depth 1 https://github.com/deepseek-ai/deepseek-harness.git DSH cd DSH ``` ### 2. 构建 DSH ```bash pnpm install pnpm run build:lib pnpm run build:web # 仅使用 headless 可跳过 ``` ### 3. 构建插件 ```bash cd <插件目录> # 如 E:\agent\dsh-changeproof npm install npm run build # 产物在 dist/ ``` ### 4. 安装到 profile ```bash cd <DSH 目录> pnpm dsh plugin --profile web add <插件目录> # 需要命令行模式再加:pnpm dsh plugin --
阅读完整 README仓库许可: MIT
DSH-changeproof DSH 插件常见问题
如何将 ChangeProof 安装为 DSH 插件?
首先确保已构建好 DSH(DeepSeek Harness)。然后在插件目录执行 'npm install && npm run build' 构建插件。最后通过 'pnpm dsh plugin --profile web add <插件目录>' 将插件添加到 DSH profile。使用 'pnpm dsh --profile web --dump-config | grep changeproof' 验证安装是否成功。
ChangeProof 是否必须使用特定的测试框架?
ChangeProof 支持 vitest、jest 和 pytest,通过适配器读取覆盖率数据。vitest 和 jest 使用 Istanbul 格式,pytest 使用 coverage.py。你需要在 .changeproof.yml 中配置对应的测试适配器,并确保测试运行后生成指定路径的覆盖率文件。
结论状态 'STALE' 表示什么?
'STALE' 表示验证证据已过期,因为代码在验证之后发生了修改。ChangeProof 将证据绑定到代码指纹,任何源文件、测试文件、锁文件或配置文件的变更都会使之前的结论失效。你需要重新运行验证才能获得新状态。
能否不安装 DSH 单独使用 ChangeProof?
可以。ChangeProof 提供了独立 CLI。构建插件后,可以直接运行 'node dist/host/cli.mjs verify --workspace <项目路径> --yes' 来执行测试并获取覆盖验证。独立模式不需要 DSH 或模型,但需要项目根目录有 .changeproof.yml 配置。
ChangeProof 如何防止 shell 注入带来的安全风险?
ChangeProof 采用 argv-only 执行模型:测试命令以数组形式指定,直接通过 Node.js 的 spawn 执行,不经过 shell。默认还会校验参数中是否含有 shell 元字符(如 &&、||、;),拒绝包含这些字符的条目。可以通过设置环境变量 'CP_ALLOW_SHELLY_ARGV=1' 关闭此限制,但默认关闭以保障安全。