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:
52
docs/audit/changes/2026-03-06__fix-api-client-post-method.md
Normal file
52
docs/audit/changes/2026-03-06__fix-api-client-post-method.md
Normal 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()`
|
||||
Reference in New Issue
Block a user