mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-20 01:21:41 -06:00
2ebaebd484
* fix(ui): re-attach chat virtualizer when a foreign host re-stamps the transcript Switching a board session from Dashboard back to Split left the docked chat pane blank (sizer-height empty space, no rows) until an unrelated state change re-rendered the pane or the user scrolled. Root cause: the transcript template is stamped by openclaw-chat-sidebar-region (it receives the chat template as a property and renders it in its own, later update cycle), but the TanStack virtualizer only re-resolves its scroll element inside the pane host's update. After the face-switch re-stamp no pane update follows, so the virtualizer stayed detached: scrollElement null, scrollRect zeroed by the hide transition, calculateRange null, zero rows painted. Fix, at the owner (ChatSessionVirtualizerHost): attachment now follows the DOM identity the scroll-element ref records — an identity change queues a microtask that re-runs the virtualizer adapter's update hook. Zero-size rects from hide transitions (display:none sidebar panels, unmount teardown) are ignored so they can no longer wipe measured row heights or become the virtualizer viewport. Live-verified against a remote gateway where the broken state persisted 5+ seconds pre-fix and one attachment sync healed it. Regression tests fail pre-fix; e2e covers the deferred-latency dashboard->split flow. * chore(ui): raise startup JS baseline for transcript virtualizer re-attach fix Measured 333338 B gzip on PR #123974 run 31861214469 (+345 B over the base run 31860496921 at 332993 B; prior baseline 332040 B predates recent main drift). Absolute 350 KiB maintainer cap unchanged. Growth is the foreign-host attachment sync in chat-transcript-controller.ts — real fix code, not speculative surface.