chore(audit): 2026-04-20 历史批次预审 + 文档同步 + .gitignore 修正

- 新增 docs/audit/changes/2026-04-20__historical-batch-pre-audit.md
  157 文件分批盘点审计(7 条主线 + 10 项高/中风险 + 2 份迁移 SQL DDL 清单)
- 补追 docs/audit/changes/2026-04-15__meituan-settle-core-sync.md
  原审计产物因 .gitignore 屏蔽长期未入仓,本次一并追回
- 刷新 docs/audit/audit_dashboard.md(33 条审计记录)
- .gitignore 白名单放行 docs/audit/changes/*.md 与 audit_dashboard.md
  同时屏蔽 changes/changes/ 嵌套误产物目录
- 新增 docs/specs/audit-gap-recovery/tasks.md
  扫描嵌套目录发现 96 份 D 类孤本(从未入过 git history),
  生成独立 PRD 供单开任务清理与补追
- 文档同步(高风险项):
  - apps/backend/docs/API-REFERENCE.md (+69)
  - apps/miniprogram/README.md (+50)
  - apps/etl/connectors/feiqiu/docs/architecture/data_flow.md (+52/-2)
  - apps/etl/connectors/feiqiu/docs/architecture/system_overview.md (+5/-3)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Neo
2026-04-20 06:32:58 +08:00
parent 2a7a5d68aa
commit 80bda9b991
9 changed files with 914 additions and 366 deletions

View File

@@ -0,0 +1,374 @@
# 变更审计记录2026-04-20 历史累积批次预审
| 字段 | 值 |
|------|-----|
| 日期 | 2026-04-20 06:01:35 |
| 分类 | 历史批次预审(方案 C详细 |
| 触发时间窗口 | 2026-04-15 ~ 2026-04-20最后一次 commit 后 5 天累积) |
| 覆盖文件数 | 156 |
| 高风险文件数 | 54 |
| 新迁移 SQL | 2 |
| 参与 spec | 7+ |
## 操作摘要
本次审计是"历史累积盘点"——156 个文件来自 HEAD (79d3c2e 开发机迁移) 之后 5 天的多次会话改动,用户本次会话无新改动。由于改动跨会话累积,缺失单次 /audit 的即时上下文,本次通过 git diff + 交叉比对 `docs/audit/changes/` 历史审计与 `docs/specs/` 现行规范还原语义上下文。
改动跨 6 个模块backend / etl feiqiu / miniprogram / db / docs / 工具脚本)和 7 条主线开发机迁移路径基线搬迁、rns1-customer-coach-api + 04-miniapp-core-business 联合实施、P19 指数回测框架Phase 1+2、Core 维度层启用、客户项目标签稳定性优化、美团结算导入收尾、运维工具与分析扩展。
2 个迁移 SQL 均已在开发库执行schema 基线与任务代码一致。~95% 路径同步改动(开发机迁移衍生)为低风险;实质性业务变更集中在 16 个 backend + 22 个 miniprogram + 13 个 ETL 文件,全部可追溯到既有 spec。7 项高风险待验证项已在"风险与回滚"章节单独列出。
## 主线归类
### 主线 1开发机迁移路径同步~95% 改动量来源)
- 根目录迁移 `C:\NeoZQYY``C:\Project\NeoZQYY`
- 涵盖:`.env` / `.env.template` / `.mcp.json` / `apps/backend/.env.local` / `apps/etl/connectors/feiqiu/.env` / `scripts/ops/*.py` / `tools/db/*.py` / `tests/test_property_*.py` / `docs/specs/**/*.md` / `docs/deployment/*.md` / `docs/migrate/*.md` / `docs/mcp/*.md` / `docs/ops/*.md` / `docs/README.md` / `_DEL/**/*.md`
- 风险:无(纯路径同步)
### 主线 2rns1-customer-coach-api + 04-miniapp-core-business spec 实施
- **后端 16 文件**:配置 4 / 路由 schema 5 / 服务 9
- **小程序 22 文件**:配置 5 / i18n typings 2 / 服务 1 / 工具组件 3 / 页面 11
- **关键改动**
- `coach-service-records` 新页面(管理者视角业绩明细,需 `view_board_coach` 权限)
- `performance-records` 拆分:去除 coachId 分支,恢复助教自查单一职责
- `fdw_queries` 重构:`get_service_records_summary()` 直接 SQL 聚合、`get_last_visit_days()` 改用 `consumption_summary``get_consumption_records()` 按结算单粒度聚合
- `build_performance_summary()` 公开化,`coach-detail``task-list` 数据源统一
- `isScattered` 散客标记跨端贯通
- `task_generator` 回访宽限 48h → 72h新增 UPSERT 替代策略和 Step 5 清理保底任务
- `recall_detector` settle_type=3 限制 + 门店级 resolved 召回解除
### 主线 3P19 指数回测框架Phase 1+2
- **DDL**`dws_member_assistant_relation_index` / `dws_member_winback_index` / `dws_member_newconv_index` 新增 `stat_date DATE NOT NULL DEFAULT CURRENT_DATE`,唯一约束扩展 `(site_id, member_id[, assistant_id], stat_date)`app schema 视图改 `DISTINCT ON + ORDER BY stat_date DESC`
- **任务**`relation_index` / `winback_index` / `newconv_index` 改日快照模式(按 `stat_date` 删除 + 插入),批量写入优化
- **新建**`DWS_INDEX_BACKFILL` + `DWS_TASK_SIMULATION` 两个工具任务
- **task_engine** 升级为双模式HTTP 实时 / 推演回测)
- **前置**`member_index_base` STOP 分流改为 OLD
### 主线 4Core 维度层启用(承接 2026-04-15 美团结算审计后续)
- 新建 `CORE_DIM_SYNC` 任务DWD → core 4 维度表 TRUNCATE+INSERT
- `core.sql` 注释更新:定位为"跨平台统一维度层"
- 修复 app 视图空查询问题
- `task_registry` + `orchestration/task_registry.py` 注册新任务
### 主线 5客户项目标签稳定性优化
- `member_project_tag``LAST_30/60_DAYS`(固定日期窗口)改为 `LAST_30_VISITS`(最近 30 次消费)
- 配套迁移 SQL`20260411_member_project_tag_visit_based.sql`DELETE 旧窗口数据 + 新增 `cfg_area_category` 配置行)
### 主线 6美团结算数据导入已有 2026-04-15 审计覆盖)
- `dwd_groupbuy_redemption` 新增 6 个 `mt_*` 字段(`mt_settlement_price` / `mt_gross_income` / `mt_service_fee` / `mt_marketing_fee` / `mt_other_adjust` / `mt_import_time`
- 本次审计仅作"基线同步"确认:`db/etl_feiqiu/schemas/dwd.sql` + `docs/database/ddl/etl_feiqiu__dwd.sql` 已更新;`apps/etl/connectors/feiqiu/docs/database/DWD/main/BD_manual_dwd_groupbuy_redemption.md` 同步
- **主审计记录**`docs/audit/changes/2026-04-15__meituan-settle-core-sync.md`(本批次不重复审计)
### 主线 7运维工具与分析扩展
- 新增脚本:`scripts/ops/churned_customer_report.py`(流失客户回访报告,~1137 行),`scripts/ops/simulate_historical_tasks.py`(历史任务推演,~524 行)
- 新增目录:`tools/task-analysis/`(任务报告工具 + 7 份历史报告)
- 新增启动:`start-admin.bat`
- 新增报告:`excel_analysis_report.txt` / `sheet_structure.txt`(根目录中间产物)
- `demo-miniprogram` SDK 1.6.28 → 1.6.29;项目名归一化
## 变更文件
### 后端 backend (16)
- `apps/backend/app/config.py`:路径注释更新(开发机迁移)
- `apps/backend/.env.local`:路径同步
- `apps/backend/auth_only.txt`:测试产物刷新
- `apps/backend/auth_only_results.txt`:测试产物刷新
- `apps/backend/auth_test_results.txt`:测试产物刷新
- `apps/backend/app/routers/xcx_coaches.py`**新增** `GET /xcx/coaches/{id}/banner` 轻量端点(+16
- `apps/backend/app/routers/xcx_performance.py`**关键**——新增 `coach_id` 可选参数 + 权限分流 `view_board_coach`+29/-11
- `apps/backend/app/schemas/xcx_coaches.py``PerformanceMetrics` 6→25 字段、新增 `CoachBannerResponse` / `CoachTaskStats`+49/-8
- `apps/backend/app/schemas/xcx_customers.py``ConsumptionRecord + foodDetail``CustomerNote + creator_name/creator_role`+3
- `apps/backend/app/schemas/xcx_performance.py``DateGroupRecord + is_scattered`+1
- `apps/backend/app/services/board_service.py`:狭义召回改从 `coach_tasks` 统计(+38/-38
- `apps/backend/app/services/coach_service.py`**关键**——新增 `get_coach_banner()``get_coach_detail` 重构 + `store_name/task_stats`、fdw 查询预容错(+194/-194
- `apps/backend/app/services/customer_service.py``notes JOIN auth.users` 获取创建者、结算单粒度消费记录重构(+256/-395
- `apps/backend/app/services/fdw_queries.py`**关键**——新增 `get_service_records_summary()`、修复 `get_last_visit_days` 改用 `consumption_summary``get_consumption_records` 按结算单粒度(+219/-395
- `apps/backend/app/services/performance_service.py``assistant_id_override` + 散客标记 + summary 直接 SQL 聚合(+34/-34
- `apps/backend/app/services/recall_detector.py`**关键**——`settle_type=3` 双重限制 + 门店级 resolved 召回解除 + 72h 宽限期(+109/-109
- `apps/backend/app/services/task_generator.py`**关键**——回访 48h→72h、UPSERT 替代策略、Step 5 清理保底任务(+194/-194
- `apps/backend/app/services/task_manager.py``_build_performance_summary → build_performance_summary` 公开化、`current_tier` 改用数组下标(+18/-18
- `apps/backend/app/services/task_registry.py`:注册 `CORE_DIM_SYNC` / `DWS_ASSISTANT_ORDER_CONTRIBUTION` / `DWS_INDEX_BACKFILL`+6/-1
> 说明:`apps/backend/` 下文件总计 16 个(含 .env.local 和 3 份 auth 测试产物),其余均为实质业务逻辑改动。
### ETL feiqiu (13)
- `apps/etl/connectors/feiqiu/.env`:路径迁移 + API_TOKEN 续期(不列值)
- `apps/etl/connectors/feiqiu/orchestration/task_registry.py`:注册 `CORE_DIM_SYNC` + `DWS_INDEX_BACKFILL`
- `apps/etl/connectors/feiqiu/tasks/dws/__init__.py`:导出 `CoreDimSyncTask`
- `apps/etl/connectors/feiqiu/tasks/dws/core_dim_sync_task.py` **[新建]**+174DWD → core 4 维度表 TRUNCATE+INSERT
- `apps/etl/connectors/feiqiu/tasks/dws/member_project_tag_task.py``LAST_30/60_DAYS → LAST_30_VISITS`
- `apps/etl/connectors/feiqiu/tasks/dws/task_engine.py`**关键**——升级双模式HTTP 实时 / 推演回测)(+767/-96
- `apps/etl/connectors/feiqiu/tasks/dws/index/member_index_base.py`STOP 分流改 OLD+2/-1
- `apps/etl/connectors/feiqiu/tasks/dws/index/newconv_index_task.py`:日快照模式(+93/-30
- `apps/etl/connectors/feiqiu/tasks/dws/index/relation_index_task.py`:日快照 + 批量写入优化(+90/-27
- `apps/etl/connectors/feiqiu/tasks/dws/index/winback_index_task.py`:日快照 + 365 天保留策略 + `execute_batch`
- `apps/etl/connectors/feiqiu/tasks/utility/index_backfill_task.py` **[新建]**`DWS_INDEX_BACKFILL` 工具任务
- `apps/etl/connectors/feiqiu/tasks/utility/task_simulation_task.py` **[新建]**`DWS_TASK_SIMULATION` 工具任务
- `apps/etl/connectors/feiqiu/scripts/research_coupon_details.py`:路径迁移(+1
- `apps/etl/connectors/feiqiu/docs/database/DWD/main/BD_manual_dwd_groupbuy_redemption.md``mt_*` 6 字段说明(+6
- `apps/etl/connectors/feiqiu/docs/database/DWS/main/BD_manual_cfg_area_category.md`:美洲豹赛台 BILLIARD
- `apps/etl/connectors/feiqiu/docs/database/DWS/main/BD_manual_dws_member_project_tag.md`:新窗口文档同步
- `apps/etl/connectors/feiqiu/docs/etl_tasks/README.md`Core 层段落新增
### 小程序 miniprogram (22)
- `apps/miniprogram/project.config.json`JSON 格式标准化
- `apps/miniprogram/project.miniapp.json`JSON 格式标准化
- `apps/miniprogram/project.private.config.json`JSON 格式标准化
- `apps/miniprogram/miniprogram/app.miniapp.json`JSON 格式标准化
- `apps/miniprogram/miniprogram/app.json`:新增 `coach-service-records` 路由(+1
- `apps/miniprogram/i18n/base.json`i18n 更新
- `apps/miniprogram/typings/types/wx/lib.wx.miniapp.d.ts`:微信 API 类型更新
- `apps/miniprogram/miniprogram/services/api.ts`**关键**——新增 `fetchCoachBanner(coachId)``fetchPerformanceRecords` 新增 `coachId` 可选参数(+28/-1
- `apps/miniprogram/miniprogram/utils/format.wxs`:新增 `daysAgo()`+11
- `apps/miniprogram/miniprogram/utils/perf-progress.ts` **[新建]**+125进度条动画参数 + 工具函数单一源
- `apps/miniprogram/miniprogram/components/perf-progress-bar/perf-progress-bar.wxss`CSS 变量化(+1/-1
- `apps/miniprogram/miniprogram/pages/board-coach/board-coach.ts``formatCount` 简化(+4/-4
- `apps/miniprogram/miniprogram/pages/coach-detail/coach-detail.ts`**关键**——进度条去重 + performance 字段扩展(+143/-94
- `apps/miniprogram/miniprogram/pages/coach-detail/coach-detail.wxml`:属性传参 + 散客标记 + Recent 限制 5 条(+18/-4
- `apps/miniprogram/miniprogram/pages/coach-detail/coach-detail.wxss`:散客置灰样式(+4
- `apps/miniprogram/miniprogram/pages/coach-service-records/coach-service-records.json` **[新建]**+14
- `apps/miniprogram/miniprogram/pages/coach-service-records/coach-service-records.ts` **[新建]**+200+):权限守卫 `checkPageAccess('view_board_coach')``fetchCoachBanner + fetchPerformanceRecords(coach_id)`
- `apps/miniprogram/miniprogram/pages/coach-service-records/coach-service-records.wxml` **[新建]**+150+):助教 banner + 月份切换 + 日期分组
- `apps/miniprogram/miniprogram/pages/coach-service-records/coach-service-records.wxss` **[新建]**+200+):样式同 `performance-records`
- `apps/miniprogram/miniprogram/pages/customer-detail/customer-detail.ts``foodDetail + phoneFull` + 复制改用 `phoneFull`+7/-2
- `apps/miniprogram/miniprogram/pages/customer-detail/customer-detail.wxml`:手机号脱敏 + 食品类目动态 + notes 创建者(+8/-4
- `apps/miniprogram/miniprogram/pages/customer-detail/customer-detail.wxss`:食品标签长文本支持(+9
- `apps/miniprogram/miniprogram/pages/customer-records/customer-records.wxml`:食品类目动态同步(+4/-2
- `apps/miniprogram/miniprogram/pages/customer-records/customer-records.wxss`:食品标签样式同步(+9/-1
- `apps/miniprogram/miniprogram/pages/performance-records/performance-records.ts`:变更日志(拆分助教视角)(+1
- `apps/miniprogram/miniprogram/pages/performance-records/performance-records.wxml`:散客标记(+2/-1
- `apps/miniprogram/miniprogram/pages/performance-records/performance-records.wxss`banner 字体 + 散客置灰(+10/-4
- `apps/miniprogram/miniprogram/pages/task-list/task-list.ts`:进度条逻辑外包到 `perf-progress.ts`+107/-62净 -90
- `apps/miniprogram/miniprogram/pages/task-list/task-list.wxml``fmt.days → fmt.daysAgo`+6/-4
### 数据库 db (6)
- `db/etl_feiqiu/migrations/2026-04-12__add_stat_date_to_index_tables.sql` **[新建]**stat_date 字段 + 唯一约束扩展 + 索引重建 + app 视图 `DISTINCT ON`(详见下方 DDL 清单)
- `db/etl_feiqiu/migrations/20260411_member_project_tag_visit_based.sql` **[新建]**:美洲豹赛台配置 + 清理旧窗口数据(详见下方 DDL 清单)
- `db/etl_feiqiu/schemas/app.sql`:同步 3 视图 `DISTINCT ON` 改写(+40/-40
- `db/etl_feiqiu/schemas/core.sql`:注释更新,定位为跨平台统一维度层(+6
- `db/etl_feiqiu/schemas/dwd.sql``mt_*` 6 字段(对应 2026-04-15 美团审计)
- `db/etl_feiqiu/schemas/dws.sql`3 表 stat_date + 约束 + 索引 + `v_member_recall_priority` 改写(+133/-88
- `db/README.md`core 层注释补充
### 文档 docs (40+)
> 95% 为路径同步(`C:\NeoZQYY → C:\Project\NeoZQYY`DDL 基线刷新仅 dws / zqyy_app biz 有实质内容;无新 spec。
**根文档**
- `docs/README.md`:路径同步
- `docs/assistant-task-detail-report.md`:历史报告(内容保留)
**DDL 基线auto-gen+201/-110 集中在 dws/biz**
- `docs/database/ddl/etl_feiqiu__app.sql`:基线刷新
- `docs/database/ddl/etl_feiqiu__core.sql`:基线刷新
- `docs/database/ddl/etl_feiqiu__dwd.sql`:基线刷新 + `mt_*` 字段
- `docs/database/ddl/etl_feiqiu__dws.sql`:基线刷新 + stat_date + 视图
- `docs/database/ddl/etl_feiqiu__meta.sql`:基线刷新
- `docs/database/ddl/etl_feiqiu__ods.sql`:基线刷新
- `docs/database/ddl/zqyy_app__app.sql`:基线刷新
- `docs/database/ddl/zqyy_app__auth.sql`:基线刷新
- `docs/database/ddl/zqyy_app__biz.sql`:基线刷新(有内容)
- `docs/database/ddl/zqyy_app__public.sql`:基线刷新
**部署/迁移/MCP/运维**
- `docs/deployment/EXPORT-PATHS.md`:路径同步 + LF→CRLF 标准化
- `docs/deployment/LAUNCH-CHECKLIST.md`:路径同步 + LF→CRLF 标准化
- `docs/mcp/WEIXIN-DEVTOOLS-MCP.md`:路径同步
- `docs/migrate/*.md × 2`:路径同步
- `docs/ops/init-test-user.md`:路径同步
**Specs约 28 份,全部路径同步无进度变更)**
- `docs/specs/*/tasks.md × 约 18`pytest 命令路径同步
- `docs/specs/*/design.md × 约 10`pytest 命令路径同步
### 工具/脚本/测试/配置 (其余约 43)
> 95% 路径迁移,实质新增 2 个运维脚本 + 1 个工具目录 + 1 个启动 bat。
**根配置 5**
- `.env`:路径同步
- `.env.template`:路径同步
- `.mcp.json`:路径同步
- `.playwright-mcp/`:新增目录
- `uv.lock`:大规模格式重排(不审跨 lockfile 内容)
**根中间产物 2**
- `excel_analysis_report.txt`Excel 分析中间产物
- `sheet_structure.txt`Sheet 结构中间产物
**scripts/ops 12**
- `scripts/ops/ai_backfill.py`:路径同步
- `scripts/ops/backfill_coach_area_hours.py`:路径同步
- `scripts/ops/backfill_finance_area_daily.py`:路径同步
- `scripts/ops/backfill_index_snapshots.py`:路径同步
- `scripts/ops/check_and_refresh_audit.py`:路径同步
- `scripts/ops/etl_unified_analysis.py`:路径同步
- `scripts/ops/gen_integration_report.py`:路径同步
- `scripts/ops/init_test_user.py`:路径同步
- `scripts/ops/start-admin.ps1`:路径同步
- `scripts/ops/churned_customer_report.py` **[新建]**:流失客户回访报告(~1137 行)
- `scripts/ops/simulate_historical_tasks.py` **[新建]**:历史任务推演(~524 行)
**tools 3 + 新建子目录**
- `tools/db/*.py × 3`:路径同步
- `tools/task-analysis/` **[新建目录]**:任务报告工具 + 7 份历史报告
**tests 7**
- `tests/test_property_*.py × 7`:常量路径同步
**apps/demo-miniprogram 4**
- SDK 1.6.28 → 1.6.29 + 项目名归一化:
- `apps/demo-miniprogram/i18n/base.json`
- `apps/demo-miniprogram/miniprogram/app.miniapp.json`
- `apps/demo-miniprogram/project.miniapp.json`
- `apps/demo-miniprogram/project.private.config.json`
**_DEL 归档 4**
- `_DEL/MIGRATION-PLAYBOOK.md`:路径同步
- `_DEL/miniprogram-h5-conversion/steering/action-manual.md`:路径同步
- `_DEL/weixin-devtools-mcp.md`:路径同步
- `_DEL/weixin-devtools/steering/workflow.md`:路径同步
**根新增启动**
- `start-admin.bat`:根目录启动引导(新建)
**其他配置**
- `.claude/settings.json`:环境配置更新
## 数据库变更
### 迁移 1`db/etl_feiqiu/migrations/2026-04-12__add_stat_date_to_index_tables.sql`
- **执行状态**:已执行(从 schema 基线一致性 + 任务代码已引用 `stat_date` 推断)
- **DDL 清单**
1. `dws.dws_member_assistant_relation_index`
- `ADD COLUMN stat_date DATE NOT NULL DEFAULT CURRENT_DATE`
- `DROP CONSTRAINT` 原唯一约束 `(site_id, member_id, assistant_id)`
- `ADD CONSTRAINT` 新唯一约束 `(site_id, member_id, assistant_id, stat_date)`
- `DROP INDEX` 旧索引(如有)
- `CREATE INDEX` 新索引 `(site_id, stat_date)`
- `UPDATE` 回填已有行 `stat_date = CURRENT_DATE`
2. `dws.dws_member_winback_index`:同上,唯一约束变 `(site_id, member_id, stat_date)`
3. `dws.dws_member_newconv_index`:同上,唯一约束变 `(site_id, member_id, stat_date)`
4. `app.v_dws_member_assistant_relation_index`:重写 `SELECT DISTINCT ON (site_id, member_id, assistant_id) ... ORDER BY site_id, member_id, assistant_id, stat_date DESC`
5. `app.v_dws_member_winback_index`:同上 `DISTINCT ON (site_id, member_id) ... ORDER BY ..., stat_date DESC`
6. `app.v_dws_member_newconv_index`:同上 `DISTINCT ON (site_id, member_id) ... ORDER BY ..., stat_date DESC`
7. `dws.v_member_recall_priority`:改写以依赖新视图
- **影响对象**3 张 DWS 表 + 4 张视图 + 4 个新索引
- **回滚 SQL**文件末尾提供TRUNCATE 过期快照 → 恢复原唯一约束 → 删除 `stat_date` 列)
- **兼容性**`stat_date NOT NULL + DEFAULT CURRENT_DATE`,安全;大表 ALTER 因 DATE 列小,锁表风险低
### 迁移 2`db/etl_feiqiu/migrations/20260411_member_project_tag_visit_based.sql`
- **执行状态**:已执行(`member_project_tag_task` 已改为 `LAST_30_VISITS` 模式)
- **DDL 清单**
1. `dws.cfg_area_category``INSERT ... ON CONFLICT DO NOTHING` 幂等新增 `('美洲豹赛台', 'BILLIARD', '中式/追分')`
2. `dws.dws_member_project_tag``DELETE WHERE time_window IN ('LAST_30_DAYS', 'LAST_60_DAYS')`
- **影响对象**1 条配置新增 + 旧窗口数据清理
- **回滚 SQL**:恢复 DELETE 数据(需从备份) + DELETE 新增配置行
- **兼容性**:无破坏性(纯数据操作 + 幂等配置)
## 风险与回滚
### 高风险项(需人工验证或测试)
1. **task_generator UPSERT + Step 5 清理**`apps/backend/app/services/task_generator.py`72h 宽限期 + 双任务替代策略 + 保底任务清理——业务逻辑复杂,需回归测试各种任务替代路径
2. **recall_detector settle_type=3 双重限制**`apps/backend/app/services/recall_detector.py``settle_type=3``order_assistant_type=2` 才计入;门店级召回自动解除(新增 resolved 状态)——需验证对历史数据的影响
3. **fetchPerformanceRecords coach_id 参数权限**`apps/backend/app/routers/xcx_performance.py` + `apps/miniprogram/miniprogram/services/api.ts`):管理者跨级查询需要 `view_board_coach` 权限——需 e2e 权限测试防越权
4. **coach-service-records 新页面权限守卫**`apps/miniprogram/miniprogram/pages/coach-service-records/*``onShow``checkPageAccess('view_board_coach')`URL 参数 `coachId` 需后端二次验证防枚举
5. **fdw_queries 消费汇总表口径统一**`apps/backend/app/services/fdw_queries.py``get_last_visit_days` / `batch_query_for_task_list` 改用 `v_dws_member_consumption_summary` 替代 `v_dwd_assistant_service_log`——下游多调用方,需验证聚合无重复
6. **isScattered 散客标记端到端**(跨 backend/schemas + 小程序多页):后端 `member_id ≤ 0` 自动标记——需验证所有调用方语义一致
7. **task_engine 双模式分支**`apps/etl/connectors/feiqiu/tasks/dws/task_engine.py`HTTP 实时 + 推演回测双路径,需独立 `APP_DB_DSN` 连接业务库
### 中风险项
- `PerformanceMetrics` schema 扩展6→25 字段):前端多页依赖,需字段可用性保证
- `current_tier` 语义修正tier_id 主键 → tier_nodes 数组下标 0-based前端档位展示语义对应
- 指数任务日快照模式DELETE 策略从全量变 `(site_id, stat_date)`,回填任务需防重跑
### 回滚策略
- **迁移 SQL**:两份回滚脚本已内嵌(文件末尾注释块)
- **后端代码**git revert 对应文件即可(未 commit`git checkout HEAD -- <file>` 可立即回退)
- **小程序代码**:同上
- **ETL 任务**:可禁用 `CORE_DIM_SYNC` / `DWS_INDEX_BACKFILL` / `DWS_TASK_SIMULATION` 任务的编排注册
## 验证
### SQL 验证3 条起步)
```sql
-- 验证 stat_date 已生效
SELECT COUNT(DISTINCT stat_date) FROM dws.dws_member_winback_index WHERE site_id = 1;
-- 验证 member_project_tag 新窗口已写入
SELECT DISTINCT time_window FROM dws.dws_member_project_tag;
-- 应只返回 LAST_30_VISITS
-- 验证 core 维度表非空CORE_DIM_SYNC 已跑过)
SELECT COUNT(*) FROM core.dim_assistant;
SELECT COUNT(*) FROM core.dim_member;
```
### 功能验证
- **小程序**:登录 coach 账号打开 `task-list` 查看绩效卡;登录 admin 账号从 `board-coach` 点击助教卡进 `coach-service-records`
- **后端**`pytest apps/backend/tests/` 跑现有测试
- **ETL**`python -m cli.main --dry-run --tasks CORE_DIM_SYNC,DWS_MEMBER_PROJECT_TAG,WINBACK_INDEX,RELATION_INDEX,NEWCONV_INDEX`
## 合规检查
### 文档同步缺口(预扫描识别的 25 项)
**已有文档覆盖(免补齐)**
- 美团 `mt_*` 字段 → 已在 `docs/audit/changes/2026-04-15__meituan-settle-core-sync.md` 审计覆盖 + `BD_manual_dwd_groupbuy_redemption.md` 已更新
- `stat_date` 迁移 → `db/etl_feiqiu/migrations/` 已有完整 SQL`docs/database/ddl/etl_feiqiu__dws.sql` 已同步
- `member_project_tag` 新窗口 → `BD_manual_dws_member_project_tag.md` 已同步
**待补齐高风险项(建议后续单独任务处理,本次审计仅标注缺口,不强制补齐)**
- `apps/backend/docs/API-REFERENCE.md`:需增补 `xcx/coaches/{id}/banner``xcx/performance``coach_id` 参数说明、`xcx/customers``foodDetail` / `phoneFull` / `notes.creator*` 字段
- `apps/miniprogram/README.md`:需增补 `coach-service-records` 新页面说明
- `apps/etl/connectors/feiqiu/docs/architecture/`:建议补充 `orchestration/task_registry.py` 新增任务(`CORE_DIM_SYNC` / `DWS_INDEX_BACKFILL` / `DWS_TASK_SIMULATION`
### 状态清单
| 项 | 状态 |
|---|---|
| 迁移 SQL 回滚脚本 | 已内嵌 |
| DDL 基线同步 | 已同步dws/app 一致) |
| 代码→文档映射(美团/stat_date/project_tag | 已覆盖 |
| 代码→文档映射backend API / miniprogram 新页 / ETL 新任务) | 待补齐(已列入后续任务) |
| Spec 与实现对应 | 全部可追溯 |
## 下一步建议
1. 提交本基线(本次审计后可作为 commit 起点)
2. 后续新改动走标准 `/audit` 流程(单独审计、小颗粒度)
3. 高风险 7 项应在 commit 前或上线前完成端到端测试
4. 文档补齐列入待办,非阻断本次提交