Skip to content

Show original conversation read failures without setup detours - #7608

Merged
loopx-agent merged 2 commits into
mainfrom
codex/conversation-permission-recovery-20261029
Oct 28, 2026
Merged

loopx-agent merged 2 commits into
mainfrom
codex/conversation-permission-recovery-20261029

Conversation

@loopx-agent

@loopx-agent loopx-agent commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Reopening a disconnected original conversation showed an empty-workspace welcome and an execution-runtime installation prompt. The page now uses the existing bound-source readback to show loading or unavailable state and offer the original connection retry.

The existing packaged conversation-return smoke now exercises the real HTTP/Core binding owner: transcript HTTP read failure with a valid source, temporary source loss and recovery, explicit revocation, retry/reopen, retained drafts, isolation from other conversations, English and narrow layout, with unchanged Sessions/messages/model requests and no browser writes. The old 451-row history and asynchronous-return recovery checks remain in the default run.

Validation: Chat build/typecheck and the complete packaged conversation-return smoke pass. The new regression fails on the previous UI. Changed text passes the native public-boundary scanner; the four synthetic screenshots were inspected visually. Standard premerge ran 4 direct and 11 selected checks without failures; it retains 4 binary-image manual-review flags, addressed by the visual review. This qualifies the packaged browser, not an installed native WebView or live Lark account revocation.

Visual evidence

Built source at this head; disposable SQLite/Chat/Core runtime, synthetic provider/model identity, no personal data. Reopening keeps the original failure visible and removes unrelated installation work.

Unavailable original conversation after the fix

Before · Narrow · Populated recovery

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 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; GPT-6; OpenAI; self_reported

Approval conclusion (author-owned PR; GitHub blocks formal self-approval)

未发现阻断问题。评审对象为 b73821a9a8021f5a2d0d67e5d7af936972034988;这是作者自评,不是独立他人批准。宿主执行归因不可用,因此只声明已知模型系列。

动机 / Motivation

面向重新打开原飞书会话的用户。原连接或历史正文不可读时,旧页面会显示空工作区欢迎语;连接不可读时还提示安装运行环境。新页面显示原会话的读取状态,并保留原有重试。草稿保留,发送继续禁用;临时源或正文恢复后仍读取同一会话,明确解绑不会被恢复动作重新授权。范围限于原会话读取状态的展示,不改变连接授权、Session、发送和模型执行。

不改动会继续让用户把读取失败当成没有历史,甚至去做无关的环境安装。这个修复完成的是已复现的显示缺陷,不能据此宣布整个会话同步或原生撤权验收完成。

改动思路 / Approach

复用既有绑定读回、历史读取阶段和空状态组件;局部派生值只决定显示,不建立新的授权或重试状态。当前 PR 只修原会话读取失败及加载时的误导显示,并在既有打包回归中覆盖恢复;不扩展数据源或执行路径。原会话入口先由现有 Core 验证绑定,再由读钩子提供 Session、错误与历史阶段;页面消费这些事实,不从提示文案推断授权,也不维护另一份可用性状态。保留原有重试和输入拦截,比增加新的恢复控制器更直接。

状态 实际结果
源或正文暂时不可读 显示读取失败,保留草稿并阻止发送
临时读取恢复 回到同一原会话,正文不重复
Core 已明确解绑 源恢复和重试仍不能重新授权,不借用其他会话

具体改动 / Changes

规范依据是 docs/development/frontend-delivery.md,固定版本 0d4bf99a4aa6080f2774f3c4477fb4adc1b5ac46(原文)。task-first-3 已落实为真实绑定、六份长答复及读取失败/恢复反例;task-first-4 已落实为打包界面、真实 HTTP/Core/SQLite、窄屏、英文和独立状态读回。没有为匹配实现而重写规范。

关键代码讲解

  • PersonalWorkspacePage.originalSourceUnresolved 只派生原来源是否尚无 Session,供显示使用,不是新的授权字段。
  • ChannelTimeline 的 emptyState 同时读取来源和既有 history phase,区分正在读取、不可读和真正可显示的结果。运行环境提示仅在来源已解析后参与显示,避免以来源失败诊断执行器缺失。
  • verifyBoundReadRecovery 复用现有绑定夹具。先等待 HTTP 服务完成双来源启动,再验证正文 503、源身份失联恢复、真实解绑和重开。网络故障只替换一次快照读取;授权规则由实际 Core 执行。最后逐项核对 Session 数、原消息、原线程和 native request 数,浏览器写请求为零。

其余四个文件是合成界面的前后及恢复截图;Chat 生成包没有提交。全 PR 为 130 行新增、2 行删除,主要增量是跨真实读边界的回归,未增加生产 IO、状态存储、CLI 或迁移。

对主干的风险 / Risks

最有力的反例是「来源验证成功但正文读取失败」。第一版 623d1c955fbc550921a1770cbc0f6e005ab716d5 在此仍显示空工作区,已由实际打包路径复现;当前版本使用已有历史阶段修复,完整回归通过。旧基线也能用同一绑定夹具触发原始空状态断言失败。这些失败保留,不把后续绿色结果当成对旧问题的推测解释。

PASS:Chat 类型检查和构建、完整 conversation-return 浏览器回归,以及 standard premerge 的 4 个 direct、11 个 selected 自动检查。CI 策略为 wait_for_ci=false,未查询或轮询远端 CI。premerge 原报告仍列出 4 个二进制图像人工检查项;已逐图查看像素、确认合成数据来源,并核验 PNG 不含文本或 EXIF 元数据。文字扫描通过;不能用文字扫描替代这些图像检查。

该改动没有新协议、持久化状态、权限决策或 default-off 功能,复用现有类型与组件。尚未进行已安装原生 WebView、真实账号撤权或付费模型测试,不能外推这些范围。合并后的安装仍需既有部署条件,当前评审不授予新的生产访问权。

我的整体评价 / Verdict

long_horizon 为 preserved:反复读取和重开保留原 Session、消息与草稿,未执行新的工作。user_experience 为 improved:错误任务指引消失,原连接重试成为明确的下一步,不增加确认轮次。已查看失联前后完整首屏、六份长答复恢复后的正文和底部,以及窄屏失败状态;主提示与真实读取状态一致,重试可见,错误安装引导消失。未验证已安装原生 WebView 和真实飞书账号的撤权操作;本次结果限定为打包浏览器与隔离运行时。

机制与问题规模相称,复用现有 owner,兼容格式和后台执行路径均未改变。b73821a9a8021f5a2d0d67e5d7af936972034988 的源码、完整打包反例与恢复结果支持 APPROVE;合并还必须通过当前 head 的 readiness 和既有授权。作者自评不等于他人批准,也不等于安装完成。

English verdict: APPROVE — b73821a9a8021f5a2d0d67e5d7af936972034988 corrects original-conversation read-state presentation; packaged real HTTP/Core recovery and negative tests pass. Native installed revocation remains outside this qualification.

@loopx-agent
loopx-agent merged commit 29be59d into main Oct 28, 2026
8 of 10 checks passed
@loopx-agent
loopx-agent deleted the codex/conversation-permission-recovery-20261029 branch October 28, 2026 21:03
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