# 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 实施轨道。