关于 verify
verify 是用于按工作流前期约定检查最终交付物的技能,定义状态标签,并提供视频、截图、快照和 QA 报告的核验流程。
主要功能
- 01标记 PASS、FAIL 或 BLOCKED 状态
- 02检查视频元数据和解码情况
- 03查看画面中的证明要点
- 04核验截图和快照证据
- 05检查 QA 报告覆盖度与结构
适用场景
- 01按要求核验合成视频
- 02检查报告声明的证据
- 03审阅基于截图的测试结果
- 04查找 QA 报告中的缺失步骤或证据
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ factory-ai/ factory-plugins --skill verify安装后在 Claude Code 中输入/verify确认已加载。
详细介绍
验证
协调器将你路由到此处。此原子会根据工作流开始时作出的承诺,检查最终交付物。
输入
你会收到:
- 承诺:来自命令的解析步骤,即对交付物内容作出的保证
- 合成输出:完成的产物及其元数据
合成是可选的:原始桌面截图/状态以及驱动程序的证据交接也可以作为交付物。验证任务的后置条件,而不只是操作的退出状态或 effect 字段。
状态词汇
每个步骤、检查和后置条件都必须且只能使用以下一种状态;命令和驱动程序原子使用相同的状态词。
| 状态 | 含义 | 计为 |
|---|---|---|
PASS | 已观察到后置条件成立 | 满足 |
FAIL | 已观察到后置条件不成立 | 未满足——这是一项发现 |
BLOCKED | 无法观察后置条件:无法捕获、权限等待未解决、缺少二进制文件或连接,或环境阻止了步骤执行 | 两者皆非。说明阻碍因素以及解除阻碍的方法 |
BLOCKED 绝不会归入 PASS 或 FAIL。包含 BLOCKED 步骤的交付物是不完整的,除非用户接受部分证据。/verify 的声明判定(CONFIRMED / REFUTED / INCONCLUSIVE)针对的是证据是否充分,而非步骤状态:任何声明所依赖的 BLOCKED 步骤都会使判定为 INCONCLUSIVE;即使所有步骤都已执行但仍无法确定声明,判定也会是 INCONCLUSIVE。
视频交付物
技术检查
对最终的 .mp4 运行 ffprobe,然后进行完整解码:
ffprobe -v quiet -print_format json -show_format -show_streams <video>
ffmpeg -v error -xerror -i <video> -f null - # -xerror: exit non-zero on the first decode error
| 检查项 | 通过条件 |
|---|---|
| 文件存在且可解码 | ffprobe 退出码为 0,且时长 > 0;并且 ffmpeg -xerror 解码退出码为 0,且标准错误输出为空 |
| 分辨率 | 与保真度合成所解析的结果一致:compact/standard 为 1920x1080,inspect 为 2560x1440(side-by-side 的默认值),或属性中的显式 width/height |
| 像素格式 | pix_fmt=yuv420p 且 color_space=bt709(yuvj420p 流表示渲染绕过了 render-showcase.sh) |
| 文件大小 | GitHub 嵌入视频需小于 5 MB(硬性上限为 25 MB) |
| 时长 | 等于 4s + longest_clip / speed + 3.5s(合成时长检查点),并且处于此演示类型的合成节奏表目标范围内:30-45s(单项功能)、45-75s(并排对比)、60-120s(多阶段)。低于最短时长即为失败——请使用更低的速度系数重新合成,或重新捕获更多步骤。 |
| 文件名 | 包含 PR 编号或有意义的标识符 |
承诺检查
逐项检查解析步骤中的每项承诺:
| 承诺 | 验证方法 |
|---|---|
| 标题卡 | 视频以显示 PR 信息的静态画面开场(检查前 5s) |
| 并排布局 | 视频显示由分隔线隔开的两个面板 |
| 展示润色 | 分辨率符合解析出的保真度,且可见窗口边框和圆角 |
| 击键叠加层 | 在交互节点显示胶囊形叠加层 |
| 效果 | 存在与承诺层级相符的效果(实用型:缩放/击键;完整型:聚光灯、缩放、标注、击键) |
| 速度说明 | 标题卡提及播放速度 |
内容检查
元数据无法展示屏幕上的内容。对于每个证明点,都要提取画面帧并查看:
ffmpeg -v error -y -ss <t> -i <video> -frames:v 1 "${RUN_DIR}/proof-<t>.png" # then Read the PNG
- “需要证明的内容”分析中的每项主张,都有视频中的可见证据,并已在你报告的时间戳处通过提取的画面帧确认
- 两种状态(之前/之后、输入/结果)都显示在屏幕上
- 最终状态:片段从
t = 4.0s播放至t = 4.0s + longest_clip / speed,全程清晰可见;之后,最后一帧会在片尾淡入淡出期间保持显示。在片段结束前提取最终证明帧(例如t = 4.0 + longest_clip / speed - 0.1),不要从淡入淡出期间提取 - 并排显示时,较短的片段会停留在最后一帧;请确认停留的面板显示的是预期的最终状态,而不是尚未完成的步骤
- 没有超过 3 秒且缺少可见活动的空档
截图/快照交付物
用于证明
| 检查项 | 通过条件 |
|---|---|
| 存在证据 | 每个提出的证明点都有截图/快照 |
| 说明环境 | 已标明驱动程序、终端/浏览器和操作系统 |
| 提供结论 | 证据明确支持或反驳该主张 |
| 配对展示前后状态 | 如需比较,在相同的截取点展示两个分支 |
用于 QA 报告
| 检查项 | 通过条件 |
|---|---|
| 步骤覆盖 | 每个已定义的测试步骤都有状态(PASS / FAIL / BLOCKED) |
| 附上证据 | 每个步骤都有截图/快照 |
| 记录失败 | FAIL 步骤有证据和说明;BLOCKED 步骤注明阻碍因素及解除阻碍所需的条件 |
| 报告结构 | Markdown 报告遵循 QA 模板 |
失败处理
如果任何检查未通过:
- 确定问题出在哪个阶段(采集或合成)
- 报告具体失败情况:“已提交并排布局,但输出只有一个面板”
- 返回失败的阶段并修复问题
- 修复后重新验证
在满足所有承诺之前,不要报告交付物已完成。
输出
## Verification
### Technical
- Decode: ffmpeg -xerror exit 0 ✓
- Resolution: 2560x1440 (inspect, side-by-side) ✓
- Duration: 52.5s = 4 + 45 + 3.5 ✓
- Size: 3.2 MB ✓
- Format: yuv420p / bt709 ✓
### Commitments
- [x] Title card with PR info
- [x] Side-by-side comparison layout
- [x] Showcase hero preset applied
- [x] Keystroke overlay visible
### Content
- [x] Fork creates independent session (frame at 0:18 read: new session id in header)
- [x] History diverges after fork (frame at 0:32 read: differing last messages)
All commitments met. Deliverable ready.
评论
支持 Markdown