Merge pull request 'sync: 整理 E3.6 重复定义 + 修复变量名 result → resultList' (#42) from sync/d8d-skills-20260415-101229 into master
Reviewed-on: http://gitea.d8d.fun/d8dfun/bmad-method-template/pulls/42
This commit is contained in:
@@ -204,17 +204,17 @@ Story 验证全部通过 ≠ 用户能正常使用系统。旅程模式弥补这
|
||||
1. 读取所有 epic-N-journeys.md
|
||||
↓
|
||||
1.5 执行前校验与自动修复(⛔ 强制)
|
||||
**Read fully and follow: ./journey-authenticity-rules.md**
|
||||
- 按统一规则 R1-R5 + R7 校验所有旅程文件
|
||||
- R7 约束一致性校验:对含"可选/可跳过/选填"关键词的步骤,grep 对应源码验证逻辑
|
||||
- 不一致 → 自动修复旅程定义(使其准确反映代码)→ 重新校验
|
||||
- 违规 → 自动修复旅程文件 → 重新校验(max 3x)
|
||||
- 环境适配:读取 pipeline-context.md 确定当前环境,按 R3 适配
|
||||
**Read fully and follow: ./journey-authenticity-rules.md**
|
||||
- 按统一规则 R1-R5 + R7 校验所有旅程文件
|
||||
- R7 约束一致性校验:对含"可选/可跳过/选填"关键词的步骤,grep 对应源码验证逻辑
|
||||
- 不一致 → 自动修复旅程定义(使其准确反映代码)→ 重新校验
|
||||
- 违规 → 自动修复旅程文件 → 重新校验(max 3x)
|
||||
- 环境适配:读取 pipeline-context.md 确定当前环境,按 R3 适配
|
||||
↓
|
||||
1.8 生成步骤级验证清单(⛔ 强制 — 写入 verification-checklist.yaml)
|
||||
- 解析每个旅程的「技术验证步骤」→ 为每个步骤生成 step 条目
|
||||
- 提取验收标准 → 生成 acceptance_criteria 条目
|
||||
- 写入/追加到 verification-checklist.yaml 的 journeys 部分:
|
||||
- 解析每个旅程的「技术验证步骤」→ 为每个步骤生成 step 条目
|
||||
- 提取验收标准 → 生成 acceptance_criteria 条目
|
||||
- 写入/追加到 verification-checklist.yaml 的 journeys 部分:
|
||||
```yaml
|
||||
journeys:
|
||||
epic_N:
|
||||
@@ -232,12 +232,12 @@ Story 验证全部通过 ≠ 用户能正常使用系统。旅程模式弥补这
|
||||
- criterion: "{验收标准}"
|
||||
status: "pending"
|
||||
```
|
||||
- 如 verification-checklist.yaml 已存在 → 跳过已 pass 的步骤,从 pending 步骤恢复
|
||||
- 如 verification-checklist.yaml 已存在 → 跳过已 pass 的步骤,从 pending 步骤恢复
|
||||
↓
|
||||
2. 询问: 验证全部 Epic 还是指定 Epic?(确定验证范围)
|
||||
↓
|
||||
1.9 创建旅程任务清单(⛔ 强制 — 根据范围筛选,每条旅程一个 Task)
|
||||
- 为每条待验证旅程**创建独立的 Task 任务**,使用 `TaskCreate` 工具:
|
||||
- 为每条待验证旅程**创建独立的 Task 任务**,使用 `TaskCreate` 工具:
|
||||
- 每个任务记录:Epic 编号、旅程名称、旅程文件路径、前置条件
|
||||
- 便于独立追踪每条旅程的验证进度
|
||||
- 避免单个 agent 上下文过大导致污染或遗漏
|
||||
@@ -256,10 +256,10 @@ Story 验证全部通过 ≠ 用户能正常使用系统。旅程模式弥补这
|
||||
```
|
||||
↓
|
||||
1.10 启动逐个任务验证(每条旅程独立 agent)
|
||||
- 对**每个任务**启动一个**独立的 agent**,按照后续「执行模板」执行验证
|
||||
- 独立 agent 避免上下文污染,执行更精准
|
||||
- 对**每个任务**启动一个**独立的 agent**,按照后续「执行模板」执行验证
|
||||
- 独立 agent 避免上下文污染,执行更精准
|
||||
|
||||
⛔ **强制规则:禁止在主 agent 中一次性串行执行多条旅程**
|
||||
⛔ **强制规则:禁止在主 agent 中一次性串行执行多条旅程**
|
||||
↓
|
||||
3. 汇总所有任务结果 → 生成旅程验证报告
|
||||
↓
|
||||
@@ -271,7 +271,7 @@ Story 验证全部通过 ≠ 用户能正常使用系统。旅程模式弥补这
|
||||
## 旅程验证核心原则
|
||||
|
||||
⛔ **核心原则:每条旅程独立 agent 执行,禁止一次性串行执行所有旅程。**
|
||||
**最佳实践:每个旅程启动一个独立 agent,避免上下文污染,执行更精准。**
|
||||
**最佳实践:每个旅程启动一个独立 agent,分批并行执行,避免上下文污染和 Playwright MCP 配额超限,执行更精准。**
|
||||
|
||||
所有旅程验证任务创建完成后,由独立 agent 按照后续「执行铁律」和「执行模板」依次执行单条旅程的完整验证。
|
||||
|
||||
@@ -429,7 +429,7 @@ Story 验证全部通过 ≠ 用户能正常使用系统。旅程模式弥补这
|
||||
- [ ] 截图文件名**必须**包含 `.png` 扩展名(`journey-epic-N-M-step-S.png`)
|
||||
- [ ] 截图**必须**保存到 `tests/e2e/screenshots/` 目录,不能保存到当前工作目录
|
||||
- [ ] **每个截图文件必须是真正的 PNG 图片** → `file <path>` 检测输出必须包含 "PNG image data"
|
||||
- [ ] **强制:每截一张图立刻检查** → `browser_take_screenshot` 完成后立刻执行 `file` 检测格式,失败立刻重截
|
||||
- [ ] **强制:每截一张图立刻检查** → `browser_take_screenshot` 完成后**立刻**执行 `file` 检测格式,失败立刻重截
|
||||
- [ ] 每个用户步骤完成 → `browser_take_screenshot` + `file` 格式验证 + `analyze_image` → 视觉验证关卡
|
||||
- [ ] 旅程最终完成 → `browser_take_screenshot` 最终截图 + `browser_network_requests` 资源检查
|
||||
- [ ] 违反任意一条 → 中断补全,不能继续
|
||||
@@ -487,8 +487,6 @@ Story 验证全部通过 ≠ 用户能正常使用系统。旅程模式弥补这
|
||||
result: "pass|fail"
|
||||
- check: "file_format_validation"
|
||||
result: "pass|fail"
|
||||
executed_at: "{ISO timestamp}"
|
||||
note: "{备注}"
|
||||
```
|
||||
c. 步骤级 GATE 检查(6 项,任一 FAIL → 阻断):
|
||||
├── G1: screenshot_consistency — screenshot_path 文件存在
|
||||
@@ -539,8 +537,8 @@ Story 验证全部通过 ≠ 用户能正常使用系统。旅程模式弥补这
|
||||
**Pencil MCP 模式(优先)**:
|
||||
- 读取 pipeline-context.md 获取设计文件路径(如 VividSpark1.2.pen)
|
||||
- mcp__pencil__batch_get → 搜索与当前状态匹配的帧
|
||||
- 搜索关键词: "{Page}-{State}" 如 "Dashboard-Modal", "Login-Error", "Upload-Loading"
|
||||
- 或按 frame 类型和名称模式匹配
|
||||
- 搜索关键词: "{Page}-{State}" 如 "Dashboard-Modal", "Login-Error"
|
||||
- 或按 frame 类型和名称模式匹配
|
||||
- 如找到匹配帧 → mcp__pencil__export_nodes 导出设计截图
|
||||
|
||||
**HTML 原型模式(回退)**:
|
||||
|
||||
@@ -150,7 +150,7 @@ visual_diff_pencil_mapping:
|
||||
```
|
||||
原理:代码中存在的页面一定要对比,不能因为自动映射失败就漏掉。
|
||||
1. 读取 app/mini-program/src/pages.json
|
||||
2. 提取 all pages 和 subpackages 中的页面路径
|
||||
2. 提取所有 pages 和 subpackages 中的页面路径
|
||||
3. 对每个页面路径:
|
||||
- 提取页面名 = 路径倒数第二段("pages/withdraw/index" → "withdraw")
|
||||
- 检查当前映射表中是否已有该页面
|
||||
@@ -161,7 +161,6 @@ visual_diff_pencil_mapping:
|
||||
```
|
||||
|
||||
这样可以确保**代码中有的页面一定会被对比**,不会因为名称提取问题漏掉。
|
||||
|
||||
### 0.6 创建截图输出目录
|
||||
|
||||
```bash
|
||||
@@ -292,10 +291,10 @@ PVD-1 PER-PAGE LOOP:
|
||||
if node.name != null && node.name != "":
|
||||
resultList.push({path: path + node.name, node: node})
|
||||
for each child in node.children:
|
||||
collectNamedNodes(child, path + node.name + ".", result);
|
||||
|
||||
collectNamedNodes(child, path + node.name + ".", resultList);
|
||||
|
||||
**强制要求**: **任何层级**只要节点有 name 属性,都必须提取并检查。**不允许只检查顶层不检查深层**。
|
||||
|
||||
|
||||
结果包含所有层级:topBar, topBar.topLeft, topBar.topRight, tabSection, tabSection.tabLeft, barCard1, barCard1.ratingBadge, barCard1.activitySnippet 等等(深度嵌套没问题,全部提取)。
|
||||
示例: topBar.topLeft / tabSection.tabLeft / availableCard / amountInput / ...
|
||||
3. **检查全局配置关联**: 如果设计帧包含 name=bottomNav/BottomNav 且是 ref 组件
|
||||
@@ -485,7 +484,7 @@ FIX LOOP (最多 3 轮):
|
||||
2. 修正名称 → 按 Material → Lucide 映射表修改正确名称
|
||||
3. 添加CSS → 确保 `svg { fill: currentColor; }` 让颜色正确继承
|
||||
F3. 重启服务(如修改了后端或需要刷新构建)
|
||||
- Bash: pm2 restart mini-h5(移动端)或 pm2 restart admin(管理后台)
|
||||
- Bash: pm2 restart mini-h5(移动端)or pm2 restart admin(管理后台)
|
||||
F4. 重截实际页面
|
||||
- Playwright: browser_navigate → browser_wait_for → browser_take_screenshot
|
||||
- 保存为 {name}-actual-v{N}.png(N 为修复轮次)
|
||||
|
||||
Reference in New Issue
Block a user