Files
cc-web/.trellis/tasks/10-14-session-switch-timeout/findings.md

2.1 KiB
Raw Blame History

调查发现

  • 继承调查确认切换经 WebSocket load_session,服务端 handleLoadSession。
  • 前端 12 秒释放遮罩、45 秒取消请求;目前尚未有请求级日志证实现场根因。
  • 浏览器显示 OPEN 不等于连接可收发;后台会话 running 与页面连接状态独立。
  • 待核查:切换请求在重连后的恢复、晚到响应、loadSession 渲染异常以及历史读取异常。
  • 用户拒绝继续只补重试、重连和日志;此次交付改为 HTTP 首屏及分页、WebSocket 独立实时订阅。
  • 不能断言 WebSocket 必然超时;已证实架构把历史读取与单条长连接绑定,原日志不能确认每次现场超时的唯一原因。
  • 已确认目录连续分页和单条定位也发送 load_history_page,必须一并迁移。
  • 新契约:GET /api/sessions/:id(首屏12条及运行态快照)、GET /api/sessions/:id/history?before=...(24条);subscribe_session 只绑定实时连接,按修订号检测读取与订阅之间的提交变化。
  • HTTP 查询不协调跨会话、不清未读、不扫描原生日志;实时订阅清未读并协调跨会话。归档异常不能吞成404;仅缺失会话返回404。
  • 可复现证据:隔离 Firefox 将 WS 业务帧黑洞化且保留 OPEN,首屏和运行输出仍经 HTTP 显示;主动断 WS、拒绝重连后仍可切换和查看。
  • HTTP 读取已完成但尚未订阅时,任务可能刚好完成;订阅比较历史修订并触发 HTTP 对账。已经接到 done 后的旧快照也须按完成版本重新读取,防止生成状态复活。
  • 除首屏外,目录、定位和手动分页全部迁移;只改首屏会遗留同类连接依赖。
  • 错误归类:跨层契约和隐含连接假设。重试/重连只能改善连接恢复,不会取消历史查询对长连接的依赖。新回归直接注入假 OPEN 和消息交错,避免只验证 ws.send 被调用。
  • 范围限制:同步磁盘及 JSON 处理未整体异步化;旧版存储自身迁移仍由存储层负责,不能把通道拆分描述为所有服务端阻塞都已解决。