fix: recover expired rectification handoffs

This commit is contained in:
Jesse_Chen
2026-07-22 12:28:55 +08:00
parent 753210747a
commit 31d6ab1ee3
3 changed files with 65 additions and 0 deletions
+16
View File
@@ -329,3 +329,19 @@
- 相关记录:BUG-009、BUG-017
- 复发自:无
- 修复版本:待提交
## BUG-019 | 原问题交接租约过期后永久显示处理中
- 状态:resolved
- 首次发现:2026-07-22
- 最近更新:2026-07-22
- 影响面:生时校正范围终态、跨设备/失败重试、durable 原问题 handoff
- 用户现象:一次继续咨询在输出前失败后,刷新仍无法重试,接口返回“原问题状态已经变化”。
- 触发条件:handoff 处于 `claimed``executing`,两分钟租约已经过期,客户端重新加载交接。
- 根因:数据库 projection 只看持久化 state,把过期租约仍投影为 `in_progress`;客户端因此不会发起 claim,而执行 RPC 又正确拒绝过期租约,形成永久卡死。
- 修复:projection 将已过期的 `claimed`/`executing` 租约投影为 `pending`,复用既有加锁 claim RPC 原子接管;未过期租约仍保持 `in_progress`,双设备隔离不变。
- 验证:迁移契约测试锁定过期租约恢复语义;生产制造过期 claim 后重新加载、claim、执行模型咨询和 settle。
- 防复发:所有租约型状态的读取投影必须同时解释 lease deadline,不允许只依赖枚举 state。
- 相关记录:BUG-017、BUG-018
- 复发自:无
- 修复版本:待提交