WebKit scrolls off the main thread, and under load the view's scroll event
fires before the wheel that caused it (probe: scroll at 518ms, wheel
dispatched at 521ms with timeStamp 517ms). The scroll guard took the scroll
as no one's and put it back. Each put-back is now kept for a second, and a
trusted wheel or touchmove made before it was put back, going the same way,
gives it back. A scroll by code put back before the input was made stays put
back.
click-scroll.test.cjs "a wheel the page hears of after its scroll is still
the reader's" delays the app's own wheel listener by 60ms (the trusted
event kept), with nothing clicked and with a click held, and checks a
code scroll before the wheel stays put back. Without the fix it fails in
Chromium and WebKit: "the late-heard wheel must scroll the view".
Run: click-scroll, context-scroll-end, tray-cell-click, panel-arrange in
Chromium and WebKit, all green. panel-arrange 28 parallel WebKit runs
(load avg ~150-200): origin/main 20/28 runs failed (:89 wheel undone x4,
:147 Done x25); old app.js plus the test fix, 5/28 runs failed (:89 x6);
both fixes, 27/28 and 28/28 (the one failure a page.goto load timeout),
Chromium 28/28. Full GUI suite, both engines: the remaining failures are
login-import, routing-sessions and plugin-market, which fail or pass the
same way alone on origin/main. go test -tags nogui ./internal/gui ok.