seq 序号重复导致对话加载失败 #1333
Firefly1007
started this conversation in
General
Replies: 1 comment
|
非常好的定位——我把你引用的 built lib 路径对应到当前 master 的源码,逐条核对后基本都成立,但有一个关键点想补充: 源码对应(built lib → src)
真正可疑的机制:跨进程并发写入
文件里出现 需要你确认的几点
给维护者的修复方向(feature request 素材)
如果你能提供后端类型 + 复现时进程拓扑,我可以继续往对应后端(JSONL append 路径或 SQLite 事务)里挖。 |
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 序号重复问题
异常点只有一个:第 6708 条记录 seq 从 147517 回退到 147513,导致 147513–147516 出现两次。这种"序号回退 + 重复"是事件溯源系统典型的计数器与持久化状态不一致,只能由程序在分配/恢复 seq 时出错产生,不可能由磁盘或用户操作造成。
seq 的分配规则是硬编码的:append() 里 seq: this.log.length(源码 lib/index.js:1455),注释明确写着"seq = log.length 连续性契约"。
resume/fork 时,seed 边界决定 log.length 的起点:构造函数里 firstLiveSeq = this.log.length,若 seed 末尾不是 session/end-seed 就追加一条(index.js:1385-1387)。
崩溃恢复还有一条 interruptedTurnClosers() 逻辑:若日志末尾是未闭合的 turn,会重新生成合成 closer(tool/result + step/end + turn/end),seq 从 last.seq + 1 开始(index.js:664)。
All reactions