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,52 @@
# 变更审计记录:修复 RecordingAPIClient 缺少 post 方法
| 字段 | 值 |
|------|-----|
| 日期 | 2026-03-06 08:37:26 |
| Prompt-ID | P20260306-083206 |
| Session-ID | f1836fa4 |
| Session 路径 | docs/audit/session_logs/2026-03/06/34_a8dca428_070120 |
| 风险等级 | 极低 |
| 影响范围 | ETL API 客户端层 |
## 操作摘要
修复 ETL 运行时错误:`RecordingAPIClient` 缺少 `post` 方法,导致 `ODS_GROUP_PACKAGE` 任务的详情拉取阶段(非预取模式)调用 `self.api.post()` 时抛出 `AttributeError`。在 `APIClient` 新增 `post()` 作为 `_post_json()` 的公共别名,在 `RecordingAPIClient` 新增 `post()` 委托给 `self.base.post()`
## 根因分析
- `UnifiedPipeline` 在非预取模式下调用 `self.api.post(endpoint, params)`unified_pipeline.py:262
- `APIClient` 只有 `get()`(实际是 POST JSON 的历史命名)和私有 `_post_json()`,没有公共 `post()` 方法
- `RecordingAPIClient` 作为代理只转发了 `iter_paginated` / `get_paginated`,未覆盖 `post`
- 新增的 `ODS_GROUP_PACKAGE` 详情拉取阶段首次触发了非预取模式的 `post()` 调用路径
## 触发场景
用户从 admin-web 启动 ETL 任务,任务开始时间 2026/3/6 07:32:40错误日志`'RecordingAPIClient' object has no attribute 'post'`
## 验证
- getDiagnostics 两个文件均无问题
- 166 个单元测试通过2 个 hypothesis deadline 超时与本次修改无关)
## 本次对话文件变更
### 新增文件
- `docs/audit/prompt_logs/prompt_log_20260306_083206.md`
- `docs/audit/session_logs/2026-03/06/34_a8dca428_070120/main_02_f1836fa4.md`
- `docs/audit/session_logs/2026-03/06/34_a8dca428_070120/sub_01_f1836fa4.md`
- `docs/audit/session_logs/2026-03/06/37_e5276b93_082544/main_06_dfa80d9e.md`
## 改动注解
### `apps/etl/connectors/feiqiu/api/client.py`
- 变更类型:修改
- 原始原因:`APIClient` 缺少公共 `post()` 方法,导致 `UnifiedPipeline` 在详情拉取模式下调用失败
- 思路分析:`get()` 方法实际执行 POST JSON 请求(历史命名),新增 `post()` 作为 `_post_json()` 的语义明确别名,与 `get()` 平行放置,不改变任何请求逻辑
- 修改结果:`APIClient` 公共接口补齐 `post()` 方法,所有通过 `APIClient` 或其代理发起的非分页 POST 请求均可正常工作
### `apps/etl/connectors/feiqiu/api/recording_client.py`
- 变更类型:修改
- 原始原因:`RecordingAPIClient` 作为 `APIClient` 的代理,未转发 `post()` 方法,导致详情拉取阶段 `AttributeError`
- 思路分析:与已有的 `iter_paginated` / `get_paginated` 代理模式一致,新增 `post()` 直接委托给 `self.base.post()`。详情请求不需要落盘(非分页数据),因此不做额外录制
- 修改结果:`RecordingAPIClient` 完整覆盖 `APIClient` 的公共接口,`UnifiedPipeline` 在在线拉取模式下可正常调用 `self.api.post()`