f3c3e08be4
User's insight: the jank/jumps come from rendering ALL ~500 messages on open. Load only the latest 40 (server + client PAGE), and the existing loadOlder() pages in older history on scroll-up with a scroll anchor (no jump). Whole-thread SEARCH is a separate endpoint, unaffected. Also #1: keyboard-show only pins to newest when already near the bottom, so replying to an OLD message no longer yanks to latest. Build marker -> 2026-07-18-batch120. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>