Files
mnote/bugs/03-rust-web/done/3-16-tree-realtime-ws-sse-doc-contract-drift-v1.md
T
lix-2026 a2cb1338c8 chore: 保存当前架构收口与 bug 修复快照
归档本轮 P0/P1 bug 修复、设计审查迁移、AI selection scope 收口与 stream contract 调整,并保留当前 05 主线迁移起点。
2026-05-18 17:01:35 +08:00

2.3 KiB
Raw Blame History

3-16 [done][bug] tree realtime WS 主链口径与前端 SSE 实现不一致 v1

发现时间:2026-05-17

状态:[done]

关联主线:03-rust-web

1. 问题定义

当前架构口径已描述 /api/realtime/ws 是树实时 push 主链,/api/tree/events 是 SSE fallback。但前端真实代码仍只发现 EventSource('/api/tree/events') 消费链路,没有发现 /api/realtime/wsnew WebSocket 主 consumer。

2. 证据

3. 影响

  • 架构文档与前端运行路径不一致。
  • live cache 收口时无法判断真实主链。
  • 回归测试如果只检查后端 WS route 存在,会误判前端已切换完成。

4. 建议修复

  • 明确当前阶段:要么更新架构口径为“前端仍 SSE,WS route 已准备”,要么实现前端 WS consumer。
  • 增加浏览器 smoke,断言网络中实际使用的是 WS 主链还是 SSE fallback。
  • 文档与测试必须以真实前端消费路径为准。

5. 修复

已修复 / 已收口:

  • layout.rs Rust SSR 主壳内置 startWithWebSocket,实际创建 /api/realtime/ws WebSocket consumer。
  • layout.rs WebSocket 断开后调用 startWithSseFallback/api/tree/events 明确成为 fallback。
  • layout.rs SSR tree live bootstrap 默认 transport 已是 convex-command-log-ws,不再默认走 SSE。
  • layout.rs 增强回归测试,断言 controller 同时包含 WS 主链与 SSE fallback。

6. 验证

cargo test --manifest-path rust/Cargo.toml -p mnote-web tree_live_controller_marks_transport_and_closes_source_on_pagehide -- --nocapture

结果:1 个测试通过。