sync: E3.8操作结果断言强制 + E5并行会话隔离 + API 401/自造FAIL分类 #54
@@ -87,6 +87,15 @@
|
||||
|
||||
(详见 ../../rules/auto-fix/workflows.md AUTO-FIX #14)
|
||||
|
||||
**⛔ 规则 E3.8:操作结果断言强制(⛔ 强制 — 每次用户操作后必须执行)**:
|
||||
- 任何用户操作(click/type/upload)完成后,必须执行 `browser_snapshot` 验证操作产生了预期状态变化
|
||||
- **"按钮启用" ≠ "按钮点击后结果正确"** — 必须实际点击并验证结果
|
||||
- **"API 返回 200" ≠ "前端正确展示了 API 结果"** — 必须用 snapshot 确认 UI 更新
|
||||
- **"元素可见" ≠ "元素交互正确"** — 必须实际操作并验证操作后的状态
|
||||
- 跳过操作结果验证 = 规则 E2 违规(跳过步骤)→ 旅程标记 FAIL
|
||||
- 特别关注"确认/提交/选择"类按钮:旅程定义中包含 `browser_click` 确认操作时,必须实际执行点击并验证结果
|
||||
- 交互不完整(操作成功但结果未发生)→ AUTO-FIX (max 2x)(FAIL #25)
|
||||
|
||||
**规则 E4: 数据断言必须使用操作前后的实际值**
|
||||
```
|
||||
✅ 正确:
|
||||
@@ -99,6 +108,32 @@
|
||||
断言: "有返回就算通过" → 这是 Story 级验证,不是旅程验证
|
||||
```
|
||||
|
||||
**规则 E5:并行 agent 会话隔离(⛔ 强制)**
|
||||
|
||||
当多个 agent 并行验证不同旅程时,每个 agent 必须独立管理自己的登录状态。
|
||||
|
||||
**要求**:
|
||||
1. 每个 agent 在准备阶段执行完整的登录验证(不能假设"其他 agent 已登录")
|
||||
2. 登录后必须验证 session 有效性:browser_snapshot 检查 sidebar 显示的邮箱是否为预期测试账号
|
||||
3. 如果 browser_snapshot 显示的邮箱与测试账号不一致(如显示回退值 "(not signed in)" 或 "(未登录)"),必须重新登录
|
||||
4. sidebar 回退显示 "(not signed in)" = session 丢失的明确信号,⛔ 不得归类为"环境限制"
|
||||
|
||||
**验证步骤**(准备阶段新增):
|
||||
```
|
||||
1. browser_navigate → 根 URL
|
||||
2. browser_snapshot → 检查当前登录状态
|
||||
├── 页面重定向到 /dashboard → 检查 sidebar 显示的邮箱
|
||||
│ ├── 邮箱 = 测试账号邮箱 → session 有效,继续
|
||||
│ └── 邮箱 ≠ 测试账号邮箱(含 "(not signed in)" / "(未登录)" / 空值) → session 失效 → 重新登录
|
||||
└── 页面重定向到 /login → 未登录 → 执行登录流程
|
||||
3. 登录后确认: browser_snapshot → sidebar 邮箱 = 测试账号邮箱
|
||||
```
|
||||
|
||||
**API 401 专项诊断**:
|
||||
- API 返回 401 → 首先检查 session cookie: `browser_evaluate` → `document.cookie.includes('authjs.session-token')`
|
||||
- 如果 cookie 不存在 → session 丢失 → AUTO-SESSION-RECOVER(重新登录,详见 ../../rules/auto-fix/workflows.md)
|
||||
- 如果 cookie 存在但 API 仍返回 401 → 可能是 JWT 过期 → 重新登录
|
||||
|
||||
## ⛔ 工具选择守卫(Tool Selection Guard)
|
||||
|
||||
**核心原则:用户步骤 = Playwright 工具,数据验证 = Playwright + curl 补充**
|
||||
|
||||
@@ -243,6 +243,8 @@ Epic N+1 完成
|
||||
| 交互元素状态未变化 | browser_click 点击 checkbox/radio/toggle 后 browser_snapshot 确认 checked/selected 状态未改变 | Bug(#22) | AUTO-FIX: 修复事件绑定或状态更新逻辑 |
|
||||
| 按钮永久 disabled | 旅程定义中要求点击的按钮(如 Next/Submit/Publish)处于 disabled 状态且无法通过前置操作解除 | Bug(#23) | AUTO-FIX: 修复 disabled 条件或连接正确的状态源 |
|
||||
| API 成功但 UI 未更新 | curl/API 返回成功但 browser_snapshot + browser_take_screenshot 确认界面无变化(如封面预览未刷新、列表未新增) | Bug(#24) | AUTO-FIX: 添加 refetch/状态同步/乐观更新 |
|
||||
| API 401 未按分类表处理 | API 返回 401 但被归类为"环境限制"/"账号限制"/"演示环境"等不在 auto-fix 分类表中的分类 | Session 丢失(#23) 或 Bug(#24) | AUTO-SESSION-RECOVER(重新登录)或 AUTO-FIX(认证逻辑修复) |
|
||||
| 自造 FAIL 分类 | 将 FAIL 归类为 auto-fix 分类表中不存在的类型(如"环境限制"/"账号限制"/"演示环境"等) | 兜底规则违反(#99) | 按 #99 默认 Bug 处理 + AUTO-FIX |
|
||||
| Playwright 崩溃直接跳过 | browser_* 操作返回错误/超时后,标记 PARTIAL PASS 而不重试 | 环境问题(#22) | AUTO-RETRY: 等待10秒+重启浏览器+重试当前步骤(max 3x) |
|
||||
| 已修复标记盲信 | 旅程文件交互缺陷审计表标记"✅ 已修复",验证时不重新测试实际行为 | 漏检风险 | ⛔ 必须重新验证修复是否正确(不只是检查 handler 是否存在) |
|
||||
| 漏识别 uni-app 交互 | 交互元素识别只覆盖 React(onClick)不覆盖 uni-app(@tap) | 覆盖漏洞 | 交互元素识别必须同时支持 onClick + @tap/@click/bindtap |
|
||||
|
||||
Reference in New Issue
Block a user