sync: enforce per-step screenshot with correct path and .png extension #25

Merged
d8dfun merged 1 commits from sync/d8d-skills-20260412-151317 into master 2026-04-12 23:19:30 +08:00
2 changed files with 12 additions and 8 deletions

View File

@@ -305,7 +305,7 @@ Story 验证全部通过 ≠ 用户能正常使用系统。旅程模式弥补这
| 验证页面内容 | browser_snapshot | curl GET | 用户看到的是渲染后的页面 |
| 等待响应/跳转 | browser_wait_for | — | 等待页面状态变化 |
| 验证数据状态 | browser_evaluate 或 curl均可 | — | 数据断言允许 curl 补充 |
| 保存证据 | browser_take_screenshot | — | 每条旅程至少 1 张截图 |
| 保存证据 | browser_take_screenshot | — | ⛔ 每个用户步骤完成后必须截图。filename 必须以 "tests/e2e/screenshots/" 开头且以 ".png" 结尾 |
| 检查网络请求 | browser_network_requests | — | 每条旅程至少 1 次检查 |
#### 禁止行为(⛔ 检测即阻断)
@@ -315,7 +315,8 @@ Story 验证全部通过 ≠ 用户能正常使用系统。旅程模式弥补这
- ❌ 用 `curl POST /api/xxx` 替代 browser_click 提交表单
- ❌ 操作无反应时不检查页面提示就猜测原因
- ❌ 表单校验阻止时直接用 API 绕过(必须先尝试通过 UI 解决browser_snapshot 读提示 → 按提示补充填写/browser_file_upload
- ❌ 跳过 browser_take_screenshot每条旅程必须截图
- ❌ 跳过任何用户步骤的 browser_take_screenshot⛔ 每个用户步骤完成后必须立即截图,不是只在旅程结束时
- ❌ browser_take_screenshot 的 filename 不以 "tests/e2e/screenshots/" 开头或不以 ".png" 结尾
- ❌ 跳过 browser_network_requests 检查
- ❌ 整条旅程只用 curl 而不用任何 Playwright 工具
@@ -329,8 +330,9 @@ Story 验证全部通过 ≠ 用户能正常使用系统。旅程模式弥补这
2. ✅ 每个用户点击使用 browser_click非 curl
3. ✅ 每个表单填写使用 browser_type⛔ 仅此一个,失败 = Bug → AUTO-FIX禁止用 browser_run_code 绕过)
4. ✅ 页面内容验证使用 browser_snapshot非 curl GET
5.旅程结束时 browser_take_screenshot
6. 旅程结束时 browser_network_requests
5.每个用户步骤完成后立即 browser_take_screenshot(⛔ 不是只在最后截一张)
6. ✅ browser_take_screenshot 的 filename 格式为 "tests/e2e/screenshots/journey-epic-{N}-{M}-step{S}.png"
7. ✅ 旅程结束时 browser_network_requests
### ⛔ 真实用户完成规则Real User Completion Rule
@@ -343,6 +345,8 @@ Story 验证全部通过 ≠ 用户能正常使用系统。旅程模式弥补这
**执行前必须对照检查清单**(违反 = 错误,必须纠正后继续):
- [ ] `browser_snapshot` = DOM 结构快照(找元素用),**不是**视觉验证
- [ ] `browser_take_screenshot` = PNG 截图保存(用于视觉验证),**每个步骤必须**
- [ ] 截图文件名**必须**包含 `.png` 扩展名(`journey-epic-N-M-step-S.png`
- [ ] 截图**必须**保存到 `tests/e2e/screenshots/` 目录,不能保存到当前工作目录
- [ ] 每个用户步骤完成 → `browser_take_screenshot` + `analyze_image` → 视觉验证关卡
- [ ] 旅程最终完成 → `browser_take_screenshot` 最终截图 + `browser_network_requests` 资源检查
- [ ] 违反任意一条 → 中断补全,不能继续
@@ -363,7 +367,7 @@ Story 验证全部通过 ≠ 用户能正常使用系统。旅程模式弥补这
- 标记步骤 FAIL用户无法从此页面继续操作
- `browser_evaluate` 执行 FAIL #5 诊断(检查 interactiveCount / frameworkMounted — 见 auto-fix-engine.md
- 按诊断结果分流 → AUTO-FIX 或 AUTO-IMPLEMENT
- ⛔ **起始页视觉验证**: browser_take_screenshotjourney-epic{N}-{M}-step0.png+ analyze_image
- ⛔ **起始页视觉验证**: browser_take_screenshot → filename: "tests/e2e/screenshots/journey-epic-{N}-{M}-step0.png", type: "png" + analyze_image
- 循环每个用户步骤(步骤编号 S = 1, 2, 3...:
a. browser_snapshot → 找到目标元素
b. browser_click / browser_type / browser_run_code → 执行操作(⛔ 禁止用 curl 替代)
@@ -371,7 +375,7 @@ Story 验证全部通过 ≠ 用户能正常使用系统。旅程模式弥补这
d. browser_snapshot → 验证操作结果(⛔ 禁止用 curl GET 替代)
e. ⛔ **视觉验证关卡**(⛔ 强制 — Read fully and follow: ./visual-verification.md
此关卡为独立步骤,不是子步骤。每个用户步骤完成后必须通过此关卡才能继续。
1. browser_take_screenshot → 保存到 tests/e2e/screenshots/journey-epic{N}-{M}-step{S}.png
1. browser_take_screenshot → filename: "tests/e2e/screenshots/journey-epic-{N}-{M}-step{S}.png", type: "png"
2. analyze_image → 使用 visual-verification.md 中的标准提示词
3. 结果记录到 pipeline-state.yaml 的 verification_detail含 analyze_image_executed: true
4. 视觉验证 FAIL → 按分流规则处理(见 auto-fix-engine.md + iron-laws.md 检测即阻断表)
@@ -505,7 +509,7 @@ Story 验证全部通过 ≠ 用户能正常使用系统。旅程模式弥补这
不满足(仅 Toast 拦截但无"可选"声明)→ 普通 FAIL #12 → 按提示补填继续
3. 证据阶段(⛔ 强制,不得跳过):
- browser_take_screenshot → 保存最终截图到 tests/e2e/screenshots/journey-epic{N}-{M}-final.png
- browser_take_screenshot → filename: "tests/e2e/screenshots/journey-epic-{N}-{M}-final.png", type: "png"
- browser_network_requests(static=false) → 检查无 localhost API 调用
- ⛔ **资源加载状态检查**(新增 — 每条旅程必须执行):
- `browser_network_requests(static=true, filter="\\.(jpg|jpeg|png|gif|webp|svg|mp4|webm|mov)$")`

View File

@@ -354,7 +354,7 @@ echo "placeholder_functions=$PLACEHOLDER_COUNT"
- 关卡未通过 → 按分流规则处理,不得进入下一个操作
#### 步骤 5: 最终截图保存Story 涉及前端页面时)
- 保存最终状态截图到 `tests/e2e/screenshots/story-x-y.png`
- browser_take_screenshot → filename: "tests/e2e/screenshots/story-{x}-{y}.png", type: "png"
- 管理后台和小程序分别截图时使用不同后缀:
- `story-x-y-admin.png`(管理后台页面)
- `story-x-y-mini.png`(小程序页面)