# [BUG] 升级 dsh 0.1.5 后,此前手工重编号修复过的会话无法加载(chunk 溯源校验拒绝) #6348
Replies: 2 comments
|
传送门 · 相关官方讨论(2026-09-11 更新) 本贴记录的是「两个 dsh 实例并发写同一会话」导致的 seq 冲突、恢复与预防。如果你是从升级 dsh 0.1.5 之后会话打不开找过来的,下面这些帖子更新、更对口:
修复工具:dsh-session-surgeon —— 预防(本贴结论,仍然有效):
|
|
这块 surgeon 已经自动化,而且不需要"偏移均匀"这个前提。
边界与流程:
验证方式和你贴的一致:拿官方 0.1.7-rc.1 的 |
Uh oh!
There was an error while loading. Please reload this page.
背景:这是对[#4178 ]的后续发现。原帖记录了"两个 dsh 实例并发写同一会话导致 seq 冲突"的损坏、恢复与预防;本帖记录升级新版后暴露出的二次问题:当时用于修复的手工重编号,留下了新版会拒绝的内部引用。
现象
把 dsh 从
0.1.1-rc.2升级到0.1.5-rc.1后,此前修复过的会话重新无法打开,服务端报:注意最后一句:迁移失败时保留原始 v0 文件不变,不会造成进一步损坏——这点体验很好。
根因
0.1.5 引入了会话格式 v0 → v2 迁移,迁移时校验
assistant/message的sourceEventSeqs(chunk 溯源)必须与实际 chunk 序列完全一致(长度相同、逐个 seq 相等)。而此前为修复"seq 重复/回退"所做的手工修复(把冲突片段重编号)只改了事件的
seq字段,没有同步事件内部的sourceEventSeqs引用。旧版不校验该字段,因此一直正常;新版一旦校验便拒绝加载。本例中恰好 4 条消息的溯源数组仍是旧编号(长度都对,只是整体偏移):
修复方法
对每条
assistant/message:sourceEventSeqs逐项比较;本次只改动了这 4 个数组,其余 12818 行原样保留。
修复后验证:
session/page返回ok: true,可正常读取历史记录;可复现性
可复现:任何"重编号过 seq 但未同步内部引用"的会话,在 0.1.5+ 上都会触发同一错误。错误信息带具体 seq 与事件类型,便于定位。
对修复工具的启示
assistant/message.sourceEventSeqs(本次遇到)tool/result.sourceEventSeqsshadowedRange附:新版接口变化(供工具作者参考)
dsh web打印的带 launch token 的 URL;session.history已由session/page取代,入参形如{ request: { address: { kind: "session", sessionId }, throughSeq, maxMessages } }。All reactions