Repository navigation
Resume Chat history after an interrupted response body - #8625
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 · gpt-6.1-sol · OpenAI · runtime_reported · max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
评审提交 0f9efb31fb7310137e3203d5600540551c5f5e1d。
动机 / Motivation
用户在 Chat 打开已绑定的长会话,希望读完原来那段对话。如果已读到第 400 条,下一页收到 HTTP 200 响应头后连接断开,主干会丢掉已核验的分页,从开头重新读取。修复后重试从中断的分页继续,完整历史按原顺序出现。本次交付聚焦已有 Chat 历史读取的故障恢复,来源校验仍由原会话读取入口负责。
改动思路 / Approach
请求层已有错误类型和 HTTP status,历史层已有待验证的内存进度。修改历史层的单一判断即可覆盖两处真实调用。修改范围是已知的正文传输错误,仍由同一 Session 和绑定流程验证可读结果。 当前重试使用内存里的最后一个已验证游标。若分页已全部完成而末次绑定读取断流,下一次成功核对同一来源和版本后才向当前会话视图返回快照。对照同一 452 条会话和两次真实断流,分页请求由 8 次降到 5 次。 历史恢复入口 · 最后一次来源检查
具体改动 / Changes
关键代码讲解
requestJson已在response.text()失败时留下chat_api_unavailable和响应状态。正文收完后的坏 JSON 会得到invalid_chat_api_response。 请求层实现historyTransportUnavailable补上严格匹配的 200 状态。fetchChatHistory因此保留pendingReads,或者暂存已读完但待复核绑定的快照。读取仍经过原 Session、游标和内容摘要验证。 分页核验 · 恢复判断interruptedHistoryBody在原 smoke 中令响应流报错。后续 200 用例检查 400 条仅保存在内存,403 用例检查丢弃进度后从第零页重读。 恢复 smoke · 拒绝 smoke
交付约定中,resume_verified_prefix 由两次断流后的续读验证,private_until_verified 由待核验快照的不可用状态验证,invalidate_bad_source_or_page 由无效页、过期游标和来源撤销验证。 docs/development/frontend-delivery.md
对主干的风险 / Risks
PASS。用同一生产 Chat HTTP/SQLite fixture 对照 base 和 head,代理发送 200 响应头和一部分正文后断开 TCP。旧提交的保留断言得到 0、0 条。新提交保留 200、400 条,最后逐条读回原 452 条。若断流发生在末次绑定检查,恢复时只请求来源。
PASS。403 正文断流、完整坏 JSON 和错误 digest 均清理游标。改写原历史后服务拒绝旧游标,下一次从第零页读回新原文。绑定撤销时只发生来源 GET。Chat 构建、bound/steward fallback smoke、140 项 manager-context 测试和 quick canary 通过。远端 CI 为 UNVERIFIED。
语义与 CI 对齐
复用现有传输错误码、HTTP 状态与来源校验。可用性仍由完整历史和当前绑定推导,用户可沿既有读取流程继续。 发送资格与读取状态
我的整体评价 / Verdict
这次修复完成了原会话断流恢复这一独立交付。连续重试可以积累已验证的读取进度,用户在当前来源确认后得到原顺序的完整历史。检查了 apps/presentation/dashboard/src/data/chat.ts、apps/presentation/dashboard/src/data/use-conversation-history.ts 和 smoke 的路径。界面沿用现有历史状态、重试控件和发送权限的计算。验证覆盖构建后的代码和真实本地 HTTP/SQLite 读取,安装态和现场网络分布仍待独立验证。
English verdict: APPROVE. At 0f9efb3, matched HTTP/SQLite runs reproduced the lost checkpoint on base and recovered the same 452 rows on head, with denied and invalid sources rejected.
Summary
Keep verified pages in the bound Chat history reader when the response body is interrupted after successful headers. The next source-verified read resumes at the missing page.
Verification