Files
mnote/bugs/05-editor-mainline/done/5-16-sidebar-preferred-snapshot-query-overrides-live-stream-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.2 KiB

5-16 [done][bug] Sidebar preferred snapshot 中 query 可覆盖 live stream v1

发现时间:2026-05-17

状态:[done]

关联主线:05-editor-mainline

1. 问题定义

Sidebar 同时启动 query/live/initial 与 tree stream,并通过 preferred snapshot 选择最终数据源。当 querytree_stream 版本相同但内容不同,当前 freshness / syncKey 逻辑可能让 query 压过 live stream。

2. 证据

3. 影响

  • Sidebar 仍存在 Convex live / HTTP / Rust stream 多链抢真相。
  • 同一版本但不同内容时,用户可能看到旧树或非 Rust stream 结果。
  • WS / SSE 收口后仍可能被 query source 覆盖。

4. 建议修复

  • 明确唯一预期来源:当 Rust stream 可用时,应由 stream 成为主真相,query 仅初始化或 fallback。
  • 同版本不同内容时必须记录诊断事件,而不是静默按 freshness 选择。
  • 增加单测覆盖同版本冲突。

5. 当前主链修复状态

  • 原证据指向的 wolai-frontend/src/components/sidebar/use-preferred-sidebar-snapshot.ts 已不在当前运行主链;当前仓库中该路径不存在,只在 recycle/ 下保留历史副本。
  • 当前 3000 主壳由 Rust SIDEBAR_TREE_JS + TREE_LIVE_CONTROLLER_JS 消费 WS/SSE tree snapshot / delta,不再使用 retired React usePreferredSidebarSnapshot 选择器。
  • layout.rs 增加防回归测试,断言当前 sidebar runtime 不包含 usePreferredSidebarSnapshotpreferredSidebarSnapshotliveSidebarTitle

6. 验证

  • cargo test --manifest-path rust/Cargo.toml -p mnote-web sidebar_tree_runtime_does_not_use_retired_query_preferred_snapshot_selector -- --nocapture
    • 结果:1 passed