读取已完成的(或部分完成的)spec-plan.md 及其关联的 spec-design.md,提取所有验证项,生成详细的验收清单,其中每个项目预分解为 [A](自动化)和 [H](人工)子步骤。
AI 将在验收期间自主执行 [A] 步骤;[H] 步骤是精确的微指令,人类只需回答是/否。
启动时声明: "我正在使用 sdd-plan-human-verify 技能来生成验收清单。"
.sdd-workspace 配置文件中 workspace_path 指定的根目录{workspace}/spec/ 下在任何操作之前,必须读取工作区配置:
.sdd-workspaceworkspace_path 作为工作区根目录 {workspace}/sdd-global-init 初始化工作区。" 并停止验证工作区目录存在,如果不存在提示用户重新初始化。
检查当前模型是否为 Opus。如果不是 Opus,显示建议:
⚠️ 当前模型不是 Opus,建议切换到 Opus 以获得最佳验收清单质量。输入 /model 切换模型。
这是非阻塞的 — 无论如何都继续。
{workspace}/spec/ 中所有匹配 feature_*/spec-plan.md 的文件AskUserQuestion 展示最新的 3 个计划:从同一目录读取两个文件:
检查步骤: 部分收集所有项目End-to-end verification: 部分收集所有项目合并计划项目和设计文档项目;移除重复项(相同的验证意图 = 重复)。
对于每个验收项,确定每个操作步骤是否可以自动化:
[A],包含可执行命令和预期结果[H],写为精确的微指令(具体 URL + 具体观察点 + 是/否判断)[A]。只有当步骤必须依赖人工视觉/物理交互时才标记为 [H][A](完全自动化)、纯 [H](完全人工)或混合 [A] + [H][H] 步骤必须是精确的微指令:告诉人类具体要看哪里和检查什么;人类只需回答是/否[H]:[A]:告知用户:"所有验收项均可自动化验证,无需人类参与。仍将生成清单用于自动执行。" 并继续生成。
仅基于 spec-plan.md 继续分析;警告用户:"未找到 spec-design.md,仅基于 spec-plan.md 生成清单。"
在 spec-plan.md 所在的同一目录生成 spec-human-verify.md 的内容。
[A] 步骤包含:反引号中的精确命令和 → 期望: 后的预期结果[H] 步骤包含:精确 URL、精确观察点、是/否问题格式按业务场景分组验证项(例如"用户登录流程"、"管理员操作"、"数据展示")。
每个场景是一个 ### 场景 N 部分。
供 sdd-start-human-verify 用于自主执行。每个准备项必须有以下标签之一:
[AUTO] — 一次性命令,直接执行并检查退出码。格式:- [ ] [AUTO] description: \command\``[AUTO/SERVICE] — 长运行服务,后台启动 + 端口检测 + 就绪等待。格式必须包含 (port: NNNN):- [ ] [AUTO/SERVICE] description: \command\ (port: NNNN)[MANUAL] — 需要人工操作,无法表达为 shell 命令。仅用于:需要目视观察 UI、需要操作物理设备或外部硬件、需要操作第三方 GUI 系统、需要人类主观判断。分类原则:默认为 [AUTO]。如果准备步骤可以通过 shell 命令验证或执行,必须是 [AUTO],不是 [MANUAL]。
以下类别始终是 [AUTO],永不是 [MANUAL]:
grep, test -f, env | grepnode -v, npm ls, which xxxnpm run build, tsc, makenpm install, pip install, apt-get installnpx prisma migrate, python manage.py migrate[MANUAL] 仅用于以下场景:
使用以下模板 — 注意项目标题使用 #### - [ ] N.M 格式(h4 + 复选框):
# [功能名称] 人工验收清单
**生成时间:** YYYY-MM-DD HH:mm
**关联计划:** [spec-plan.md 相对路径]
**关联设计:** [spec-design.md 相对路径]
---
## 验收前准备
### 环境要求
- [ ] [AUTO] 检查 Node.js >= 18: `node -v`
- [ ] [AUTO] 编译后端: `cd key-portal/server && npx tsc`
- [ ] [AUTO/SERVICE] 启动后端服务: `cd key-portal/server && NODE_ENV=development node dist/index.js` (port: 3001)
- [ ] [AUTO/SERVICE] 启动前端开发服务器: `cd key-portal/web && npm run dev` (port: 5173)
- [ ] [AUTO] 检查 .env 包含必要变量: `grep -q 'NODE_ENV=development' .env && grep -q 'ADMIN_MIPS=' .env`
- [ ] [MANUAL] [手动准备项说明,无可执行命令]
### 测试数据准备
- [ ] [具体测试数据,如: 准备测试账号 testuser / password123]
---
## 验收项目
### 场景 1:[场景名称]
#### - [ ] 1.1 验收项名称
- **来源:** Task N 检查步骤 / spec-design.md
- **操作步骤:**
1. [A] `curl -s http://localhost:3001/api/auth/me -H 'X-Dev-UserCode: chenwx57'` → 期望: 返回 JSON 含 userCode: "chenwx57"
2. [A] `curl -s http://localhost:3001/api/tokens -H 'X-Dev-UserCode: chenwx57'` → 期望: HTTP 200
3. [H] 打开 http://localhost:5173,查看右上角是否显示 "chenwx57" → 是/否
- **异常排查:**
- 如果 [具体异常]: 检查 [排查方向和命令]
#### - [ ] 1.2 验收项名称
- **来源:** ...
- **操作步骤:**
1. [A] `command` → 期望: ...
2. [H] 微指令 → 是/否
- **异常排查:**
- ...
### 场景 2:[场景名称]
#### - [ ] 2.1 验收项名称
...
---
## 验收结果汇总
| 场景 | 序号 | 验收项 | 自动步骤 | 人工步骤 | 结果 | 备注 |
|------|------|--------|----------|----------|------|------|
| 场景 1 | 1.1 | [名称] | N 个 | M 个 | ⬜ | |
**验收结论:** ⬜ 全部通过 / ⬜ 存在问题
类型: 字段(不再分类为 UI 检查/浏览器调试等)预期结果: 块(预期结果与每个步骤内联,在 → 期望: 后)[A] 步骤:反引号命令 + → 期望: 描述预期输出[H] 步骤:精确微指令 + → 是/否不要直接写入文件。 而是先展示给用户确认:
## 验收清单预览
| 统计项 | 数量 |
|--------|------|
| 场景数 | N |
| 验收项数 | M |
| 自动步骤 [A] | X 个 |
| 人工步骤 [H] | Y 个 |
| 纯自动项(无需人类) | Z 个 |
| 场景 | 序号 | 验收项 | [A] 步骤 | [H] 步骤 | 来源 |
|------|------|--------|----------|----------|------|
| 场景 1 | 1.1 | [名称] | 2 | 1 | Task 3 |
| ... | ... | ... | ... | ... | ... |
使用 AskUserQuestion 提供两个选项:
如果用户选择 "需要修改":
写入前,检查目标目录是否已存在 spec-human-verify.md:
AskUserQuestion: 「覆盖现有文件」/「取消」确认后,将 spec-human-verify.md 写入与 spec-plan.md 相同的目录。
向用户显示汇总:
## 验收清单已生成
- 文件: [path to spec-human-verify.md]
- 场景数: N
- 验收项数量: M 项
- 自动步骤 [A]: X 个
- 人工步骤 [H]: Y 个
- 纯自动项(无需人类参与): Z 个
- 💡 **建议下一步:** 运行 `/sdd-start-human-verify` 开始执行验收
#### - [ ] N.M 格式以兼容 sdd-start-human-verify共 1 个版本