已开启
[Bug-Report|缺陷反馈]: 有效空 7z 捕获无法恢复追加并阻断会话上传 #57
tianjun创建于  10 天前
tianjun
10 天前 创建

问题背景

cpx 退出时会把 subagents 中的 .jsonl 逐个压成 7z,包括尚未写入内容的有效空捕获。compressCaptureFile 能生成有效的空文件档案,readCaptureText 也能读取为空字符串,但两端的 decompressToPlain 在 7za 成功退出后仍把零字节 stdout 当成失败。

这造成两个真实失败:

  • writer 的 appendClaudeLine → ensureWritableCapture → decompressToPlain 无法恢复有效的空捕获,报 7z extract empty;同样的空 gzip 可以恢复。
  • Insight 上传含空子捕获的会话,uploadLakeSession → governStagedSession → decompressToPlain 阻断整个主会话上传,即使主捕获、meta 均有效。

复现与验证

最新 master 9ce8017ee71e4dd3ddaebc2f568f3ca041d0c837,Node 24.19.0 / Vitest 3.2.7 / macOS arm64,真实随包 7za(未 mock 编解码器)。

  1. 创建零字节 .jsonl,调用实际 compressCaptureFile。
  2. 实际 readCaptureText 返回空字符串,随后实际 appendClaudeLine 追加第一条记录失败。
  3. 使用仓库既有 lake-schema 上传/物化/再导入 IT,为实际主会话增加真实压缩的空子捕获,上传阶段同样失败。

同一最终测试在未修改生产源码时:Cpx 新增 4 项回归中 1 失败、3 控制通过(空 gzip 与两个损坏档案);增强的 Insight 完整上传 IT 失败。修复后 writer-compression 全部 13 项通过,lake-schema 全部 7 项通过,包括真实本地 Git 数据湖上传、物化及 Prisma 再导入,主会话内容和徽标保持正确。

期望与建议

7za 退出状态为零时,零字节输出是合法空文件,应允许写回空明文;非零退出仍报错并保留原档案、不创建明文。两端受控压缩实现同步修复,不变更捕获格式、核心解析管线或依赖。

已检查全部 56 条 Issue / 41 条开放 PR,无同类空档案恢复/治理问题;已有压缩格式文档及超限问题不重复。

likedislike
Ttianjun
10 天前 添加了label:bug-report
tianjun
10 天前 评论:

/assign @Ethan_Zou

likedislike
CANN-robotCANN-robot成员
10 天前 将 Ethan_Zou 设为负责人
Ttianjun
10 天前 关联了pull request:fix(compression): restore valid empty capture archives