# W0-01 工作区边界与提交拆分执行清单

| 字段 | 内容 |
|------|------|
| 生成时间 | 2026-05-02 01:41 |
| 执行范围 | 仅整理当前工作区边界、提交批次、风险与验证建议 |
| 执行限制 | 未 stage、未 commit、未删除、未移动、未清理 `tmp/`，未修改业务逻辑 |
| 依据 | `git status --short`、`git diff --name-status`、`git diff --stat`、`git ls-files --others --exclude-standard`、W0-01 拆分方案、历史拆分方案 |

## 一、当前工作区快照

当前工作区不是干净状态，包含三类混杂内容：

1. 已跟踪文件改动：50 个文件，约 2555 行新增、2507 行删除。
2. 未跟踪文件/目录：包含 `.cursor/`、`docs/ai-env-history/`、`docs/claude-history/`、`docs/ai/`、`tmp/`、`tools/`、新增后端/前端/迁移文件等。
3. 敏感/本地配置风险：`.mcp.json`、`apps/etl/connectors/feiqiu/.env`、`docs/deployment/SERVER-ACCESS.md`。

已确认策略：

- `RuntimeContext / 业务日期沙箱` 独立为 `R1` 批次。
- Cursor 迁移资产并入 `C1`。
- `.mcp.json` 纳入迁移/安全修正批次。
- `apps/etl/connectors/feiqiu/.env` 用户确认可纳入对应批次，但执行前仍必须标注真实 `API_TOKEN` 风险。
- `tmp/` 仅列为排除项，不移动、不删除、不改 `.gitignore`。
- `docs/deployment/SERVER-ACCESS.md` 可纳入文档批次。

## 二、批次总览

| 批次 | 主题 | 是否建议提交 | 主要风险 |
|------|------|--------------|----------|
| C1 | Claude/Codex/Cursor 迁移与追溯资产 | 可优先提交 | `.mcp.json` 为本地工具配置；`audit_dashboard` 有交叉索引 |
| R1 | RuntimeContext / 业务日期沙箱 | 先验证再提交 | 牵涉业务日期、AI cache、任务、看板，且 `main.py` 为交叉文件 |
| C2 | Claude AI/App2-App2a 业务改动 | 验证后拆提交 | 跨后端、admin-web、小程序、DB、脚本，范围大 |
| L1 | ETL 日志与 App2a 区域修复 | 可独立验证后提交 | 与 App2a 业务相关，但来源是 `20260501.log` 问题 |
| C5 | 配置与部署文档 | 逐项审查 | 包含真实 API token、服务器地址、SSH 用户/密钥路径 |
| C4 | 临时产物/导出文件 | 不提交 | 多为 Excel、HTML、PDF、截图、临时报表脚本 |
| X | 交叉文件 | 暂不直接提交 | 单文件包含多个批次的变更 |

## 三、C1：迁移与追溯资产

### 建议包含

| 路径 | 状态 | 归属理由 |
|------|------|----------|
| `AGENTS.md` | 未跟踪 | 根级 Codex/Cursor 规则入口 |
| `apps/backend/AGENTS.md` | 未跟踪 | 后端模块规则迁移 |
| `apps/etl/connectors/feiqiu/AGENTS.md` | 未跟踪 | ETL 模块规则迁移 |
| `apps/demo-miniprogram/AGENTS.md` | 未跟踪 | Demo 小程序模块规则迁移 |
| `db/AGENTS.md` | 未跟踪 | 数据库目录规则迁移 |
| `.cursor/` | 未跟踪目录 | Cursor rules、hooks、skills 迁移资产 |
| `tools/codex/` | 未跟踪目录 | Codex MCP 与迁移脚本 |
| `tools/cursor/` | 未跟踪目录 | Cursor 环境迁移脚本 |
| `docs/claude-history/` | 未跟踪目录 | Claude 会话摘要、进度报告、旧拆分方案 |
| `docs/ai-env-history/` | 未跟踪目录 | Claude/Codex/Cursor 会话索引、历史追溯、当前工作清单 |
| `docs/codex_migration.md` | 未跟踪 | Codex 迁移说明 |
| `docs/codex_migration_status_report_2026-04-29.md` | 未跟踪 | Codex 迁移状态报告 |
| `docs/cursor_migration.md` | 未跟踪 | Cursor 迁移说明 |
| `docs/audit/changes/2026-04-29__codex_migration_and_claude_history_archive.md` | 未跟踪 | Codex/Claude 迁移审计 |
| `docs/audit/changes/2026-05-01__cursor_migration.md` | 未跟踪 | Cursor 迁移审计 |
| `.mcp.json` | 已修改 | 去除已跟踪明文 PostgreSQL DSN，改为环境变量脚本读取 |

### C1 注意事项

- `.mcp.json` 当前不再包含明文 PostgreSQL DSN，只引用 `PG_DSN`、`TEST_DB_DSN`、`APP_DB_DSN`、`TEST_APP_DB_DSN`。
- `.mcp.json` 仍包含本机绝对路径、微信开发者工具路径、`npx.cmd` 路径，属于开发环境配置；用户已确认纳入迁移/安全修正批次。
- `docs/audit/audit_dashboard.md` 不直接放入 C1，因为它同时新增了迁移审计、AI 修复审计和 App3 审计索引。
- `CLAUDE.md` 可随规则迁移，但当前 diff 中有一处终端显示为乱码，执行前需要复核文件实际 UTF-8 内容。

### C1 建议验证

```powershell
git diff --check -- .mcp.json AGENTS.md apps/backend/AGENTS.md apps/etl/connectors/feiqiu/AGENTS.md apps/demo-miniprogram/AGENTS.md db/AGENTS.md docs/codex_migration.md docs/cursor_migration.md
```

敏感扫描建议：

```powershell
git grep -n -I -E "postgresql://|postgres://|password|secret|token|api[_-]?key" -- .mcp.json tools/codex tools/cursor docs/codex_migration.md docs/cursor_migration.md
```

## 四、R1：RuntimeContext / 业务日期沙箱

### 建议包含

| 路径 | 状态 | 归属理由 |
|------|------|----------|
| `apps/backend/app/services/runtime_context.py` | 未跟踪 | 运行时上下文服务 |
| `apps/backend/app/routers/admin_runtime_context.py` | 未跟踪 | admin runtime context API |
| `apps/backend/app/schemas/runtime_context.py` | 未跟踪 | runtime context schema |
| `db/zqyy_app/migrations/20260501__runtime_context_sandbox.sql` | 未跟踪 | 沙箱上下文 schema 迁移 |

### R1 交叉文件

| 路径 | 交叉原因 | 建议 |
|------|----------|------|
| `apps/backend/app/main.py` | 同时包含 AI WebSocket、孤儿 run_logs 清理、dispatcher 注入、RuntimeContext router 挂载 | 暂列为 X 交叉文件；执行时按 hunk 或后续小提交拆开 |

### R1 建议验证

```powershell
cd apps/backend
pytest tests -k "runtime_context or business_day"
```

如果没有现成测试，应至少补充或执行：

- live 模式不改变当前日期口径。
- sandbox 模式返回配置的业务日期。
- admin router 能读取/更新上下文配置。
- migration 有回滚策略与验证 SQL。

## 五、C2：Claude AI / App2-App2a 业务改动

### 后端 AI 核心

| 路径 | 状态 | 归属理由 |
|------|------|----------|
| `apps/backend/app/ai/apps/__init__.py` | 删除 | 删除旧 8 app 死代码目录 |
| `apps/backend/app/ai/apps/app1_chat.py` | 删除 | 删除旧实现 |
| `apps/backend/app/ai/apps/app2_finance.py` | 删除 | 删除旧实现 |
| `apps/backend/app/ai/apps/app3_clue.py` | 删除 | 删除旧实现 |
| `apps/backend/app/ai/apps/app4_analysis.py` | 删除 | 删除旧实现 |
| `apps/backend/app/ai/apps/app5_tactics.py` | 删除 | 删除旧实现 |
| `apps/backend/app/ai/apps/app6_note.py` | 删除 | 删除旧实现 |
| `apps/backend/app/ai/apps/app7_customer.py` | 删除 | 删除旧实现 |
| `apps/backend/app/ai/apps/app8_consolidation.py` | 删除 | 删除旧实现 |
| `apps/backend/app/ai/cache_service.py` | 修改 | AI cache 类型、过期、读写策略 |
| `apps/backend/app/ai/dashscope_client.py` | 修改 | DashScope 调用与 tokens 提取 |
| `apps/backend/app/ai/dispatcher.py` | 修改 | AI 事件编排与 App2/App2a |
| `apps/backend/app/ai/run_log_service.py` | 修改 | AI run log |
| `apps/backend/app/ai/event_bus.py` | 未跟踪 | AI 事件广播 |
| `apps/backend/app/ai/references.py` | 未跟踪 | AI references 注入 |
| `apps/backend/app/ai/prompts/app2_finance_prompt.py` | 修改 | App2 财务 prompt |
| `apps/backend/app/ai/prompts/app2a_finance_area_prompt.py` | 修改 | App2a 区域 prompt |
| `apps/backend/app/ai/prompts/app8_consolidation_prompt.py` | 修改 | App8 合并 prompt |
| `apps/backend/app/ai/prompts/app3_clue_prompt.py` | 未跟踪 | App3 prompt |
| `apps/backend/app/ai/prompts/app4_analysis_prompt.py` | 未跟踪 | App4 prompt |
| `apps/backend/app/ai/prompts/app5_tactics_prompt.py` | 未跟踪 | App5 prompt |
| `apps/backend/app/ai/prompts/app6_note_prompt.py` | 未跟踪 | App6 prompt |
| `apps/backend/app/ai/prompts/app7_customer_prompt.py` | 未跟踪 | App7 prompt |

### 后端 API 与服务

| 路径 | 状态 | 归属理由 |
|------|------|----------|
| `apps/backend/app/routers/admin_task_engine.py` | 修改 | admin 任务引擎/AI 管理相关 |
| `apps/backend/app/routers/internal_events.py` | 修改 | internal event/AI 调用链 |
| `apps/backend/app/routers/xcx_chat.py` | 修改 | 小程序 AI chat |
| `apps/backend/app/schemas/admin_ai.py` | 修改 | admin AI schema |
| `apps/backend/app/services/ai/admin_service.py` | 修改 | admin AI 服务 |
| `apps/backend/app/services/board_service.py` | 修改 | 财务看板/区域读取 |
| `apps/backend/app/services/chat_service.py` | 修改 | APP1 chat |
| `apps/backend/app/services/note_service.py` | 修改 | note/APP6 相关 |
| `apps/backend/app/services/recall_detector.py` | 修改 | 召回检测/AI 链路 |
| `apps/backend/app/services/task_expiry.py` | 修改 | 任务过期 |
| `apps/backend/app/services/task_generator.py` | 修改 | 任务生成 |
| `apps/backend/app/services/task_manager.py` | 修改 | 任务管理 |
| `apps/backend/app/services/trigger_scheduler.py` | 修改 | 触发器调度 |
| `apps/backend/app/ws/ai_events.py` | 未跟踪 | AI WebSocket 告警 |
| `apps/backend/pytest.ini` | 修改 | 测试配置 |

### admin-web

| 路径 | 状态 | 归属理由 |
|------|------|----------|
| `apps/admin-web/src/App.tsx` | 修改 | AI 管理路由/菜单 |
| `apps/admin-web/src/api/adminAI.ts` | 修改 | admin AI API |
| `apps/admin-web/src/pages/AIDashboard.tsx` | 修改 | AI 总览 |
| `apps/admin-web/src/pages/AIOperations.tsx` | 修改 | AI 手动操作 |
| `apps/admin-web/src/pages/AIRunLogs.tsx` | 修改 | AI 运行日志 |
| `apps/admin-web/src/pages/TriggerManager.tsx` | 修改 | 触发器页面接入 |
| `apps/admin-web/src/pages/AITriggers.tsx` | 未跟踪 | AI 触发器管理 |
| `apps/admin-web/src/__tests__/adminAiAppTypes.test.ts` | 未跟踪 | admin AI app type 测试 |

### 小程序

| 路径 | 状态 | 归属理由 |
|------|------|----------|
| `apps/miniprogram/miniprogram/components/ai-float-button/ai-float-button.ts` | 修改 | AI 浮动按钮上下文 |
| `apps/miniprogram/miniprogram/pages/board-finance/board-finance.wxml` | 修改 | 财务看板 AI 洞察展示 |
| `apps/miniprogram/miniprogram/pages/board-finance/board-finance.wxss` | 修改 | 财务看板 AI 样式 |
| `apps/miniprogram/miniprogram/pages/chat/chat.ts` | 修改 | AI chat / SSE / 上下文 |
| `apps/miniprogram/miniprogram/pages/chat/chat.wxml` | 修改 | AI chat 展示 |
| `apps/miniprogram/miniprogram/pages/customer-detail/customer-detail.ts` | 修改 | 客户详情 AI 线索 |
| `apps/miniprogram/miniprogram/services/api.ts` | 修改 | 小程序 API 客户端 |

### DB / 文档 / 脚本

| 路径 | 状态 | 归属理由 |
|------|------|----------|
| `db/zqyy_app/migrations/20260420_ai_trigger_jobs_and_app2_prewarm.sql` | 未跟踪 | AI trigger jobs 与 App2 预热 |
| `db/zqyy_app/migrations/20260421_app2_prewarm_cron_reschedule.sql` | 未跟踪 | App2 cron 调整 |
| `docs/ai/` | 未跟踪目录 | AI 验收、prompt、版本历史 |
| `docs/database/BD_manual_ai_trigger_jobs_register.md` | 未跟踪 | AI trigger jobs 数据库文档 |
| `scripts/ab_test_app2_prompt.py` | 未跟踪 | App2 prompt 测试 |
| `scripts/analyze_ab_content_quality.py` | 未跟踪 | App2 prompt 分析 |
| `scripts/analyze_store_manager_quality.py` | 未跟踪 | App2 prompt 分析 |
| `scripts/dump_app2_prompt.py` | 未跟踪 | App2 prompt 导出 |
| `scripts/gen_app2_v6_md.py` | 未跟踪 | App2 prompt 文档生成 |
| `scripts/test_app2_new_system_prompt.py` | 未跟踪 | App2 prompt 测试 |

### C2 建议验证

```powershell
cd apps/backend
pytest tests

cd ..\admin-web
pnpm test
pnpm lint

cd ..\miniprogram
npm test
```

如果全量测试时间过长，应按后端 AI、admin-web、miniprogram 分批执行，并在最终提交前记录未覆盖风险。

## 六、L1：ETL 日志与 App2a 区域修复

| 路径 | 状态 | 归属理由 |
|------|------|----------|
| `apps/etl/connectors/feiqiu/tasks/dws/finance_area_daily.py` | 修改 | `20260501.log` 中 `DWS_FINANCE_AREA_DAILY` 区域未匹配问题，同时与 App2a 区域财务数据相关 |

建议独立验证后提交，避免和 C2 的 AI 业务大包混在一起。

建议验证：

```powershell
cd apps/etl/connectors/feiqiu
pytest tests -k "finance_area_daily"
```

如涉及真实 ETL 数据，还需使用测试库执行 dry-run 或指定日期回放，禁止直接连生产库。

## 七、C5：配置与部署文档

| 路径 | 状态 | 归属建议 | 风险 |
|------|------|----------|------|
| `.mcp.json` | 修改 | 纳入 C1 | 已移除明文 PostgreSQL DSN；仍含本机路径和工具路径 |
| `apps/etl/connectors/feiqiu/.env` | 修改 | 用户确认可纳入，但必须最终确认 | 包含真实 `API_TOKEN` 替换 |
| `docs/deployment/SERVER-ACCESS.md` | 未跟踪 | 可纳入文档批次 | 含服务器地址、SSH 用户、密钥路径、公网入口；无密码/私钥正文 |
| `docs/deployment/LAUNCH-CHECKLIST.md` | 修改 | 文档批次 | 仅新增指向 `SERVER-ACCESS.md` 的说明 |

### 配置审查结论

- `.mcp.json` 当前使用 `tools/codex/mcp-postgres.ps1` 读取 DSN，未在当前 diff 中新增明文 PostgreSQL URL。
- `apps/etl/connectors/feiqiu/.env` 当前 diff 是真实 JWT/API token 的替换；用户已确认可纳入对应批次，但此处仍标为高敏配置。
- `SERVER-ACCESS.md` 明确禁止写入私钥、密码、数据库密码、token、证书私钥；当前内容未发现私钥正文或密码正文。
- `SERVER-ACCESS.md` 仍包含内网 IP、SSH 用户和密钥文件路径，提交前建议用户再做一次人工确认。

建议敏感扫描：

```powershell
git diff -- .mcp.json apps/etl/connectors/feiqiu/.env docs/deployment/SERVER-ACCESS.md docs/deployment/LAUNCH-CHECKLIST.md
git grep -n -I -E "postgresql://|postgres://|BEGIN .*PRIVATE KEY|password=|api[_-]?key|secret" -- .mcp.json docs/deployment tools/codex tools/cursor
```

## 八、X：交叉文件

| 路径 | 当前差异 | 建议归属 |
|------|----------|----------|
| `apps/backend/app/main.py` | 包含 RuntimeContext router 挂载、AI WebSocket router、孤儿 run_logs 清理、dispatcher 注入 | 交叉文件；建议在 R1/C2 提交前拆 hunk 或单独提交为后端启动整合 |
| `docs/audit/audit_dashboard.md` | 自动生成，新增 2026-04-29、04-30、05-01 多条审计索引 | 交叉文件；建议等 C1/R1/C2/L1 审计归属确认后再统一提交 |
| `CLAUDE.md` | 新增 CLI/UTF-8 中文处理规则 | 可入 C1，但当前 diff 终端显示一处乱码，提交前需复核实际文件编码 |
| `docs/deployment/LAUNCH-CHECKLIST.md` | 新增 `SERVER-ACCESS.md` 引用 | 可入 C5 文档批次 |

## 九、C4：临时产物排除项

本轮不移动、不删除、不改 `.gitignore`，仅明确这些文件不进入提交批次：

| 路径 | 类型 |
|------|------|
| `tmp/LOG.txt` | 日志/临时记录 |
| `tmp/board-finance-debug.png` | 调试截图 |
| `tmp/churned_customer_report.html` | 临时报表 |
| `tmp/churned_customer_report.pdf` | 临时报表 |
| `tmp/excel_analysis_report.txt` | Excel 分析临时输出 |
| `tmp/revenue_report.md` | 临时报表 |
| `tmp/revenue_report.py` | 临时报表脚本 |
| `tmp/revenue_report.xlsx` | 临时报表 |
| `tmp/revenue_report_xlsx.py` | 临时报表脚本 |
| `tmp/sheet_structure.txt` | Excel 分析临时输出 |
| `tmp/hlm/` | 汇来米/交易筛选导出 |
| `tmp/web/` | 汇来米商户控台对账单导出 |
| `tmp/*.xlsx` | Excel 导出 |
| `tmp/分组与面积.txt` | 经营区域/面积分析源文件 |

## 十、建议执行顺序

### 步骤 1：提交前只读检查

```powershell
git status --short
git diff --check
git diff --name-status
```

### 步骤 2：优先处理 C1

建议先固化迁移/追溯资产，但需要排除交叉文件：

- 包含：`AGENTS.md`、各 `AGENTS.md`、`.cursor/`、`docs/ai-env-history/`、`docs/claude-history/`、`docs/codex_migration*.md`、`docs/cursor_migration.md`、`tools/codex/`、`tools/cursor/`、`.mcp.json`。
- 暂不包含：`docs/audit/audit_dashboard.md`。
- 是否包含 `CLAUDE.md`：建议先复核编码后纳入 C1。

### 步骤 3：处理 R1

- 先确认 `RuntimeContext` 文件能否独立通过后端测试。
- `apps/backend/app/main.py` 暂不直接纳入 R1，除非拆分 hunk 或确认整文件作为后端启动整合提交。

### 步骤 4：处理 C2

- 按后端、admin-web、小程序、DB/脚本分组验证。
- 不建议一次性提交全部 C2，建议拆成：
  1. 后端 AI 核心与 prompts。
  2. admin-web AI 管理页面。
  3. 小程序 AI 入口与财务看板展示。
  4. DB 迁移与 AI 文档。

### 步骤 5：处理 L1

- `finance_area_daily.py` 建议独立验证并提交。

### 步骤 6：处理 C5 / C4

- C5 配置与部署文档需最终确认。
- C4 `tmp/` 全部保持未提交、未清理。

## 十一、最终确认点

执行 stage/commit 前需要再次确认：

1. 是否先提交 C1，且暂不提交 `docs/audit/audit_dashboard.md`？
2. `CLAUDE.md` 编码复核通过后是否随 C1 提交？
3. `apps/etl/connectors/feiqiu/.env` 虽含真实 `API_TOKEN`，是否仍按用户确认纳入提交？
4. `apps/backend/app/main.py` 是拆 hunk，还是作为单独“后端启动整合”提交？
5. `docs/deployment/SERVER-ACCESS.md` 是否按当前明文地址/用户/密钥路径提交？
6. C2 是否按后端/admin-web/小程序/DB 文档继续拆分，而不是单一大提交？

## 十二、本轮未执行事项

- 未 stage。
- 未 commit。
- 未移动或删除 `tmp/`。
- 未修改 `.gitignore`。
- 未运行测试。
- 未执行生产迁移、回填或预热。

