Repository navigation
fix(chat): settle idle Antigravity cancellations without replay - #7961
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; 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 或历史消息。
关键代码讲解
AntigravityAdapter._run_turn在完整 IDLE 观察处检查末步 CANCELED,以及当前所有步骤均 DONE/CANCELED。任一仍在运行、生成或状态未知,都不走新增失败分支;原外来输入、覆盖不足和权限检查仍在它之前。AntigravityAdapter.start_turn的既有异常清理读取本地活动目标。新分支仅在已核实空闲取消时清空该目标,所以不重复 Cancel;其余超时、传输和权限失败仍保留原清理与未确认错误。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.
Antigravity 返回 IDLE、末步已取消且当前调用所有步骤均已结束时,原适配器仍按中间状态继续等待,最终才超时并再次尝试取消。现在沿既有失败路径及时结束原 Core Turn,明确执行效果未知;不采纳为成功、不重发原输入,也不再次取消已空闲的调用。有步骤仍在运行时继续观察。
验证:154 项适配器、传输、激活及队列回归通过;同一最终测试文件在冻结主干的 3 个取消反例均停在旧超时路径,修复后按失败收敛,正常短暂 IDLE 保持通过。真实 loopback HTTP/适配器/Core 边界使用合成上游,未调用真实模型。Ruff 与标准 premerge 通过;保留未改动的 render_canonical_todo_sections 原有 maintainability advisory。该改动不声称已解释线上全部 CPU/等待问题,也不改变自动重试权限。