Skip to content

fix(chat): allow verified history reads to finish - #8103

Merged
loopx-agent merged 2 commits into
mainfrom
codex/chat-history-read-deadline-20261105T081042007
Nov 5, 2026
Merged

loopx-agent merged 2 commits into
mainfrom
codex/chat-history-read-deadline-20261105T081042007

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

Goal And Delivered Outcome

原会话恢复给历史分页及读完后的 fresh source 复核设置了 5 秒交互时限。忙碌服务的有效慢响应因此被判成读取失败,完整历史无法展示,页面持续恢复并禁止发送。现在这条只读恢复链路统一使用每次 30 秒截止时间。

  • Outcome basis:本 PR 描述的可复现恢复故障;目标 base 为 main。
  • Before → after:5.2 秒有效响应会丢失历史;修复后完整读回,调用方提前取消及原来源复核继续生效。

Author Declaration

  • Written by: model_agent — GPT-6 family / Codex (OpenAI).
  • Specification and revision: no written specification; the request in this PR is the basis. Base 76cc8d0d6515691105538863340e89f00551e05c。
Criterion Disposition Symbol / path Validation
有效慢历史页可以恢复完整原会话 implemented fetchChatSessionHistory 真实 HTTP 延迟页;主干实现反例失败
读完后的原来源必须重新核验 implemented fetchChatHistory 延迟末尾来源复核、撤权、关闭与失效来源拒绝
调用方可提前取消,读取不启动执行 implemented 原有组合 AbortSignal 与分页契约 提前取消、只读 GET 和零读取侧 Turn 回归

Self-check:已读完整 diff、既有分页/来源契约及相关调用;没有扩大写入、执行、存储或权限语义。

Scope And Continuation

本次完成历史恢复截止时间的一致性修复。它复用现有只读路径,兼容 bound 与 managed Session;后端读取时延与持续稳定性继续沿既有维护工作验收。该边界可独立验证和回滚,不声明整体性能提升。

Validation

  • Tested revision: 5efb043e3d8809dd4e9fac137a3984197d8578db,已合入最新队列修复作为依赖后重新验证。
  • Run state: finished.
  • Input classes: synthetic, authorized_private_read_only.
Check kind Result Evidence / limitation
static passed TypeScript tsc --noEmit、Python 编译、diff hygiene、RFC mirror 检查
integration / real_backend passed smoke:bound-conversation:真实 HTTP/SQLite/Core,延迟历史页、延迟末尾来源复核、提前取消和 steward fallback 原身份
integration passed smoke:conversation-history:完整分页、来源/前缀冲突、晚到修订、缺失快照恢复与零读取侧写入/Turn
regression_parity passed 同一新增测试加载旧主干恢复实现,因历史变空而失败;当前实现通过
real_entrypoint passed 打包界面与真实隔离后端,在相同 5.2 秒慢响应下完成历史恢复;截图见下
static diagnostic failed 标准 premerge 的 5 项直接检查通过、4/5 catalog 通过;todo-readmodel-boundary-smoke.py 因已有 loopx.status.open_todo_items 缺失失败,基线同样失败,相关实现不在本 diff 中。完整 gate 未标为通过
public boundary passed 公开源码与本文的独立公共边界扫描通过;原始私有读取证据未发布

Coverage:30 秒为每个读取请求的上限;更长服务故障仍应可见。没有把单次实机恢复、合成延迟回归或安装前验证作为持续稳定性验收。预合并诊断的既有失败保留,不通过修改测试/策略消除。

Frontend / Visual Evidence

UI impact: changed(恢复失败与可继续输入的既有状态);布局、样式与响应式规则沿用现有实现。

Before:旧 5 秒恢复实现,打包界面、真实隔离 HTTP/SQLite 后端、14 条中英混合合成历史、1440×1000。该恢复逻辑在当前 base 中保持相同。

Before: slow valid history reported unavailable

After:5efb043e3d8809dd4e9fac137a3984197d8578db 的打包界面与同一类真实隔离后端,5.2 秒延迟后完整报告可读,输入区可继续发送;截图中的草稿仅用于检查按钮,未发送。1440×1000。

After: original history and input restored

Attention/craft:对话和完整报告仍为主要阅读区;错误与重试入口保持可见,没有增加字段、提示段落或卡片。已读完代表性长报告,并检查失败与恢复状态。窄屏布局未变;未声明新增响应式覆盖。临时预览随测试后端结束而关闭。

Type of Change

  • Bug fix
  • Test update

LoopX Area

  • Public docs or presentation surface (dashboard)

Technical Direction

Operator surface and IM integration:保持原会话与原业务执行所有者,修复只读恢复。

Shared-authority RFC fixture impact

N/A:未迁移控制面或变更 shared authority、provider routing、持久化协议。

Boundary Checklist

  • 源码、本文及截图仅包含公开代码或合成数据;无私有配置、原消息、日志、凭据或本机路径。
  • 改动保持在上述恢复故障范围,未重复维护者的 benchmark 工作。
  • 无 paired RFC 改动,已运行本地镜像检查。
  • 已提供相关失败/恢复首屏与数据、构建边界。
  • 本 PR 作者提交含 DCO Signed-off-by。

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…ad-deadline-20261105T081042007

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)

未发现阻塞本改动的缺陷。主干已有一项无关 canary 失败,下面保留其归因与独立验收;完整 premerge gate 没有被标成通过。

动机 / Motivation

打开原会话并继续发消息的 App/Chat 用户遇到了一个真实的恢复失败。当历史页或读完后的来源复核耗时超过 5 秒但仍有效时,旧版会把原历史丢为不可用;当前版本允许 30 秒内完成并恢复输入。同样的 5.2 秒慢响应能展示完整历史与完整报告,输入区恢复可用。

本 PR 不承诺消除服务端延迟,也不声明历史消息业务全部完成或管家已通过持续稳定性验收。服务端时延、初始来源发现与队列观察各自保留原责任边界,持续稳定性继续由既有维护工作验收。这是一项可独立采用和回滚的恢复增量,用户无需重建会话、重发已有上下文或增加一次确认。

改动思路 / Approach

截止时间属于现有前端读取适配层;完整历史、来源授权和取消仍复用原所有者,没有增加状态或并行恢复机制。本 PR 的边界是有效慢历史的只读恢复;后端性能、业务补执行与最终回传分别沿既有所有者继续。原会话身份、来源权限、完整消息前缀与分页摘要仍由原来的 Core 与读取适配层核验。等待更久不能替代这些核验,尤其不能在读完后省略 fresh source 检查。

最强反对理由是:延长超时不能解决后端慢,也会延长服务失效时的等待。这里有独立证据支持这个有限边界:只延长历史页的对照仍在末尾来源复核处失败;统一历史链路后,真实原会话才可完整读回。提前取消继续生效,写入和执行路径没有接到新的恢复逻辑。

具体改动 / Changes

没有独立书面规格;本 PR 中的可复现故障与三条验收要求是评审依据,未编造 RFC 条目。审查版本为 5efb043e3d8809dd4e9fac137a3984197d8578db,当前 base 为 aa82591fb0a129f3ea9cc5e67343e742899c7ccd,整个 diff 为三个文件、+64/-6;新增回归复用已有 HTTP/SQLite/Core harness,未引入第二套存储或消费者。

关键代码讲解

  • fetchChatSessionHistory(L1058) 把页读取截止时间改为共享的 30 秒,同时保留调用方 AbortSignal。原 Session/Turn、每页偏移、完整前缀摘要及重复消息检查仍逐项执行,部分结果不能成为完整快照。原消息展开和队列输入读取都沿用这个函数;队列编辑调用方的显式短截止时间继续优先。
  • fetchChatHistory(L1210) 在读取前与发布前继续查询原来源,并统一使用历史读取的截止时间。只修分页不足以修复这条路径;这次补上末尾复核的实际慢响应回归。既有历史 hook 继续决定失败后的重试和输入可用性,没有新授权或重放路径。

已检查 bound、managed、直接原 Turn 及队列编辑读取等现有调用,接受的消息内容、分页顺序、拒绝与撤权语义都保持原契约。默认变化明确为历史读取 5 秒到 30 秒;初始绑定发现、队列观察和显式调用方短截止时间维持原边界。

对主干的风险 / Risks

PASS:当前精确版本的 Chat bundle、类型检查、原会话真实 HTTP 回归及完整历史回归通过。5.2 秒历史页、5.2 秒读完后的来源复核均保留完整消息;50ms 调用方取消仍拒绝。旧主干数据所有者在相同新增测试下丢失历史,得到 actual [] 与 expected 两条原消息的断言失败,因此测试并非只复述新实现。

PASS:拒绝已撤权、已关闭、失效来源、旧服务忽略选择器以及游标/前缀冲突;读取不创建替代 Session 或 Turn。打包界面在相同慢响应下恢复完整报告和可输入状态,截图使用合成数据,公开附件也已独立读回。

FAIL(独立归因):标准 premerge 的五项直接检查通过,catalog 为四项通过、一项失败。todo-readmodel-boundary-smoke.py 在不可变 base 与当前 head 都因 loopx.status.open_todo_items 缺失失败,相关源码逐字相同,本 PR 不改变其因果路径。该失败未被删除或改限额;当前历史、来源和取消不变量已有独立通过证据。按当前评审策略,它不构成本 PR 的实现阻塞,合并资格仍单独检查。CI 按 Goal 的 wait_for_ci=false 未查询、未等待,也未推断远端状态。

剩余风险是读取失效时可能等待至 30 秒,以及服务端时延本身仍未达成持续验收。原超时与重试 UI 保留,超过上限继续显示失败,不把延长等待说成性能提升或整个管家修复完成。

我的整体评价 / Verdict

结论为 justified_increment:这条恢复路径已通过真实调用边界和前后反例验证;长期工作维持原会话、原承诺和原执行者,用户体验在有效慢响应场景得到改善。改动复用现有读取所有者,没有加入新的权威状态、协议或默认启用开关,规模与已验证故障相称。

已检查 14 条中英混合合成历史的失败首屏与恢复首屏,并读完代表性长报告;恢复后内容与输入成为可用的主要交互区域。未新增窄屏布局验收;本次没有改动响应式规则、样式或折叠交互。持续运行稳定性及安装后状态不由这些截图证明。完整 premerge 的既有失败继续保留,服务端与原业务后续仍按原责任边界验收。未观察到需要本 PR 立即再拆分或新增机制的理由。

English verdict: APPROVE 5efb043. Valid slow original-history reads recover with fresh source checks and caller cancellation preserved. Focused real-path regressions pass; an independently reproduced unchanged base canary failure and separate merge readiness remain disclosed.

@loopx-agent
loopx-agent merged commit 1280335 into main Nov 5, 2026
15 of 38 checks passed
@loopx-agent
loopx-agent deleted the codex/chat-history-read-deadline-20261105T081042007 branch November 5, 2026 09:24
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