Files
Genarrative/review.txt
T
k88936 9c8c105585 同步错误报告分页与存储决策文档
记录 UUID OSS key、元数据索引和分页响应约定

从 review.txt 移除已完成的 2、4、5、6、9 项
2026-09-01 16:29:02 +08:00

43 lines
3.0 KiB
Plaintext
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.
# 待决 Breaking Change 评审项
以下问题没有在本轮实现,因为它们会改变公开接口、持久化/归档语义、资源保护策略或运行时并发模型。请你逐项决定是否进入后续变更;本轮已完成的 minor 修复已从此文件移除。
## 1. 错误报告提交缺少限流与配额(高风险)
位置:`server-rs/crates/api-server/src/error_reports.rs` 的 `POST /api/error-reports`。
当前仅限制单次请求体(24 MiB),没有按用户限流、存储配额或全局容量上限。单个账号可以持续触发 ZIP/SHA-256/OSS 写入并使本地磁盘和对象存储增长。需要确定:按用户还是按 IP 限流、窗口与返回状态(通常 429)、配额维度、超额时是否拒绝或清理旧报告,以及生产配置和监控指标。
## 3. 并发文件 I/O 与归档解析迁移到 `spawn_blocking`(中风险)
位置:`server-rs/crates/api-server/src/error_reports.rs`。
create/list/get/read_archive/mark_* 在 async handler 中持有 Tokio mutex 并执行同步文件 I/O、ZIP 解析和权限操作,会阻塞 worker 且串行化请求。迁移需要重新划分锁的临界区、处理取消语义和错误映射,并验证并发下幂等与清理行为。
## 7. 日志脱敏从整段替换改为局部掩码(中风险)
位置:`sanitize_report_text_with_limit`。
当前日志中出现 `bearer `、`token=` 等 marker 时可能把整段(最多 2 MiB)替换成 `[REDACTED]`,诊断信息损失较大。改为按值或按行掩码需要定义凭据语法、边界、误报策略和兼容测试,且必须与客户端脱敏规则保持一致。
## 8. Tauri 日志写入改为异步/批量(中风险)
位置:`append_application_log`、`read_diagnostic_logs` 和 WebView console bridge。
当前每次 console 调用都同步打开/追加/flush 文件,读取命令也在主线程执行。迁移到 `spawn_blocking` 或队列批量写入会改变调用时序、失败可见性、退出时刷盘和测试方式,需要确定丢日志容忍度、队列上限、关闭 flush 和 Tauri command 返回语义。
## 10. 诊断日志读取的安全打开实现(中风险)
位置:`apps/ai-game-creator-shell/src-tauri/src/main.rs::read_diagnostic_logs`。
当前先 `symlink_metadata` 再按路径读取,存在 TOCTOU;安全修复应复用 `open_secure_diagnostic_log` 的 O_NOFOLLOW/普通文件校验并从同一 handle 读取。需要补充跨平台实现和 symlink/hardlink 测试,确认缺失文件是否创建以及权限失败的处理。
## 决策后实施要求
确认要做的项目后,请按项目拆分提交,并同步:
- 相关 `shared-contracts`/HTTP 或 Tauri 契约、实现和契约测试;
- `docs/technical/【技术方案】AGC错误报告与诊断上传-2026-08-31.md` 及必要的共享记忆;
- 定向前端/Rust 测试、`npm run check:encoding`、`git diff --check`
- 若修改公开 API,更新对应 OpenAPI(本轮项目均不属于 `/api/external/v1`)。