Repository navigation
fix(chat): scope answer recovery and adopt unstarted queue claims - #8201
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent · Codex GPT-6 · OpenAI · self_reported(host 身份观测 unavailable,未虚构精确构建)
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机 / Motivation
等待管家原问题补答的用户,以及接续已领取未派发请求的原服务。受限答案复核导入整段聊天并串行压缩;已领取未派发的队列项在重启后只等待自己变为running。 新路径:受限复核派发时使用完整原问题及核验结果;真正未启动的原队列claim沿已有准备/执行屏障接续,前后核当前claim。不必重输,原请求可沿原队列到达一次原渠道回复;Core完整历史、原失败和停止保护保留。不承诺所有旧业务完成,不取消普通聊天历史,不重放已启动或效果未知的原业务。实际安装采用及原飞书补答尚待独立验收;普通长聊天恢复、其他不合资格旧失败与所有原业务欠账继续保留。未测真实模型延迟或净费用。
改动思路 / Approach
复用现有ChatRuntimeController、原Session队列、typed生命周期和受限复核;没有新队列、重复授权owner、CLI或持久化字段。
本 PR 仅修复原已预留的受限答案准备,以及原队列中确实尚未派发的已领取请求;原准入、来源检查、sandbox 和普通全文历史恢复保持。 队列接续识别已有结构化生命周期:queued、没有开始时间、原生派发 ID、输出增量和未发布接收。准备前后核对当前 active Turn,随后仍须通过原执行屏障。受限答案在原执行入口收到完整原问题及核验结果,准备阶段省去无关的历史导入,完整 Core 记录继续保留。
具体改动 / Changes
关键代码讲解
_ensure_adapter_locked:仅已有answer_fallback的历史参数变为None。原问题与可见结果仍由现有execute_turn提供,原授权、原生摘要和受限工具检查没有删除;普通恢复不走这个例外。_drain_session_queue:采用真正未启动的同一个 claim,并在准备前后重新核对当前 active Turn。原来的并发换请求测试发现初稿可能追随新 claim;最终两侧检查让原 worker 退出,保持新运行请求及关闭状态不变。_run_turn的原执行屏障继续拒绝重复派发。
按既有恢复规范核对:original-review-input 对应完整原问题与只读结果,same-queue-reservation 对应同一未启动请求只派发一次,stop-and-unknown-effects 对应停止、来源变化、已启动标记及未发布接收的原 owner。三项在当前范围均 implemented;完整父目标及真实飞书验收保留。双语 RFC 同步解释边界。六文件 +127/-21,其中运行时净增20行;模块行上限在同提交精确由2419改为2439,Any38与全局默认不变,维护门实际通过,没有以新增通用框架规避既有责任层。
对主干的风险 / Risks
最强反例是把已发生派发的请求误当未启动而执行两次。冻结相同最终测试,在基线 5a58635028 两项正向回归失败、两个未知效果反例通过;当前 head 同四项全通过。真实队列/原回复 worker 配合受控原生与IM传输,验证一次 turn/start、完整原问题、保留旧记录、实际来源/发送者/正文以及不重复回传。它们证明代码边界,不证明真实模型的答案质量、延迟或净费用。当前原历史补答尚待安装后的独立送达验收。
最终代码 tree 的154项相关回归通过,另13项关键恢复/并发所有权用例通过;154与13有重叠,不相加计数。签名 head b5b9cf0d6d16edbf1531e7852f9371ee3e70a900 的完整 tree 与已测试19a193f15相同,签名 head 又独立通过 standard premerge 六项直接、十四项选定检查,包括公开边界、双语、词汇和维护门。初稿的并发 claim 回归及模块增长门失败已保留并修正重跑。按当前策略没有查询或等待 CI;#8200 的缺签名发布记录保留,当前新分支含正确 Signed-off-by,未强推旧历史。普通长聊天恢复的成本仍在原后续工作,不把它冒称已经解决。
语义与 CI 对齐
沿用 queued、原生派发标记、现有 answer-review 与原 claim 的语义,没有新增协议值、业务授权或模型提示义务。源级校验和当前回归支持本次有意行为差异;CI 未观察不改写为成功,也不替代准确提交的代码验收。
我的整体评价 / Verdict
认可这是原消息恢复的完整、有用增量。长期接续方面,原未启动队列不再因已有 claim 卡住;用户体验方面,补答无需重输且避开无关历史导入,Core 全文仍保留。已有 owner 和原状态派生足以表达这次行为,六文件范围与故障匹配,无新增持久化契约或授权。实际升级后原服务自动执行及原飞书正文必须另验;其他欠办及普通恢复成本继续开放。代码结论为 APPROVE,不能据此声称父 Goal 或全部消息完成。
English verdict: APPROVE b5b9cf0: scoped answer preparation and original unstarted claim recovery pass matched counterfactuals, 154 related tests and the exact-head gate; live delivery remains separate.
受限的管家补答原本仍会先导入整段聊天、串行压缩无关历史;服务重启后,已经领取但尚未派发的队列项也可能一直等待自身启动。现在补答在派发时使用完整原问题与已核验结果,Core 全部聊天记录及普通对话恢复保持;队列 worker 沿原 claim 和执行屏障接续真正未启动的同一 Turn,并在准备前后核对当前 claim。
保留原来源、授权、Stop、单次 review 预算及未知效果拒绝。已启动/已有原生派发标记的请求和未发布的 managed acceptance 仍交还原 owner。双语 RFC 同步;同一运行时责任层的净增长使既有模块行上限从 2419 精确更新到 2439,Any 上限与全局默认不变。
验证:冻结相同测试在基线 5a58635 上两项正向回归失败、两项未知效果反例通过;修复后 13 项恢复/并发所有权/原渠道回传关键用例通过。standard premerge 的 6 项直接检查与 14 项选定检查全部通过,含完整公开边界、双语与维护门。最初的并发 claim 回归和模块增长门失败保留;当前提交已修正并重跑。最终准确代码的 154 项相关回归全部通过。没有查询或等待 CI。
取代 #8200:该作者发布时漏了 DCO 签名,保留原记录;本 PR 的完整 Git tree 与已验证提交一致,提交包含 Signed-off-by,没有强推历史。