已开启
5.2.x 会话存储迁移后部分旧会话从 TUI 消失(无 .index,daemon 报 Corrupt) #1619
ruinedangel创建于  1 天前
ruinedangel
ruinedangel
1 天前 创建

现象

从 5.2.0 升级到 5.2.1 后,/resume / TUI 会话列表里过去的对话"基本都没了"。实际检查 ~/.atomcode/sessions/ 后发现:

  • 数据文件大多还在:旧格式文件被自动迁移改名归档为 *.jsonl.migrated / *.snapshot.migrated / *.meta.migrated(本例共 41 个),其中包含完整对话(如 1.2MB / 583 条消息的 snapshot.migrated)。
  • 但部分会话迁移后没有生成新格式的 .index 文件,于是从会话目录(catalog)彻底消失,TUI 里看不见、/resume 也恢复不了。原始 jsonl 内容还在 .migrated 归档里,属于可恢复但用户无法自助恢复的状态。
  • daemon 日志在升级后多次报 Corrupt 跳过条目。

环境

  • 版本:atomcode 5.2.1(atomcode --version → atomcode 5.2.1 (unknown)),此前为 5.2.0
  • 平台:Linux(x86_64),安装于 ~/.local/bin/atomcode
  • 受影响会话分布(按 sessions/<project_hash>/):
project_hash 项目 迁移后会话数 状态
22c264420ff030d9 /home/ark 58 个旧会话 仅 2 个有 .index(其中 1 个是升级后新建会话);26 消息会话 9b268e36 和 41 消息会话 74e78a36 全部停留在旧格式、无 .index,catalog 中不可见
230edac80c2c0b0f /home/ark/test/fp_agent 6 个 89c2ed8c(583 消息)迁移成功;其余 5 个 .index 的 message_count 全为 0(对应 snapshot 均为 80 字节空壳,见下)
2cfe8ee2a5cb9228 /home/ark/test/phi_ai_switch 4 个 cdb586fa 迁移成功(71 消息);41926bdc / 391eec34(分别 281 / 271 消息)无 .index,catalog 中不可见;ba1e57a3 的 meta 被删除,仅剩 lease/lock,daemon 反复报 Corrupt

具体异常

  1. 迁移漏迁:9b268e36、74e78a36、41926bdc、391eec34 等会话的旧文件已归档为 .migrated(或仍为旧格式原样保留),但同目录下没有对应的 .index / .events,新 catalog 扫描不到它们。对比:89c2ed8c 的 .index message_count=583 与其 snapshot.migrated 完全一致,说明迁移器有能力正确转换,这几例属于漏处理。
  2. 80 字节空壳 snapshot:大量旧 snapshot 被重写为空模板,原始内容未写入新 events(e2e9ca4f / 55532440 / b9f24427 的 .events 仅 143~6KB,index message_count=0):
    {"version":1,"messages":[],"cache_epoch":0,"turn_counter":0,"request_counter":0}
    
    (这些会话可能本就接近空会话,但迁移器对"读不到内容"的兜底行为是直接写空模板并归档原件。)
  3. daemon 日志(~/.atomcode/logs/atomcode.log,升级后启动时):
    WARN atomcode_daemon: session catalog entry was skipped path=~/.atomcode/sessions/2cfe8ee2a5cb9228/ba1e57a3-da3c-4156-a353-081cf863d7ea.snapshot kind=Corrupt native session "ba1e57a3-..." has sidecars but no metadata
    
    9-29(5.2.0 时期)对 d194def95a09f0c2 项目下会话也出现过同 kind 的 Corrupt 跳过,且该项目目录随后整个不存在了。

复现步骤

  1. 5.2.0 下正常使用产生若干会话(含多轮对话、带 artifacts 的会话)。
  2. atomcode upgrade 升级到 5.2.1(自动升级或就地替换均可,本例为 10-01 08:40 前后触发迁移,日志 startup stage 有 pending_upgrade)。
  3. 启动后 /resume 或 TUI 会话列表:旧会话基本不可见。
  4. ls ~/.atomcode/sessions/<hash>/ 可见 .migrated 归档文件与缺失的 .index。

期望行为

  • 迁移应覆盖所有旧格式会话(以旧 jsonl / snapshot 为准生成 .index/.events),漏迁时给出明确日志而不是静默跳过;
  • 对"sidecars but no metadata"的孤儿条目,与其报 Corrupt 不如尝试从 jsonl/snapshot 重建,至少不要把整段对话从 catalog 里弄丢;
  • 提供或文档说明 .migrated 归档的自助恢复/导出方式。

附:迁移前后对照样本

旧:89c2ed8c....jsonl (1.9MB) + .snapshot (1.2MB, 583 msgs) + .meta
新:89c2ed8c....index (message_count=583, turn=19) + .events (1.2MB)  ✅ 成功

旧:9b268e36....jsonl (53KB) + .snapshot (101KB, 26 msgs) + .meta → *.migrated
新:无 .index / .events                                        ❌ 丢失出 catalog

如需完整目录清单我可以再贴(涉及隐私的部分已做脱敏)。

likedislike
atomgit-botatomgit-bot成员
1 天前 添加了label:bug
atomgit-bot
atomgit-bot成员
1 天前 评论:

你好,谢谢反馈。我们已收到这条 Issue,会由维护者继续处理。代码相关结论需要读仓库核实后再说;若方便可补充版本号与最小复现。

likedislike
atomgit-botatomgit-bot成员
1 天前 将 duxin 设为负责人
MiCoder
MiCoder
1 天前 评论:

关联补充:#1620

我遇到的是同一次升级(5.2.0 → 5.2.1)的另一面,可能与你的漏迁同源,但表现不同——值得放在一起看:

  • 你报的是迁移后没有生成 .index/.events 的会话从 catalog 消失;
  • 我这边是已经正常生成了 .index/.events(format_version: 12)的会话,被 5.2.1 整体看不见。

在 /opt/openstack-Flamingo 项目下,~/.atomcode/sessions/1a323c4898c92e6a/ 实有 11 个会话,5.2.1 只列出 6 个——恰好是全部 legacy .meta 会话,5 个 v2 会话一个不剩(含 19 轮 / 723 条的一个)。

干净对照(--resume <id>,已避免测试顺序污染):

会话格式 5.2.0 5.2.1
v2(.index/.events) ✅ 找到 ❌ no session matches
legacy(.meta) ✅ 找到 ✅ 找到
伪造 id(对照) ❌ ❌

即 5.2.1 能读 legacy、读不了 v2。这与二进制特征吻合:5.2.1 里 .events / format_version 字符串计数均为 0,5.2.0 为 3 / 1;且 5.2.1 缺 review 子命令——怀疑 5.2.1 是比 5.2.0 更旧的构建被当作"最新"下发。

规避(已在 #1620 中验证):auto_update = false + atomcode rollback 回 5.2.0,所有 v2 会话立即恢复;数据自始未丢,属纯可见性/兼容性问题。

likedislike