chore(audit): 补追 96 份未入仓审计孤本 — 覆盖 2026-02-26 ~ 2026-04-08

这些审计记录原本堆积在 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>
This commit is contained in:
Neo
2026-04-20 06:35:42 +08:00
parent 80bda9b991
commit 14a12342b5
96 changed files with 9521 additions and 0 deletions

View File

@@ -0,0 +1,102 @@
# 变更审计记录DWS_TASK_ENGINE ETL 编排替代 fire_event 事件链
| 字段 | 值 |
|------|-----|
| 日期 | 2026-03-29 05:47:50 |
| Prompt-ID | P20260329-054439 |
| Session-ID | be7f7482 |
| Session 路径 | docs/audit/session_logs/2026-03/29/10_4d217477_050959 |
## 操作摘要
将任务引擎的触发方式从"DWD 加载后 fire_event 事件通知"改为"ETL 显式编排任务"。新增 DWS_TASK_ENGINE ETL 任务,在 DWS 指数计算完成后按顺序 HTTP 调用后端执行 recall_completion_check → task_expiry_check → task_generator。同时回滚了之前的 fire_event("etl_data_updated") 方案,删除了 biz_trigger.py 工具和旧版 fire-event 端点,将 internal_events.py 替换为 run-job 端点。
## 风险评估
- ETL 新增编排任务:**低**(每步失败仅记录日志,不中断后续步骤,不影响 DWS 数据计算)
- 后端 run-job 端点:**低**Internal-Token 认证,独立路由,复用现有 trigger_scheduler.run_job_by_id
- fire_event 回滚:**低**task_expiry_check 的 interval 触发器保留DWS_TASK_ENGINE 是补充而非替代)
## 数据库变更
无。
## 本次对话文件变更
### 新增文件
- `apps/etl/connectors/feiqiu/tasks/dws/task_engine.py` — DWS_TASK_ENGINE ETL 任务实现
- `apps/backend/app/routers/internal_events.py` — POST /api/internal/run-job 端点(替换旧版 fire-event 端点)
- `apps/backend/app/auth/internal_token.py` — 通用 Internal-Token 认证依赖(上一轮已创建,本轮保留)
### 删除文件
- `apps/etl/connectors/feiqiu/utils/biz_trigger.py` — 不再需要的事件触发工具fire_event 方案产物)
### 修改文件
- `apps/backend/app/main.py` — 注册 internal_events 路由
- `apps/etl/connectors/feiqiu/orchestration/task_registry.py` — 注册 DWS_TASK_ENGINE 任务
- `apps/etl/connectors/feiqiu/tasks/dwd/dwd_load_task.py` — 回滚 fire_event 触发代码
- `.kiro/steering/frontend-backend-integration.md` — 更新事件驱动触发器规则
## 改动注解
### `apps/etl/connectors/feiqiu/tasks/dws/task_engine.py`
- 变更类型:新增
- 原始原因:之前的 fire_event 方案在 DWD 加载后触发事件,但事件链依赖 trigger_scheduler 的 event 匹配机制,耦合度高且调试困难。改为 ETL 显式编排,在 DWS 指数计算完成后按确定顺序执行后端任务
- 思路分析:继承 BaseTask非 BaseDwsTask因为不操作 DWS 表extract() 返回空load() 按 `_JOB_SEQUENCE` 顺序调用后端 `POST /api/internal/run-job`。每步独立执行,失败仅 warning 不中断后续步骤。环境变量 `BACKEND_API_URL` + `INTERNAL_API_TOKEN` 缺失时跳过整个任务。超时设置 (5s, 30s) 兼顾连接速度和任务执行时间
- 修改结果DWS 指数计算完成后自动执行完成检查→过期检查→任务生成全流程,替代之前分散的事件触发机制
### `apps/backend/app/routers/internal_events.py`
- 变更类型:新增(替换旧版)
- 原始原因:旧版 fire-event 端点按 event_name 触发,新版改为按 job_name 直接执行指定任务,语义更明确
- 思路分析:`POST /api/internal/run-job` 接收 `job_name`,查询 `biz.trigger_jobs` 表获取 job_id调用 `run_job_by_id()` 执行。Internal-Token 认证。job_name 不存在时返回 404
- 修改结果ETL 可按名称精确执行后端任务,不再依赖事件匹配机制
### `apps/backend/app/auth/internal_token.py`
- 变更类型:保留(上一轮创建)
- 原始原因:将 Internal-Token 认证从 AIConfig 解耦,使 /api/internal/* 端点可独立使用
- 思路分析:从 Authorization header 解析 `Internal-Token {token}` 格式,与 `INTERNAL_API_TOKEN` 环境变量比对。三层防御:格式→空值→匹配
- 修改结果:`verify_internal_token` 依赖函数供 internal_events 路由使用
### `apps/etl/connectors/feiqiu/utils/biz_trigger.py`
- 变更类型:删除
- 原始原因fire_event 方案被 DWS_TASK_ENGINE 替代biz_trigger.py 中的 `trigger_biz_event()` 函数不再需要
- 修改结果ETL 侧不再有独立的事件触发工具,任务引擎调用统一由 DWS_TASK_ENGINE 负责
### `apps/backend/app/main.py`
- 变更类型:修改
- 原始原因:注册新版 internal_events 路由
- 思路分析:在 import 列表添加 `internal_events`,在 `include_router` 调用中注册。CHANGE 注释记录变更历史
- 修改结果:`/api/internal/run-job` 端点可用
### `apps/etl/connectors/feiqiu/orchestration/task_registry.py`
- 变更类型:修改
- 原始原因:注册 DWS_TASK_ENGINE 任务到 ETL 任务注册表
- 思路分析:`layer="INDEX"``requires_db_config=False`(不操作数据库),`depends_on=["DWS_WINBACK_INDEX", "DWS_NEWCONV_INDEX", "DWS_RELATION_INDEX"]`(所有指数任务完成后执行)
- 修改结果DWS_TASK_ENGINE 在 ETL 编排中自动排在指数计算之后
### `apps/etl/connectors/feiqiu/tasks/dwd/dwd_load_task.py`
- 变更类型:修改
- 原始原因:回滚 fire_event 触发代码DWD 加载后不再需要事件通知
- 思路分析:移除 load() 末尾的 `trigger_biz_event("etl_data_updated")` 调用和相关 import
- 修改结果DWD 加载任务恢复为纯数据加载,不再有副作用
### `.kiro/steering/frontend-backend-integration.md`
- 变更类型:修改
- 原始原因:更新事件驱动触发器规则,反映新的编排方式
- 思路分析:新增 DWS_TASK_ENGINE 编排说明,明确 task_expiry_check interval 触发器保留
- 修改结果steering 规则与实际实现一致
## 回滚策略
1. 删除 `apps/etl/connectors/feiqiu/tasks/dws/task_engine.py`
2. 删除新版 `apps/backend/app/routers/internal_events.py`
3.`apps/etl/connectors/feiqiu/orchestration/task_registry.py` 移除 DWS_TASK_ENGINE 注册
4.`apps/backend/app/main.py` 移除 internal_events 路由注册
5. 如需恢复 fire_event 方案:恢复 biz_trigger.py + 旧版 internal_events.py + dwd_load_task.py 事件触发代码
## 合规检查
- ✅ 无新增迁移 SQL
- ✅ 无数据库变更
- ⚠️ 接口代码已变更(新增 /api/internal/run-jobOpenAPI spec 待同步
- ⚠️ DDL 基线状态待确认(本次无 DDL 变更)