Skip to content

test(web): worked-for expand test waits for the timeline to finish loading - #29661

Merged
Yash-Singh1 merged 1 commit into
pingdotgg:mainfrom
saphid:fix/timeline-worked-for-click-flake
Nov 5, 2026
Merged

Yash-Singh1 merged 1 commit into
pingdotgg:mainfrom
saphid:fix/timeline-worked-for-click-flake

Conversation

@saphid

@saphid saphid commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

Problem

MessagesTimeline work rows > keeps the worked-for heading in place when expanded at the bottom (added in #29166) fails intermittently in CI. It failed on main itself (run 41478224580) and in unrelated PRs (for example run 41528296966):

TimeoutError: locator.click: Timeout 14526ms exceeded.
  - <div class="legend-list-content-container">…</div> intercepts pointer events

Legend List renders its rows with opacity: 0; pointer-events: none until it is ready, which is after its initial scroll settles. The test waited only for the scroll to reach the end. toBeVisible ignores opacity, so the test could read the heading's position and install fake timers while the rows were still hidden. With timers faked, Legend's readiness check never runs, so the click can never land. If readiness instead finishes later, it moves the heading, and the position assertion fails (expected 577 to be close to 473).

Change

The existing settle waitFor now also requires heading.element().checkVisibility({ opacityProperty: true }) before the test reads top and installs fake timers. This is a test-only change; the assertions the regression test makes stay the same.

Scope and approval

Very small, focused fix for an obvious bug, so no prior issue: a CI flake on main with an identified root cause, fixed in one test. Overlap search: no open PR or newer commit touches this test since #29166. #28125 (Legend List 3.7.1 upgrade) is a broad refactor and does not address this wait. The separate, more frequent AttachmentFilePreview PDF scroll/zoom flake is not part of this PR.

Verification

  • Red on main: test with { repeats: 40 } under full CPU load (18 busy processes): 2 of 41 repeats failed, one with the click-intercept timeout and one with expected 577 to be close to 473. A temporary diagnostic captured, at the failing moment, the hit target legend-list-content-container and the rows' wrapper styled opacity: 0; ... pointer-events: none;.
  • Green: same load, 3 rounds × 41 repeats, 123/123 passed.
  • vp test run src/components/chat/MessagesTimeline.browser.test.tsx: 38/38 passed (rerun after rebasing on current main).
  • vp run check:changed: format, lint, knip, typecheck, tests all pass.
  • Not checked: the full web suite in CI (CI runs it).

Reviewed with sol-loop: 1 round with GPT-6.1 Sol on high. Sol verdict: approved.

Created with Claude Opus 5.5 in Claude Code (T3 Code).

🤖 Generated with Claude Code

…ading

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Nov 2, 2026
@macroscopeapp

macroscopeapp Bot commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at c0dd3b4

Macroscope's review found this PR approvable — The change is confined to an ignored browser test and is described as waiting for timeline visibility before continuing. Its scope indicates no production behavior change or material risk requiring human judgment.

Notes:

  • No code objects were reviewed. Approvability was decided on eligibility alone.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 30084f0 and c0dd3b4.

Files selected for processing: 1
  • apps/web/src/components/chat/MessagesTimeline.browser.test.tsx

Limit details: You’ve used all 10 included reviews currently available.

Walkthrough

The browser test now waits for the list to reach the bottom and for the expanded “Worked for” heading to become visible.

Changes: Worked-for heading test

Layer / File(s) Summary
Synchronize heading visibility
apps/web/src/components/chat/MessagesTimeline.browser.test.tsx
The test waits for the list to reach the bottom and checks heading visibility with opacity enabled.

Estimated code review effort: 1 (Trivial) | ~3 minutes

Change: Other

Suggested reviewers: yash-singh1

Merge Risk: Minimal · up to c0dd3

No actionable merge-blocking risk was identified; the synchronization change is ready to merge.

Pre-merge checks: Passed 4
Check name Status Explanation
Title check Passed The title clearly identifies the test-only fix: the worked-for expansion test now waits for the timeline to finish loading.
Description check Passed The description includes Problem, Change, Scope and approval, and Verification sections. It explains the CI failure, root cause, fix, scope rationale, test results, and remaining verification limits.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Finishing Touches
Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Usage-based review receipt

Note

This review was completed with usage-based billing: files reviewed beyond your plan's included limits are billed at $0.25/file. View usage-based billing.

@maria-rcks

Copy link
Copy Markdown
Collaborator

Note

Written by gpt-6.1-sol on behalf of Maria

Verified in a real dev environment

verified as-is at c0dd3b49708bf269253c46fbeb87245202adc101 on linux. this is a test-only readiness fix; production behavior is unchanged. no source changes or pushes.

  • reproduced the original test failure on github/main (57cd05904d), in a separate worktree through blacksmith: expected 577 to be close to 473. the focused test failed without added cpu load or test modifications.
  • on the exact pr head, all 38 tests in MessagesTimeline.browser.test.tsx passed through blacksmith. vp run check:changed 30084f0018c5751a07291222e8d04e16d513700a also passed format, lint, knip, affected typechecks, and the 38 timeline tests.
  • ran the real dev web client with playwright and /usr/bin/google-chrome. created a project and threads through the app, then ran real codex gpt-6.1-sol turns through the local proxy. no replay, mocks, fixtures, or demo data.
  • preserved the app-created conversation between main and pr. at the bottom, expanding worked-for kept the heading at y=433 on both revisions while scroll height grew from 843 to 2492, with scrollTop=195. collapse, scrolling to the final answer, expanding command details, and switching away and reopening the thread worked.
  • a fresh thread on the pr completed a real provider turn; its command output returned the exact pr head sha.

main, expanded real turn:

main worked-for expansion at the bottom

pr, same conversation and viewport:

pr worked-for expansion at the bottom

fresh pr provider turn and exact head output:

real codex turn returns the exact pr head

Not verified

native ios/android clients and macos/windows electron shells were not exercised on this linux vm. other providers and remote/relay/tunnel modes were not exercised. the test flake was reproduced once on main; the successful pr runs do not prove it can never recur.

@Yash-Singh1
Yash-Singh1 merged commit 53c26b1 into pingdotgg:main Nov 5, 2026
30 checks passed
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Nov 6, 2026
**v0.1.8-nightly.20261106.4247** · 67 changes from 19 contributors

- **Environment dictation.** Choose an environment for dictation in web and desktop, including desktop browser annotations.
- **Fresh sessions.** Use /clear to start a fresh session without leaving your thread.
- **Scheduled task sessions.** Run scheduled tasks in one thread, either continuing the conversation or starting fresh each time.
- **Secret requests.** Answer secret requests using a secret provider instead of copying and pasting credentials.
- **Snooze questions.** Snooze a thread with a pending question and answer it later.
- **Claude Ultracode.** Use Ultracode at any effort level, including with Claude Sonnet 5.5 and Haiku 5.5.
- **Faster pull requests.** Pull requests open faster using data already available in the app.

### Plus 31 more bug fixes and performance improvements.

<details>
<summary>Full changelog</summary>

## What's Changed
* fix(threads): side chats inherit parent permissions by default by @extoci in pingdotgg/t3code#31114
* fix(server): threads follow their worktree's branch changes by @Yash-Singh1 in pingdotgg/t3code#31599
* fix(pi): usage reports include sessions stored in a --session-dir launch argument by @saphid in pingdotgg/t3code#30690
* perf(mobile): skip unchanged terminal toolbar fade updates by @saphid in pingdotgg/t3code#25312
* perf(mobile): assemble HTML replacements in one pass by @saphid in pingdotgg/t3code#25278
* perf(mobile): skip canceled SVG parsing by @saphid in pingdotgg/t3code#25314
* test(server): strengthen v1 cutover proof with event-stream waits and content snapshots by @saphid in pingdotgg/t3code#11869
* fix(contracts): a stored secret reference is always sensitive by @yordis in pingdotgg/t3code#31403
* fix(server): a settings save no longer reads an unreadable secret again by @yordis in pingdotgg/t3code#31226
* fix(threads): allow snoozing pending input requests by @saphid in pingdotgg/t3code#20058
* fix(server): repair cutover test crypto import breaking main CI by @Yash-Singh1 in pingdotgg/t3code#31630
* feat(server): sends can start a fresh provider session by @juliusmarminge in pingdotgg/t3code#30323
* feat: /clear starts a fresh session in the same thread by @juliusmarminge in pingdotgg/t3code#30325
* feat: scheduled tasks can run in one thread with a fresh session each run by @juliusmarminge in pingdotgg/t3code#30326
* fix(web): dragging a sidebar thread no longer scrolls the list out from under the pointer by @juliusmarminge in pingdotgg/t3code#30346
* fix(assets): preserve the PR repository for GitHub media by @juliusmarminge in pingdotgg/t3code#21631
* fix(server): load PR uploads from SSO organizations by @juliusmarminge in pingdotgg/t3code#21632
* fix(mobile): the Duo inspector stops at its widest instead of vanishing by @juliusmarminge in pingdotgg/t3code#31665
* test(server): launcher PATH lookup test no longer drops the Windows drive letter by @tris203 in pingdotgg/t3code#22534
* test(server): replay tests delete their temp directories by @only21mil in pingdotgg/t3code#23445
* fix(mobile): transcribe Android audio during recording by @PixPMusic in pingdotgg/t3code#31300
* test(web): linked-environment subagents keep opening in their own thread by @RealDoc06 in pingdotgg/t3code#26492
* test(server): pin post-commit outbox settle boundary by @Narayan201120 in pingdotgg/t3code#27560
* test: remove unreachable github cli decoding test by @t3-code-bot[bot] in pingdotgg/t3code#28115
* test(server): retain delegated child events when detaching a parent by @benjamin-di in pingdotgg/t3code#29622
* test(lint): pin which ResizeObserver constructions no-raw-resize-observer reports by @only21mil in pingdotgg/t3code#28781
* test(mobile): drop two deleted tests from the React test list by @only21mil in pingdotgg/t3code#28800
* test(web): worked-for expand test waits for the timeline to finish loading by @saphid in pingdotgg/t3code#29661
* test(web): avoid PDF worker startup timeouts in attachment tests by @voltcrash in pingdotgg/t3code#29933
* test(web): source control writing settings test waits for the reset button by @juliusmarminge in pingdotgg/t3code#30372
* test(web): keep the work heading test inside the viewport by @voltcrash in pingdotgg/t3code#30613
* test: use an empty config file instead of the null device for git fixtures on Windows by @Pyseph in pingdotgg/t3code#30772
* test: remove stale tests for unused thread and onboarding helpers by @t3-code-bot[bot] in pingdotgg/t3code#30817
* test(server): correct Windows path and settings assertions by @ElliotDrel in pingdotgg/t3code#30983
* feat(claude): Ultracode works with any effort, like Claude Desktop by @Bil0000 in pingdotgg/t3code#27034
* perf(pr): pull requests paint from data already held, on web, desktop and mobile by @Bil0000 in pingdotgg/t3code#27798
* fix(mobile): approval card buttons line up by @shivamhwp in pingdotgg/t3code#31415
* fix(gitlab): author names link to GitLab profiles by @TonybynMp4 in pingdotgg/t3code#30418
* fix(gitlab): merge messages drop agent credits by @TonybynMp4 in pingdotgg/t3code#30441
* fix(gitlab): file and image comments appear as review threads by @TonybynMp4 in pingdotgg/t3code#30425
* fix(web): screen readers no longer read out a secret typed into the request card by @juliusmarminge in pingdotgg/t3code#31653
* perf(pr): actions update every client from the host's reply instead of re-reads by @Bil0000 in pingdotgg/t3code#25761
* feat(mobile): start side chats with /side by @juliusmarminge in pingdotgg/t3code#31709
* feat(claude): expose Ultracode on Claude Sonnet 5.5 and Haiku 5.5 by @DrSeedon in pingdotgg/t3code#30781
* feat(settings): Simlock, Antigravity and OpenCode credentials can come from a secret provider by @juliusmarminge in pingdotgg/t3code#31652
* refactor(mobile): screens declare what they are; layout and AppBar own every platform bar decision by @juliusmarminge in pingdotgg/t3code#31310
* fix(server): a saved source control token that can't be read no longer falls back to another account by @juliusmarminge in pingdotgg/t3code#31646
* feat(secrets): answer a secret request with a secret provider reference by @juliusmarminge in pingdotgg/t3code#31670
* fix(settings): removing a secret provider clears the fields that used it by @juliusmarminge in pingdotgg/t3code#31651
* docs(user): explain secret providers and secret requests by @juliusmarminge in pingdotgg/t3code#31654
* feat(server): transcribe audio on a chosen environment by @juliusmarminge in pingdotgg/t3code#30625
* feat(web): opt into environment dictation on this device by @juliusmarminge in pingdotgg/t3code#30623
* feat(desktop): dictate into browser annotations with the same consent by @juliusmarminge in pingdotgg/t3code#30624
* feat(mobile): opt in to dictation on a paired environment by @juliusmarminge in pingdotgg/t3code#31059
* fix(web): keep the folder path caret in place while editing by @juliusmarminge in pingdotgg/t3code#31642
* perf(mobile): call the highlights lexer through Nitro, up to 10x faster calls on Android by @camchis in pingdotgg/t3code#31188
* fix(claude): turns use the downloaded model catalog by @juliusmarminge in pingdotgg/t3code#31717
* fix(gitlab): bot authors are flagged as bots by @TonybynMp4 in pingdotgg/t3code#30383
* fix(gitlab): merge requests can edit their labels by @TonybynMp4 in pingdotgg/t3code#30483
* perf(mobile): faster thread sync, connects, and reconnects on bad wifi by @Bil0000 in pingdotgg/t3code#28487
* fix(mobile): iPad composer drops when the keyboard floats or minimizes by @juliusmarminge in pingdotgg/t3code#31251
* perf(mobile): stop iOS syntax highlighting from looking up a thread-local on every lexer call by @camchis in pingdotgg/t3code#31187
* fix(gitlab): edited comments wake PR watchers by @TonybynMp4 in pingdotgg/t3code#30403

## New Contributors
* @benjamin-di made their first contribution in pingdotgg/t3code#29622
* @ElliotDrel made their first contribution in pingdotgg/t3code#30983
* @DrSeedon made their first contribution in pingdotgg/t3code#30781

**Full Changelog**: pingdotgg/t3code@v0.1.8-nightly.20261105.4234...v0.1.8-nightly.20261106.4247

</details>


Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.1.8-nightly.20261106.4247
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS 0-9 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants