Skip to content

fix(chat): scope answer recovery and adopt unstarted queue claims - #8201

Merged
loopx-agent merged 1 commit into
mainfrom
codex/review-scoped-context-signed-20261106
Nov 6, 2026
Merged

loopx-agent merged 1 commit into
mainfrom
codex/review-scoped-context-signed-20261106

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

受限的管家补答原本仍会先导入整段聊天、串行压缩无关历史;服务重启后,已经领取但尚未派发的队列项也可能一直等待自身启动。现在补答在派发时使用完整原问题与已核验结果,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,没有强推历史。

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>

@loopx-agent loopx-agent left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@loopx-agent
loopx-agent merged commit 3a0c960 into main Nov 6, 2026
20 of 26 checks passed
@loopx-agent
loopx-agent deleted the codex/review-scoped-context-signed-20261106 branch November 6, 2026 17:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant