chore(audit): 补追 96 份未入仓审计孤本 — 覆盖 2026-02-26 ~ 2026-04-08
这些审计记录原本堆积在 docs/audit/changes/changes/ 嵌套误产物目录下(由开发机迁移
79d3c2e 前后的不明批量操作产生)。由于同期 .gitignore 屏蔽了 docs/audit/ 全目录,
它们从未入过 git 任何分支 history。删除即永久丢失。
按 docs/specs/audit-gap-recovery/tasks.md 阶段 1 执行,将全部 96 份 D 类孤本
(主目录无同名、git history 亦无记录)复制到 docs/audit/changes/ 主目录入仓。
涵盖主题: P1-P18 全栈集成 / 多模块累积变更 / ETL bug 修复 / 业务日切 /
召回与任务引擎改造 / 租户管理与审批 / 董事会财务 / 客户与助教详情 /
DDL 基线合并 / Kiro 到 Claude Code 迁移
阶段 2(B 类内容漂移 1 份)和阶段 4(嵌套目录删除)独立推进。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
# H2 修复:FDW → 直连 ETL 架构统一
|
||||
|
||||
| 维度 | 内容 |
|
||||
|------|------|
|
||||
| 日期 | 2026-03-20 |
|
||||
| 关联问题 | RNS1 审计报告 H2(AI 自主决策架构级修改) |
|
||||
| 决策方式 | 用户确认方案 A(全部统一直连 ETL)后执行 |
|
||||
|
||||
## 背景
|
||||
|
||||
RNS1.1 期间,AI 自行将 `fdw_queries.py`(47 个函数)从 FDW 外部表改为直连 ETL 库,
|
||||
但其他 4 个文件仍使用旧 FDW 模式(`fdw_etl.*`),造成架构不一致。
|
||||
|
||||
核心技术问题:`postgres_fdw` 不传递自定义 GUC 参数(`app.current_site_id`),
|
||||
旧 FDW 模式下 RLS 视图的门店隔离实际失效。
|
||||
|
||||
## 改造范围
|
||||
|
||||
| 文件 | 改造点 | 风险等级 |
|
||||
|------|--------|----------|
|
||||
| `matching.py` | `fdw_etl.v_dim_assistant/v_dim_staff/v_dim_staff_ex` → `app.v_*`;`scd2_is_current = TRUE` → `= 1`;连接改为 `_fdw_context(None, site_id)` | 低 |
|
||||
| `task_generator.py` | 3 处 `fdw_etl.v_dws_member_winback/newconv/relation_index` → `app.v_*`;WBI/NCI 全表扫描,RLS 是唯一门店过滤 | 高 |
|
||||
| `recall_detector.py` | `fdw_etl.v_dwd_assistant_service_log` → `app.v_*`;列名映射:`assistant_id→site_assistant_id`、`member_id→tenant_member_id`、`service_time→create_time` | 低 |
|
||||
| `task_manager.py` | 4 处:`v_dim_member`(`member_name→nickname`、`member_phone→mobile`)+ 3 处 RS 指数 | 中 |
|
||||
|
||||
## 列名映射速查
|
||||
|
||||
| FDW 外部表列名 | RLS 视图实际列名 | 涉及视图 |
|
||||
|---|---|---|
|
||||
| `assistant_id` | `site_assistant_id` | `v_dwd_assistant_service_log` |
|
||||
| `member_id` | `tenant_member_id` | `v_dwd_assistant_service_log` |
|
||||
| `service_time` | `create_time` | `v_dwd_assistant_service_log` |
|
||||
| `member_name` | `nickname` | `v_dim_member` |
|
||||
| `member_phone` | `mobile` | `v_dim_member` |
|
||||
| `scd2_is_current = TRUE` | `scd2_is_current = 1` | `v_dim_assistant`、`v_dim_staff`、`v_dim_staff_ex` |
|
||||
|
||||
## 验证结果
|
||||
|
||||
- MCP 验证 ✅:7 个改造后的 SQL 查询在 `test_etl_feiqiu` 上执行成功
|
||||
- 语法检查 ✅:4 个文件零 diagnostics
|
||||
- E2E 测试 ✅:`test_e2e_board.py` 25 passed in 121.26s
|
||||
- `performance_service.py` 确认无需改造(已使用 `_fdw_context`)
|
||||
|
||||
## 未变更项
|
||||
|
||||
- FDW 外部表 DDL 暂不清理(用户确认保留)
|
||||
- `fdw_queries.py` 无需改动(已在 RNS1.1 中完成改造)
|
||||
|
||||
## 回滚方案
|
||||
|
||||
将 4 个文件中的 `_fdw_context` 调用改回 `get_connection()` + `fdw_etl.*` 查询,
|
||||
恢复 FDW 外部表列名。注意:回滚后 RLS 门店隔离将再次失效。
|
||||
Reference in New Issue
Block a user