db1d63cdcc
The readest#4727 regression test set scrollTop=0, dispatched a synthetic wheel, waited 60ms, then asserted scrollTop stayed 0. On slow CI runners it flaked with "expected 4 to be +0". As sibling scroll pages finish loading, the renderer runs restoreScrollModeAnchor asynchronously, which at scrollTop=0/page-index-0 snaps scrollTop to page 0's offsetTop, the 4px scroll-page-gap margin. The 60ms post-dispatch delay raced that re-anchoring, so the assertion observed 4 instead of 0. That 4 is unrelated to the wheel bug, which is a 120px jump. The buggy handler was scrollBy with instant behavior, a synchronous scroll that lands before dispatchEvent returns. Measure scrollTop synchronously before and after the dispatch with no await in between and assert they match. This isolates the wheel handler's own effect and is immune to the async re-anchoring. Reintroducing the bug still fails the test (before=4, after=124, a clean 120px delta). Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>