Files
Neo-ZQYY/docs/audit/changes/2026-04-20__historical-batch-pre-audit.md
Neo 80bda9b991 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>
2026-04-20 06:32:58 +08:00

375 lines
24 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.
# 变更审计记录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. 文档补齐列入待办,非阻断本次提交