Skip to content

test(browser): settle dialog motion and startup errors before strict checks - #1492

Merged
loganj merged 1 commit into
mainfrom
larry/main-ci-1021-flakes
Oct 22, 2026
Merged

loganj merged 1 commit into
mainfrom
larry/main-ci-1021-flakes

Conversation

@loganj

@loganj loganj commented Oct 21, 2026

Copy link
Copy Markdown
Contributor

🤖

Summary

Two browser tests failed on main in run 39654833735 (commit 3d26215). Both are test timing problems, not app defects. This PR changes test code only.

  • Workflows editor header (Chromium). The test checks that the Run, Actions and Close buttons line up. Since Normalize dialog sizing, headers, spacing, and motion #1403, every dialog slides up 12 px as it opens. The test read the three button positions one at a time while the dialog was still moving, so two buttons in the same row looked 10.16 px apart (the limit is 10 px). The test now waits until the dialog stops moving before it measures.
  • Membership timeline (WebKit). This spec fails on any raw page error, so a timeline problem cannot hide behind the known WebKit warning ResizeObserver loop completed with undelivered notifications. The CI trace shows that WebKit sent this warning during startup, while the search palette was open and before the test did anything in a channel. The strict check now starts when Messages is ready. unread.spec.mjs already does the same thing (test(browser): fix six intermittent browser test failures and a composer caret bug #1239).

Details

  • New helper settleDialogMotion(dialog) in tests/browser/navigation.mjs, next to the existing settlePanelMotion. It waits until the dialog's starting style is removed, then waits for the dialog's animations to finish. Normalize dialog sizing, headers, spacing, and motion #1403 added two inline copies of this wait (inbox-drafts.spec.mjs, layout.spec.mjs). They now use the helper.
  • Startup errors are still checked. The shared fixture still fails a test on any page error it cannot explain. Only the membership spec's extra raw check now starts after startup.
  • Scope searched: geometry checks on dialogs in tests/browser and the workflow journeys, and all raw report.errors checks. No other check compares separate vertical measurements while a dialog is still moving. membership.spec.mjs and unread.spec.mjs are the only raw error checks.
  • Remaining risk: in the membership spec, startup includes the first render of the default channel. A loop warning that happens only in that first render is now judged only by the fixture's general rule.

Verification

  • Workflows: on main, with the dialog motion slowed to 1.5 s, the test fails at the same assertion as CI (11.3 px). With the fix and the same slowed motion, it passes in Chromium and WebKit.
  • Membership: I injected a real ResizeObserver loop. During startup, main fails with the CI error and this branch passes. During the journey, both main and this branch fail, so the strict check still works.
  • Full membership, workflows and inbox-drafts specs pass in Chromium and WebKit (membership also passes with --repeat-each=3). The changed layout.spec.mjs test passes in both engines. Biome and tsc pass.

…checks

Workflows (Chromium): the header alignment check read three bounding
boxes while the editor dialog still ran its 12px entrance motion (#1403),
so two controls in one row looked 10.16px apart. Add settleDialogMotion
beside settlePanelMotion, use it before that check, and replace the two
ad hoc copies that #1403 added.

Membership (WebKit): the raw page-error check covered startup. WebKit
reported its ResizeObserver loop while the search palette was open,
before any journey step. Start the raw check once Messages is ready, as
unread.spec does; the fixture still classifies startup errors.

Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz>
Signed-off-by: Logan Johnson <[email protected]>
@loganj
loganj marked this pull request as ready for review October 21, 2026 20:32
@loganj
loganj requested a review from a team as a code owner October 21, 2026 20:32

@ngoodger-block ngoodger-block left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. thanks for fixing

@wesbillman wesbillman left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Star Lord’s automated source review via Wes’s account.

No actionable findings in the five-file change. Source assessment: 9/10 for minimalness, elegance and correctness. The shared helper waits for the popup’s entry transition before geometry measurements, preserving the existing geometry/focus assertions and app motion. The membership checkpoint retains the fixture’s full unexplained-error check and strict raw-error checking after startup. The disclosed limitation remains: a ResizeObserver warning confined to initial startup is classified only by the general fixture rule.

Independent Rocket (systems/lifecycle), Mantis (correctness/concurrency), and Groot (behavior/accessibility) lanes completed and were integrated by Star Lord.

Reviewed head 3594209e3ff49cb4e6091f611f39d9d8c641ca56 against base/merge-base 6c6ab458dfc8a536947f58b92f2dfadd10a00c8a. Public PR description and commit metadata inspected; no attached images or disclosure finding.

Validation: source-only review; no tests, builds, app launches or PR code executed. Existing head-bound CI run 39663414074 reports CI required and browser flake checks successful; Windows native validation and the Vitest flake lane were skipped. This does not prove all timing races are eliminated, native behavior, or human acceptance. Rendered error/retry focus and the author’s local adversarial timing experiments were not independently reproduced.

Bounded hosted cost evidence: CI tested merge 85b90192cbb33bb778b2846951be3edc9299878d of the pinned head/base. Compared with base run 39662749422, Chromium shard 1/9 retained 96 passes (test-command wall 301.53→405.15s; summed execution 521.72→683.61s), while WebKit shard 1/12 retained 86 passes (675.83→449.18s; 1123.08→748.54s). Both had zero failures/skips. The unchanged slowest file, history-loading, moved in opposite directions across engines. These sampled timing artifacts establish neither a PR-caused performance regression nor improvement; rendered job-summary HTML and whole-suite aggregates were not independently inspected.

@loganj
loganj merged commit e953c77 into main Oct 22, 2026
45 checks passed
@loganj
loganj deleted the larry/main-ci-1021-flakes branch October 22, 2026 17:47
johnmatthewtennant added a commit that referenced this pull request Oct 22, 2026
Co-authored-by: Aaron <f425b86c3b780d43f8d9cf1802429d04dd985bf92eac44fca9468b5ad3887c5e@buzz.block.builderlab.xyz>

* origin/main:
  fix(channels): confirm a requested member when the relay stores bot (#1519)
  test(browser): settle dialog motion and startup errors before strict checks (#1492)
  perf(messages): measure read-tracking rows once per frame (#1527)
  fix(settings): keep the chosen plugin row in place when details open or close (#1551)
  fix(messages): polish reaction pills and mention badges (#1506)

Signed-off-by: John Tennant <[email protected]>
morgmart added a commit that referenced this pull request Oct 23, 2026
Signed-off-by: morgmart <[email protected]>
Co-authored-by: Carl <c217fe6b9d958f41c3a5e030dccc7f626775a923089cb6491305eade75ea1f1b@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <[email protected]>

* origin/main: (24 commits)
  Unify chat and channel access, tidy the Solo chat menu (#1446)
  fix(todos): render nested TODOs with collapsible hierarchy and Markdown (#1483)
  fix(agents): Allow agents to propose updates to agents (#1478)
  fix(composer): prevent plugins from updating the recipient on a WIP draft message (#1497)
  fix(agents): can't delete an agent belonging to an archived channel (#1560)
  Bump tokio to 1.53.3 for RUSTSEC-2026-0386 (#1581)
  Unify attachment cards with neutral icon tiles (#1548)
  Polish edit context, channel join and profile actions (#1545)
  fix(claude-code): keep context across channel threads (#1516)
  fix(builderlab): let Create agent cancel a pending browser sign-in (#1526)
  test(sidebar-filters): start the focus journey on General (#1555)
  Add opt-in native MCP for macOS tests (#1528)
  Show unreads for channels after access changes (#1550)
  Deliver artifact changes through shared live routes (#1480)
  condense photo and video attachments into a compact grid (#1549)
  Add page-owned sidebar contributions (#844)
  fix(channels): confirm a requested member when the relay stores bot (#1519)
  test(browser): settle dialog motion and startup errors before strict checks (#1492)
  perf(messages): measure read-tracking rows once per frame (#1527)
  fix(settings): keep the chosen plugin row in place when details open or close (#1551)
  ...
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.

3 participants