893df42d29f1db6017818b8d1f16d57f0a408330
When a room is opened, load its stored history and keep it live so reloading no longer loses the conversation. - bus.subscribeRoom (used by ChatPanel) now runs subscribeRoomWithHistory: it subscribes live immediately but buffers live messages until the history batch (oldest -> newest) is delivered, guaranteeing history-first order regardless of timing; both halves are deduplicated by frame id via a per-room Set. If the history endpoint is absent (404/500), it falls back to live-only as before. - toMessage maps an opened frame to the UI Message using ulidTime(msgID) for ts (not arrival time), so history and live share one clock and sort correctly; ChatPanel keeps its list ordered by ts. - Sidebar previews: loadRooms seeds each room's last message/time from history(id, 1) in the background, without blocking the render and without overwriting a newer live message; empty rooms keep the "—" placeholder. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Description
Synced from fn_registry
Languages
TypeScript
99.6%
JavaScript
0.2%
HTML
0.2%