建立项目级标杆文档 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 残留, 已修 commit17f045a) - P0-5 致命 2 (JWT aud 缺失, 已修 commit17f045a) - P0-6 clearAllTasks 守卫 (Wave 3) - P0-8 DBViewer 黑名单漏 (已修 commit17f045a) - 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
9.8 KiB
P0-7 P20 SPEC 成果层验证覆盖 — 校验报告
日期:2026-05-04 / 触发:Neo 在 P0 反馈强调"成果层(用户视角)是最终成功标准" Neo 原话:"对于我而言,最终用户看到的页面/小程序是否真正达到设计目标更为重要,因为你要对最终成功负责,而客户也最看重最终使用的效果"
一、Neo 关心的 3 个核心问题
- 工程层 vs 成果层分层验证 — P20 SPEC 是否两层都覆盖?
- admin-web 6 页 + AIPrewarm 分组 Playwright 实地走 — 是否落到 SPEC 验收?
- 小程序财务看板 area 切换 / AI 洞察 / runtime-clock 漂移 / 各页面数据展示是否符合预期 + 任务板块多角色身份切换(看板收口后) — 是否落到 SPEC 验收?
二、当前 P20 SPEC 覆盖状态(逐条核对)
2.1 §8 验收标准(AC1-AC13)分类
| 类别 | AC | 内容 | 视角 |
|---|---|---|---|
| 工程层 | AC2/AC3/AC4/AC6/AC8/AC9 | SQL / curl 验证 | 工程层 |
| 工程层 | AC11/AC12/AC13 | 自动化脚本 / 手工 | 工程层(标 todos 未实施) |
| 半成果层 | AC1 | "登录小程序看 performance / task-list 当月判断" | 散点提及,无走查流程 |
| 半成果层 | AC5 | "admin-web /logs/ai-run-logs Drawer 抽屉" |
散点提及 |
| 半成果层 | AC7 | "admin-web /ai/dashboard 视觉验证" |
散点提及 |
| 半成果层 | AC10 | "普通账号登录视觉验证" | 散点提及 |
结论:
- ❌ 没有专门的"成果层走查"章节
- ❌ admin-web 6 页(AI Dashboard / Operations / RunLogs / Triggers / RuntimeContext / TriggerManager)+ AIPrewarm 分组 没有作为 AC 列出
- ❌ 小程序看板沙箱接入(P0-3 主体) AC 中只字未提
- ❌ 任务板块多角色身份切换 没有 AC 覆盖
2.2 §10 跨模块覆盖矩阵
§10 矩阵列出"哪些模块已接入 runtime context"(代码层覆盖),不是"用户视角走查清单"。
§10.3 小程序页面表标了 ? 的 3 项(board-finance / board-customer / board-coach)正是 P0-3 沙箱看板接入未完成的指针,但没有走查脚本 / 步骤 / 期望结果模板。
2.3 §12 任务清单(T1-T15)
| 任务 | 视角 |
|---|---|
| T1-T7 | 工程层(迁移 / API / 服务 / 视图) |
| T8 | verify_sandbox_end_to_end.py 自动化 — 自动化工程验证 |
| T9 | admin-web Playwright e2e 13/13 PASS — 半成果层,但只覆盖 1 个页面(RuntimeContext) |
| T10 | BD_Manual + 6 份 changes 审计 — 工程层 |
| T11-T15 | 生产迁移 / 跨模块测试 / 清理脚本 / 多门店 / 实例浏览页 — 工程层 + 部分成果层 |
结论:T9 只覆盖 1 个 admin-web 页面(RuntimeContext),Neo 要求的 6 页 + AIPrewarm 没覆盖。
三、缺失项汇总(给 Neo 答复)
✅ 代码层 lint / typecheck / 架构 — P20 §1.3 / §10 / §11.1 已覆盖,无需补充
❌ admin-web 6 页 Playwright 走查 — 未覆盖,需要补 ❌ AIPrewarm 分组走查 — 未覆盖,需要补 ❌ 小程序看板沙箱走查(area 切换 / AI 洞察 / runtime-clock 漂移) — 仅 §10.3 标 ? 未走查 / §13 已知冲突标"未验证",没有走查脚本 ❌ 小程序各页面数据展示符合预期 — 未覆盖,需要补 ❌ 任务板块多角色身份切换走查(看板收口后) — 未覆盖,需要补
四、推荐 P20 SPEC § 15 patch(成果层验证章节)
不实际修改 P20 SPEC,只列出建议增加的章节内容,让 Neo 先看再决定是否落地。
建议在 P20 SPEC 末尾增加:
## 15. 成果层验证(User-facing Acceptance)
### 15.1 验证哲学
工程层(代码/调用链/迁移)是必要的根基,但**不是终点**。最终用户看到的页面/小程序数据是否符合设计目标,才是项目成功标准。
视角分两层:
| 层级 | 验证目标 | 工具 | 通过标准 |
|---|---|---|---|
| 工程层 | 代码可运行 / 调用链通 / 迁移落库 / lint/typecheck 过 | tsc / pytest / SQL | 自动化全绿 |
| **成果层** | **页面渲染对 / 数据准确 / 交互流畅 / 角色权限对** | **Playwright + 微信开发者工具** | **逐条手工 + 截图归档** |
### 15.2 admin-web 走查清单(Playwright MCP)
每条走查 = 设置 sandbox 时间(2026-03-01) → 打开页面 → 截图 → 对照"期望展示"。
| # | 路由 | 期望展示 | 走查重点 |
|---|---|---|---|
| 15.2.1 | `/dashboard` | 顶部 sandbox 模式条带高亮 + 数据为 sandbox_date 当时数据 | 切 sandbox 后是否立刻显示"沙箱模式" + 数据是否切到虚拟日 |
| 15.2.2 | `/ai/dashboard` | 7 天趋势按真实日期(沙箱不影响)、今日/累计 token 按真实 | AC7 已要求,但要补充实地走查截图 |
| 15.2.3 | `/ai/operations` | 8 个 APP + app2a 区域财务派生 列出 / 手动触发 → 沙箱模式下日期参数对 | 触发 1 次 app2_finance,看 AI 输入是否带 sandbox_date |
| 15.2.4 | `/ai/run-logs` | 历史日志按真实写入时间排序;Drawer 抽屉显示 prompt 中的 sandbox_date | AC5 已要求,补 case |
| 15.2.5 | `/ai/prewarm` | 分组展示 area=all 8 组合 + 8 area 64 组合 = 72 / 沙箱模式下不影响预热范围 | 走查 prewarm 在 sandbox 下是否仍按真实 area 跑 |
| 15.2.6 | `/triggers?tab=ai` | AI 触发器列表 / status / cron 编辑 | 沙箱模式下显示"触发器仍按真实时钟运行"提示 |
| 15.2.7 | `/triggers?tab=biz` | 业务触发器列表 / 任务生成器 cron 7:00 | 同上 |
| 15.2.8 | `/settings/runtime-context` | 切 sandbox / 历史日期选择 / 切回 live | 完整切换流程,验证 AC1-AC4 |
| 15.2.9 | `/logs/dev-trace` | (Neo 反馈推荐 Drop,本走查可省) | 跳过 |
| 15.2.10 | `/logs/db-viewer` | SELECT 查询正常 / DDL 拒绝(P0-8 修复后) | 验证 P0-8 白名单 |
### 15.3 小程序走查清单(微信开发者工具 MCP)
前置:打开微信开发者工具 + 启用 9420 自动化端口 + 以教练身份登录。
| # | 页面 | 期望展示 | 走查重点 |
|---|---|---|---|
| 15.3.1 | `task-list` | 任务列表按 sandbox_date 当月生成 | AC1 已要求 |
| 15.3.2 | `performance` | 月度统计反映 sandbox_date | AC1 已要求 |
| 15.3.3 | `performance-records` | 4 处时间过滤反映 sandbox_date | (T7 任务) |
| 15.3.4 | `customer-records` | onLoad 拿 sandbox_date 拉历史 | (T7 任务) |
| 15.3.5 | `customer-service-records` | onLoad 拿 sandbox_date 拉历史 | (T7 任务) |
| **15.3.6** | **`board-finance`** | **area 5 区域切换 / AI 洞察 12 项指标 / 折线图横轴为虚拟近 7 日** | **P0-3 主体,Wave 1 必修** |
| **15.3.7** | **`board-customer`** | **客户分层基于 sandbox_date 截止状态** | **P0-3** |
| **15.3.8** | **`board-coach`** | **助教绩效反映 sandbox_date 当月累计** | **P0-3** |
| 15.3.9 | `customer-detail` | 操作时间戳保留真实时钟(设计共识) | §11.1 |
| 15.3.10 | `chat` | AI 对话 prompt 含 sandbox_date / 操作时间戳保留真实时钟 | AC5 |
### 15.4 跨页时间漂移走查(AC12 实地化)
走查脚本:连续打开 10 个页面,各拉一次 `business-clock`,验证返回值在 60s 缓存窗口内一致。
### 15.5 多角色身份走查(看板收口后)
**前置**:看板沙箱接入完成(15.3.6 / 15.3.7 / 15.3.8 全部通过)。
**触发提醒**:在 §15.3.6/7/8 全部 PASS 时,在审计中标"提醒 Neo:可以切换用户身份做下一轮走查"。
走查矩阵:
| 身份 | 必走页面 |
|---|---|
| 教练 (coach) | task-list / performance / performance-records / 看板 3 页 |
| 顾问 (consultant) | task-list (无看板权限) / customer-records / chat |
| 散客模式(memberId=0) | customer-service-records 中"散客无详情"提示 |
| site_admin (admin-web) | /settings/runtime-context |
| tenant_admin (tenant-admin) | tenant-admin 主面板 |
每身份完整走完 + 截图归档。
### 15.6 走查产物
每次走查产出一份 `docs/audit/changes/2026-XX-XX__sandbox_acceptance_<wave>.md`,内容:
- 截图清单(按 §15.2 / §15.3 编号)
- 失败项明细(现状 / 期望 / 复现步骤)
- 通过率 / 总耗时
---
(以上为 § 15 建议内容,不在本次直接落入 P20)
五、推荐落地路径
选项 A — 直接补到 P20 SPEC §15(推荐)
- 工作量:30 分钟,主线把上述 § 15 写入 P20
- 优:SPEC 完整,Wave 1 走查时直接照 § 15 跑
- 劣:P20 SPEC 行数从 ~480 涨到 ~580+
选项 B — 单独成一份《沙箱成果层验证手册》
- 路径:
docs/_overview/sandbox-acceptance-runbook.md - 优:与 P20 SPEC 解耦,走查手册可独立迭代
- 劣:跨文档维护,需要在 P20 SPEC 加链接
选项 C — 先列 todos,Wave 1 走查时即时补
- 把"成果层走查清单"作为 Wave 1 的隐式任务,边走边写
- 优:零前期工作
- 劣:无判据,Wave 1 走查时容易遗漏
六、给 Neo 的决策清单
- 是否同意 P20 SPEC 缺失"成果层走查"章节的判断?(我判断:缺失)
- 选 A / B / C? 我的推荐:选 A(直接补到 P20 §15),与 P20 实施同步
- 15.5 多角色身份走查的提醒机制(看板收口后由我主动提醒 Neo 切身份)是否合适?
- **15.2 admin-web 走查 9 页(Neo 原列 6 页 + AIPrewarm + RuntimeContext + db-viewer)**是否完整?是否需要再加
/tenant-admins//etl-tasks?
七、关于"工程层根基已落地"的确认(回答 Neo)
Neo 担心的 "代码层面的 lint/typecheck 是否过,架构是否合理" — P20 SPEC 已落地:
- §10 跨模块覆盖矩阵(13 后端服务 + 8 AI prompts + 11 小程序页 + 4 ETL 视图)
- §11 已知遗漏 + 设计共识
- §12 任务清单 T1-T10 已完成
- §13 已知冲突清单
- 工程层 lint/typecheck 由 hooks(
PostToolUse Edit/Write)自动跑
所以工程层根基 OK,只缺成果层走查这一层,选 A 直接补完即可对齐 Neo 的"对最终成功负责"标准。
本文件不实际修改 P20 SPEC,只产出建议 patch + 决策清单。等 Neo 选 A/B/C 后落地。