cpx 退出时会把 subagents 中的 .jsonl 逐个压成 7z,包括尚未写入内容的有效空捕获。compressCaptureFile 能生成有效的空文件档案,readCaptureText 也能读取为空字符串,但两端的 decompressToPlain 在 7za 成功退出后仍把零字节 stdout 当成失败。
.jsonl
compressCaptureFile
readCaptureText
decompressToPlain
这造成两个真实失败:
appendClaudeLine → ensureWritableCapture → decompressToPlain
7z extract empty
uploadLakeSession → governStagedSession → decompressToPlain
最新 master 9ce8017ee71e4dd3ddaebc2f568f3ca041d0c837,Node 24.19.0 / Vitest 3.2.7 / macOS arm64,真实随包 7za(未 mock 编解码器)。
9ce8017ee71e4dd3ddaebc2f568f3ca041d0c837
appendClaudeLine
同一最终测试在未修改生产源码时:Cpx 新增 4 项回归中 1 失败、3 控制通过(空 gzip 与两个损坏档案);增强的 Insight 完整上传 IT 失败。修复后 writer-compression 全部 13 项通过,lake-schema 全部 7 项通过,包括真实本地 Git 数据湖上传、物化及 Prisma 再导入,主会话内容和徽标保持正确。
7za 退出状态为零时,零字节输出是合法空文件,应允许写回空明文;非零退出仍报错并保留原档案、不创建明文。两端受控压缩实现同步修复,不变更捕获格式、核心解析管线或依赖。
已检查全部 56 条 Issue / 41 条开放 PR,无同类空档案恢复/治理问题;已有压缩格式文档及超限问题不重复。
/assign @Ethan_Zou
问题背景
cpx 退出时会把 subagents 中的
.jsonl逐个压成 7z,包括尚未写入内容的有效空捕获。compressCaptureFile能生成有效的空文件档案,readCaptureText也能读取为空字符串,但两端的decompressToPlain在 7za 成功退出后仍把零字节 stdout 当成失败。这造成两个真实失败:
appendClaudeLine → ensureWritableCapture → decompressToPlain无法恢复有效的空捕获,报7z extract empty;同样的空 gzip 可以恢复。uploadLakeSession → governStagedSession → decompressToPlain阻断整个主会话上传,即使主捕获、meta 均有效。复现与验证
最新 master
9ce8017ee71e4dd3ddaebc2f568f3ca041d0c837,Node 24.19.0 / Vitest 3.2.7 / macOS arm64,真实随包 7za(未 mock 编解码器)。.jsonl,调用实际compressCaptureFile。readCaptureText返回空字符串,随后实际appendClaudeLine追加第一条记录失败。同一最终测试在未修改生产源码时:Cpx 新增 4 项回归中 1 失败、3 控制通过(空 gzip 与两个损坏档案);增强的 Insight 完整上传 IT 失败。修复后 writer-compression 全部 13 项通过,lake-schema 全部 7 项通过,包括真实本地 Git 数据湖上传、物化及 Prisma 再导入,主会话内容和徽标保持正确。
期望与建议
7za 退出状态为零时,零字节输出是合法空文件,应允许写回空明文;非零退出仍报错并保留原档案、不创建明文。两端受控压缩实现同步修复,不变更捕获格式、核心解析管线或依赖。
已检查全部 56 条 Issue / 41 条开放 PR,无同类空档案恢复/治理问题;已有压缩格式文档及超限问题不重复。