## 问题 #1159 修复了问答与审批续跑的正常渠道输出,但转发请求中断后,尚未送达的输出仍无法通过重试恢复。先记录为已知限制,暂不扩大实现范围;具体修复方案待评估,不预设新增租约系统。 ## 触发路径 1. 用户提交 ask_user 答案或工具审批,后台接受并启动续跑。 2. StreamDecisionResponse 成功调用 ClaimDecisionOutput,取得转发权。 3. 在发送 decision_accepted 或后续事件时,渠道/gRPC context 被取消,转发提前退出。 4. 认领标记仍保留;后台可以继续写入输出日志。 5. 使用相同 control ID 重试时,RouteDecisionResponse 返回 Replayed,StreamDecisionResponse 在读取日志之前返回,未送达回复无法恢复。 ReleaseDecisionOutput 当前只清理日志内容,不清除认领标记;仅增加一次释放调用不足以修复重试的提前返回。 ## 影响与边界 - 影响渠道续跑在请求取消、连接中断等异常情况下的输出恢复,可能缺失部分或全部后续回复。 - 正常链路已由 #1159 修复;本问题不表示正常回复全部失效,也未指向数据库迁移或数据损坏。 - #865 之前的直接续跑路径也没有完整的断线补发能力;本次新增的认领机制存在恢复缺口,但不能据此声称旧版本已支持可靠补发。 ## 后续验收 - 先增加认领成功后请求取消、再以相同 control ID 重试的复现测试。 - 区分答案已执行与输出已送达,恢复输出不得重复执行模型或工具。 - 覆盖未发送任何输出和已发送部分输出两种中断位置,明确重复发送边界;内部事件入队不等于外部平台已确认送达。 - 覆盖并发重试,避免多个转发者同时发送同一回复。 - 优先评估现有机制的最小修复,不以此 issue 扩展为通用消息投递系统。 ## 证据 - 合入提交:8d5dfaee2e2374183c5d6e729a67da26c36fb2a4 - 相关实现:internal/agent/runtime/session/decision_output.go、commands.go、memory_decision_output.go、redis_decision_output.go。 - 自动 review 原评论(标记 P1):https://github.com/felinics/Memoh/pull/1159#discussion_r3943484545 - 当前结论来自代码路径核对;尚未执行专门的断线重试复现测试。
问题
#1159 修复了问答与审批续跑的正常渠道输出,但转发请求中断后,尚未送达的输出仍无法通过重试恢复。先记录为已知限制,暂不扩大实现范围;具体修复方案待评估,不预设新增租约系统。
触发路径
ReleaseDecisionOutput 当前只清理日志内容,不清除认领标记;仅增加一次释放调用不足以修复重试的提前返回。
影响与边界
后续验收
证据