用途
verify 用于在归档变更之前,对照变更产物验证实现。它从五个维度进行检查,并使用独立子代理来消除上下文偏差。
适用场景
- 在归档前验证实现相对于规格产物的完整性
- 验证提炼后的规格是否与当前代码行为一致(accuracy 模式,source: distill)
- 通过子代理进行独立验证,以捕捉上下文偏差
- 将活文档漂移(Layer 1/2/3)作为建议性发现呈现
不适用场景
- 创建或修改规格产物(使用 /beat:design)
- 编写任务(使用 /beat:plan)
- 执行实现(使用 /beat:apply)
- 归档变更(使用 /beat:archive)
触发示例:“Verify the change” / “Check implementation against spec” / “Run verification”。不应触发:“design a feature” / “implement the change” / “archive it”。
主要能力
- 并行派发验证子代理和代码审查子代理,两者相互独立。
- 若一个子代理失败,继续使用另一个的发现;若两者都失败,报告失败,不回退到自我验证。
- 若用户明确要求跳过子代理,需说明主会话检查存在上下文偏差、不构成验证,确认一次后按用户要求做快速检查,但不写入 verification 字段。只有子代理运行才算验证结果。
- 在呈现合并报告后,必须将结果记录到 status.yaml 的顶层 verification 字段。若验证完全无法运行(两个子代理都失败),则不记录。
防止合理化
- “变更很小,我可以自己验证”——自我验证会产生确认偏差。
- “我在 apply 期间已经审查过代码”——这正是需要独立验证者的原因。
- “运行两个子代理是过度设计”——代码质量和规格对齐是独立维度。
- “只运行测试就足够验证”——测试验证行为,但不验证规格对齐、设计遵循或代码质量。
- “用户让我不要派发代理,所以快速看一眼算验证”——这算快速看一眼,需说明并确认一次,但不设置 verification,归档时仍会警告该变更从未验证。
- “顺序派发以节省上下文”——它们相互独立,并行派发更快且防止一份报告影响另一份。
- “报告已交付,写 status.yaml 只是记账”——verification 字段是归档判断 verify 是否运行过的依据。
危险信号
- 自己验证任何维度而不是派发子代理
- 顺序派发子代理而不是并行
- 因为“代码简单”而跳过代码审查
- 未阅读子代理报告就声称验证通过
- 在验证期间编辑代码或产物(唯一写入是 status.yaml 中的验证记录)
- 呈现报告但未在 status.yaml 中记录结果
- 因子代理失败而回退到自我验证
使用方式
输入
可选指定变更名称。若省略,则从上下文或提示中推断。
步骤
-
选择变更:若无名称,查找 beat/changes/ 目录(排除 archive/);若只有一个则使用;若有多个则用 AskUserQuestion 工具让用户选择。
-
读取所有产物并确定测试上下文:从 beat/changes/<name>/ 读取 status.yaml、features/*.feature(若 gherkin 状态为 done)、proposal.md、design.md、tasks.md;读取 beat/config.yaml(若存在)。确定驱动模式:若 gherkin 状态为 done 则 Gherkin 驱动验证;若为 skipped 则 Proposal 驱动验证。确定测试上下文(三层优先级:tag > source > config):config 层 testing.required 为 false 则全局跳过测试存在性检查;source 层 status.yaml 含 source: distill 则维度 1 切换为 accuracy 模式;tag 层每个场景预期有对应测试(TDD 模式)。修改文件:若 status.yaml 有 gherkin.modified,收集列出的路径及其 .feature.orig 备份路径。
-
并行派发验证子代理和代码审查子代理:使用单条消息发起两个 Agent 工具调用。Agent A 验证子代理(subagent_type: Explore):读取 verification-subagent-prompt.md,仅提供所有产物内容、测试上下文、修改文件列表,不传对话历史或会话上下文。Agent B 代码质量审查(subagent_type: general-purpose):读取 code-reviewer-prompt.md,提供变更名称和描述、创建/修改文件列表、规划文档、git 范围(若可用)。审查代码质量、架构、命名、错误处理、测试质量、安全和计划对齐,输出为维度 4。回退:一个失败则用另一个;两个都失败则报告失败,不自我验证。
-
若可用则运行自动化测试:检测并运行项目测试套件;行为测试使用 testing.behavior 框架(或自动检测);E2E 测试使用 testing.e2e 框架(或自动检测),若 features/ 含 feature 文件则合并 BDD 特性路径;分别报告行为和 e2e 结果。
-
呈现合并验证报告:合并两个子代理报告——维度 1-3 来自验证子代理(规格对齐),维度 4 来自代码审查(代码质量),维度 5 来自验证子代理(活文档同步,仅建议),步骤 4 测试结果(若可用)。
-
在 status.yaml 中记录结果:读取 beat/changes/<name>/status.yaml(先读后写,保留现有字段),按 references/status-schema.md 设置顶层 verification 字段:verification: { status: passed, critical: 0, date: YYYY-MM-DD }。status 为零 CRITICAL 发现时为 passed,否则 issues-found;critical 为合并报告中的 CRITICAL 计数,包括步骤 4 失败的自动化测试。不推进阶段——验证结果仅存于此字段。若验证无法运行(两个子代理都失败)则完全跳过记录,改为报告失败。这是 verify 唯一写入的文件。/beat:archive 用它来警告归档未验证的变更。修复后重新运行 verify 会覆盖该字段。
问题分类
- CRITICAL:必须修复(缺失场景测试[覆盖模式]、不准确场景[accuracy 模式]、未实现目标、设计违规、安全漏洞、步骤 4 失败的自动化测试)
- WARNING:应该修复(部分覆盖、可能分歧、不可执行测试、Gherkin 质量问题、代码质量关注、活文档漂移——Layer 1/2/3 同步缺口)
- SUGGESTION:建议修复(模式不一致、小改进、distill 模式缺失测试、模块无 README)
维度 5 为建议性——其发现仅分类为 WARNING 或 SUGGESTION,绝不 CRITICAL。用户决定是否在归档前处理;活文档漂移从不阻止归档。
优雅降级
- Gherkin 跳过:跳过维度 1,加强维度 2(proposal 对齐)
- 仅存在 features:仅验证 Gherkin 覆盖
- Features + proposal:验证覆盖 + 对齐
- Features + proposal + design:验证全部五个维度(维度 5 仅在活文档存在时)
- 始终注明哪些检查被跳过及原因
适用场景
适用于采用 beat 工作流、需要在归档前对实现进行独立验证的团队。特别适合需要消除上下文偏差、确保规格与代码一致、并希望自动化测试与代码质量审查并行的开发流程。
限制
- 不负责创建或修改规格产物、编写任务、执行实现或归档变更。
- 若两个子代理都失败,验证无法运行,不记录结果。
- 维度 5 仅为建议性,不阻止归档。
- 具体配置细节(如 testing.required、source: distill 等)需参考 beat 工作流的相关文档。
- 官方文档未提供收费、价格、平台等信息。