Skip to content

fix(chat): review retained project results without replaying work - #8234

Merged
loopx-agent merged 1 commit into
mainfrom
codex/chat-project-result-review-20261107
Nov 7, 2026
Merged

loopx-agent merged 1 commit into
mainfrom
codex/chat-project-result-review-20261107

Conversation

@loopx-agent

@loopx-agent loopx-agent commented Nov 7, 2026 •

Copy link
Copy Markdown
Collaborator

普通项目助手可能已经留下部分答复和本地产物,但原命令被中断,无法证明重跑安全。此前这也挡住了核对已有结果并回复原问题;原消息会停在部分答复。

现在,原有 worker 在读回对应的稳定原生终态、确认来源和授权仍有效后,可以沿同一 Session 和队列做一次工作区只读复核。它能检查已有产物,使用原提问时的上下文回答,并通过原飞书会话的独立投递阶段补回。原回合和旧投递保持不变,原未完工作继续留在待办。只读证据不会赋予执行权限;停止、撤权、新输入或已有后台工作仍会挡住复核。

验证:同一原生协议与飞书队列用例在基线停在原回合,在本提交只补答一次。新增 20 项原生读回和队列回归通过,覆盖未知效果、后台工作、授权变化、停止、排队、异常元数据和预约崩溃。相关会话回归、TypeScript 规则测试和类型检查通过。合成 provider 验证了协议与投递幂等性;部署后的真实模型答复及原消息读回另验。

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 | GPT-6 | OpenAI | self_reported

Approval conclusion (author-owned PR; GitHub blocks formal self-approval)

动机 / Motivation

使用飞书私聊的项目助手时,用户可能已收到一份部分答复,随后需要知道已经完成了什么、还缺什么。一次工作已生成本地产物,但原命令以 130 退出;旧机制无法证明重跑安全,于是连核对产物和回答原问题也停下。新机制允许原助手只读核对证据,沿原请求把补答送回原飞书会话;用户无需重发问题。这个改动不重新执行原命令、不代办剩余业务,也不把补答当作结清。缺少结构化未完记录的旧消息、执行效果不明的业务和安装后的真实回复仍需各自核验。

改动思路 / Approach

沿用原 worker、请求账本、Session、队列和飞书投递,把能否回答与能否继续执行分开。原来可以证明写入安全时仍走旧续办规则;证明不足时,闭合的原生结果可以作为只读复核的输入。原生读取层负责取证,TypeScript 请求规则决定准入,宿主执行原来的只读配置,飞书原投递阶段负责去重和读回。现有队列和投递已处理排队、崩溃与回传;增加的边界只区分结果证据与执行证据。当前改动只覆盖已有结构化未完声明的普通项目私聊,不增加 API、消费者、权限或调度器。

具体改动 / Changes

依据 docs/architecture/rfcs/app-conversation-and-async-inbox-v0.md 在 ac62962255322cd80a5b701a4187c6f47bc17d8c 的约定,保留三个要求:original source and current grant(复核准入及出发前检查)、same reservation after a crash(崩溃后采用原预约)、answer restoration does not certify business complete(补答后仍保留未完工作)。另有 GQ07–09 的停止和恢复要求,本次覆盖此路径上的停止、保持原回合、恢复时不重复执行。基线文档中的管家结果采用和配额续办另有条件;这次没有移植它们的权限。双语 RFC 记录默认路径的新分支。

关键代码讲解

  1. completed_result_review_readback 两次读回原生回合摘要和目标条目,要求终态、唯一输入和最终答复、可关联的后续回合以及相同未完声明。失败命令是可核对的记录,返回值没有效果结清凭证;不认识的条目或变化的读回留待后续核验。
  2. planCompletedResultReview 只为同源、同回合、同消息且空闲的普通项目预约一次复核;停止、撤权、活动队列或附带写权限的伪证明均不能通过。已入队但未写回的预约采用原客户端标识。
  3. _checked_completed_result_review 出发前核对原回合、授权、队列和取证快照;结束后再次检查来源,拒绝动作元数据。宿主沿用工作区只读、无网络的配置,替换适配器前确认没有它持有的后台工作。模型提示用原提问时间前的上下文,不会把后来的问题当成原始意图。
  4. planBoundConversationRequest 从预约中冻结的原回合和未完声明保留待办;正常复核完成和复核失败都不能把业务义务消掉。独立的飞书投递阶段沿用原收件人和现有幂等回执。普通私聊消息回原私聊;已有话题沿原话题路由。三个测试文件分别覆盖原生取证、状态规则和原队列;没有改飞书布局或添加新的消息消费者。

对主干的风险 / Risks

最大的风险是只读复核被误当作工作续办,或者排队过程中启动新输入后仍投出旧答案。正例在同一原生协议和飞书队列上,基线留在旧回合,本提交只补一次且旧回合、旧投递和产物字节不变;负例验证信号退出仍不给写权限,后台工作不被关闭,停止、撤权、新输入排队和源消息变化时不启动复核。复核返回未完元数据会失败,原待办仍在。普通写入、消息绑定和撤权对照在基线和当前提交各通过三项。现有兼容边界是同一发布物里的 Python worker 与 TypeScript 规则;降级时原记录和禁止重放标识仍保留,旧版待办投影不认识新增复核后的欠办状态,需等恢复新版读回。

当前提交的 237 项相关 Python 用例(含新增 20 项)、61 项 TypeScript binding 用例、TypeScript 类型检查、Ruff、配置内 strict mypy、双语 RFC 和标准 premerge 通过。额外将三个非配置入口直接交给 mypy 的探查在基线也失败,按文件和错误明细比较无新增诊断;保留原失败。依本次 Goal 的验证配置未查询或等待 GitHub CI。合成原生宿主与飞书 provider 覆盖协议、状态和重复投递,真实模型答复及外部读回在安装后验收。

语义与 CI 对齐

复用现有只读复核、队列和投递术语;新增的结果证据字段留在内部,不能冒充写入或完成凭证。相同源和授予条件仍由既有规则决定,新的原生取证和状态用例核验了这条界线。

我的整体评价 / Verdict

可交付的一步是把已有结果带回原用户,同时保持原业务在待办里。长期连续性有所改善:预约崩溃采用原回合,已完成的复核不会不断重试或把原命令当成可重跑。用户可在原飞书私聊收到与原消息对应的补答,原问题之外无需追加操作;后端复用既有飞书呈现,没有改版式或组件。当前没有待修的合并阻塞项,旧版降级后的待办投影和真实安装验收仍有上述边界。所审提交为 14753402e99d22977e44cfc4dcf9276c5a636cf2。

英文简短结论

English verdict: APPROVE. At 1475340, the original queue can return one restricted review while preserving the original work and denying replay authority. Baseline/head comparison, negative protocol tests, and repository premerge checks passed. Live delivery remains a separate adoption check.

@loopx-agent
loopx-agent merged commit 79665b9 into main Nov 7, 2026
21 of 29 checks passed
@loopx-agent
loopx-agent deleted the codex/chat-project-result-review-20261107 branch November 7, 2026 02:52
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