mcpField
V
verify

verify

github.com/codewithmukesh测试与质量7912.9k 次安装12 周前更新
代码仓库

关于 verify

面向 .NET 变更的七阶段验证技能,通过明确的 PASS、WARN 或 FAIL 状态回答代码是否适合审查。构建或测试等关键阶段失败时会提前停止后续流程。

主要功能

  1. 01运行七阶段顺序验证
  2. 02报告各阶段状态与详情
  3. 03构建或测试失败时停止
  4. 04支持按变更范围选择阶段
  5. 05提供修复后重跑流程

适用场景

  1. 01功能完成后检查代码
  2. 02创建拉取请求前执行完整验证
  3. 03更新依赖后检查构建与安全
  4. 04修复问题后重新运行相关阶段

MCP 相关

在诊断和反模式检测阶段调用 Roslyn MCP 的 get_diagnostics 与 detect_antipatterns,检查新增问题。

安装

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

$npx skills add https://github.com/codewithmukesh/dotnet-claude-kit --skill verify

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

详细介绍

/verify -- 7 阶段验证流水线

是什么

运行一个按顺序执行的 7 阶段验证流水线,在每个层面发现问题—— 从编译器错误到细微的反模式,再到格式偏差。每个阶段都会给出明确的 PASS、WARN 或 FAIL,并附上详细信息。“看起来没问题”不是验证 结果;状态表才是。关键失败(阶段 1 构建、阶段 4 测试)会使流水线提前终止,因为代码已损坏时,后续阶段无法得出有意义的结果。

流水线回答一个问题:“这段代码可以提交审核了吗?”

阶段工具检查内容关键
1. 构建dotnet build编译错误、缺少引用是
2. 诊断get_diagnostics (MCP)新增分析器警告、可空性问题出现新错误时为 FAIL
3. 反模式detect_antipatterns (MCP)async void、同步调用异步、DateTime.Now 等否
4. 测试dotnet test测试失败、回归是
5. 安全dotnet list package --vulnerable + 扫描密钥、SQL 注入、缺少身份验证、易受攻击的包出现严重/高危问题时为 FAIL
6. 格式dotnet format --verify-no-changes风格偏差、格式不一致否
7. 差异审核git diff 分析意外更改、遗留调试代码、TODO否

何时使用

  • 完成一项功能、错误修复或重大重构后
  • 创建拉取请求前——必须执行完整流水线,不容妥协
  • 合并上游更改或更新依赖项后
  • 用户说“验证”“检查所有内容”“准备好了吗”“运行所有检查”时
  • 将任务标记为完成前的最后一步
运行哪些阶段

默认运行完整流水线。对于范围明确的更改,可运行部分阶段:

场景阶段备注
功能完成/提交 PR 前/新增端点全部 7 个不走捷径
错误修复1、2、4如果没有测试覆盖,先添加测试
重构后1、2、3、4重点关注正确性;涉及安全时增加第 5–7 阶段
依赖项更新1、4、5构建、测试、漏洞扫描
配置或仅测试更改1、4构建和测试
仅格式调整6格式检查已足够

有疑问时,运行全部 7 个阶段。额外阶段只需几分钟;漏掉安全问题可能导致数天的事故响应。绝不要因为更改“看起来安全”就挑选阶段执行。

如何操作

阶段 1:构建(关键——会使流水线提前终止)
dotnet build --no-restore --verbosity quiet
  • 如果构建失败,立即停止。报告错误并修复后再继续——无法编译的代码,其后续检查都没有意义。
  • 即使结果为 PASS,也要记录警告数量;新增警告会在阶段 2 跟踪。
  • 输出:PASS(0 个错误)或 FAIL(附错误列表)
阶段 2:诊断

使用 Roslyn MCP 的 get_diagnostics 工具,范围限定为已更改的文件/项目 (跨多个部分的更改则检查整个解决方案)。与基线对比——只标记当前更改引入的新增警告。常见发现:CS8600/CS8602 (可空性)、CS0219(未使用的变量)。

输出:PASS(无新增)/WARN(有新增警告)/FAIL(有新增错误)。将新增 警告视为待处理工作——今天的 CS8600,可能会变成下个月生产环境中的 NullReferenceException。

阶段 3:反模式检测

对已更改的文件使用 Roslyn MCP 的 detect_antipatterns 工具(大范围更改则检查整个 项目)。可发现:async void、同步调用异步(.Result、 .GetAwaiter().GetResult())、new HttpClient()、使用 DateTime.Now/UtcNow 而非 TimeProvider、宽泛的 catch (Exception)、日志中使用字符串插值、缺少 CancellationToken、未使用 AsNoTracking 的 EF 读取查询。

输出:PASS(无发现)/WARN(有发现)/FAIL(有严重反模式)

阶段 4:测试(关键——短路)
dotnet test --no-build --verbosity quiet
  • 运行完整测试套件;对于大型解决方案,可限定为受影响的测试项目。
  • 任何测试失败都视为失败——没有例外。停止后续阶段并先修复问题。
  • 如果不存在测试项目:跳过,并建议添加测试。

输出:通过(全部通过)或失败(失败的测试名称 + 错误消息)

阶段 5:安全扫描
dotnet list package --vulnerable --include-transitive

然后检查已更改的文件,查找:硬编码的密钥/连接字符串/API 密钥、 SQL 注入(未使用参数化的原始 SQL)、需要授权的端点缺少 [Authorize]、 过于宽松的 CORS、缺少输入验证、禁用了 HTTPS 或证书验证。

输出:通过/警告(中低风险问题)/失败(严重/高危漏洞)

阶段 6:格式检查
dotnet format --verify-no-changes --verbosity quiet

报告格式偏差,但不自动修复。要解决问题,请运行 dotnet format,并将 更改纳入提交。如果不存在 .editorconfig,请将其作为建议指出。

输出:通过/警告(附文件列表)

阶段 7:差异审查

分析 git diff --stat 和 git diff(已暂存 + 未暂存),检查:

  • 意外或无关的文件更改(.vs/、bin/、obj/、.env、密钥)
  • 调试遗留内容(生产路径中的 Console.WriteLine、#if DEBUG)
  • 尚未解决的 TODO/HACK/FIXME 标记
  • 范围不匹配——更改必须符合任务/PR 描述

输出:通过(干净,符合预期)/警告(附问题)

修复并重试循环

单次运行很少能让所有检查全部通过。循环正是关键:

  1. 识别——哪个阶段失败,以及具体错误
  2. 修复——进行解决问题所需的最小更改
  3. 重新运行——如果修复更改了代码,则从阶段 1 开始;否则从失败的阶段开始
  4. 重复——直到所有阶段通过,或遇到需要用户输入的问题
最终总结
## Verification Results

| Phase | Result | Details |
|-------|--------|---------|
| 1. Build | PASS | 0 errors, 0 warnings |
| 2. Diagnostics | PASS | 0 new diagnostics |
| 3. Antipatterns | WARN | 1 missing CancellationToken |
| 4. Tests | PASS | 47 passed, 0 failed |
| 5. Security | PASS | No findings |
| 6. Format | PASS | Clean |
| 7. Diff Review | WARN | 1 TODO marker found |

**Verdict: READY FOR REVIEW** (with 2 non-blocking warnings)

判定结果:可供审查(全部通过,或仅有不阻塞的警告)或 需要修复(存在任何失败,并附具体修复步骤)。对于 PR 前的运行, 请将验证报告加入 PR 描述。

示例

User: /verify

Claude: Running 7-phase verification pipeline...

Phase 1: Build ............ PASS (0 errors)
Phase 2: Diagnostics ...... PASS (0 new warnings)
Phase 3: Antipatterns ..... WARN
  - src/Features/Orders/CreateOrder.cs:42 -- DateTime.Now usage, use TimeProvider
Phase 4: Tests ............ PASS (23 passed, 0 failed, 0 skipped)
Phase 5: Security ......... PASS
Phase 6: Format ........... PASS
Phase 7: Diff Review ...... PASS

Verdict: READY FOR REVIEW (1 non-blocking warning)

Recommendation: Replace DateTime.Now with TimeProvider on line 42 before
merging. Not blocking, but it will fail the antipattern check in CI.

相关内容

  • /build-fix——阶段 1 失败时自动修复构建错误
  • /code-review——验证通过后进行多维度审查
  • /health-check——对整个项目进行分级评估(超出此更改集的范围)

评论

支持 Markdown