跳转到主要内容
Verify 以已确认的需求为准,逐项判断实现是否达标;Builder 自己声明“已完成”仅作为线索,不构成结论。 Builder 先逐项自查实现与证据,Runtime 执行必要检查,再由新的只读 Verifier Subagent 对照 brief.md、Specs 和验收项独立判断。完整自查和通过的检查都不能代替独立验收;代码修改只发生在 Build 阶段,Verifier 全程只读。

不同结果的处理方式

每次 Verify 结束,Runtime 会把结果归到下表几种情况之一。多数情况自动推进;少数情况会暂停等待你处理。先对上结果类型,再看你要做什么、流程去向哪里。 “验收未通过”和“Verifier 执行出错”不是一回事。前者说明实现仍不符合需求,或需求本身有问题,后者说明验收任务本身没有正常完成。Runtime 会分别记录,避免把基础设施故障误判为产品失败。 需要你从命令里做明确选择的暂停只有表里的两行,每个选项的语义和命令在下一节说明。

用户决定是否接受结果或调整目标

当 Skill 启动的最终 Verifier 已判断全部通过,但平台无法向 Runtime 证明它与 Builder 是独立执行时,Runtime 会暂停并提供三个互斥选项: 三个选项都通过 comet native next 提交:
接受结果时,也可以一起选择交付方式,例如 --accept-result --finish keep。Comet 会先展示实际工作区和各选项的影响,再按你的选择继续;完整选项见 归档与交付。 如果平台根本无法启动语义 Verifier,即使所有 Runtime 检查都通过,也只能得到降级结果。此时 Runtime 会暂停并给出两个选项:重试验收(comet native next <change> --retry-verifier,保留当前候选和已完成的检查,只发起新的验收尝试)或接受降级结果(在明确确认后用 continuation 返回的 --confirmed 动作接受)。确认接受后,报告仍会保留降级标记,注明这不是一次独立验证。 两条路对应的命令:
所有决定命令都带有 --expected-state-version 和 --expected-action。如果状态已经变化、操作来自旧页面或旧任务,Runtime 会拒绝执行,避免迟到决定覆盖当前结果。

局部修复后必须再次全量验收

选择 --revise-implementation 或让 failed 项返回 Build 之后,Runtime 按下面的规则安排修复与再验收。 出现失败检查或 failed 项时,Runtime 会把各项失败原因写入最新 continuation,并把当前变更送回 Build。Builder 根据失败原因修改实现,补齐受影响验收项的自查,再提交新的候选实现。遇到 blocked 项时,Runtime 会先等待用户或外部条件补齐,不会把缺少信息误当成代码缺陷直接修改。 Builder 重点处理两部分内容:
  • 上一轮仍未解决的验收项;
  • Builder 声明可能受本轮修改影响的验收项。
仍然适用的自查记录可以保留,Runtime 检查只有在输入、命令、工作区、环境和日志都仍然有效时才会复用。代码或检查输入变化后,相关检查必须重新执行。 修复后的新候选由新的 Verifier 在一轮中覆盖全部验收项。完整验收通过后,直接进入接受结果或归档的下一步,不清空通过结果再追加相同的全量验收。完整独立验收指当前 change 的全部验收项,不要求每次都运行仓库全量测试。

Supervisor Change 在集成工作区完成最终验收

Supervisor Change 的子任务必须依次达到 active、verified 和 integrated。子任务通过自己的验收,不代表整个 Supervisor Change 已经完成。 所有子任务集成后,Runtime 会在 Supervisor 的集成 worktree 中运行至少一项集成检查,并对完整验收范围执行最终 Verify。集成后的结果失败时,Runtime 会保留现场,根据实际失败项补充修复子任务,并重新确认 Shape;已集成的子任务保持原状。

验证报告缺失时可重建

verification.md 是面向用户的验收报告,包含 Runtime 检查、逐项结果、风险、限制和最终结论。验收结论同时记录在 comet-state.yaml,因此报告缺失、写入中断或版本落后时,可以根据记录的结论重新生成。 换到另一台设备后,旧设备上的本机执行不能直接沿用。处于 verify-ready 的候选会重新运行必要检查并启动新的 Verifier;处于 archive-ready 的候选也会先返回 Verify,重新确认同步后的实现。恢复过程不计入失败轮次或停滞计数。

无法自动确认的内容交还用户

Runtime 可以确认命令是否真正执行、退出码是否正常、验收项是否完整,以及返回结果是否属于当前候选和当前 attempt。正常 Archive 直接使用已经接受的验证结果,无需重复运行同一批检查。 如果一项结论依赖测试本身是否合理,或依赖平台没有提供的后台进程、IDE 写入和外部系统状态,Runtime 就不能独自确认。平台无法提供独立 Verifier 或无法完成语义验收时,Dashboard 和报告会直接说明缺少什么,并把是否接受当前结果的决定交还用户。

Verifier 协议参考

前面的选择建立在下面的机制上。日常做选择不需要先读完这些细节;当你想知道结果如何产生、边界如何判定、上限如何执行时,再读本参考。

三层验证

Builder 提供实现与证据线索,Runtime 证明检查确实执行,Verifier 判断功能是否符合需求。最终验收结论由 Verifier 独立给出。

候选实现带着完整自查进入 Verify

Builder 完成一轮实现后,逐项核对全部已确认验收要求:实现是否完成、位置在哪里、哪些检查或其他证据能够支持、还有什么限制。发现遗漏时继续在 Build 修复。普通候选和 Supervisor 父候选不强制再派一个预审 Reviewer;独立 Verifier 仍然必需。 自查完成后,Builder 向 Runtime 提交一份精简的 handoff,其中包括:
  • 本轮完成了什么;
  • 处理了哪些验收 ID;
  • 实际运行或没有运行哪些开发期检查;
  • 当前已知限制;
  • 每个已确认验收项的实现与证据自查。
Runtime 会把 handoff 保存到 comet-state.yaml,并绑定候选 ID、iteration 和 Builder 身份。handoff 是待验收候选的状态记录;是否通过,由后续验收决定。

Runtime 先执行检查,Verifier 再逐项验收

候选实现进入 Verify 后,流程按以下顺序推进:
  1. 确定验收范围。 正式 Verifier 覆盖当前候选的全部验收项,修复摘要指出上一轮未解决项和本次修改可能影响的项目。
  2. 执行必要检查。 Runtime 运行测试、构建或其他项目命令,并记录状态、退出码、耗时和摘要。项目策略携带的验证命令(见项目知识)也会作为必要检查在这里执行,只有真实通过才能把对应策略升级为 enforced。
  3. 准备验收上下文。 Builder 检查成功的同一响应直接返回 verifierDispatch,包含实际工作区、需求和证据位置、当前验收范围、启动回执输入以及 Runtime 检查结果,无需额外查询或重复派发。
  4. 启动新的 Verifier Subagent。 Verifier 保持只读,对当前范围内的每个验收 ID 给出一次结论。
  5. 校验并接受结果。 Runtime 检查候选、身份、轮次、attempt 和验收范围是否匹配,再决定下一步。
Verifier 会先阅读当前验收场景、brief.md、完整目标 Specs、实际实现和 Runtime 检查结果,最后才把 Builder handoff 当作调查线索。这种顺序可以减少 Builder 自述对验收判断的影响。 每个 scopeId 必须恰好出现一次,并且只能标记为:
  • passed:实现已经满足该验收项;
  • failed:实现不满足该验收项,需要回到 Build;
  • blocked:缺少用户决定、外部条件或其他必要信息,暂时无法判断。
漏项、重复项、未知 ID、身份不匹配或迟到的旧结果都会被 Runtime 拒绝。字段、格式或验收范围可纠正时,Verifier 使用当前模板修正原输入并重新提交,继续同一任务。旧候选或旧任务的结果不能改成新身份重提。Runtime 检查全部通过,Verifier 才能提交整体通过的结论。

等待原 Verifier,而非重复派发

任务包提供启动回执输入。尚未确认启动时,Agent 先核对平台是否接受启动并找回原任务;已经确认启动后,继续等待同一个 Verifier。回执迟到或等待工具超时,本身不算执行失败。只有平台确认任务失败、执行超时、任务丢失或结束后没有可用结果时,才登记错误并按当前指引重试。

补充检查仍由 Runtime 统一执行

如果现有证据不足,Verifier 可以通过 request-checks 请求额外检查。它只说明需要运行什么,命令仍由 Runtime 执行并记录。 补充检查属于当前 Verifier attempt,不会单独增加 attempt。Runtime 会复用当前候选已经完成的相同检查,过滤重复请求,并把新结果交回同一个 Verifier。每次 attempt 最多提供 2 轮补充检查,避免验收无限追加命令。允许重复执行的失败检查可以在现有限额内显式请求重跑,断言失败仍然算失败,不自动循环重试。 完整的 stdout 和 stderr 保存在本机日志中,用户报告只显示结论和必要摘要。长输出只截断预览,检查结果本身照常判定。

修复轮次设有明确的次数上限

Runtime 通过未解决验收项是否真正减少来判断进展。只有当前未解决项比上一轮更少,而且没有新增未解决项,才算可靠收敛。
  • 连续两轮没有可靠进展时,Runtime 会要求 Builder 更换修复思路;
  • 连续三轮仍没有进展时,流程进入 await-user;
  • 验收失败轮次达到 native.max_verify_failures 时进入 await-user,默认上限为 5;
  • Verifier 连续执行出错 3 次时进入 blocked,等待明确的重试动作。
这些计数都由 Runtime 更新。重复同一条命令、改写说明文字或再次报告相同原因,都不会重置失败历史。 继续阅读 Native Loop,了解完整的 Build ↔ Verify 循环。阅读 连续推进 和 恢复手册,了解状态推进与异常恢复。
最后修改于 2026年10月3日