Files
Neo-ZQYY/docs/_overview/04a-feedback/00-P0-round2-feedback-response-summary.md
Neo 509cf43284 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
2026-05-04 07:38:28 +08:00

162 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# P0 反馈响应总报告(第二轮)
> 日期:2026-05-04 / 触发:Neo 在 `00-P0-feedback-response-summary.md` 表格里写下斜体二轮反馈
> 主线 + 2 个子代理(F-1 沙箱+SPI / F-2 工程规范一致性)调研整合 / 状态:**调研完成,等 Neo 拍板进入实施**
本报告聚合第二轮 6 条 P0 反馈处理状态。第一轮总报告见 [`00-P0-feedback-response-summary.md`](00-P0-feedback-response-summary.md)。
## 一、第二轮 6 条 P0 反馈处理状态
| # | 二轮反馈摘要 | 调研产出 | 关键结论 | 等待 Neo 决策 |
|---|---|---|---|---|
| **P0-1** | 沙箱+SPI 每天快照?是否合理?更优雅方案? | [P0-1-sandbox-snapshot-design.md](P0-1-sandbox-snapshot-design.md) | **不需要每日快照**;SCD2 区间方案更优雅;只需让 ETL 改 3 处 SQL 走 `app.v_cfg_*` 视图(0.5 天) | 接受方案 1?P20 SPEC 加 §1.4/§3.5/§5.6/AC14-15/§11.2/T16-T17? |
| **P0-2** | 同意"主+副"方案 | (已确认) | Wave 5 落地 | 已确认 |
| **P0-3** | 同意,等 Wave 0 完成后,Wave 1 据 Wave 0 更新 | (已确认) | **Wave 0 即将收尾,Wave 1 计划基于本轮 P0/P1 反馈更新** | 已确认 |
| **P0-5** | 倾向工程一致性,要全览 + 实施方案 | [P0-5-engineering-consistency-overview.md](P0-5-engineering-consistency-overview.md) | **24 个偏离点 / 14 规范** + **2 个关键发现:4 处必坏残留 + JWT aud 缺失** | 接受统一治理方案?立即治理 6 项进 Wave 1-3? |
| **P0-6** | 同意,要记录 | [P0-6-record.md](P0-6-record.md) | 两阶段方案:阶段 1 临时止血 1h / 阶段 2 沙箱收口后正式重设计 3-5h | 已确认 |
| **P0-7** | P20 SPEC 是否覆盖成果层走查?(Playwright 6 页 + 微信开发者工具看板 + 切身份)| [P0-7-spec-acceptance-layer-check.md](P0-7-spec-acceptance-layer-check.md) | **成果层走查严重缺失**;给出 P20 §15 完整 patch | 选 A(直接补到 P20)/ B(单开手册)/ C(走查时即时补) |
## 二、5 件 Neo 必须知道的事(浓缩版)
### 1. P0-1 — 不需要每日快照,SCD2 视图入口更优雅(0.5 天工作)
F-1 调研结论:
- **每日参数快照不需要**(成本高,数据冗余)
- **SCD2 区间已存在**(`cfg_index_parameters / cfg_level_price / cfg_performance_tier / cfg_bonus_rules` 等 4 张表已有 effective_from/effective_to)
- **核心裂缝**:P20 视图层已加业务日上界,但 ETL 任务**直读 `dws.cfg_*` 裸表绕过视图**
- **修复方案**:让所有读取入口走 `app.v_cfg_*` 视图,3 处 SQL 改造 + 修复一个 NULL 兼容 bug,**0.5 天工作量**
**意外收获**:`base_dws_task.py:540-581` 工资任务 3 个 `_load_*` 函数不带 `effective_from`,把所有历史区间行全取出再 Python 挑 — **既是历史 Bug 又是沙箱缺口**,需要一并修。
**应增加到 P20 SPEC 的 6 处**:§1.4 沙箱影响项 / §3.5 NULL 兼容 / §5.6 ETL 读取约定 / AC14-AC15 / §11.2 hack / T16-T17 任务。
### 2. P0-5 — 24 个偏离点,2 条致命发现
F-2 全项目扫出 24 个工程规范偏离点。**最严重的 2 条要立即修(D Bug)**:
#### 致命 1:4 处"伪 FDW"必坏残留代码
文件:
- `apps/backend/app/routers/tenant_users.py:425, 450`
- `apps/backend/app/routers/tenant_excel.py:390, 407`
- `apps/backend/app/routers/tenant_clues.py:113-119`
**症状**:
-`get_etl_readonly_connection(site_id)` 已经直连 ETL 库
- 但 SQL 仍写 `FROM fdw_etl.*`(因为 H2 改造时漏改)
- **生产必报 schema 不存在**,被 try/except 静默吞
- 接口永远返回空列表,用户看不到错误
**与 P0-5 主体同源同性质,但危害更高**(因为用户看到的是"空数据"而非"报错")。
**修复**:每处把 `fdw_etl.` 改为对应 ETL 库 schema(`dwd.``app.`),不补 FDW(P0-5 主体已结论 FDW 不能用 GUC)。**1-2h 工作量**。
#### 致命 2:JWT aud 缺失,跨端横向越权风险
文件:`apps/backend/app/auth/jwt.py`
**症状**:
- 签发 admin / miniapp token **完全不带 `aud` 字段**
- `decode_access_token` 也不校验 aud
- 只有 tenant-admin 走完整 aud 流程
- **意味着 admin / 小程序 token 在 payload 层无法区分,跨端横向越权风险**
- CLAUDE.md 规范 R5(JWT 三类 aud 严格隔离)与代码完全脱节
**修复**:`generate_access_token``audience=` 参数,`decode_access_token` 校验 aud。**2-3h 工作量** + 跨端 token 兼容性测试。
#### 24 偏离点全分布
| 优先级 | 数量 | 主要内容 |
|---|---|---|
| **立即治理 P0** | 6 | 4 处 fdw_etl.* 必坏 / JWT aud 缺失 / 测试目录嵌套违规 |
| Wave 协同 | 6 | matching/business_date 透传 / ETL 写连接 / consume_money 划线价 / note_service 调度 / 测试 DSN 加载 / camelCase 一致性 |
| 长期治理 | 5 | global_readonly 无 RLS / DWS 双 schema 30+ 缺失 / 飞球 API 硬编码 |
| 可接受归档 | 4 | consume_money 零值判定 / SSE 直调 DashScope / tenant_member_id 映射 / demo AGENTS.md |
| 其他 | 3 | (调研中归类) |
**给 Neo 的核心提问**:接受立即治理 6 项进 Wave 1-3 吗?(其中 2 条致命 D Bug 不修会影响生产稳定性 + 安全)
### 3. P0-7 — 成果层走查严重缺失(已写完整 §15 patch)
P20 SPEC §8 13 条 AC 主要是 SQL/curl 工程层验证,只有零散用户视角点检(AC1/5/7/10)。Neo 强调的:
- ❌ admin-web 6 页 Playwright 实地走 — **0 个 AC 覆盖**
- ❌ AIPrewarm 分组 — **0 个 AC**
- ❌ 小程序看板沙箱接入(P0-3 主体)— **AC 中只字未提**
- ❌ 多角色身份切换走查 — **0 个 AC**
**已产出 P20 § 15 完整 patch**(详见 `P0-7-spec-acceptance-layer-check.md`):
- §15.1 验证哲学(工程层 vs 成果层)
- §15.2 admin-web 10 条走查清单
- §15.3 小程序 10 条走查清单(含 P0-3 看板 3 页必修)
- §15.4 跨页时间漂移走查
- §15.5 多角色身份走查 + **看板收口后我主动提醒 Neo 切身份**(对齐你的反馈)
- §15.6 走查产物归档约定
**3 个落地选项**(等 Neo 选):
- A 直接补到 P20 §15(推荐,30 分钟)
- B 单开《沙箱成果层验证手册》
- C 先列 todos,Wave 1 走查时即时补
### 4. P0-6 — 已记录两阶段方案
- **阶段 1 临时止血**(1h,Wave 1-3 任意时点):admin-web 加二次确认弹窗 + 输入门店简称
- **阶段 2 正式重设计**(3-5h,P0-7 收口后):拆"全局清空" / "沙箱内清空"语义 + `?scope=` query param
详见 [P0-6-record.md](P0-6-record.md)。
### 5. P0-3 + P0-2 — 已确认,排入 Wave
- P0-2 BD 手册主源 + 3 处链接 → **Wave 5 落地**
- P0-3 看板沙箱接入 → **Wave 1 修**(等 Wave 0 收尾后,Wave 1 计划基于本轮 P0/P1 反馈更新)
## 三、按 Wave 重新分配的执行清单(整合两轮 P0)
| Wave | 主要任务 | 第二轮新增 |
|---|---|---|
| **Wave 1** | P0-3 看板接入(必修) + P0-7 SPEC 投入 + 20 todos(P0×5) + P0-7 §15 成果层走查 | **+ P0-1 SCD2 视图入口改造(0.5 天)+ P0-7 §15 P20 patch 落地** |
| **Wave 1-3** | P0-6 临时守卫 + P0-8 DBViewer 白名单 + 4 D Bug | **+ 致命 1:4 处 fdw_etl.* 残留(1-2h)+ 致命 2:JWT aud 缺失(2-3h)+ 测试目录嵌套违规** |
| **Wave 2** | (P1 主体见 P1 总报告) | **+ P0-5 Wave 协同 6 项(matching/ETL 写连接/consume_money 划线价/note_service/测试 DSN/camelCase)** |
| **Wave 4** | DWS / RLS / 数据正确性 + P0-7 todos(P1×8) | (无新增) |
| **Wave 5** | P0-1/P0-2/P0-4 文档 + P0-7 todos(P2×7) | **+ P0-5 长期治理 5 项 + 可接受归档 4 项文档化** |
| **跨 Wave** | P1-7 admin API PRD + dev-trace Drop | (P1 主体) |
| **P0-6 阶段 2** | P0-7 收口后做(等沙箱完成) | 沙箱内/全局清空语义重设计 |
## 四、给 Neo 的决策提问(本会话剩余可处理的项)
| # | 问题 | 类型 | 我的建议 |
|---|---|---|---|
| 1 | P0-1 接受 SCD2 视图入口方案 + P20 SPEC 加 6 处 patch | 路径 | Y |
| 2 | P0-1 base_dws_task.py 工资任务 3 处 `_load_*` Bug 是否一并修 | Bug 单 | Y(独立 P1 Bug,Wave 1-2 修) |
| 3 | P0-5 接受 24 偏离点的 4 类分级 | 校准 | Y |
| 4 | P0-5 致命 1(4 处 fdw_etl 残留)修复 1-2h 立即进 Wave 1-3 | 路径 | Y(D Bug,影响生产) |
| 5 | P0-5 致命 2(JWT aud 缺失)修复 2-3h 立即进 Wave 1-3 | 路径 | Y(D Bug,跨端越权) |
| 6 | P0-5 立即治理 6 项 / Wave 协同 6 项 / 长期治理 5 项 / 可接受 4 项 各自纳入哪个 Wave | 排程 | 见 §三 表 |
| 7 | P0-5 CI 自动化校验建议(静态规则+pre-commit hook+周报)是否落地 | 工具化 | Y(长期投资) |
| 8 | P0-7 P20 SPEC §15 成果层走查 落地选 A/B/C | 路径 | A(直接补到 P20) |
| 9 | P0-7 §15.5 多角色身份提醒机制(看板收口后我主动提醒切身份) | 协同方式 | Y |
| 10 | P0-7 §15.2 走查清单是否再加 `/tenant-admins` / `/etl-tasks` | 范围 | Y(补全) |
## 五、产出文件索引(累积)
```
docs/_overview/04a-feedback/
├── 00-P0-feedback-response-summary.md (第一轮总报告,Neo 在表格里写斜体二轮反馈)
├── 00-P0-round2-feedback-response-summary.md (本文)
├── P0-1-SPI-research.md (D-1 第一轮)
├── P0-1-sandbox-snapshot-design.md (F-1 第二轮)
├── P0-2-feedback-resolution.md (主线第一轮)
├── P0-3-board-vs-sandbox-analysis.md (主线第一轮)
├── P0-5-matching-evolution.md (D-2 第一轮)
├── P0-5-engineering-consistency-overview.md (F-2 第二轮)
├── P0-6-record.md (主线第二轮)
├── P0-7-runtime-context-todos.md (D-3 第一轮)
└── P0-7-spec-acceptance-layer-check.md (主线第二轮)
docs/prd/specs/
└── P20-runtime-context-sandbox.md (D-3 第一轮 SPEC 草稿)
```
---
> 等 Neo 答这 10 个 Y/N 问题 + 完成 04c 反馈处理,P0 完整收口进入 Wave 实施轨道。