Fix #227: SSE reconcile pinned windows #228

Merged
crueber merged 1 commit from fix/issue-227 into main 2026-09-09 12:52:24 +00:00
Owner

Remote SSE events refetch only the newest-50 view, which slides forward while pinned older windows stay put — the evicted boundary row(s) holed the assembly (rendered 0..64 missing seq 14) and more() kept lying until reload. Own mutations keep reload() (drop extras); the live path now carries the evicted tail onto the extras head via reconcilePinnedWindow (web/src/lib/thread-order.js, wired by a view-tracking effect in Issue.jsx): history preserved, viewport untouched, zero extra round trips. Tests: node --test web/test/unit/*.test.js 442/442 green (incl. 4 new reconcile tests: one-event hole, multi-event slide, no-op cases, no-mutation). Decision appended to docs/features/02_issues.md. Browser verification open (no runnable browser daemon in this env). No new deps.

Remote SSE events refetch only the newest-50 view, which slides forward while pinned older windows stay put — the evicted boundary row(s) holed the assembly (rendered 0..64 missing seq 14) and more() kept lying until reload. Own mutations keep reload() (drop extras); the live path now carries the evicted tail onto the extras head via reconcilePinnedWindow (web/src/lib/thread-order.js, wired by a view-tracking effect in Issue.jsx): history preserved, viewport untouched, zero extra round trips. Tests: node --test web/test/unit/*.test.js 442/442 green (incl. 4 new reconcile tests: one-event hole, multi-event slide, no-op cases, no-mutation). Decision appended to docs/features/02_issues.md. Browser verification open (no runnable browser daemon in this env). No new deps.
Sign in to join this conversation.
No description provided.