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:
2026-04-15 10:27:22 +00:00
2 changed files with 23 additions and 26 deletions

View File

@@ -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 原型模式(回退)**:

View File

@@ -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}.pngN 为修复轮次)