Repository navigation
fix(chat): recover completed steward handoffs after quota restoration - #7994
Conversation
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.
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
APPROVE — 原生答案已完成但交办元数据未提交时,本次修复能让原请求安全进入既有格式修复路径;原业务及已送达正文均不重复执行或发送。没有发现阻塞此源码修复的缺陷。
Exact head: 472a257
Base: 6a6a859
Reviewer: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; reasoning_effort=max
动机
受影响者是原私聊中的 Antigravity 管家及其原接收 Agent。
原生答案已完成、但文本交办格式错误时,旧路径遗漏该交办;修复后原 worker留存严格原证据,在合格额度恢复后仅执行一次工具禁用格式修复。
原 HTTP/Core/模拟提供方用例产生一次原接收者 Inbox提交,原 Turn/events保持不变,原正文不重复发送。
本次不重放未知效果业务,不唤醒接收者,不切换账户,不新增消费者,也不声称旧消息或真实业务已经全部完成。
真实配额恢复、真实模型格式结果、原接收者业务回传及安装后的 App体验仍需独立验收。
旧路径只识别带特定恢复标记的完成结果;完整正文里的交办格式错误会一直留在“完成”状态。仅增加发现提示不足以处理原生历史清理或真实配额失败。本次沿原 Bot、原来源与原接收者修复,不新增执行者、受众权限或重放业务。
改动思路
事实观察留在原 provider/Chat store,恢复资格由既有 TypeScript owner判断,发送与交办沿原来源和原回执事务执行。
当前 PR边界是原交办元数据的证据保留、额度等待和一次格式修复;真实业务执行与最终回传继续由原 Bot及接收者负责。
Python 只观察原输入、同次执行及正常终态,并按原 Turn 锁不可变留存最小事实。TypeScript 负责完成状态、原回复、接收者/顺序、文本证据和配额资格。既有工具禁用格式修复只允许一次,最终交办仍过原权限与 Inbox owner。
已存在的60秒发现退避继续使用;没有新增忙轮询器或生成式额度探针。
| 原状态 | 本次行为 |
|---|---|
| 完成正文,交办元数据未提交 | 核验原证据后进入既有一次格式修复 |
| 最近请求真实额度失败,但仍显示少量余额 | 原请求留存失败周期;不预占格式修复 |
| 来源/输入变化、停止、证据不全或格式修复失败 | 保留待处理;不重跑业务 |
表为此 exact head 的源码控制流说明,不充当执行证据。已知 JSON 文本 brief 仅转为原证据字符串,未知外层权限字段拒绝;格式结果不能改目标或 context。共有523增/47删,九个文件;复用一个完成事实投影、一个既有格式 owner 和原回执事务。Chat store 行数基线2066→2074与实际八行增长一致,未放宽全局规模规则。
规范映射
spec_ref: docs/architecture/rfcs/app-conversation-and-async-inbox-v0.md
spec_revision: 6a6a859
L28-L30:原 Python IO/TS 决策分工保留。
L67-L77:原请求、原 Turn 及模糊回执不被重写或盲重发。
L92-L101:每次按原来源与当前 binding/队列重新核验。
L270-L285:原正文不重复投递;格式修复不重新执行原业务。
L103-L105:真实安装、配额恢复及 App/接收者业务验收仍是独立未闭范围。
验证与反证
- 当前主分支整合后的10文件 Python 回归:675项通过、1项跳过;TypeScript47项通过。
- 精确 head 的 standard premerge通过,含 RFC双语、规模/语义词汇及风险 canary;CQR按当前 Goal配置关闭。独立底层规模扫描的旧 oversized Todo函数在当前 base同样存在,由原 premerge规则判为既有 advisory。
- 同一原 HTTP/Core/模拟提供方用例(fixture SHA cd97471722d987c6e09f3d0a44d670c9d8f819547f2aace0a5c0c03975ec9f88)在当前 base仅因完成交办未返回而失败,在此 head通过。
- 强反例覆盖原生历史在额度等待后清理:原 worker已留存证据,余额波动不恢复;合格周期恢复后仅一次工具禁用格式请求、一次原接收者 Inbox提交。
- 停止/新输入/来源漂移、缺失锚点、原证据冲突、未知外层字段、目标/context改写、工具步骤及 IO失败均被覆盖;原 Turn/events和正文次数保持断言。
- 九个变更文件公开边界扫描干净;全局 check仍有两个既存私有 Goal的 canonical authority错误,未冒充整体健康。没有查询、轮询或等待CI。
具体改动
- native adapter复用一份最小完成事实投影;额度读取只调用原生只读 RPC,不发送生成探针,也不保存原账户标识。
- external conversation bridge在当前来源/队列/Turn fence内补存原结果,失败只报告错误类型;当前来源随后再次核验。
- Chat store补存要求原完成快照及 upstream invocation一致,私有文件继续不可变;普通运行中捕获保持原流程。
- TypeScript owner严格限定 completed invalid metadata、原接收者/顺序及 context;已知文本 JSON brief只成为证据字符串。
- 新增原 HTTP/Core负例、存储围栏及配额周期验证;原单次 formatter、正常 Inbox权限 owner和60秒退避继续复用。
对主干的风险
新的 completed路径可能接触旧持久记录,因此缺失锚点、非正常最终步骤、被修改正文或当前来源不符一律保留。缓存事实不是活跃状态或授权;失败 Turn仍要求 live/latest原证据。正余额可能与实际硬配额失败并存,故余额波动不能触发执行;配额观察未知也不能花掉一次格式修复。旧 formatter失败与效果未知的发送继续保留原回执,不构成再执行许可。实际模型恢复与真实 App投递尚未证明,本次批准只覆盖此完整源码链。一个真实 launchd升级测试为显式 opt-in且未配置所选旧 Core,已跳过并保留缺口;其他675项通过。
我的整体评价
本次源码修复是独立可用的增量,保持默认路径与权责归属,未建立第二队列或执行权。真实配额恢复、真实模型格式结果、原接收者业务回传、安装后的体验仍待原服务验收;其他旧失败或效果未知的请求继续保留,不能据此结项。
English verdict: APPROVE. The original worker retains qualified completed metadata, waits through a verified quota epoch and reuses one tools-disabled format review. It preserves original request authority, unknown failures and delivery receipts. Real model quota recovery and business completion remain separate acceptance work.
原生管家已经完成回答、但交办元数据解析失败时,原回复会停在已完成状态,未提交的交办无法继续处理。现在由原请求的恢复路径核验同次原生结果并私有留存,再复用既有的一次只读格式修复;已送达正文不重复发送,原业务不重跑。
验证:当前主分支整合后的10文件 Python 回归675项通过、1项显式 opt-in真实旧运行时测试未启用;TypeScript47项与 exact-head standard premerge通过。相同独立原 HTTP/Core/模拟提供方用例在当前主分支复现旧缺陷、修复版通过。覆盖额度等待及恢复、原生历史清理、停止/新输入/来源变化、证据冲突、补存 IO 和重复调度。九个变更文件公开边界扫描干净。
本 PR 不证明真实配额已恢复、历史业务已执行或所有界面验收已完成。旧失败及效果未知的请求继续保留,交办仍由原服务按当前权限执行。