这些审计记录原本堆积在 docs/audit/changes/changes/ 嵌套误产物目录下(由开发机迁移
79d3c2e 前后的不明批量操作产生)。由于同期 .gitignore 屏蔽了 docs/audit/ 全目录,
它们从未入过 git 任何分支 history。删除即永久丢失。
按 docs/specs/audit-gap-recovery/tasks.md 阶段 1 执行,将全部 96 份 D 类孤本
(主目录无同名、git history 亦无记录)复制到 docs/audit/changes/ 主目录入仓。
涵盖主题: P1-P18 全栈集成 / 多模块累积变更 / ETL bug 修复 / 业务日切 /
召回与任务引擎改造 / 租户管理与审批 / 董事会财务 / 客户与助教详情 /
DDL 基线合并 / Kiro 到 Claude Code 迁移
阶段 2(B 类内容漂移 1 份)和阶段 4(嵌套目录删除)独立推进。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
157 lines
9.3 KiB
Markdown
157 lines
9.3 KiB
Markdown
# 变更审计记录:全栈累积变更(营业日配置、WebSocket 日志、微信认证、仓库清理)
|
||
|
||
| 字段 | 值 |
|
||
|------|-----|
|
||
| 日期 | 2026-03-05 00:04:01 |
|
||
| Prompt-ID | P20260304-232912 |
|
||
| Session-ID | 0b65aa43 |
|
||
| Session 路径 | docs/audit/session_logs/2026-03/04/52_0b65aa43_232320 |
|
||
| 风险标签 | `root-file` `dir:admin-web` `dir:backend` `dir:etl` `dir:miniprogram` `dir:db` `db-schema-change` `dir:shared` |
|
||
| 变更规模 | 273 文件,+10,505 / -219,431 行 |
|
||
|
||
## 操作摘要
|
||
|
||
本次审计覆盖多轮对话的累积变更,核心工作包括:
|
||
|
||
1. **管理后台(admin-web)**:新增营业日配置全局状态(Zustand store + API + BusinessDayHint 提示组件);TaskManager 历史标签页增加 WebSocket 实时日志推送和任务终止按钮
|
||
2. **后端(backend)**:配置化 ETL Python 路径、运维面板根目录、微信小程序凭证、营业日分割点;新增/重构 xcx_auth 认证路由和 schemas
|
||
3. **ETL(feiqiu)**:config 模块新增 BUSINESS_DAY_START_HOUR 支持;consistency_checker 大幅重构;flow_runner 调整
|
||
4. **共享包(shared)**:新增 `datetime_utils` 模块(营业日计算工具)
|
||
5. **数据库(db)**:FDW 反向映射更新;DDL 基线同步更新(dwd/dws/ods/auth/public 多 schema)
|
||
6. **仓库清理**:删除 `tmp/api_samples/`(~200K 行)、废弃 `field_mappings_new/`、旧运维脚本、旧 `.kiro/` hooks 和 specs
|
||
|
||
## 本次对话文件变更
|
||
|
||
### 新增文件
|
||
- `docs/audit/prompt_logs/prompt_log_20260304_232912.md` — Prompt 审计日志
|
||
- `docs/audit/session_logs/2026-03/04/52_0b65aa43_232320/main_01_389bf343.md` — Session 日志(主)
|
||
- `docs/audit/session_logs/2026-03/04/52_0b65aa43_232320/sub_01_389bf343.md` — Session 日志(子代理)
|
||
- `docs/audit/session_logs/2026-03/04/53_34248647_232911/main_01_a6834276.md` — Session 日志
|
||
|
||
### 修改文件
|
||
- `docs/DOCUMENTATION-MAP.md` — 文档地图更新
|
||
- `docs/audit/README.md` — 审计说明更新
|
||
- `docs/audit/SESSION-LOG-GUIDE.md` — Session 日志指南更新
|
||
- `docs/audit/session_logs/_session_index.json` — 会话索引更新
|
||
- 多个 `_day_index.json` / `_day_index_full.json` — 日索引批量更新
|
||
|
||
|
||
## 改动注解
|
||
|
||
### `apps/admin-web/src/App.tsx`
|
||
- 变更类型:修改
|
||
- 原始原因:管理后台启动时需加载营业日配置,供全局日期组件使用
|
||
- 思路分析:在 App 组件 useEffect 中调用 `useBusinessDayStore.init()`,与 hydrate 同步执行。降级策略封装在 store 内部,App 层无需处理异常
|
||
- 修改结果:应用启动时自动请求 `/api/config/business-day`,失败时降级为默认值 8
|
||
|
||
### `apps/admin-web/src/api/businessDay.ts`
|
||
- 变更类型:新增
|
||
- 原始原因:前端需要从后端获取营业日分割点配置
|
||
- 思路分析:封装单一 GET 请求,返回 `BusinessDayConfig` 接口(含 `business_day_start_hour` 字段),复用 `apiClient` 实例
|
||
- 修改结果:提供 `fetchBusinessDayConfig()` API 函数
|
||
|
||
### `apps/admin-web/src/components/BusinessDayHint.tsx`
|
||
- 变更类型:新增
|
||
- 原始原因:用户在日期选择器旁需要了解当前营业日口径(分割点时间)
|
||
- 思路分析:使用 Tooltip + Typography.Text 组合,从 businessDayStore 读取 startHour,格式化为 `HH:00` 显示
|
||
- 修改结果:在 TaskConfig 日期选择区域下方显示「营业日:08:00 起」提示
|
||
|
||
### `apps/admin-web/src/pages/TaskConfig.tsx`
|
||
- 变更类型:修改
|
||
- 原始原因:日期范围选择区域需要展示营业日口径提示
|
||
- 思路分析:在日期选择 Row 下方插入 BusinessDayHint 组件,用 Fragment 包裹避免多余 DOM 节点
|
||
- 修改结果:日期选择器下方显示营业日分割点提示
|
||
|
||
### `apps/admin-web/src/pages/TaskManager.tsx`
|
||
- 变更类型:修改
|
||
- 原始原因:历史任务查看需要实时日志推送(running 状态)和任务终止能力
|
||
- 思路分析:为 HistoryTab 新增 WebSocket 连接管理(`historyWsRef`),running 任务点击时建立 `ws://host/ws/logs/{id}` 连接实时推送日志,已完成任务仍走 REST API。新增终止按钮(Popconfirm 确认)调用 `cancelExecution`。Drawer 标题显示连接状态标签。WebSocket 失败时自动回退到 REST API
|
||
- 修改结果:HistoryTab 支持实时日志流、连接状态指示、任务终止操作
|
||
|
||
### `apps/admin-web/src/store/businessDayStore.ts`
|
||
- 变更类型:新增
|
||
- 原始原因:营业日分割点配置需要全局共享,多个页面组件依赖
|
||
- 思路分析:Zustand store,启动时请求一次后端配置,API 不可用时降级为默认值 8 并 console.warn。`loaded` 标志防止重复请求
|
||
- 修改结果:提供 `useBusinessDayStore`,含 `startHour`、`loaded`、`init()` 三个成员
|
||
|
||
### `apps/backend/app/config.py`
|
||
- 变更类型:修改
|
||
- 原始原因:多个硬编码配置需要环境变量化(ETL Python 路径、运维面板根目录、微信凭证、营业日分割点)
|
||
- 思路分析:统一使用 `os.environ.get()` 读取,提供合理默认值。`WX_DEV_MODE` 支持 true/1/yes 三种写法。`BUSINESS_DAY_START_HOUR` 转 int
|
||
- 修改结果:新增 `ETL_PYTHON_EXECUTABLE`、`OPS_SERVER_BASE`、`WX_APPID`、`WX_SECRET`、`WX_DEV_MODE`、`BUSINESS_DAY_START_HOUR` 六个配置项
|
||
|
||
### `apps/backend/app/main.py`
|
||
- 变更类型:修改
|
||
- 原始原因:新增路由模块需要注册到 FastAPI 应用
|
||
- 思路分析:按模块分组 import 并 include_router,保持路由注册的清晰分层
|
||
- 修改结果:注册 business_day、xcx_auth 等新路由
|
||
|
||
### `apps/backend/app/routers/xcx_auth.py`
|
||
- 变更类型:修改(大幅重构,+352/-352)
|
||
- 原始原因:微信小程序认证流程需要完善,支持 code2Session、token 签发、用户注册等完整链路
|
||
- 思路分析:重构为完整的微信认证路由,包含 login、register、refresh 等端点
|
||
- 修改结果:完整的微信小程序认证 API
|
||
|
||
### `apps/backend/app/schemas/xcx_auth.py`
|
||
- 变更类型:新增
|
||
- 原始原因:xcx_auth 路由需要请求/响应 Schema 定义
|
||
- 思路分析:Pydantic v2 模型,定义 login request/response、register request、token refresh 等数据结构
|
||
- 修改结果:提供微信认证相关的全部 Schema
|
||
|
||
### `apps/etl/connectors/feiqiu/config/settings.py`
|
||
- 变更类型:修改
|
||
- 原始原因:ETL 配置需要支持营业日分割点参数
|
||
- 思路分析:在 AppConfig 中新增 BUSINESS_DAY_START_HOUR 字段,从环境变量读取
|
||
- 修改结果:ETL 配置类支持营业日分割点
|
||
|
||
### `apps/etl/connectors/feiqiu/orchestration/flow_runner.py`
|
||
- 变更类型:修改
|
||
- 原始原因:流程编排器需要适配新的配置和执行逻辑
|
||
- 思路分析:调整 flow_runner 的参数传递和执行流程
|
||
- 修改结果:flow_runner 适配新配置
|
||
|
||
### `apps/etl/connectors/feiqiu/quality/consistency_checker.py`
|
||
- 变更类型:修改(+136/-136,大幅重构)
|
||
- 原始原因:一致性检查器需要更精确的比对逻辑和更清晰的报告输出
|
||
- 思路分析:重构检查逻辑,改进 API↔ODS、ODS↔DWD 的字段比对算法
|
||
- 修改结果:一致性检查器输出更准确、报告更结构化
|
||
|
||
### `packages/shared/src/neozqyy_shared/datetime_utils.py`
|
||
- 变更类型:新增
|
||
- 原始原因:营业日计算逻辑需要跨模块共享(ETL 和后端都需要)
|
||
- 思路分析:放入 shared 包,提供营业日边界计算、日期转换等工具函数
|
||
- 修改结果:新增 92 行的 datetime_utils 模块,供 ETL 和后端共同使用
|
||
|
||
### `db/fdw/setup_fdw_reverse.sql` / `db/fdw/setup_fdw_reverse_test.sql`
|
||
- 变更类型:修改
|
||
- 原始原因:FDW 反向映射需要同步最新的表结构变更
|
||
- 思路分析:更新 IMPORT FOREIGN SCHEMA 和 CREATE FOREIGN TABLE 语句
|
||
- 修改结果:FDW 映射与当前数据库结构一致
|
||
|
||
### 非高风险文件简要注解
|
||
- `.env` / `.env.template` / `.gitignore`:新增微信凭证、营业日配置、ETL Python 路径等环境变量
|
||
- `apps/admin-web/README.md` / `apps/backend/README.md` / `apps/miniprogram/README.md` / `packages/shared/README.md`:文档同步更新
|
||
- `apps/backend/docs/API-REFERENCE.md`:接口文档更新
|
||
- `apps/etl/connectors/feiqiu/docs/etl_tasks/*.md`:ETL 任务文档更新
|
||
- `docs/database/ddl/*.sql`:DDL 基线同步
|
||
- `docs/contracts/openapi/backend-api.json`:OpenAPI spec 更新(+5096 行)
|
||
- `docs/DOCUMENTATION-MAP.md`:文档地图更新
|
||
- 大量 `tmp/api_samples/` 和 `field_mappings_new/` 文件删除:仓库清理
|
||
|
||
## 合规检查
|
||
|
||
| 检查项 | 状态 | 说明 |
|
||
|--------|------|------|
|
||
| 文档同步 | ✅ 已同步 | `code_without_docs` 为空,各模块 README 已更新 |
|
||
| 新增迁移 SQL | ⚪ 不涉及 | `new_migration_sql` 为空 |
|
||
| DDL 基线 | ⚠️ 待确认 | `has_ddl_baseline: false`,DDL 基线文件已有变更但标记未更新 |
|
||
| OpenAPI Spec | ✅ 已同步 | `api_changed: false`,`openapi_spec_stale: false` |
|
||
| BD 手册 | ⚠️ 待补充 | `has_bd_manual: false`,reasons 含 `db-schema-change` 但 BD 手册未同步 |
|
||
|
||
## 回滚方案
|
||
|
||
- 营业日功能:删除 businessDayStore、BusinessDayHint、businessDay API,移除 config.py 中 BUSINESS_DAY_START_HOUR,移除 shared/datetime_utils.py
|
||
- WebSocket 日志:回退 TaskManager.tsx 到 REST-only 版本
|
||
- 微信认证:回退 xcx_auth.py 和对应 schemas
|
||
- 仓库清理:已删除文件为历史样本数据和废弃脚本,无需回滚
|