Skip to content

fix(chat): keep original conversation readers open across refresh - #7536

Merged
loopx-agent merged 1 commit into
mainfrom
codex/delegation-reader-refresh-20261028
Oct 27, 2026
Merged

loopx-agent merged 1 commit into
mainfrom
codex/delegation-reader-refresh-20261028

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

Goal And Delivered Outcome

刷新委派会先清空列表,正在阅读的原对话随之关闭,后续返回必须重新展开才看得到。本次保留同一来源的展开项与已加载页,刷新后在原位置读取完整返回;读取失败、查询或来源改变仍清空旧内容。

  • Outcome basis:现有委派原对话读取路径中的可复现缺陷;目标分支 main。
  • Before → after:同一打包 oracle 在 98c4ba315d98c7e79b16f1ae184c5dd120d54a20 因原对话关闭失败,在本头保留展开、焦点与滚动;真实 SQLite/Inbox 返回进入同一已展开 reader。

Author Declaration

  • Written by: model_agent · Codex / OpenAI(当前运行接口未提供精确模型标识)。

Implemented against

规范:docs/development/frontend-delivery.md#finding-original-steward-delegations、docs/development/design.md 的阅读连续性、来源隔离及按需展开要求,基线 98c4ba315d98c7e79b16f1ae184c5dd120d54a20。

Criterion Disposition Symbol / path Validation
原对话完整正文、原来源与只读浏览 implemented OriginalRequest 同 Turn / 外 Session / 原生 Inbox 返回 / 零浏览器写入
同来源阅读连续性与可恢复读取 implemented ConversationRequests.load 两页原子刷新、焦点/滚动、失败与快照变化后重试
不把其他来源迟到内容带入当前查询 implemented 原 AbortController/generation + reader source key 关闭、查询改变、外 Session 与读取失败负例

提交前读过现有 owner、调用者和设计规范;复用原 API、原 SQLite/Inbox fixture、同一列表与展开组件。无新增协议字段、调度、执行者、消费者或外部消息。

Scope And Continuation

本切口解决刷新期间阅读状态丢失,并让打开的原对话读取后续返回。原有自动会话更新沿既有 refreshKey 触发;手动刷新沿原入口。已加载页按同一 snapshot_digest 成批更新,变化时明确失败重试,不拼接混合快照。关闭 reader/dialog 中止读取。

原完整双向发送、所有渠道卡片和线程映射、长期原生稳定性仍属原同步工作的后续范围;这次不声称完成它们。当前边界可独立撤回与验收。相关重构仅收拢现有分页更新和一次打开聚焦,不引入共享状态框架。

Validation

  • Tested revision: eba66337b1230799816b05813bb1b3c928038389;不可变基线 98c4ba315d98c7e79b16f1ae184c5dd120d54a20。
  • Run state: finished。
  • Input classes: synthetic, public_fixture, authorized_private_read_only。
Check kind Result Evidence / limitation
static passed Chat bundle build / TypeScript check、git diff --check
real_backend / integration passed delegation-media-browser-smoke.mjs:生产 SQLite、Inbox、HTTP 与打包页面;整页读取、两页刷新、原生返回、错误与恢复、关闭/查询迟到、双语与窄屏;浏览器零非 GET
regression_parity passed 同一最终 oracle 在基线因展开状态丢失失败,在本头通过;图片/完整正文先通过才到达该失败
integration passed delegation-search-browser-smoke.mjs:搜索/分页/计数/返回历史/恢复/旧响应及工作区隔离;补齐当前 Chat 导航及 fixture 无 Lark 绑定声明
real_entrypoint passed 已在实际安装 App 原入口只读复现刷新丢失原对话;本头安装采用尚待后续独立验收
manual passed 下方公开合成桌面、窄屏与失败状态逐图检查

初次搜索 smoke 停在旧入口,未运行其断言;修正 fixture 入口后通过。初次新增测试包含选择器和刷新完成时序问题,已修正并保留失败记录;未将这些当作产品缺陷。原安装运行内容、长期成本和真实新双向发送不由合成验证代替。

Frontend / Visual Evidence

  • UI impact: changed。布局/文案不变;同来源刷新不再移除阅读区域。
  • Before:原对话被刷新折叠。

刷新前版本丢失展开状态

  • After / first viewport:本头打包页面,真实 SQLite/Inbox,合成数据;没有新增配置或确认。

桌面原对话刷新后可见原生返回

窄屏原对话刷新后可见原生返回

  • Source data: synthetic。桌面 1440×1000、窄屏 390×844;完整返回与上下文同页,失败/未知提示和刷新/重试继续沿原入口。没有新增卡片、颜色、说明层或布局;正文保持可读,减少刷新后再次展开的操作。

Type of Change

  • Bug fix
  • Documentation update
  • Test update

LoopX Area

  • Public docs or presentation surface

Shared-authority RFC fixture impact

N/A:不修改共享 authority、Core 状态、存储或协议;保留原 API/source owner。

Boundary Checklist

  • Diff、正文与截图仅公开合成数据;无私有运行状态、凭证、内部链接或本机路径。
  • 范围仅当前 reader 修复与对应验证;不重复 benchmark 工作。
  • 无成对 RFC 修改;提交包含 DCO。
  • UI 前后及窄屏证据已列,实际安装采用另行核验。

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.1-sol · OpenAI · runtime_reported · reasoning_effort=max

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

动机 / Motivation

正在委派列表中阅读原对话的用户会遇到此问题。刷新委派时,旧页面卸载列表,正在看的原对话关闭;当前头保留同来源的阅读位置,并把原生返回读进已经展开的原对话。已验证两页列表整批更新、展开状态与输入焦点及滚动保留,真实 Inbox 返回全文无需再展开即可读到。本次不修改权限、业务执行、外部发送、后台轮询周期或模型调用。完整双向新发送、所有卡片与线程映射、长期原生稳定性和本头安装采用仍待后续独立验收。这是作者自审,不是独立审核或 GitHub formal approval。原来已经可读的证据不应因一次只读刷新而要求用户重新定位;本头交付这一独立可用的改进,没有把整体同步任务说成完成。

改动思路 / Approach

来源和分页仍由原 API 与 native owner 决定,组件仅保留同来源的阅读投影并在读完后一起替换,失败清空;没有第二份业务权威。当前切口覆盖已加载页、打开的原对话、迟到取消和失败恢复;完整同步计划继续由原任务承担。仅删掉清空列表一行,仍会丢失第二页,已展开的原对话也不会收到新的正文;全局缓存、另一个服务和新后端协议则带来更大的来源失效和维护成本。当前头在原组件里对已加载页做有界完整读取,成功后一起替换,依靠稳定请求 key 保留展开。关闭原对话或整个对话框立即取消读取,不创建后台轮询。

同一触发 旧版 当前精确头
同来源刷新 原对话折叠 保留展开和已加载页
原生结论到达后刷新 重新展开才可看 原位读取完整返回
外来源、迟到或混合快照 保留来源隔离要求 拒绝、清空并可重试

这张表解释实际验证的路径,不是另造执行证据。已有用户意图和授权不需要重新澄清、确认、复制或设置;普通导航不变,同来源刷新省去重新展开请求和原对话两个动作。

具体改动 / Changes

关键代码讲解

ConversationRequests.load(apps/presentation/dashboard/src/features/personal-workspace/conversation-requests.tsx:205)先比较查询范围和真正解析的源 Session;相同来源保留已核验行,其他来源清空。它按已加载页数有界读取,要求一个 snapshot_digest 和持续前进的游标,全部成功才发布。旧 More 游标失效时沿现有路径从头读取一次,重读仍变化则明确失败,不能拼接混合数据或无限重试。成功后更新的是局部阅读 revision,不是业务送达版本。

OriginalRequest(同文件 :139)沿原 fetchChatSession 读取完整正文,核对返回 Session 后只选原 Turn。源 key 变化重建 reader,原 AbortController 使关闭或过期结果不能写回。有效刷新使已经展开的原对话重新读取;只有第一次打开主动聚焦和滚动,随后更新不抢搜索输入的焦点。错误清空旧正文并给出提示,原图片渲染、主会话历史和业务回执 owner 不变。

规范是 docs/development/frontend-delivery.md#finding-original-steward-delegations,spec_revision=98c4ba315d98c7e79b16f1ae184c5dd120d54a20。条款 finding-original-steward-delegations 在本头为 implemented:完整原对话、原来源、明确不完整/失败与沿原查询重试、浏览不执行,映射现有 reader 与实际打包验证。这里没有从别的视图设计段落推导新权限。

两个现有 smoke 复用生产 SQLite、Inbox 和 HTTP fixture。新结论由原生 Inbox drain 追加,route 仅丰富第一条原文/图片和注入失败,不能伪造所测 native 返回。搜索 smoke 补了当前 Chat 导航及 fixture 无绑定声明,保留原搜索、分页、返回历史、迟到和工作区隔离断言。README 与三张新增截图只有公开合成数据。

对主干的风险 / Risks

最强反例是为了保留阅读而误留旧来源,或在两页间发生返回时发布半批数据。本头的范围、Session、Turn、digest、游标和 generation/abort 共同约束这些分支。外 Session、其他 Turn、503、坏图、关闭/查询变化后迟到、第二页快照变化及重试已通过真实打包入口;展开状态始终不能代替服务授权。

多个打开的原对话会增加既有完整 Session GET 的读取量;没有测生产 p95、全运行字节或费用,也不声称降低这些成本。没有新增循环或消费者,关闭对话框中止读取,回滚无需迁移。目标分支新增 qualification/settlement 改动不重叠此 reader/API,实际安装合入版本仍需独立验收。

PASS:同一最终 oracle 在不可变基线因展开丢失失败,在当前打包矩阵通过;完整搜索回归和35项相邻 native inventory/bundle 检查通过。预合并四项直接和十五项选定检查无自动失败;三张 PNG 产生 manual hold,已逐图检查合成来源、像素和仅 IHDR/IDAT/IEND chunks。exit1 保留,不能称全自动绿。早期测试时序、选择器、禁用按钮焦点和清理错误均保留,最终断言保留对应不变量,没有删断言或放宽阈值。按当前政策不查询或等待远端 CI。

我的整体评价 / Verdict

未发现阻塞 eba66337b1230799816b05813bb1b3c928038389 的缺陷,APPROVE。长程阅读为 improved:原生返回和累计页可继续读,失败有界恢复,无第二执行者。用户体验为 improved:零新增准备或确认轮次,同来源刷新减少重复展开。逐图检查公开合成的刷新前折叠、桌面原生返回和窄屏长内容;页头、查询与全文层级清楚,失败和重试仍沿原入口,无新增卡片或说明噪声。未把合成截图称为实际安装、真实外部发送、所有卡片或长期运行验收。

来源和分页仍由原 API 与 native owner 决定,组件仅保留同来源的阅读投影并在读完后一起替换,失败清空;没有第二份业务权威。当前切口覆盖已加载页、打开的原对话、迟到取消和失败恢复;完整同步计划继续由原任务承担。同域重构已收敛到原组件,不需要全局缓存和公共协议;无新增 actor、authority、持久版本或核心义务。三张图的人工项已具体核验。本头安装、原服务实际新返回与剩余同步要求仍要沿正常采用和原 owner 验收,作者自审不替代它们。

English verdict: APPROVE — eba6633; the reader-loss regression fails on the immutable baseline and passes the packaged native-backend journey, with negative cases and adoption gaps retained.

@loopx-agent
loopx-agent merged commit 9558f75 into main Oct 27, 2026
13 of 35 checks passed
@loopx-agent
loopx-agent deleted the codex/delegation-reader-refresh-20261028 branch October 27, 2026 23:26
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