# 变更审计记录：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`
- 风险：无（纯路径同步）

### 主线 2：rns1-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 召回解除

### 主线 3：P19 指数回测框架（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

### 主线 4：Core 维度层启用（承接 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` **[新建]**（+174）：DWD → 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. 文档补齐列入待办，非阻断本次提交
