[bug] 会话历史加载失败:崩溃恢复与残留执行流并发写同一日志,seq 重叠(corrupt session log: seq gap in committed region) #1586
Frosty-dust
started this conversation in
General
Replies: 1 comment
|
逐条对着 master(47f943859b)核实完毕——机制完全成立,而且这是损坏家族里**第五种、也是第一个"恢复写者 vs 仍存活旧写者"**的样本。补充几个源码级细节: 机制确认(为什么必然碰撞,而不是竞态)两条写路径的 next-seq 来源不同:
一个从持久化文件长度取游标,一个从过期内存长度取游标——只要两个写者同时存活,碰撞是确定性的,不是时序运气。你的 119 秒窗口说明这个窗口无界:旧流可以在任意时刻续写,恢复方无法预知。 解码器拒绝点也确认: 家族定位
修复映射
|
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
崩溃恢复写入的合成闭包事件,与仍存活的旧执行流写入的真实事件,共用 seq 200476–200479,导致会话历史加载失败。
环境
@deepseek-ai/dsh-session-persistence-jsonl0.1.0-rc.6(npmnext,2026-08-13)packChunks开启症状
打开会话时提示:
复现路径(据日志证据还原,未做最小确定性复现)
run_code → pwsh工具调用执行中被强制结束/重启;日志已持久化到tool/code-dispatch-start(seq 200475)。tool/result(interrupted-tool-result-call_…-200476,TOOL_OUTCOME_UNKNOWN)step/endturn/end(interrupted)session/end-seedrootCallId/subCallId的真实执行结果再次追加到同一文件,但 seq 仍从 200476 开始(tool/code-dispatch→ 真实tool/result→step/end→step/start…)。events[i].seq === i,在 end-seed 之后发现回退,整段历史拒绝加载。关键日志节选
物理层面对应:合成闭包位于 zstd 第 7791/7792 帧,真实续写从第 7793 帧开始。
影响
临时修复(本地已验证)
删除 4 条过时合成闭包(物理上移除 2 个 zstd 帧)后,剩余 244,016 个逻辑事件用官方
decodeStorageRecord+Session.fromRestore全量校验通过,历史完整恢复。期望修复
关联
All reactions