Skip to content

Agent chat: the WebKit scroll-up test reads the offset after the wheel glide settles (base red) - #23062

Merged
teamleaderleo merged 3 commits into
feat-cmux-nextfrom
scroll-jitter-2/webkit-scroll-up
Oct 21, 2026
Merged

teamleaderleo merged 3 commits into
feat-cmux-nextfrom
scroll-jitter-2/webkit-scroll-up

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes the base red in webviews/test/agent-pane-stream-jitter.test.ts: "webkit: scrolling up while a reply streams is never pulled back".

Root cause (test timing, not the pane): Linux WebKit (WPE, which CI runs) animates a wheel step over several frames. The case read scrollTop 150ms after wheel(0, -400). On a loaded runner that read landed mid-glide, so the rest of the glide looked like a pull-back. A per-frame trace from CI on this PR's first head showed it:

  • the wheel at 605, then scrollTop 582 → 476 → 365 → 220 → 205 over ~330ms
  • the test read left as 220, 290, 322 or 500 depending on the run
  • then scrollTop held at 205 while the reply grew the content from 1201px to 1507px, with no pull-back toward the bottom

Every run ended at 205, the glide's end, so the pane never moved the reader. macOS WebKit and Chromium don't animate the wheel step here, which is why the case passes locally.

Fix: read the scrolled-up offset once scrollTop has held for 200ms (settledScrollTop), instead of after a fixed 150ms. The rest of the case is unchanged: 600ms after the turn ends the view must still be at that offset and more than 200px from the end, so a pane that re-pins or yanks the reader still fails.

There is no app change, so on base this case fails only where the wheel glides (CI's Linux WebKit). It passed 3/3 locally in Chromium and macOS WebKit.

Agent session: cmux16
🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

…ic, temporary)

The case is red on CI's Linux WebKit only (behind: true, kept: false) and
passes on macOS WebKit under load; the trace shows what moved the offset.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo

teamleaderleo commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator Author

Owned by projects-57 on cmux16 · session

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-g0vgh created for this PR by the cmux coordinator.

@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 628ca9d: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr23062 -f ref=scroll-jitter-2/webkit-scroll-up -f platform=macos -f backend_mode=local

Unclear: web / react-apps-check failed: no known signature; failed step: Check webview test shards. This PR merged before its CI finished: fix forward on main.

CI failed on 628ca9d76a (run 39559101710 attempt 1): 4 code, 1 unknown.

Job Verdict Why
web / react-apps-check (4) code a web test failed
web / react-apps-check (3) code a web test failed
web / react-apps-check (1) code a web test failed
web / react-apps-check (2) code a web test failed
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Failures:

  • seen on other PRs agent-pane-wheel-pass-through.test.ts chromium > the wheel over a long draft stops at its ends and moves nothing else: failed (job)
  • seen on other PRs agent-pane-wheel-pass-through.test.ts webkit > the wheel over a long draft stops at its ends and moves nothing else: failed (job)
  • seen on other PRs chip-fixed-width.test.ts no ellipsized chip, tab or card in the agent pane truncates at a fixed width: failed (job)
  • seen on other PRs composer-history.test.ts ↑ and ↓ in an empty prompt step through the chat's earlier prompts: failed (job)
  • seen on other PRs diff-toolbar-narrow.test.ts at 460 px the base picker's label stays in its chip, clear of jump-to-file: failed (job)
  • seen on other PRs quiet-access-chip.test.ts chromium: Full access draws in the model chip's color: failed (job)
  • seen on other PRs quiet-access-chip.test.ts webkit: Full access draws in the model chip's color: failed (job)
  • seen on other PRs agent-pane-column-edges.test.ts the strip or queue and the card meet square in one rim, and the queue keeps room above: failed (job)
  • seen on other PRs agent-pane-no-capsules.test.ts agent pane page > rounds its controls as small-radius rects, not capsules: failed (job)
  • seen on other PRs composer-suggested-prompt.test.tsx nothing is suggested from another folder, another worktree, a merged PR, an old chat or a busy one: failed (job)
  • ... 16 more in the job logs
Matched log lines
web / react-apps-check (4): (fail) chromium > the wheel over a long draft stops at its ends and moves nothing else [4078.84ms]
web / react-apps-check (3): (fail) the strip or queue and the card meet square in one rim, and the queue keeps room above [6356.15ms]
web / react-apps-check (1): (fail) with no running call, Ctrl-B stays the composer's and asks nothing [1121.19ms]
web / react-apps-check (2): (fail) queued and steering prompts > the queue takes its own place in the stack: nothing is cut off or drawn over [1394.56ms]

Not re-run automatically: web / react-apps-check (4), web / react-apps-check (3), web / react-apps-check (1), web / react-apps-check (2), web / react-apps-check are not machine failures.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

red: web / Web status; NEW: green on the base c6b4a58; do not merge until green; see lane-rules
red: web / react-apps-check; no finished base run on c6b4a58 to compare; do not merge until green; see lane-rules
red: web / react-apps-check (1); no finished base run on c6b4a58 to compare; do not merge until green; see lane-rules
red: web / react-apps-check (2); no finished base run on c6b4a58 to compare; do not merge until green; see lane-rules
red: web / react-apps-check (3); no finished base run on c6b4a58 to compare; do not merge until green; see lane-rules
red: web / react-apps-check (4); no finished base run on c6b4a58 to compare; do not merge until green; see lane-rules

CI fast guards failed on a20a284377 (https://github.com/manaflow-ai/cmux/actions/runs/39555874619). It does not block the merge; a red guard merged into main breaks it for every open PR.
The log named no failed step; see the run.

Agents: python3 scripts/ci/guard_attribution.py fix applies the mechanical fixes locally.

Tour of 628ca9d76a (run): no media. The tour did not run: only webview code changed (1 path(s)), which the gallery advisory run checks in Linux Chromium on the pull request (its artifact holds any captures); add the media-tour-mac label to tour it on a Mac.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

cmux-next guards / defaults-snapshot is red on 21 of 25 fresh feat-cmux-next PR heads in the last 2:00:00, so it is most likely a base red, not this PR's. The base-reds lane has it; a base merge picks up the fix once it lands.

@blacksmith-sh

blacksmith-sh Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

Found 22 test failures on Blacksmith runners:

Failures

Test View Logs
test/agent-pane-column-edges.test.ts/agent-pane-column-edges.test View Logs
test/agent-pane-column-edges.test.ts/agent-pane-column-edges.test View Logs
test/agent-pane-ctrl-b-background.test.ts/agent-pane-ctrl-b-background.test View Logs
test/agent-pane-ctrl-b-background.test.ts/agent-pane-ctrl-b-background.test View Logs
test/agent-pane-no-capsules.test.ts/agent-pane-no-capsules.test View Logs
test/agent-pane-no-capsules.test.ts/agent-pane-no-capsules.test View Logs
test/agent-pane-queue-steer.test.ts/agent-pane-queue-steer.test View Logs
test/agent-pane-queue-steer.test.ts/agent-pane-queue-steer.test View Logs
test/agent-pane-wheel-pass-through.test.ts/agent-pane-wheel-pass-through.test View Logs
test/agent-pane-wheel-pass-through.test.ts/agent-pane-wheel-pass-through.test View Logs

...and 12 more test failures. View all on Blacksmith

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

…ttles

Linux WebKit (WPE, as on CI) animates a wheel step over several frames. The
case read scrollTop 150ms after the wheel, mid-glide on a loaded runner, and
then saw the glide finish as a "pull back". A per-frame CI trace showed the
view gliding 605 -> 205 and then holding at 205 while the reply grew by 300px:
the pane never moved the reader. Read the offset once it has held for 200ms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo teamleaderleo changed the title Agent chat: scrolling up while a reply streams stays put in WebKit (base red) Agent chat: the WebKit scroll-up test reads the offset after the wheel glide settles (base red) Oct 21, 2026
@github-actions

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/39559424526 at 240de48 failed: cmux-next Release compile (Xcode 26).
Those jobs last passed at 233cc81. This pull request is one of 5 merged since: #23065, #23050, #23073, #22992, #23062.
If the failure is in your change, fix forward on feat-cmux-next. Pull requests run only the tiers their paths reach (docs/ci/cmux-next-tiers.md); label a batch PR full-ci to run them all before merging.

@github-actions

Copy link
Copy Markdown
Contributor

Shipped in:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant