Skip to content

fix(chat): retain settled file reads for interrupted answer reviews - #8078

Merged
loopx-agent merged 1 commit into
mainfrom
codex/original-file-read-answer-recovery-20261105
Nov 5, 2026
Merged

loopx-agent merged 1 commit into
mainfrom
codex/original-file-read-answer-recovery-20261105

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

原管家的任务在额度错误前若已执行命令并读取文件,原有结果复核会因 VIEW_FILE 步骤被排除,用户只能看到失败提示。

本次把已结束的文件读取结果接入既有的一次性只读答复复核。保留原请求、失败记录、来源与受众校验;复核仍不能写文件、联网、派发委托或重执行业务。活动、变化、缺失或超限的原生记录继续保留待处理。

验证:38 项原生记录与原队列恢复测试、141 项相邻适配器测试、54 项类型层测试、TypeScript 编译与 Ruff 通过。同一用例在未修改的主干源码上复现 3 项 Python 正例失败及类型层正例失败;实际原生记录的同源对照也确认了缺口。原生 premerge 的 6 项直接检查与 10 项选定检查全部通过。

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 · 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.

@loopx-agent
loopx-agent merged commit bd79adc into main Nov 5, 2026
21 of 29 checks passed
@loopx-agent
loopx-agent deleted the codex/original-file-read-answer-recovery-20261105 branch November 5, 2026 00:29
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