529bc26cb5
Slide (workflow-verified): the jump was the main thread building the message DOM + scroll writes DURING the 300ms animation. Now: render off-screen first, then arm a transform-only slide on a promoted GPU layer (translate3d/contain:layout paint) with all innerHTML/scrollTop work deferred to transitionend (afterOpenSlide queue). armOpenSlide runs after the sync render; appendBubble defers live writes mid-slide. Load-older jump: anchor on the specific oldest-loaded message element (not scrollHeight math, which broke when prepended images loaded and shifted content) and re-anchor as those images load. Removed all /api/dbg diagnostics (client reporter + server route + spike/diag probes). Build marker -> 2026-07-18-batch121. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>