加载 spec-human-verify.md 验收清单,以 AI 作为驱动 执行。
AI 自主运行所有 [A](自动化)子步骤,仅对 [H](人工)子步骤调用人类,人类只需回答是/否。
启动时声明: "我正在使用 sdd-start-human-verify 技能来执行 AI 驱动验收。"
.sdd-workspace 配置文件中 workspace_path 指定的根目录{workspace}/spec/ 下在任何操作之前,必须读取工作区配置:
.sdd-workspaceworkspace_path 作为工作区根目录 {workspace}/sdd-global-init 初始化工作区。" 并 停止验证工作区目录存在,如果不存在提示用户重新初始化。
检查当前模型是否为 Opus。如果是 Opus,输出以下纯文本消息并继续(非阻塞):
text
⚠️ 当前模型是 Opus,验收执行任务不需要 Opus 级别的推理能力,建议切换到更快的模型以提升执行效率。输入 /model 切换模型。
扫描 {workspace}/spec/ 中所有匹配 feature_*/spec-human-verify.md 的文件
按 修改时间 排序(最新优先)
通过 AskUserQuestion 展示 最新的 3 个 文件:
读取选中的 spec-human-verify.md
/sdd-plan-human-verify 生成验收清单。"使用此正则解析文件中所有验证项标题:
text
^####\s+-\s+\[([ x!])\]\s+(\d+\.\d+)\s+(.+)$
匹配如下格式的行:
#### - [ ] 1.1 验收项名称 → status: pending (space)#### - [x] 1.1 验收项名称 → status: passed (x)#### - [!] 1.1 验收项名称 → status: failed (!)构建项目列表:索引、编号(例如 "1.1")、名称、状态。
[x] 或 [!](部分完成):
[ ](待处理)项目[x] 或 [!](完全完成):
[x]/ [!] 改回 [ ] 后重新运行。"[ ](全新开始):
读取清单的 ## 验收前准备 部分。解析每个 - [ ] 行并按标签分类。
为 Step 6 清理维护一个 started_services 列表(条目:{pid, port, description})。
[AUTO] 项目 — 一次性命令执行#✓ [description],继续下一个项目AskUserQuestion:「继续」/「中止」AskUserQuestion:「跳过」/「中止验收」[AUTO/SERVICE] 项目 — 长运行服务管理#从行中提取命令和端口号(正则: \(port:\s*(\d+)\))
先检查端口:运行 ss -tlnp | grep :PORT 或 lsof -i :PORT
✓ [description](端口 PORT 已在使用,复用已有服务),跳过启动后台启动服务:使用 Bash, run_in_background: true
等待就绪:轮询端口可用性(最多 30 秒,每 2 秒检查一次)
就绪 → 显示 ✓ [description](服务已启动,PID: xxx)
超时 → 不要只报告错误,自主排查:
AskUserQuestion:「重试」/「跳过」/「中止」在 started_services 列表中记录启动服务的 PID,用于 Step 6 清理
[MANUAL] 项目 — 人工确认#AskUserQuestion:「已完成」/「跳过」/「中止验收」如果准备项没有 [AUTO]/ [AUTO/SERVICE]/ [MANUAL] 标签:
[AUTO][MANUAL]显示:"准备工作完成,开始 AI 驱动验收。"
按顺序处理每个待处理( #### - [ ])项目。
展示验收项的简要概览:
text
---
## [N.M] [验收项名称]
共 X 个步骤(自动: Y, 人工: Z)
---
解析 **操作步骤:** 部分。每个编号步骤以 [A] 或 [H] 开头。
[A] 步骤 — 自动化执行:从步骤中的反引号提取命令
通过 Bash 执行
将实际输出与 → 期望: 后的预期结果比较
匹配 → 显示 ✓ [步骤描述]
不匹配 → 分析原因,尝试修复(例如重启服务、修复配置):
✓ [步骤描述](重试后通过)✗ [步骤描述],包含实际 vs 预期输出[H] 步骤 — 调用人类并提供微指令:显示步骤中精确的微指令文本( → 之前的所有内容)
使用 AskUserQuestion 提供正好 2 个选项:
「是」 → 显示 ✓ [步骤描述]
「否」 → 进入 修复并重新验证循环:
a. 用纯文本(不要用 AskUserQuestion)询问用户:"请描述观察到的异常情况:"
b. AI 根据用户描述分析问题并修复代码
c. 修复后,显示纯文本提醒:"✅ 已修复,请重新刷新页面/重新操作后再次检查。"
d. 重新显示同一步骤的微指令文本
e. 使用 AskUserQuestion 提供正好 2 个选项: 「是」 / 「否」
f. 「是」 → 显示 ✓ [步骤描述](修复后通过),跳出循环
g. 「否」 → 回到步骤 a,继续循环
h. 无重试限制 — 用户可以随时通过 Other 输入 "跳过" 跳过,这将记录步骤为 失败,带有 ✗ [步骤描述]
项目的所有子步骤处理完后:
#### - [x](通过)
✓ [N.M] [名称]#### - [!](失败)
立即更新文件
显示: ✗ [N.M] [名称],包含失败步骤列表
如果存在 矛盾( [A] 步骤通过但相关的 [H] 步骤失败):
> **矛盾备注:** API 层验证通过但 UI 层验证失败,以人工观察为准当项目的所有子步骤都是 [A] 时:
#### - [x],显示: ✓ [N.M] [名称](自动验证通过)#### - [!],显示: ✗ [N.M] [名称](自动验证失败),包含详情每个项目后,显示进度:
text
[N/Total] 已处理 — 通过: X, 不通过: Y, 跳过: Z
重复 4.1–4.5,直到处理完所有项目。
所有项目处理完成后(或所有待处理项目完成后):
text
## 验收执行完毕
- 通过: X 项 ✓(其中修复后通过: R 项)
- 不通过: Y 项 ✗
- 跳过: Z 项 -
- 总计: N 项
- 自动执行步骤: A 个
- 人工确认步骤: H 个
text
### 不通过项目
| 序号 | 验收项 | 失败步骤 | 备注 |
|------|--------|----------|------|
| 1.2 | [名称] | [A] step 2, [H] step 3 | [备注或无] |
| ... | ... | ... | ... |
text
💡 有 Z 个跳过的验收项,可重新运行 `/sdd-start-human-verify` 继续验收。
text
🎉 所有验收项全部通过!
💡 **建议下一步:** 运行 `/sdd-archive` 将此 feature 归档到全局知识库。
最终总结(Step 5)后,清理本次会话启动的服务:
started_services 列表started_services 中的每个条目,按 PID 终止进程已清理 N 个后台服务。[x] 通过, [!] 失败, [ ] 待处理/跳过[x] 或 [!] 项目