用途:在 Story 进入自动化测试规划前,对运行中的代码做手工验收标准(AC)验证,产出结构化结果供质量门禁使用。触发条件为 Story 上存在来自 ln-521 的“## Test Research:”评论,且所有实现任务状态为 Done。
主要能力:在目标项目 tests/manual/ 下创建并长期保留可执行测试脚本(非临时文件),用于回归测试;按 AC 拆分为 Given/When/Then 用例;API 用 bash/curl,UI 用 Puppeteer;结果保存到 tests/manual/results/(加入 .gitignore);通过跟踪器 addComment 发布每个 AC 的通过/失败矩阵、脚本路径与重跑命令。
使用方式:解析 storyId(状态过滤 To Review);读取 docs/project/infrastructure.md 与 runbook.md 获取端口、服务端点、Docker 命令;初始化 tests/manual/ 结构(config.sh、README.md、test-all.sh、results/);按模板生成 tests/manual/{NN}-{story-slug}/test-{story-slug}.sh 并 chmod +x;重建 Docker 容器并确认健康后执行脚本;更新 README 与 test-all.sh 的 SUITES 数组;最后发布评论。运行超过 30 秒的脚本建议用 Monitor(command="bash tests/manual/{suite}/test-{slug}.sh 2>&1", timeout_ms=300000, description="manual test: {slug}"),不可用时改用后台 Bash。
测试原则:失败即返回 1,禁止静默失败;以 expected/ 参考文件做 diff 比对为主,仅对时间戳、UUID、token 等非确定性数据做归一化,JSON 可用 jq --sort-keys;expected 文件须先验证正确再复制,不可盲目复制结果。
限制:不修改代码、不改变状态、不创建任务,只提供证据与结论;脚本须幂等;Docker 重建或运行不健康即失败;脚本注释与评论保持 Story 语言(EN/RU)。具体模板与参考文件路径以技能目录内 references/ 为准。