Commit Graph

1 Commits

Author SHA1 Message Date
iomgaa fa09e873c5 feat(_recovery): 落成四态判定与四个断点各自的续跑路径
一步之内写四次(模型意图 → 模型结果 → 动作意图 → 步记录原子写),所以断点有四个,
这个模块的全部工作就是把断点认出来:

- 模型意图有、结果无 → 状态未知,按请求声明的模型重放策略决定重调还是停下来报告
- 结果条目在但记的是失败 → 状态一点都不未知,补上那一步以模型调用失败收尾
  (判成未知走重放的话,一次已知的失败会被当成可能成功过)
- 回复已存、动作意图未写 → 副作用还没发生,重新解释那条回复,不再花一次调用的钱
- 动作意图有、步记录无 → 按意图记录里存下的那个策略决定;重放沿用原来那个预分配 ID,
  另分配一个的话原意图永远配不上结果,下次恢复读到的还是「状态未知」

四态表最后一行(结果有、意图无)判为日志损坏拒绝续跑,另加几种撞号与缺号:同一步两条
同种意图(并发写)、步序号不连续(中间某一步的原子写整个丢了)、意图跑到步记录前面、
有动作意图却没有模型调用意图、有记录却没有运行开始记录。

模块 docstring 里写明了一条此前只是隐含的对齐:步序号与模型调用序号是同一个数。没有它,
result_id 为空的步记录(解析失败、模型调用失败、最终回答三档)认不出属于哪一步。
2026-08-10 01:10:09 -04:00