已开启
[5.2.1] 自动升级后 5.2.0 写入的 v2 会话(.index/.events)全部从 /resume 消失;5.2.1 疑为比 5.2.0 更旧的构建(缺 review 子命令,附二进制指纹与 rollback 验证) #1620
MiCoder创建于  1 天前
MiCoder
MiCoder
1 天前 创建

摘要

在 5.2.0 下正常使用产生的会话(新格式 .index + .events,format_version: 12)在下一次启动后从 /resume / TUI 会话列表整体消失。自动升级到 5.2.1 后发生,atomcode rollback 回到 5.2.0 立即恢复。

初判:5.2.1 是一个比 5.2.0 更旧的代码库(版本号更高但功能更少),不含 v2 事件格式读写逻辑,因此无法枚举 5.2.0 写入的 v2 会话。

与 #1619 互补而非重复:#1619 报的是迁移后没有生成 .index 的会话消失;本例是已经正常生成 .index/.events 的会话,被 5.2.1 整体看不见。

环境

  • 平台:Linux x86_64
  • 安装路径:/usr/sbin/atomcode(含 atomcode.bak)
  • 版本:atomcode 5.2.1 (unknown) ← 自动升级后;atomcode rollback 后为 atomcode 5.2.0 (unknown)
  • 未改任何会话存储配置

时间线(均 +08:00)

时间 事件
10-01 11:08 磁盘上是 5.2.0(45,013,632 B)
10-01 11:41 5.2.0 把该项目会话迁移为 v2:原 .meta → .meta.migrated,生成 .index/.events
10-01 11:52 「如何配置openstack…image」会话最后一次写入(v2)
10-01 19:01 磁盘二进制变为 5.2.1(40,211,760 B)
10-01 20:19:13 「推送仓库」会话最后一次写入(v2,19 轮 / 723 条)
10-01 20:19:24 重启 atomcode → 5.2.1 启动;此后 5 个 v2 会话从列表消失

现象

项目 /opt/openstack-Flamingo 下 ~/.atomcode/sessions/1a323c4898c92e6a/ 实有 11 个会话,但 5.2.1 的 TUI/list sessions 只列出 6 个——恰好是全部 6 个 legacy(.meta) 会话;5 个 v2 会话一个不剩:

会话 格式 规模 5.2.1 是否列出
b64a2cb4 「推送仓库」 v2 (format_version:12) 19 轮 / 723 条 ❌
f882506e 「如何配置openstack…image」 v2 3 轮 / 200 条 ❌
6516cc20 / a2b072ec / ea68ff3f v2 空会话 ❌
94b11377 「OpenStack Flamingo 最小部署 RPM 构建」 legacy .meta 32 轮 ✅
其余 5 个 legacy .meta legacy 空 / 少量 ✅

磁盘数据完好,无任何丢失——只是 5.2.1 看不见。(5.2.0 之后又把部分 legacy 会话迁移成 v2,属正常行为。)

决定性对照实验

统一用 --resume <id> -p <prompt>,观察是否返回 no session matches:

# 会话 id 存储格式 5.2.0 5.2.1 说明
A 6516cc20… v2 ✅ 找到 ❌ no session matches 干净对照
B b64a2cb4…「推送仓库」 v2 ✅ 找到 ❌ no session matches 干净对照,19 轮/723 条
C 4d493bfe… legacy .meta — ✅ 找到 5.2.1 能读 legacy
D ab755af3…(5.2.1 自建) legacy .meta ✅ ✅ 同上
E 00000000-…(伪造) — ❌ ❌ 对照组:确认不是"照单全收"

结论:5.2.1 能读 legacy .meta,但完全读不了 v2 .index/.events;5.2.0 两者皆可。

二进制层面的证据

5.2.0(/usr/sbin/atomcode,rollback 后) 5.2.1(.bak)
大小 45,013,632 B 40,211,760 B
sha256 64bfd2314ac4068b3909c0d23af71a5968887af43414c6d9ed50065060b548e1 36ecc2fdf09b9a2a333cc2dfa3e090a934228bf32b40af320b447ebd795f2832
含 .events 字符串 3 0
含 format_version 1 0
含 .index 14 12
review 子命令 ✅ 有 ❌ 无

atomcode --help 的 Commands 段差异只有一行:

8d7
<   review      Review a diff and report structured findings, then exit

缺 review 子命令 + 缺 v2 格式字符串,共同指向:5.2.1 的功能集早于 5.2.0。

规避方案(已验证)

# 1) 关掉自动升级,避免被换回 5.2.1
#    ~/.atomcode/config.toml 顶层
auto_update = false

# 2) 回退到能读 v2 的 5.2.0(与 .bak 交换,可再 rollback 换回)
atomcode rollback

回退后 --resume 上述 v2 会话全部恢复。数据自始未丢,属纯可见性/兼容性问题。

尚未定位

  • 5.2.1 的会话 catalog 为何静默跳过 v2 会话(无 WARN/ERROR 落在 ~/.atomcode/logs/atomcode.log);若为"旧代码库读不了新格式",是否有意做了降级保护,还是纯粹漏判?
  • 自动升级管线为何会把更旧的构建当成"最新"下发(pending_upgrade 阶段触发)。这看起来是独立的发布/升级判定问题,建议单独排查。

期望

  1. 修复自动升级的版本判定,避免用旧构建覆盖新构建;
  2. 会话 catalog 遇到不认识的存储格式时,给出明确日志而不是静默隐藏整条会话;
  3. 若旧版二进制可能读到新版数据目录,至少保留/提示 v2 会话的可恢复入口。

需要完整目录清单或对照样本可再提供(涉及隐私部分已脱敏)。

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

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

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