重构错误报告为 OSS 与数据库链路

移除 api-server 本地文件存储并改为内存 ZIP 单请求上传 OSS

管理员查询详情下载改读 SpacetimeDB 元数据与 OSS 对象

增加 OSS 内部读取删除能力与每日过期清理

同步更新错误报告技术方案、表目录和决策记录
This commit is contained in:
2026-09-01 18:05:56 +08:00
parent a6c8ad0cb6
commit 8b36b25f9d
7 changed files with 548 additions and 1086 deletions
@@ -7866,4 +7866,4 @@ CI 上 `background_agent_runtime_recovers_stale_running_before_pending_task` 在
- 2026-09-01 追加:`application.log` 不再写结构化错误事件;Rust `app_log!` 和 WebView console 都写入普通文本 raw log,结构化事件仅保留在当前进程内,提交时才生成 ZIP 内的 `events.jsonl`。
- 2026-09-01 review 收口:错误报告修复详情请求竞态、下载 anchor 生命周期、客户端采集脱敏/指纹降级与 4xx 噪声、用户级幂等隔离、`agc` 私有 OSS 前缀越权、日志读取链接检查、ZIP 同名日志和元数据/归档清理一致性;同步在 `review.txt` 标注仍需产品/运维决定的架构项。
- 2026-09-01 追加:api-server 按单实例部署,错误报告 store 保留进程内 Mutex 和同步本地文件 I/O,不引入跨进程锁;ZIP 仅在构建/上传阶段短暂驻留受 20 MiB 上限约束的内存 Vec,随后写入私有本地归档。管理员详情路由不属于 External OpenAPI;不存在返回 404,元数据/ZIP 损坏返回 500。
- 2026-09-01 追加:错误报告元数据由 `error-reports/index.json` 索引,管理员列表使用 `limit/offset` 并返回 `total/hasMore`;索引缺失时从现有元数据一次性重建。OSS key 固定为 `agc/error-reports/v1/{batchId}.zip`,不含日期;相同 submission 对已 `ready` 报告直接返回。归档缺少 `events.jsonl` 视为损坏,管理员更新不存在目标返回 404。
- 2026-09-01 追加:错误报告不落本地文件;请求内存构建 ZIP 后直接上传 OSS,成功后写入 SpacetimeDB `error_report` 元数据。OSS key 固定为 `agc/error-reports/v1/{batchId}.zip`,不含日期;同一用户 `userId + submissionId` 幂等。管理员查询 DB,详情/下载按 object key 读取 OSS;每日清理先删 OSS,再删 DB,失败留待下次重试。