Files
Neo-ZQYY/docs/audit/changes/2026-03-22__dev-trace-log-fullstack-feature.md
Neo 14a12342b5 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>
2026-04-20 06:35:42 +08:00

199 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 变更审计记录dev-trace-log 全栈开发调试全链路日志系统
| 字段 | 值 |
|------|-----|
| 日期 | 2026-03-22 21:03:24 |
| Prompt-ID | P20260322-205347 |
| Session-ID | 93568fb4 |
| Session 路径 | docs/audit/session_logs/2026-03/22/66_5460a155_203419 |
## 操作摘要
执行 `.kiro/specs/dev-trace-log/` 全部 25 个任务实现开发调试全链路日志系统dev-trace-log。这是一个全栈 feature覆盖
- 后端 trace 采集层HTTP 请求ASGI 中间件、SSE 流式响应、WebSocket 连接、后台 Job 执行
- JSON Lines 日志写入器(按日期/小时分文件10MB 轮转,自动清理)
- 8 个 admin API 端点(含覆盖率扫描、运行时开关)
- admin-web 前端 DevTrace 页面覆盖率条、过滤器、请求表格、Span 树、设置抽屉)
- 40 个属性测试全部通过19.69s
风险评估低。trace 模块通过 `DEV_TRACE_ENABLED` 开关控制,关闭时零开销。所有采集逻辑 try/except 包裹,不影响正常请求处理。无 DB schema 变更。
## 本次对话文件变更
### 新增文件Session 日志 + Prompt 日志)
- `docs/audit/prompt_logs/prompt_log_20260322_205347.md`
- `docs/audit/session_logs/2026-03/22/66_5460a155_203419/main_01_93568fb4.md`
- `docs/audit/session_logs/2026-03/22/66_5460a155_203419/sub_01_93568fb4.md`
- `docs/audit/session_logs/2026-03/22/66_5460a155_203419/sub_02_93568fb4.md`
- `docs/audit/session_logs/2026-03/22/67_f11b5687_205015/main_01_761a13a1.md`
- `docs/audit/session_logs/2026-03/22/67_f11b5687_205015/sub_01_93568fb4.md`
- `docs/audit/session_logs/2026-03/22/68_a233cc02_205218/main_01_c0515e2b.md`
## 改动注解
### 后端 trace 模块(新建)
#### `apps/backend/app/trace/__init__.py`
- 变更类型:新增
- 原始原因dev-trace-log spec Task 1建立 trace 模块入口
- 思路分析:模块入口文件,导出核心组件供外部使用
- 修改结果trace 模块可通过 `from app.trace import ...` 引用
#### `apps/backend/app/trace/config.py`
- 变更类型:新增
- 原始原因Task 1集中管理 trace 配置(环境变量 + 运行时开关)
- 思路分析TraceConfig 数据类,从环境变量读取 `DEV_TRACE_ENABLED``DEV_TRACE_LOG_DIR``DEV_TRACE_RETENTION_DAYS` 等,支持运行时动态开关
- 修改结果:所有 trace 组件统一从 TraceConfig 读取配置,关闭时零开销
#### `apps/backend/app/trace/context.py`
- 变更类型:新增
- 原始原因Task 2定义 TraceContext 和 TraceSpan 数据模型
- 思路分析:使用 Python contextvars 实现请求级隔离TraceContext 持有 trace_id + span 列表TraceSpan 记录单个操作的耗时和元数据
- 修改结果:所有采集点通过 contextvars 自动关联到当前请求的 trace
#### `apps/backend/app/trace/writer.py`
- 变更类型:新增
- 原始原因Task 3JSON Lines 日志写入器
- 思路分析:按日期/小时分文件写入,单文件 10MB 轮转,异步写入不阻塞请求。提供 `_sync_write()` 供同步上下文WS/Job wrapper调用
- 修改结果trace 数据持久化到 `DEV_TRACE_LOG_DIR` 目录
#### `apps/backend/app/trace/cleanup.py`
- 变更类型:新增
- 原始原因Task 4日志自动清理
- 思路分析:按 `DEV_TRACE_RETENTION_DAYS` 配置删除过期日志文件
- 修改结果:防止日志无限增长占满磁盘
#### `apps/backend/app/trace/middleware.py`
- 变更类型:新增
- 原始原因Task 6ASGI 中间件拦截 HTTP 请求
- 思路分析TraceMiddleware 拦截 `xcx_*` 路由的请求,创建 TraceContext记录请求/响应元数据,请求结束时写入 trace
- 修改结果:所有小程序 API 请求自动被 trace 采集
#### `apps/backend/app/trace/decorators.py`
- 变更类型:新增
- 原始原因Task 7`@trace_service` 装饰器
- 思路分析:装饰器自动为 service 函数创建 span记录入参摘要、返回值类型、异常信息
- 修改结果service 层函数加一行装饰器即可接入 trace
#### `apps/backend/app/trace/db_wrapper.py`
- 变更类型:新增
- 原始原因Task 8数据库连接生命周期追踪
- 思路分析:包装数据库连接获取/释放,记录连接耗时和 SQL 执行信息
- 修改结果:数据库操作在 trace 中可见
#### `apps/backend/app/trace/error_handler.py`
- 变更类型:新增
- 原始原因Task 9异常/错误全链路追踪
- 思路分析:捕获未处理异常,在当前 trace 中记录错误堆栈和上下文
- 修改结果:错误信息自动关联到触发请求的 trace
#### `apps/backend/app/trace/sse_wrapper.py`
- 变更类型:新增
- 原始原因Task 12SSE 流式响应追踪
- 思路分析:包装 SSE 事件生成器,记录每个事件的发送时间和数据摘要
- 修改结果AI 聊天等 SSE 接口的流式响应过程可追踪
#### `apps/backend/app/trace/ws_wrapper.py`
- 变更类型:新增
- 原始原因Task 13WebSocket 连接追踪
- 思路分析:包装 WS 连接的 accept/send/receive/close使用 `_sync_write()` 避免异步上下文问题
- 修改结果WebSocket 日志推送连接的生命周期可追踪
#### `apps/backend/app/trace/job_wrapper.py`
- 变更类型:新增
- 原始原因Task 14后台 Job 执行追踪
- 思路分析:包装后台任务执行函数,记录 job 名称、耗时、成功/失败状态。同样使用 `_sync_write()` 处理同步上下文
- 修改结果:后台定时任务和一次性 job 的执行过程可追踪
#### `apps/backend/app/trace/coverage.py`
- 变更类型:新增
- 原始原因Task 16.2,覆盖率扫描器
- 思路分析grep 方式扫描代码库,统计已接入 trace 的路由/service/WS 端点占比
- 修改结果admin API 可查询当前 trace 覆盖率
### 后端 API新建
#### `apps/backend/app/routers/admin_dev_trace.py`
- 变更类型:新增
- 原始原因Task 16.1admin API 端点
- 思路分析8 个端点:查询 trace 列表、trace 详情、覆盖率、运行时开关、清理日志等。所有端点需 admin 鉴权
- 修改结果:管理后台可通过 API 查看和管理 trace 数据
### 前端(新建)
#### `apps/admin-web/src/types/devTrace.ts`
- 变更类型:新增
- 原始原因Task 18.2TypeScript 类型定义
- 思路分析:定义 TraceRecord、TraceSpan、CoverageReport 等接口类型,与后端 API 响应对齐
- 修改结果:前端类型安全
#### `apps/admin-web/src/api/devTrace.ts`
- 变更类型:新增
- 原始原因Task 18.1API 调用层
- 思路分析8 个 API 函数对应 8 个后端端点,使用 apiClient 统一处理鉴权和错误
- 修改结果:前端页面可调用 trace API
#### `apps/admin-web/src/pages/DevTrace.tsx`
- 变更类型:新增
- 原始原因Task 19-20DevTrace 页面 + 设置抽屉
- 思路分析:完整页面包含覆盖率进度条、时间/路由/状态过滤器、请求列表表格、Span 树展开、SettingsDrawer 运行时配置面板
- 修改结果:管理后台新增 DevTrace 功能页面
### 测试文件(新建)
#### `tests/test_trace_*.py`10 个文件)
- 变更类型:新增
- 原始原因Task 5/11/15 各阶段 checkpoint 要求的属性测试
- 思路分析:使用 hypothesis 框架,覆盖 TraceContext 创建/嵌套、Writer 写入/轮转、Cleanup 过期删除、Middleware 路由匹配、Decorator 异常处理、DB/SSE/WS/Job wrapper 等 40 个属性
- 修改结果40/40 属性测试通过,验证 trace 模块核心逻辑正确性
### 已有文件修改(简要注解)
- `apps/backend/app/main.py` — 注册 TraceMiddleware、job trace wrappers、admin_dev_trace router
- `apps/backend/app/database.py` — 集成 trace db_wrapper
- `apps/backend/app/auth/dependencies.py` — 添加 AUTH span 记录
- `apps/backend/app/middleware/response_wrapper.py` — 集成 error_handler 调用
- `apps/backend/app/routers/xcx_chat.py` — SSE trace 集成
- `apps/backend/app/routers/xcx_auth.py` — 添加 @trace_service
- `apps/backend/app/routers/xcx_tasks.py` — 添加 @trace_service
- `apps/backend/app/routers/xcx_notes.py` — 添加 @trace_service
- `apps/backend/app/routers/xcx_performance.py` — 添加 @trace_service
- `apps/backend/app/routers/xcx_ai_cache.py` — 添加 @trace_service
- `apps/backend/app/routers/xcx_customers.py` — 添加 @trace_service
- `apps/backend/app/routers/xcx_coaches.py` — 添加 @trace_service
- `apps/backend/app/routers/xcx_board.py` — 添加 @trace_service
- `apps/backend/app/routers/xcx_config.py` — 添加 @trace_service
- `apps/backend/app/services/task_manager.py` — 添加 @trace_service
- `apps/backend/app/services/note_service.py` — 添加 @trace_service
- `apps/backend/app/services/performance_service.py` — 添加 @trace_service
- `apps/backend/app/services/coach_service.py` — 添加 @trace_service
- `apps/backend/app/services/customer_service.py` — 添加 @trace_service
- `apps/backend/app/services/board_service.py` — 添加 @trace_service
- `apps/backend/app/services/chat_service.py` — 添加 @trace_service
- `apps/backend/app/ws/logs.py` — WS trace 集成
- `apps/admin-web/src/App.tsx` — DevTrace 路由 + 菜单项
- `.env` — 添加 trace 环境变量DEV_TRACE_ENABLED 等)
- `.env.template` — 添加 trace 环境变量模板
- `apps/backend/docs/API-REFERENCE.md` — admin_dev_trace 路由文档
- `apps/backend/README.md` — trace 模块说明
- `docs/architecture/backend-architecture.md` — trace 模块架构
- `docs/DOCUMENTATION-MAP.md` — 新增 trace 相关条目
- `docs/deployment/EXPORT-PATHS.md` — DEV_TRACE_LOG_DIR
## 合规检查
| 检查项 | 状态 |
|--------|------|
| 文档同步 | ✅ 无缺失code_without_docs 为空) |
| 新增迁移 SQL | ✅ 无(纯应用层,无 DB 变更) |
| DDL 基线 | ⚠️ has_ddl_baseline=false但本次无新增迁移不影响 |
| OpenAPI spec | ✅ 无需同步api_changed=false |
| BD 手册 | ✅ 无需更新(无 DB schema 变更) |
## 验证结果
- 40 个属性测试全部通过19.69s
- 无 DB 变更
- 无安全风险admin 鉴权保护所有 trace API
- trace 模块通过开关控制,关闭时零开销