# apps 当前工作清单：依赖顺序与紧急程度

| 字段 | 内容 |
|------|------|
| 生成时间 | 2026-05-02 |
| 范围 | 迁移前 Claude Code、迁移期 Codex、当前 Cursor 会话中与 `apps/` 相关的未完成事项 |
| 目标 | 先整理依赖关系、紧急程度和完成判定；本文不代表开始实现 |
| 主要依据 | `docs/claude-history/development_progress_report_2026-04-29.md`、`docs/claude-history/issue_resolution_tracker_2026-04-30.md`、`docs/claude-history/worktree_split_plan_2026-04-30.md`、`docs/ai-env-history/topic_timeline.md`、Claude/Codex 会话摘要与原始对话抽查 |

## 一、总体判断

当前 `apps/` 相关工作不是单一功能未完成，而是三条主线叠加：

1. Claude 阶段的 **AI / App2-App2a 财务洞察体系**：测试环境已闭环，生产上线、回填、预热、线上验收未闭环。
2. Codex 阶段的 **开发环境与历史追溯迁移**：配置与追溯资产已生成，但工作区混杂，尚未形成干净提交边界。
3. Codex 后期新增的 **运行时上下文 / 业务日期沙箱**：因球房停业，提出用历史日期继续开发、测试和演示；已有实现痕迹，但缺最终验收与收口。

因此后续不能直接挑一个功能写代码。第一步应先把“当前工作区里哪些是迁移、哪些是业务、哪些是沙箱、哪些是临时产物”分清楚，否则后续任何实现都会扩大追溯成本。

## 二、依赖关系总图

```text
W0 工作区边界与历史追溯确认
  -> W1 当前变更分类与验证基线
      -> R0 RuntimeContext/业务日期沙箱状态确认
          -> R1 沙箱可用性闭环
              -> A0 AI/App2-App2a 测试环境业务改动收口
                  -> A1 App2a 生产上线闭环
                      -> A2 AI 链路可信度修复
                          -> S0 数据库/RLS/隐私治理
                              -> U0 产品体验补齐
                                  -> E0 性能与工程化
```

并行限制：

- `W0/W1` 之前，不建议继续改业务代码。
- `R0/R1` 之前，不建议做依赖“今天/本周/本月/任务日更/AI预热”的测试结论。
- `A0` 未验证前，不建议做生产迁移。
- `S0` 涉及 schema、RLS、隐私，必须单独批次，不应混入普通功能修复。

## 三、优先级定义

| 等级 | 含义 | 处理策略 |
|------|------|----------|
| P0 | 阻塞后续判断或可能污染提交/数据/生产 | 必须先处理或先确认 |
| P1 | 影响核心链路可信度、测试有效性或上线闭环 | P0 后优先处理 |
| P2 | 安全、数据治理、权限与长期可维护性 | 单独方案、迁移、回滚和验证 |
| P3 | 产品体验、前端展示、入口补齐 | 依赖产品范围确认 |
| P4 | 性能、工程化、历史遗留清理 | 不阻塞主链路，但需排期 |

## 四、P0：必须先处理

### W0-01 工作区边界与提交拆分

- 紧急程度：P0
- 当前状态：已存在拆分方案，但未执行提交、清理或最终确认。
- 依赖前置：无。
- 阻塞后续：所有代码实现、验证、审计和提交。
- 相关模块：`apps/backend`、`apps/admin-web`、`apps/miniprogram`、`apps/etl/connectors/feiqiu`、`apps/demo-miniprogram`、`db`、`docs`
- 历史依据：
  - `docs/claude-history/worktree_split_plan_2026-04-30.md`
  - Codex 会话 `019dd593-5fe3-78d3-a0e7-02512c6eff87`
- 需要做的事：
  1. 重新分类当前 `git status`。
  2. 把变更分为：迁移/追溯资产、Claude AI 业务改动、RuntimeContext 沙箱改动、日志修复改动、临时产物、本地配置。
  3. 明确哪些文件不能提交：真实 `.env`、真实 APP_ID、DSN、临时导出、调试截图、缓存。
  4. 用户确认后再谈提交或继续实现。
- 完成判定：
  - 有一份当前日期的变更分类清单。
  - 每个文件能归入一个批次。
  - 没有业务改动和迁移改动混在同一提交计划里。

### W0-02 当前历史追溯索引可信度确认

- 紧急程度：P0
- 当前状态：Claude 摘要较完整；Codex 摘要对用户意图识别不足，需要结合原始 JSONL 抽查。
- 依赖前置：无。
- 阻塞后续：所有“为什么这么改”的判断。
- 相关模块：全部 `apps/`
- 历史依据：
  - `docs/ai-env-history/README.md`
  - `docs/ai-env-history/conversation_index.csv`
  - `docs/ai-env-history/file_impact_index.csv`
  - Codex 原始会话 `019dde9a-18b2-7531-8d63-76b717d274ef`
- 需要做的事：
  1. 后续每次动某个文件前，先查 `file_impact_index.csv`。
  2. 对 Codex 会话不能只信摘要，必要时读原始 JSONL 的 `user_message` 和 `last_agent_message`。
  3. 形成“本次修改引用了哪些历史会话”的记录。
- 完成判定：
  - 每次实施前的上下文摘要能列出历史来源。

### R0-01 RuntimeContext / 业务日期沙箱当前状态确认

- 紧急程度：P0
- 当前状态：已有实现痕迹，但缺最终验收结论。
- 依赖前置：`W0-01`、`W0-02`
- 阻塞后续：停业后所有依赖日更、任务分发、AI预热、看板筛选的测试。
- 相关模块：
  - `apps/backend/app/services/runtime_context.py`
  - `apps/backend/app/routers/admin_runtime_context.py`
  - `apps/backend/app/schemas/runtime_context.py`
  - `apps/admin-web/src/api/businessDay.ts`
  - `apps/admin-web/src/store/businessDayStore.ts`
  - `apps/miniprogram/miniprogram/pages/board-finance/board-finance.ts`
  - `db/zqyy_app/migrations/20260501__runtime_context_sandbox.sql`
- 历史依据：
  - Codex 会话 `019dde9a-18b2-7531-8d63-76b717d274ef`
  - 会话结论：“不要做简单 TEST_MODE=true，应做业务时钟 + 历史重放沙箱”
- 需要做的事：
  1. 读取 RuntimeContext 相关代码和迁移。
  2. 确认 `mode=live/sandbox`、`sandbox_date`、`sandbox_instance_id`、`ai_mode` 是否完整。
  3. 确认后端看板、任务、AI、缓存是否实际接入 RuntimeContext，而不只是建了表和接口。
  4. 确认沙箱写入是否隔离，避免污染正式任务和 AI cache。
  5. 确认真实预算统计是否仍按真实系统日，而不是业务沙箱日。
- 完成判定：
  - live 模式不改变现有行为。
  - sandbox 模式下“今天/本周/近30天/本月”均按 `sandbox_date` 计算。
  - 沙箱 AI cache、任务、run log 有独立命名空间或隔离字段。
  - 有后端单测和至少一个端到端烟雾验证。

### R0-02 沙箱数据读取不能“看到未来”

- 紧急程度：P0
- 当前状态：历史调研指出存在风险；是否已修未确认。
- 依赖前置：`R0-01`
- 阻塞后续：历史日期模拟的真实性。
- 相关模块：
  - `apps/backend/app/services/board_service.py`
  - `apps/backend/app/services/recall_detector.py`
  - `apps/backend/app/services/task_generator.py`
  - `apps/backend/app/services/fdw_queries.py`
  - `apps/etl/connectors/feiqiu/tasks/dws/task_engine.py`
- 历史依据：
  - Codex 会话 `019dde9a-18b2-7531-8d63-76b717d274ef`
- 需要做的事：
  1. 检查 DWS/FDW 查询是否默认取最新 `stat_date`。
  2. 沙箱模式下改为 `stat_date <= sandbox_date` 的最近快照。
  3. 召回检测、任务生成禁止读取 `sandbox_date` 之后的消费/服务记录。
- 完成判定：
  - 给定 `sandbox_date=2026-03-15`，查询不会返回 2026-03-16 之后的数据。
  - 任务生成结果可重复、可解释。

### W1-01 C1/C3 迁移与追溯资产是否先固化

- 紧急程度：P0
- 当前状态：建议先提交，但尚未由用户确认。
- 依赖前置：`W0-01`
- 阻塞后续：后续文件归属与开发规则稳定性。
- 相关模块：
  - `AGENTS.md`
  - `apps/backend/AGENTS.md`
  - `apps/etl/connectors/feiqiu/AGENTS.md`
  - `apps/demo-miniprogram/AGENTS.md`
  - `db/AGENTS.md`
  - `docs/ai-env-history/`
  - `docs/claude-history/`
  - `tools/codex/`
- 历史依据：
  - Codex 会话 `019dd593-5fe3-78d3-a0e7-02512c6eff87`
  - `docs/claude-history/worktree_split_plan_2026-04-30.md`
- 需要做的事：
  1. 敏感扫描 `.mcp.json` 与 `tools/codex/mcp-postgres.ps1`。
  2. 确认是否把治理文档 C3 并入 C1。
  3. 用户确认后再考虑 stage/commit。
- 完成判定：
  - 迁移资产与业务改动分离。
  - 无明文 DSN、token、APP key。

## 五、P1：核心业务与测试可信度

### A0-01 Claude AI 业务改动验证与提交边界

- 紧急程度：P1
- 当前状态：测试环境曾通过，但当前工作区未验证、未拆提交。
- 依赖前置：`W0-01`、`W1-01`
- 阻塞后续：App2a 生产上线、AI 链路修复。
- 相关模块：
  - `apps/backend/app/ai/`
  - `apps/backend/app/routers/`
  - `apps/backend/app/services/`
  - `apps/admin-web/src/pages/AI*.tsx`
  - `apps/admin-web/src/api/adminAI.ts`
  - `apps/miniprogram/miniprogram/pages/board-finance/`
  - `apps/miniprogram/miniprogram/pages/chat/`
  - `apps/miniprogram/miniprogram/services/api.ts`
- 历史依据：
  - `docs/claude-history/development_progress_report_2026-04-29.md`
  - `docs/audit/changes/2026-04-20__ai-module-complete.md`
  - `docs/audit/changes/2026-04-21__admin-web-ai-management-suite.md`
  - `docs/audit/changes/2026-04-22__app2_prompt_v5_1_and_miniprogram_ai_insight.md`
  - `docs/audit/changes/2026-04-23__app2a_finance_area_integrated.md`
- 需要做的事：
  1. 重新跑后端 AI 相关单测。
  2. 重新跑 admin-web `pnpm test` / `pnpm lint`。
  3. 重新跑小程序可用测试或至少 TypeScript/构建检查。
  4. 把验证结果和未覆盖风险写入审计。
- 完成判定：
  - C2 业务改动有独立验证记录。
  - 可单独提交或明确继续修复。

### A1-01 App2a 生产上线闭环

- 紧急程度：P1
- 当前状态：测试环境已闭环，生产未确认执行。
- 依赖前置：`A0-01`
- 阻塞后续：生产小程序是否能看到区域 AI 洞察。
- 相关模块：
  - `apps/etl/connectors/feiqiu/tasks/dws/finance_area_daily.py`
  - `apps/backend/app/ai/prompts/app2a_finance_area_prompt.py`
  - `apps/backend/app/ai/dispatcher.py`
  - `apps/miniprogram/miniprogram/pages/board-finance/`
  - `apps/admin-web/src/pages/AIPrewarm.tsx`
  - `db/etl_feiqiu/migrations/`
  - `db/zqyy_app/migrations/`
- 历史依据：
  - `docs/audit/changes/2026-04-23__app2a_finance_area_integrated.md`
- 需要做的事：
  1. 用户确认生产库窗口、备份和回滚策略。
  2. 执行生产 ETL 与业务库 migration。
  3. 回填 `member_order_count`。
  4. 触发 72 组合预热。
  5. 小程序 all/VIP/麻将等区域验收。
  6. admin-web AIPrewarm 验收 8/8 与 64/64。
- 完成判定：
  - 生产库 schema 与测试库一致。
  - `app2_finance` 全域 8 个 target 完整。
  - `app2a_finance_area` 区域 64 个 target 完整。
  - 小程序切换区域不会显示旧洞察。

### A1-02 `20260501.log` 中 ETL 区域未匹配与任务引擎超时

- 紧急程度：P1
- 当前状态：Codex 已定位两个实质问题，但缺最终修复总结。
- 依赖前置：`W0-01`、`R0-01`
- 阻塞后续：ETL 回放、任务日更、沙箱推演的稳定性。
- 相关模块：
  - `apps/etl/connectors/feiqiu/tasks/dws/finance_area_daily.py`
  - `apps/etl/connectors/feiqiu/tasks/dws/task_engine.py`
  - `apps/backend/app/services/trigger_scheduler.py`
  - `apps/backend/app/services/task_generator.py`
  - `apps/backend/app/services/task_expiry.py`
- 历史依据：
  - Codex 会话 `019ddf6f-c25c-7840-b46a-49125e31290b`
- 已知现象：
  - 日志没有 `ERROR/Traceback`。
  - 存在 `DWS_FINANCE_AREA_DAILY` 区域未匹配。
  - `DWS_TASK_ENGINE` 调用后端日常流程两次 30 秒超时。
- 需要做的事：
  1. 确认是否已经修改 `finance_area_daily.py` 的区域映射。
  2. 确认 `DWS_TASK_ENGINE` 超时是后端慢、HTTP timeout 太短，还是任务可拆分性问题。
  3. 给出可重复验证命令。
- 完成判定：
  - 重跑同类 ETL 日志无区域未匹配警告，或能列出可接受的未匹配清单。
  - 后端任务调用不再 30 秒超时，或长任务改为异步/队列模式。

### A1-03 AI 预算 token 统计可信度

- 紧急程度：P1
- 当前状态：历史台账标记为已验证，但当前工作区仍需确认是否包含最终改动。
- 依赖前置：`A0-01`
- 阻塞后续：AI 预算、告警、预热成本判断。
- 相关模块：
  - `apps/backend/app/ai/dashscope_client.py`
  - `apps/backend/app/ai/run_log_service.py`
  - `apps/backend/app/services/ai/admin_service.py`
- 历史依据：
  - `docs/claude-history/issue_resolution_tracker_2026-04-30.md`
- 需要做的事：
  1. 检查 DashScope usage 提取逻辑是否兼容 SDK 对象和 dict。
  2. 跑对应单测。
  3. 确认真实 run log 不再大量 `tokens_used=0`。
- 完成判定：
  - 单测覆盖 `models` 嵌套、顶层 tokens、`total_tokens`。
  - 新 run log 记录 tokens 非 0。

### A1-04 `app6` 命名错位

- 紧急程度：P1
- 当前状态：历史台账标记为已验证，但需要和当前工作区 diff 对齐。
- 依赖前置：`A0-01`
- 阻塞后续：admin-web 手动执行 APP6 的可靠性。
- 相关模块：
  - `apps/admin-web/src/api/adminAI.ts`
  - `apps/admin-web/src/pages/AIOperations.tsx`
  - `apps/backend/app/schemas/admin_ai.py`
  - `apps/backend/app/services/ai/admin_service.py`
- 历史依据：
  - `docs/claude-history/issue_resolution_tracker_2026-04-30.md`
- 需要做的事：
  1. 确认前端传 `app6_note` 还是 `app6_note_analysis`。
  2. 确认后端 app_type 与 cache_type 映射一致。
  3. 真实后端联调一次手动执行 APP6。
- 完成判定：
  - APP6 手动执行不再 400。
  - APP6 cache 写入仍使用正确 cache_type。

### A1-05 `app3_clue` 超时风险

- 紧急程度：P1
- 当前状态：历史台账标记为已验证真实合成调用，但极端会员仍需观察。
- 依赖前置：`A0-01`
- 阻塞后续：消费事件链 App3 -> App8 -> App7 的稳定性。
- 相关模块：
  - `apps/backend/app/ai/prompts/app3_clue_prompt.py`
  - `apps/backend/app/ai/dispatcher.py`
- 历史依据：
  - `docs/claude-history/issue_resolution_tracker_2026-04-30.md`
- 需要做的事：
  1. 确认 prompt 保留完整消费明细策略是否已落地。
  2. 抽查真实 run log 的 App3 耗时、tokens、失败率。
  3. 决定是否需要超时告警或重试策略。
- 完成判定：
  - 真实数据调用低于单步 180 秒超时。
  - 失败后不阻断后续链路，且有可观测记录。

### A1-06 dispatcher 去重从内存迁出

- 紧急程度：P1
- 当前状态：未开始。
- 依赖前置：`R0-01`、`A0-01`
- 阻塞后续：重启后事件幂等性。
- 相关模块：
  - `apps/backend/app/ai/dispatcher.py`
  - `apps/backend/app/ai/event_bus.py`
  - `apps/backend/app/services/trigger_scheduler.py`
  - `db/zqyy_app/migrations/`
- 历史依据：
  - `docs/claude-history/development_progress_report_2026-04-29.md`
- 需要做的事：
  1. 确认当前内存去重 key。
  2. 设计 DB 唯一键或当日执行记录查询。
  3. 沙箱模式下加入 `sandbox_instance_id`，避免和 live 去重冲突。
- 完成判定：
  - 服务重启后重复事件仍能被识别。
  - live 与 sandbox 去重互不污染。

### A1-07 App2/App2a 预热耗时与并发控制

- 紧急程度：P1
- 当前状态：未开始。
- 依赖前置：`A1-01`、`R0-01`
- 阻塞后续：多门店预热、沙箱重放、生产成本控制。
- 相关模块：
  - `apps/backend/app/ai/dispatcher.py`
  - `apps/backend/app/services/trigger_scheduler.py`
  - `apps/admin-web/src/pages/AIPrewarm.tsx`
- 历史依据：
  - `docs/claude-history/development_progress_report_2026-04-29.md`
- 需要做的事：
  1. 统计 72 组合实际耗时。
  2. 设计并发窗口、失败重试、跳过已有缓存。
  3. 增加耗时、失败数、tokens 监控。
- 完成判定：
  - 预热进度可观测。
  - 失败组合可重试。
  - 不阻塞其他调度任务。

## 六、P2：数据库、安全与隐私治理

### S0-01 AI 表 RLS 与多门店隔离

- 紧急程度：P2
- 当前状态：未开始。
- 依赖前置：`A0-01`、`R0-01`
- 相关模块：
  - `db/zqyy_app/migrations/`
  - `apps/backend/app/ai/cache_service.py`
  - `apps/backend/app/ai/run_log_service.py`
  - `apps/backend/app/services/ai/admin_service.py`
- 需要做的事：
  1. 覆盖 `ai_cache`、`ai_run_logs`、`ai_trigger_jobs`、`ai_conversations`、`ai_messages`。
  2. 同步 `docs/database/`。
  3. 写回滚 SQL 和至少 3 条验证 SQL。
- 完成判定：
  - 伪造 site_id 不能读写其他门店数据。
  - sandbox 与 live 隔离符合预期。

### S0-02 `ai_cache.score` CHECK

- 紧急程度：P2
- 当前状态：未开始。
- 依赖前置：`A0-01`
- 相关模块：
  - `db/zqyy_app/migrations/`
  - `apps/backend/app/ai/cache_service.py`
- 需要做的事：
  1. 加 `score BETWEEN 1 AND 10` 或允许 NULL 的明确约束。
  2. 补数据库文档。
  3. 补插入异常测试。
- 完成判定：
  - 0、11 分写入失败。
  - NULL 策略清晰。

### S0-03 prompt 与 run log 脱敏

- 紧急程度：P2
- 当前状态：未开始。
- 依赖前置：`A0-01`
- 相关模块：
  - `apps/backend/app/ai/prompts/`
  - `apps/backend/app/ai/run_log_service.py`
  - `apps/backend/app/services/chat_service.py`
- 需要做的事：
  1. 明确手机号、备注原文、余额、助教姓名等字段脱敏策略。
  2. prompt 发送前和 run log 写入前分别处理。
  3. 定义日志保存期。
- 完成判定：
  - 单测断言 prompt/run log 不含敏感明文。
  - 文档说明保留期和访问权限。

### S0-04 App8 输出字段模型与 `member_retention_clue`

- 紧急程度：P2
- 当前状态：待确认。
- 依赖前置：`A0-01`
- 相关模块：
  - `apps/backend/app/ai/prompts/app8_consolidation_prompt.py`
  - `apps/backend/app/schemas/`
  - `db/zqyy_app/migrations/`
- 需要做的事：
  1. 决定加 `emoji/providers` 字段，还是折叠进旧字段。
  2. 明确长度限制和截断规则。
  3. 补迁移与回滚。
- 完成判定：
  - App8 多来源线索不丢语义。
  - 前端展示字段明确。

## 七、P3：产品体验与前端入口

### U0-01 APP1 `screen_content` 前端采集

- 紧急程度：P3
- 当前状态：schema 已预留，前端未采集。
- 依赖前置：`R0-01`
- 相关模块：
  - `apps/backend/app/ai/schemas.py`
  - `apps/miniprogram/miniprogram/components/ai-float-button/ai-float-button.ts`
  - `apps/miniprogram/miniprogram/pages/chat/chat.ts`
- 需要做的事：
  1. 用户确认本期是否启用。
  2. 明确采集范围：可见文本、筛选条件、当前卡片摘要。
  3. 确认 `page_context` 权威数据优先级高于 `screen_content`。
- 完成判定：
  - 从财务看板进入 chat 时，问题能携带当前页面上下文。
  - 不上传敏感原文或超长内容。

### U0-02 task-detail / coach-detail AI 入口

- 紧急程度：P3
- 当前状态：未完整挂载。
- 依赖前置：`U0-01`
- 相关模块：
  - `apps/miniprogram/miniprogram/pages/task-detail/`
  - `apps/miniprogram/miniprogram/pages/coach-detail/`
  - `apps/miniprogram/miniprogram/components/ai-float-button/`
  - `apps/backend/app/ai/data_fetchers/page_context.py`
- 需要做的事：
  1. 确认是否属于本期范围。
  2. 增加 `sourcePage` 与 `contextId`。
  3. 后端补对应 page_context fetcher。
- 完成判定：
  - 从任务详情进入 AI 能理解当前任务。
  - 从助教详情进入 AI 能理解当前助教。

### U0-03 `task-detail aiAnalysis`

- 紧急程度：P3
- 当前状态：未实现。
- 依赖前置：`U0-02`
- 相关模块：
  - `apps/miniprogram/miniprogram/pages/task-detail/`
  - `apps/backend/app/ai/prompts/app5_tactics_prompt.py`
  - `apps/backend/app/ai/prompts/app4_analysis_prompt.py`
- 需要做的事：
  1. 先设计展示区和数据来源。
  2. 决定使用缓存还是实时生成。
  3. 定义失败降级 UI。
- 完成判定：
  - task-detail 有可解释的 AI 分析结果。
  - 结果能追踪到 run log 或 cache。

### U0-04 App2a prompt v1.3 迭代

- 紧急程度：P3
- 当前状态：v1.2 有轻微瑕疵。
- 依赖前置：`A1-01`
- 相关模块：
  - `apps/backend/app/ai/prompts/app2a_finance_area_prompt.py`
  - `docs/ai/`
- 需要做的事：
  1. 收集 H2 / seq12 瑕疵样本。
  2. A/B 测试 v1.3。
  3. 更新 prompt 版本历史。
- 完成判定：
  - 抽样评分提升。
  - 不增加明显 tokens 和超时风险。

### U0-05 “按月实际收入统计”需求

- 紧急程度：P3
- 当前状态：Claude 尾声提出，未实现。
- 依赖前置：`R0-01`、`A1-02`
- 相关模块：
  - `apps/etl/connectors/feiqiu/tasks/dws/finance_daily_task.py`
  - `apps/etl/connectors/feiqiu/tasks/dws/finance_area_daily.py`
  - `apps/etl/connectors/feiqiu/docs/reports/DWD-DOC/`
- 历史依据：
  - Claude 会话 `67f30f8e-2db7-467f-82e0-5395f9ed855f`
- 需求原文：
  - “ETL 管道中，只有一个球房，按月统计该球房的实际收入，也就是充值 + 扫码（在线/离线）支付 + 现金。不算团购。”
- 需要做的事：
  1. 重新确认收入定义和不算团购的边界。
  2. 按 DWD-DOC 查询口径，不直接用 `consume_money`。
  3. 输出 SQL/报表或接口前先给口径说明。
- 完成判定：
  - 月度收入能和支付流水、充值、现金口径对齐。
  - 团购明确排除。

## 八、P4：工程化与性能

### E0-01 后端数据库连接池

- 紧急程度：P4
- 当前状态：未开始。
- 依赖前置：`W0-01`
- 相关模块：
  - `apps/backend/app/database.py`
  - `apps/backend/app/main.py`
- 需要做的事：
  1. 评估当前每请求新建连接的耗时。
  2. 选择 psycopg2 pool 或其他现有模式。
  3. 确认 lifespan 关闭连接。
- 完成判定：
  - admin-web 调试请求延迟明显下降。
  - 无连接泄漏。

### E0-02 ChatService 是否接入 dispatcher

- 紧急程度：P4
- 当前状态：待确认。
- 依赖前置：`A0-01`
- 相关模块：
  - `apps/backend/app/services/chat_service.py`
  - `apps/backend/app/ai/dispatcher.py`
- 需要做的事：
  1. 确认 APP1 是否需要统一熔断、限流、预算和 run log。
  2. 若接入 dispatcher，避免破坏 SSE 流式体验。
- 完成判定：
  - APP1 治理边界明确。
  - SSE 行为不回退。

### E0-03 清理旧 OpenAI / 迁移残留

- 紧急程度：P4
- 当前状态：未开始。
- 依赖前置：`A0-01`
- 相关模块：
  - `apps/backend/app/ai/`
  - `docs/ai/`
- 需要做的事：
  1. 搜索旧 `openai_client`。
  2. 确认无调用后删除或标注废弃。
  3. 更新文档。
- 完成判定：
  - AI 供应商边界清楚。
  - 无旧实现误用。

### E0-04 环境模板整理

- 紧急程度：P4
- 当前状态：未开始。
- 依赖前置：`W0-01`
- 相关模块：
  - `.env.template`
  - `apps/backend/`
  - `apps/etl/connectors/feiqiu/`
  - `tools/codex/`
- 需要做的事：
  1. 抽取 `.env.example` 或补齐模板字段。
  2. 区分测试库、正式库、MCP、DashScope。
  3. 不提交真实值。
- 完成判定：
  - 新环境按模板能启动。
  - 敏感扫描通过。

## 九、建议的实际处理顺序

### 第一阶段：只做整理与确认

1. `W0-01` 当前工作区边界与提交拆分。
2. `W0-02` 历史追溯索引可信度确认。
3. `R0-01` RuntimeContext 当前状态确认。
4. `R0-02` 沙箱数据读取是否“看到未来”确认。
5. `W1-01` 迁移/追溯资产是否先固化确认。

完成这一阶段后，才能决定是否进入代码实现。

### 第二阶段：本地验证与收口

1. `A0-01` Claude AI 业务改动验证与提交边界。
2. `A1-02` `20260501.log` 两个 ETL/任务问题收口。
3. `A1-03` tokens 统计确认。
4. `A1-04` app6 命名错位确认。
5. `A1-05` app3 超时风险确认。

### 第三阶段：上线和生产动作

1. `A1-01` App2a 生产上线闭环。
2. `A1-06` dispatcher 去重持久化。
3. `A1-07` App2/App2a 预热并发与监控。

### 第四阶段：治理与体验

1. `S0-01` 至 `S0-04` 数据库、安全、隐私治理。
2. `U0-01` 至 `U0-05` 产品体验与新需求。
3. `E0-01` 至 `E0-04` 工程化与性能。

## 十、进入实现前需要用户确认的问题

1. 是否同意先做 `W0-01`，只整理当前工作区边界，不改业务逻辑？
2. RuntimeContext 沙箱是否应作为当前最高优先级业务基础设施先收口？
3. App2a 生产上线是否仍然需要推进，还是因为球房停业先转为测试/演示闭环？
4. `tmp/` 和 `tmp/web` 中 Excel/报表是否保留、归档，还是确认后清理？
5. 后续提交策略是先提交迁移资产，还是先继续保持未提交状态直到业务一起收口？

## 十一、暂不建议立刻实现的事项

| 事项 | 原因 |
|------|------|
| 直接修小程序 AI 入口 | 依赖 RuntimeContext 和 `screen_content/page_context` 范围确认 |
| 直接做生产库 migration | 需要生产窗口、备份、回滚和当前代码验证 |
| 直接清理 `tmp/` | 可能包含历史数据分析材料，需用户确认 |
| 直接改 RLS | 涉及多租户安全，必须单独设计和验证 |
| 直接改预热并发 | 依赖当前 App2/App2a 预热链路验证和 tokens 成本统计 |

