chore(docs): Wave 0 调研产出 + P0/P1/P2 反馈调研

建立项目级标杆文档 docs/_overview/ 作为产品全景索引,
解决"PRD 零碎、文档膨胀、跨子系统调研无入口"的问题。

主要内容:
- 00-index 总索引 + 维护协议 + 与 CLAUDE.md 关系
- 01-product-overview 产品全景脑图(6 角色 / 6 子系统 / 数据流 /
  7 业务概念 / 8+1 AI 矩阵 / 22 术语)
- 02a-miniprogram-page-matrix 小程序 21 页业务指纹
- 02b-adminweb-page-matrix admin-web 19 路由业务指纹
- 03-test-spec 测试规范 (L1-L5 分层 + 走查模板 + 75-95 case 估算)
- 04-doc-conflicts 39 条冲突索引(P0×8 / P1×13 / P2×13 + 5 子项)
- 04a/b/c-conflicts-*-detail 业务故事卡(7 字段:关联/逻辑/影响/选项/判定)
- 05-orphan-pages-cleanup admin-web 6 孤儿页面处置(1 归档 + 4 保留)
- WAVES-MASTER-PLAN.md 全 Wave 主计划(0-5,共 22-32 工作日)
- WAVE-1-KICKOFF.md Wave 1 实施 kickoff
- GLOBAL-DECISION-DASHBOARD.md 全局决策仪表板

反馈调研产物:
- 04a-feedback/ P0 两轮反馈(8+8 项决策 + D-1/2/3 + F-1/2 子代理产出)
- 04b-feedback/ P1 两轮反馈(13+1+5 项 + E-1/2/3/4 + G-1/2 子代理产出)
- 04c-feedback/ P2 反馈(13 项 + 5 子项 + H-1/2/3 子代理产出)
- NEO-DECISIONS-LOG 累积决策记录

关键追加发现 8 处 D Bug(原蓝本 0):
- P0-3 看板沙箱接入(Wave 1 W1-T1)
- P0-5 致命 1 (4 处 fdw_etl 残留, 已修 commit 17f045a)
- P0-5 致命 2 (JWT aud 缺失, 已修 commit 17f045a)
- P0-6 clearAllTasks 守卫 (Wave 3)
- P0-8 DBViewer 黑名单漏 (已修 commit 17f045a)
- P1-3 task-detail 跳转传 task_id 而非 customer_id
- P2-7 board-finance 隐式 null
- 2 个独立 Bug (page_context.created_at + ClueCategory 字典)

参考: docs/_overview/00-index.md
This commit is contained in:
Neo
2026-05-04 07:38:28 +08:00
parent c6453829a6
commit 509cf43284
44 changed files with 10789 additions and 0 deletions

View File

@@ -0,0 +1,145 @@
# 测试规范(Wave 1-5 验证判据)
> 生成日期:2026-05-04 / 用途:Wave 1-5 走查时的"过线判据"基础 / 引用源:`01-product-overview.md` `02a-miniprogram-page-matrix.md` `02b-adminweb-page-matrix.md`
本文不重复产品定义(去 01),不重复每页字段(去 02a/02b),只定义**测试该怎么跑、什么算过线**。
## 一、测试视角分层
| 层 | 内容 | 工具 | 判据来源 |
|---|---|---|---|
| L1 工程层 | 代码可启动 / 无控制台错误 / API 200 | Playwright Console + Network | tsc/lint/build 通过 |
| L2 接口层 | API 返回结构符合契约 / 必填字段齐 | curl + Playwright Network | NS1/NS2/NS3/NS4 + .tsx 实际调用 |
| L3 展示层 | UI 渲染必现字段 / 空态文案对 / 数据展示标准对 | Playwright Snapshot + Screenshot | `02a` `02b` 必现字段 + DISPLAY-STANDARDS |
| L4 业务层 | 数据语义对 / 跨页一致 / 角色权限对 | Playwright + 微信 IDE + DB 校核 | `01-product-overview.md` 业务概念 |
| L5 数据层 | DB 视图 / RLS 隔离 / DWS 字段口径 | pg-etl-test / pg-app-test MCP | `db/CLAUDE.md` + 飞球 CLAUDE.md DWS 权威 |
**L1 不过 L2 不测;L2 不过 L3/L4 无意义;L4 失败 ≠ Bug,可能是 L5 数据问题。** 走查时按层判读。
## 二、9 主题 × 测试维度映射(基于蓝本 §3.1-§3.9)
| 主题 | L1 | L2 | L3 | L4 | L5 |
|---|---|---|---|---|---|
| §3.1 AI 模块重构(8 APP) | ✓ | ✓ | - | ✓ 调用链路 | - |
| §3.2 admin-web AI 套件 | ✓ | ✓ | ✓ | ✓ | - |
| §3.3 App2 prompt v5.1 | - | ✓ A/B 评分 | - | ✓ 12 项指标产出 | - |
| §3.4 App3 线索完整详情 | - | ✓ | - | ✓ | - |
| §3.5 Runtime Context 沙箱 | ✓ | ✓ | ✓ | ✓ 时间漂移 | ✓ DB 视图 |
| §3.6 AI 触发器 + prewarm | ✓ | ✓ | ✓ | - | ✓ trigger_jobs 表 |
| §3.7 飞球 DWS / RLS | - | - | - | - | ✓ 重点 |
| §3.8 沙箱 admin-web 验证 | ✓ | - | ✓ | ✓ | - |
| §3.9 部署文档 | - | - | - | - | - |
## 三、单页面测试模板(每页都按这个跑)
打开页面后,按顺序跑 5 步:
1. **L1 加载校核**
- URL 状态 200
- 控制台 0 error(401/403 在登录前可允许)
- 主体内容 < 3s 加载
2. **L2 接口校核**
- 抓 Network,核对调用的 API 与 `02a/02b` 列出的"主要后端 API"一致
- 响应 200 + 必填字段齐
- 无 4xx/5xx(除非是测试错误路径)
3. **L3 必现字段校核**
- 对照 `02a/02b` 该页"必现字段"清单逐条勾
- 空数据时显示"空态文案"(对照清单)
- 金额 / 日期 / 数字格式按 `02a §四 跨页共性` 检查
4. **L4 业务语义校核**
- 数据是不是这个角色 / 这个门店应该看到的(参考 `01` §二角色矩阵 + §五.6 site_id 隔离)
- 跨页跳转携带的参数是否对(对照 `02a/02b` 入口字段)
- 同一指标在多页显示是否一致(如近 7 日营收 vs board-finance vs my-profile)
5. **L5 数据校核**(可选,仅当 L4 怀疑数据错时)
- 直查测试库:`SELECT ... FROM dws.dws_*``app.v_*`
- 对照 飞球 CLAUDE.md DWS 权威规范
- 对照页面展示数,差异 > 0.01 即标 D Bug
## 四、走查规模估算(更新版)
基于 Wave 0 调研后的修正:
### 小程序(21 页)
- **必走查**:21 页 × 1 角色(当前账号,Neo 决定)= 21 个 case
- **可选**:某些页有多入口(如 customer-records / customer-service-records),每入口 +1 case
### admin-web(19 路由)
- **必走查**:19 路由 = 19 个 case
- **多 Tab 路由额外展开**:`/etl-tasks`(5 Tab) `/triggers`(4 Tab) `/ai/*` 各页可能有 Tab,需逐 Tab 走 → +约 15 case
### 数据库 / ETL(L5)
- RLS 业务日上界视图重建对照:N 个视图(待 `pg_get_viewdef` 列表)
- finance_area_daily DWS 幂等性:测试库重跑同窗口
- AI 触发器 jobs 表:实际行数 + cron 重调度对比
- sandbox runtime_context 表:虚拟时间漂移多账号
### AI 调用(L4 高成本部分)
- 8 APP × 1 次 / APP = 8 次(蓝本 §3.1)+ App2a 区域财务 = 9 次
- A/B prompt 评分(P2 §3.3)= **20 个以内** Neo 默认授权,先单调通,再批跑
### 总规模(刷新)
- L1-L4 走查:**21 + 19 + 15 = 55 个 UI case**
- L5 数据校核:约 10 个 SQL 验证点
- AI 调用:9 次单调通 + 20 次 A/B 评分(可选)
- **合计:约 75-95 个测试 case**(原估算 60,Wave 0 调研后更准)
预计:Wave 1(Runtime Context)≈ 15 case + DB,Wave 2(admin-web AI)≈ 20 case,Wave 3(小程序)≈ 21 case,Wave 4(DWS/RLS)≈ 15 case + DB,Wave 5(部署)≈ 5 case + 总报告。
## 五、测试产物存放约定
每个 Wave 产出一份验证报告 → `docs/audit/changes/2026-05-04__verify_wave_<N>_<slug>.md`,内容:
```markdown
# Wave <N> 验证报告 — <主题>
| 字段 | 值 |
|---|---|
| 日期 | 2026-05-04 |
| Wave | <N> |
| 范围 | <对照蓝本 §3.x> |
| 通过 | X 个 case |
| 失败 | Y 个 case(P0:a / P1:b / P2:c) |
| 截图 | docs/audit/changes/2026-05-04__verify_wave_<N>_screenshots/*.png |
## 1. case 清单(对照测试矩阵)
| # | 页面/接口 | L1 | L2 | L3 | L4 | L5 | 结论 |
## 2. 失败明细(每条:现状 / 期望 / 复现 / 截图 / 建议优先级)
## 3. 不通过项 todo
- [ ] P0-X: ...
- [ ] P1-Y: ...
## 4. Wave 收尾建议
```
## 六、判 Bug 时的"先看一眼"清单
发现疑似 Bug 时,在标 D 之前先查这 5 条:
1. **是不是文档过期?** → 查 `04-doc-conflicts.md`,本 Wave 0 已登记 39 条
2. **是不是角色权限?** → 查 `01-product-overview.md` §二
3. **是不是门店 site_id 隔离?** → 查 `01-product-overview.md` §五.6
4. **是不是飞球数据本身就缺?** → 查 `朗朗桌球停业日期` 记忆 + DWD 是否有数据
5. **是不是 Runtime Context 虚拟时间漂移?** → 查 `01-product-overview.md` §五.7
5 项都排除后再标 D Bug。
## 七、不在测试范围内
- 生产服务器(SSH)— 只在测试库
- 性能压测 — 仅做基本 Lighthouse / 加载时间
- 跨浏览器 — 仅 Chromium(Playwright 默认)
- 多账号并发 — 仅当前登录账号
- 多终端模拟 — 仅微信开发者工具默认尺寸
## 八、引用
- `01-product-overview.md` 产品全景脑图
- `02a-miniprogram-page-matrix.md` 小程序 21 页指纹
- `02b-adminweb-page-matrix.md` admin-web 19 路由指纹
- `04-doc-conflicts.md` 39 条文档冲突清单
- `05-orphan-pages-cleanup.md` 6 个 admin-web 页面处置
- `docs/audit/changes/2026-05-04__cumulative_baseline_pending_verification.md` 原蓝本
- `apps/etl/connectors/feiqiu/CLAUDE.md` 飞球数据规范(L5 判据)
- `db/CLAUDE.md` 数据库分层(L5 判据)