Repository navigation
fix(chat): retain settled file reads for interrupted answer reviews - #8078
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 · OpenAI Codex · OpenAI · self_reported
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
动机 / Motivation
**APPROVE,未发现阻塞问题。**在任务中断后只收到失败提示、仍等待原问题答复的个人管家用户。原任务在额度错误前完成命令和文件读取;旧版因文件读取步骤放弃结果复核,修复后原队列可核对这些现有结果并补答一次。真实 Core 存储与原回复 worker 的合成测试已证明:已结束的文件结果进入受限答复,原失败和通知保留,复核不重复执行业务。本次不恢复未知业务执行、不新增消息消费者,也不以一条复核答复宣称历史问题全部完成。合并后原服务的实际采用、真实原消息补答和更大范围历史欠答,仍须独立核验。
改动思路 / Approach
Python 适配器只提取原生可见文件结果,既有 TypeScript owner 校验结果变体和恢复资格;原队列、权限与投递回执仍是唯一执行和返回路径。本 PR 仅补齐已结束文件读取的结果复核输入,不改变一次性预算、原受众、停止条件或可用操作。这里恢复的是对已发生结果的解释,不是再做一遍原任务。最强反对理由是额度错误可能发生在工具运行之后,因此既不能凭错误消息推定无效果,也不能把文件读取成功当成权限。实现沿用现有只读复核入口,只收集已完成、同一执行身份且两次原生读取一致的可见结果;更省事的盲重放会破坏原边界,另造队列或人工标记也会增加第二个状态所有者。
| 原生记录 | 旧版 | 当前提交 |
|---|---|---|
| 命令结果后出现已结束的文件读取,再遇额度错误 | 文件步骤使结果复核放弃 | 保留文件可见结果,沿原队列复核一次 |
| 文件仍在运行、内容变化、来源不符或超过限制 | 保留待处理 | 继续保留待处理 |
具体改动 / Changes
关键代码讲解
interrupted_answer_observation继续核对原输入 hash、执行身份、完整原生段、结束状态与稳定读回;增加VIEW_FILE的显式投影,仅取原提供方已经展示的本地文件 URI 与正文。它不打开该 URI,也不转发原生思考或工具元数据。interruptedVisibleResult在既有命令/退出码形状之外验证文件 URI/正文变体。远程 URI、缺字段及总量超限不能使复核获得资格,旧命令结果继续兼容。planInterruptedStewardAnswer仍负责当前来源、停止、队列、可用额度及一次复核预算。文件结果没有独立的执行能力,进入的仍是现有禁止写入、联网和委派的 Codex 答复复核。
规范依据为 docs/architecture/rfcs/app-conversation-and-async-inbox-v0.md,不可变版本 9c4826d1154d8838993850d845655443e89a09bd(原文。逐项映射:TYPE-OWNER 由提供方事实与类型决策分工实现;SAME-TARGET 由既有原队列和确定性复核关联实现;SOURCE-FENCE 保留实际原来源与 grant 的检查;NO-BLIND-REPLAY 由只读复核及禁止操作返回实现。以上均有原 worker、丢失回执、停止/来源变化及类型层反例覆盖,未修改规范以迎合实现。
对主干的风险 / Risks
最大风险是把原生文件结果错当成新的业务授权,或者在中断后重复执行已发生的操作。本次没有增加业务重试族或消费者,原失败、失败提示、现有回执和工作区产物由测试独立确认保留;异步、未知、变化及不完整步骤继续拒绝。Python 与 TypeScript 在同一 Core 版本中部署,旧命令证据仍可读;回滚时无法识别的新证据只会留待恢复,不能触发盲重放。
PASS:38 项原生记录/原队列恢复测试、141 项相邻适配器测试、54 项类型层测试、TypeScript 编译、Ruff,以及准确提交的 premerge 6 项直接检查和 10 项选定检查。相同新用例在不可变主干上出现 3 项 Python 正例失败和类型层正例失败,证明用例能检测原缺口。初次测试环境和基准目录设置失败已保留,未作为缺陷证据;正式基准运行使用自身的旧版模块与完整 fixture。按当前策略未查询 CI,质量收据策略为 disabled。公开源文件与实际 PR 正文边界扫描通过;本地其他旧 Goal 的迁移诊断不等于此项扫描失败已修复。
语义与 CI 对齐
这是既有 visible_results 证据的显式文件变体,复用原有恢复语义,不创建通用 Goal 义务、调度阈值或新的主体权限。原生输入和受限权限的反例覆盖了实际改变的边界;真实部署和原消息送达仍待后续独立验收,测试成功不替代用户已经收到答复。
我的整体评价 / Verdict
long_horizon=improved,user_experience=improved:在保留既有停止和权限条件的前提下,已完成的文件读取不再让原问题永久卡在失败提示。全量差异为生产代码 +30/-4、测试 +56/-7;实现复用既有所有者,没有额外 CLI、后台服务、手工状态或版本分支,范围与实际问题相称。Python 适配器只提取原生可见文件结果,既有 TypeScript owner 校验结果变体和恢复资格;原队列、权限与投递回执仍是唯一执行和返回路径。本 PR 仅补齐已结束文件读取的结果复核输入,不改变一次性预算、原受众、停止条件或可用操作。这是一段可独立采用的恢复改进,尚不是全部历史请求或长期稳定性的完成证明。
English verdict: APPROVE 54188e3; no blocking findings. Settled file evidence reaches one restricted original answer review; 179 Python tests, 54 typed tests and exact-head premerge passed. Live original-message delivery remains post-install acceptance.
原管家的任务在额度错误前若已执行命令并读取文件,原有结果复核会因
VIEW_FILE步骤被排除,用户只能看到失败提示。本次把已结束的文件读取结果接入既有的一次性只读答复复核。保留原请求、失败记录、来源与受众校验;复核仍不能写文件、联网、派发委托或重执行业务。活动、变化、缺失或超限的原生记录继续保留待处理。
验证:38 项原生记录与原队列恢复测试、141 项相邻适配器测试、54 项类型层测试、TypeScript 编译与 Ruff 通过。同一用例在未修改的主干源码上复现 3 项 Python 正例失败及类型层正例失败;实际原生记录的同源对照也确认了缺口。原生 premerge 的 6 项直接检查与 10 项选定检查全部通过。