Skip to content

fix(chat): settle idle Antigravity cancellations without replay - #7961

Merged
loopx-agent merged 1 commit into
mainfrom
codex/steward-idle-cancelled-invocation-20261103
Nov 3, 2026
Merged

loopx-agent merged 1 commit into
mainfrom
codex/steward-idle-cancelled-invocation-20261103

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

Antigravity 返回 IDLE、末步已取消且当前调用所有步骤均已结束时,原适配器仍按中间状态继续等待,最终才超时并再次尝试取消。现在沿既有失败路径及时结束原 Core Turn,明确执行效果未知;不采纳为成功、不重发原输入,也不再次取消已空闲的调用。有步骤仍在运行时继续观察。

验证:154 项适配器、传输、激活及队列回归通过;同一最终测试文件在冻结主干的 3 个取消反例均停在旧超时路径,修复后按失败收敛,正常短暂 IDLE 保持通过。真实 loopback HTTP/适配器/Core 边界使用合成上游,未调用真实模型。Ruff 与标准 premerge 通过;保留未改动的 render_canonical_todo_sections 原有 maintainability advisory。该改动不声称已解释线上全部 CPU/等待问题,也不改变自动重试权限。

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 (Codex); OpenAI; self_reported

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

结论:APPROVE,当前精确 head dd3e0ebd123bfa0975d9894f8b831f86da07c44f 未发现阻塞问题。宿主执行身份读取返回 unavailable/session_not_found,按已知模型家族自述;这不是独立人工审查或 GitHub 正式自批准。

动机 / Motivation

现有 App/飞书管家的用户会在原生执行被取消后遇到这个等待问题。 上游已空闲、末步已取消且没有其它在运行步骤;旧版继续等到超时,新版及时把原 Core Turn 收敛为失败。 原请求及时结束等待并释放会话活动位,执行效果仍明确未知,不会重新发送原输入或再次取消已空闲的调用。 本 PR 不恢复业务答案、不重放历史、不扩大自动重试权限,也不声称已经解释生产进程全部 CPU 和等待异常。

这是 justified_increment。实际安装采用、生产旧调用为何超过闲置期限仍未收敛,以及原消息的后续结果回传仍需分别验收。 原来的中间态保护有必要保留,但已取消且没有活动步骤的调用不能继续占用同一条等待路径。这里交付的是经过原适配器和 Core 的失败收敛,不把一次取消或一次 PR 合并当作用户业务已经补办。

改动思路 / Approach

原生轨迹状态的解释属于既有 Antigravity 适配器;Core 继续拥有失败落盘、活动位释放和队列,不另建 watchdog 或第二生命周期 owner。 只在原生步骤完整、IDLE、末步取消且所有当前步骤均已结束时提前失败;正常完成、短暂 IDLE、权限与超时路径保持原 owner。

我比较了不处理、缩短超时、删除中间 IDLE 保护、另加 watchdog 和修改现有 provider 分支。缩短超时会伤及仍有进展的工作,删除保护会误终止工具与 planner 之间的合法空档;新 watchdog 又会增加状态、清理和重试 owner。当前方案从完整原生观察直接派生结论,不增加持久标记、命令或策略配置。已有 Core 失败路径负责写回原请求并释放活动位,适配器仅清除已经空闲取消调用的本地目标,避免异常包装层再发 Cancel。

同一最终夹具,经真实 loopback HTTP 冻结主干 当前 head
三类已结束的取消尾步 等到逻辑时间 302,response_timeout,并再次取消 逻辑时间 1 即失败,明确效果未知,不再次取消
取消尾步同时仍有 generating 步骤 继续到正常 final 同样继续到正常 final

表格描述合成上游的适配器实测,不是生产耗时或真实模型验证。Core 集成还核验了原 Turn 失败、活动位释放、一次原始输入及没有 answer.final。

具体改动 / Changes

两个已有文件共增加 77 行,其中生产 9 行、测试 68 行,没有新模块。依据是固定主干 9df923460af0a0a83dd8c59b7ec82999e57a14a9 的 docs/architecture/rfcs/app-conversation-and-async-inbox-v0.zh-CN.md 原结果恢复段落:成功需要完整正常 final;失败和未知效果保留,不能变成通用执行重放。及时结束取消尾步是对已有成功/失败不变量的修复,并非文档授予新的重试权限。

  • verified-final-only:implemented。已取消且无正常 final 的完整轨迹按失败结束,不能冒充答案。
  • unknown-effects-no-replay:implemented。沿原 Core 失败 owner 记录一次原请求;三个 HTTP 反例及 Core 测试证明没有重发或再次取消。
  • historical-return-adoption:out_of_scope。历史正文恢复、原受众送达与原业务结论仍由原 owner 验收,本 diff 不改 journal 或历史消息。

关键代码讲解

  1. AntigravityAdapter._run_turn 在完整 IDLE 观察处检查末步 CANCELED,以及当前所有步骤均 DONE/CANCELED。任一仍在运行、生成或状态未知,都不走新增失败分支;原外来输入、覆盖不足和权限检查仍在它之前。
  2. AntigravityAdapter.start_turn 的既有异常清理读取本地活动目标。新分支仅在已核实空闲取消时清空该目标,所以不重复 Cancel;其余超时、传输和权限失败仍保留原清理与未确认错误。
  3. test_settled_native_cancellation_releases_core_without_replaying 从 Core submit_turn 进入实际 HTTP 适配器,断言 failed/error_code、active_turn_id 释放、一次原消息/Send、无额外 Cancel 和无 answer.final。生产 Core 没有新增特判或重试分支。

对主干的风险 / Risks

最强反例是把短暂 IDLE 误当终态。新增负例明确让末步取消而前一步仍 generating;它必须等待后续正常 final,基线和 head 都通过。现有八类短暂 IDLE、正常 final、超时、权限、外来输入和覆盖不足回归继续通过。仅判定 CANCELED 或仅判定 IDLE 都不够,本实现要求二者和完整已结束步骤一起成立。

PASS:154 项适配器、传输、激活和队列回归,Ruff,两个文件公开边界扫描,以及标准 premerge 的 6 个直接、2 个选择检查,无阻塞失败或 manual hold。保留 maintainability advisory:未修改的 render_canonical_todo_sections 同一命令在真实 detached Git 基线与精确 head 都退出 1,完整 stdout 逐字相等。最初 archive-only 探针通过,未把缺少等价 Git 上下文的结果当作基线资格。汇总 host check 的两个既有 canonical-authority Goal 错误也保留,不能称全局 check 通过。

语义与 CI 对齐

这里消费既有外部 CORTEX 状态,复用已有 upstream_transport_failure 与 Core 生命周期。错误文字从等到 deadline 改为报告已取消,并明确 execution may have occurred;没有增加重试、重发或用户必须再确认的指令。当前 Goal 是本地验收且 wait_for_ci=false,未获取、轮询或等待远端 CI,不推断其成功。安装、生产采用、旧调用超长等待及原消息回传均未在这份评审中认证。

我的整体评价 / Verdict

long_horizon 和 user_experience 判断为 improved:已经终止的调用及时交回原 Core,未知工作仍欠办,没有新增用户轮次。原生轨迹状态的解释属于既有 Antigravity 适配器;Core 继续拥有失败落盘、活动位释放和队列,不另建 watchdog 或第二生命周期 owner。 只在原生步骤完整、IDLE、末步取消且所有当前步骤均已结束时提前失败;正常完成、短暂 IDLE、权限与超时路径保持原 owner。 兼容性判断 retain,机制规模 proportionate;没有引入版本路径、额外状态或消费者。基线反例暴露旧等待,当前原生 HTTP/Core 验证覆盖实际改变的不变量,因此支持合入这个有界增量;生产整体恢复仍需独立采用与验收。

English verdict: APPROVE at dd3e0eb. Settled idle cancellations fail through the existing Core owner without replay or another cancellation; 154 regressions and standard premerge pass. Preserve the inherited advisory and unverified production adoption/stall cause.

@loopx-agent
loopx-agent merged commit a3d4881 into main Nov 3, 2026
5 of 7 checks passed
@loopx-agent
loopx-agent deleted the codex/steward-idle-cancelled-invocation-20261103 branch November 3, 2026 04:40
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