Repository navigation
fix(chat): restore verified native answers after Core failures - #7856
Conversation
…urns Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
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.1-sol · OpenAI · runtime_reported · reasoning_effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机 / Motivation
使用原 Antigravity 私聊管家、执行已结束却只收到失败通知的用户。同一请求已经在原生端正常结束:原实现只保留失败通知;修复后原回复worker核验来源并补回既有答复,无需用户重发任务。已核验答复进入原Chat并沿原受众回传;失败记录保留,gate、未完工作和未提交委派继续显示待办。本改动不创建业务重试Turn,不执行恢复结果中的操作或委派,不代替原业务和真实送达验收。旧轨迹缺乏完整关联、stream error、未知发送回执和未提交委派仍欠回;正文恢复不证明整个业务完成。
这项修复的价值是沿原请求补回已有结果,减少重复输入和重复副作用;它不是给失败任务补一个成功标签。无效委派元数据、未完工作和发送确认缺失都必须继续可见,不能因正文已生成或已送达而消失。
改动思路 / Approach
职责由既有owner分别承担:provider证明原生结果,TS决定来源与生命周期准入,Core冻结历史采用事实,Inbox决定发送意图和独立读回。冻结消息是跨崩溃的效果回执,不是第二份业务或授权状态。当前PR只补回有完整证明的既有答复,并保持未提交动作和未完事项;不能把结果观察升级为业务重试或委派准入。只修parser可防止未来丢正文,却不能补回历史正常结果;重跑或改写失败Turn都不能保留真实效果。这里沿原回复worker进入原Core请求事务,读取完整原生证据、重新核对原消息和授权,再生成一份确定性的消息意图。没有新的消费者、模型选择、用户确认步骤或并行业务队列。
| 原状态 | 当前结果 | 验证边界 |
|---|---|---|
| 原生正常完成、Core失败 | 原Chat追加一条补回答复,原受众收到同一正文 | 原失败Turn/通知原样保留;不再发起原生执行 |
| 元数据无效或仍有未完事项 | 原正文和明确警示可见,继续欠回 | 不提交其中的操作或委派 |
| 原消息被编辑、会话关闭或轨迹不完整 | 保持原请求,停止采用 | 原来源和生命周期检查仍决定准入 |
| 写入后丢失发送确认 | 保留未知回执和原意图 | 不盲目重发、不冒称已验证送达 |
表格解释的是精确head 4e3e4df75ba8b73f2eac9c3a651b8cf344ee8e29 的源码控制流;执行证明来自下述Core/File、HTTP native与原Inbox回归,而非表格本身。
具体改动 / Changes
关键代码讲解
- completed_result_observation要求稳定、空闲且完整的原生轨迹;最后一条输入必须带原Core来源、准确消息和失败Turn期间的时间,同一execution全部结束并有正常最终答复。新输入发送前还保存hash与起点。单看IDLE、同样的正文或旧planner都不能证明关联。
- parse_agent_response对无效操作元数据保留可显示正文,附上“尚未提交”的gate和警示,并丢弃这些未验证动作。取消失败也保留最初provider错误和清理未确认状态。正常合法envelope沿原路径处理。
- planContextRecovery在既有来源与授权owner内区分结果采用和执行续办;Antigravity分支没有新的client Turn。相同文件的pending投影继续保留gate、未完事项和未提交动作;完整正文回传也不能盖过它们。
- _recover_native_result先在原journal冻结原生证明、message id和消息正文,再采用ChatStore的显式ID追加。重启沿相同意图读回;测试在journal/message之间崩溃后更换renderer,仍恢复旧的冻结正文。原失败Turn与事件未修改。
- _reconcile_native_result复用原回复pool和Inbox的独立阶段、发送意图及provider读回;旧失败通知和原Session/Turn关联保留。每次发送前重核原来源和当前Core授权,回执不明确就继续欠回。
规范依据是修改前的 docs/architecture/rfcs/app-conversation-and-async-inbox-v0.md,固定revision c334bbaf196505778149ae4edeefaa013d343259,而不是本PR新增文字自证。native-history-migration-and-unfinished-request-continuation 对应原请求、失败与未知效果边界;lark-progress-edit-budget-and-final-result-recovery 对应同一Inbox意图、完整正文与未知回执;explicit-unfinished-work-after-a-completed-turn 对应部分答复的持续义务。三项在上述真实入口实现;Antigravity结果采用是明确说明的新范围,未把仅限Codex的执行续办移植给它。英中RFC同步记录这一边界。
对主干的风险 / Risks
主要风险是把别人的旧结果当成当前答复,或在崩溃后重复执行/发送。反例覆盖另一条来源、输入时间、execution、hash、缺失/变动轨迹、stream error、未结束工具、group/attached/closed边界。源消息编辑和关闭在相同最终baseline/head harness中都是无效果的控制;新的明确请求仍需自己的完整证明。丢失发送确认不会被补写成成功,未完成业务也不会从pending消失。
PASS:初轮443项受影响Python回归;最后的gate与冻结正文修正再以83项parser/provider/原Core/File/回复worker用例验证,其中8项覆盖完整恢复与未来元数据失败。当前head的49项TypeScript、typecheck、Ruff和标准premerge的6项直接/11项选定检查全部通过。同一最终harness在 c334bbaf196505778149ae4edeefaa013d343259 的生产实现上复现6项Python和1项TypeScript回归,2项来源/关闭控制及44项typed控制仍通过。初始fixture模型默认值、未知ACK错误预期和group既有拒绝方式已明确归因,未把这些历史失败改称通过。
语义与 CI 对齐
这是现有conversation plan的有界结果采用扩展,外加原事务中的输入/消息/回执事实;没有新增任务权威。adopt_native_result 不表示业务成功,response_metadata_invalid 不授权重新提交动作。检查了共享owner、消费者和新状态的实际生产触发;diff advisory的零候选只代表扫描支持范围。当前managed策略禁止查询、轮询或等待CI,本次使用必要的本地验证。真实模型业务和安装后的原消息送达仍独立验收。
我的整体评价 / Verdict
没有阻塞发现。结论为 APPROVE,交付判断 justified_increment;long_horizon 与 user_experience 均 improved。已有意图、授权和正常结果时新增所需用户交互轮次为0。失败事实、停止边界和未知效果继续可见,原worker可以恢复有证明的答复,而不会因格式异常再次执行业务。
职责由既有owner分别承担:provider证明原生结果,TS决定来源与生命周期准入,Core冻结历史采用事实,Inbox决定发送意图和独立读回。冻结消息是跨崩溃的效果回执,不是第二份业务或授权状态。当前PR只补回有完整证明的既有答复,并保持未提交动作和未完事项;不能把结果观察升级为业务重试或委派准入。检查了apps/presentation/dashboard/src/features/personal-workspace/private-conversation-panel.tsx及既有Markdown消息消费:此PR改变恢复正文和真实pending语义,未改渲染组件、折叠、密度、样式或响应式布局;视觉布局评审不适用。既有客户端整体视觉质量和真实手机外观未在本次源码评审中重验;合成provider不能代替安装后的真实送达验收。
未验证的旧轨迹、原生协议变化、发送确认缺失及未提交委派保持原owner的待办;本结论不宣称历史业务或父Goal已完成。精确head或其调用契约改变时,需要重新核验当前全PR。
English verdict: APPROVE 4e3e4df. Verified original native answers are restored through the existing request and delivery owners, with failed Turns preserved and no business replay. Gates, unfinished work and unknown receipts remain owed.
原生端已经生成答复时,Core 的失败记录可能使原私聊只收到失败通知。无效的操作元数据还会丢弃已生成正文,取消失败则可能掩盖最初的错误。
本改动让现有回复 worker 核验原消息、原会话、当前授权与稳定的原生终态,把既有答复补入 Chat 并沿原受众回传。原失败 Turn、事件和失败通知保持原样;不创建新 Turn,不重跑模型,也不提交恢复答复中的操作或委派。缺失或冲突的证据继续保留欠回,未知发送回执禁止盲目补发。正文回传后的 gate、未完工作和未提交委派仍保持待办。
实现复用原生 provider、typed conversation policy、请求 journal、Chat message 和 Inbox intent/readback owner;补充发送前输入 hash、错误保留以及英中 RFC 边界。
验证:原生 HTTP 与真实 Core/File/回复 worker 的八项恢复流程通过,覆盖元数据失败、未完事项、来源编辑、关闭、丢失回执和 journal/message 间崩溃;相关 TypeScript 49 项、control-plane typecheck 与 Ruff 通过。初轮受影响 Python 回归 443 项通过,最终 gate/冻结意图修正后 83 项风险用例、49 项 TypeScript、typecheck、Ruff 与标准 exact-head premerge(6 项直接、11 项选定)均通过。同一最终 harness 在原基线复现 6 项 Python、1 项 typed 回归,来源/关闭控制与其余 typed 控制保持通过。按当前策略未查询或等待 CI。真实原生端仅做只读核验,安装采用与实际原消息回传独立验收。