Repository navigation
test(browser): serve the diffs and CLI reload fixtures outside the navigation budget - #3445
Conversation
…vigation budget Both specs started their own Vite dev server inside each test and navigated at once. tests/fixtures/diffs.tsx reaches bundledPlugins, MessageRow, ThreadPanel, ConversationService, createRelaySession and globals.css, about 1,800 modules; conversation.html is about 1,900. The worker-level warm-up from #3055 lives in source-fixture.mjs and only covers specs that take baseURL from it. The flake-check lane runs --repeat-each=10 with two workers, and every repeat is a fresh worker, so each repeat paid a cold Node, cold Tailwind and cold module graph. In the failing traces 1,671–1,707 module requests were still in flight when the 15 s navigation timeout fired, with globals.css alone taking ~9 s. diffs.spec.mjs: build the page once per worker with previewFixtures and drop the per-test dev server, as typeahead and voice-notes do. The spec has no server middleware and no pixel assertions, so the static bundle is enough; previewFixtures keeps development React. plugin-cli-reload.spec.mjs: it needs its /__proof middleware, so keep the dev server and warmUp the conversation entry right after listen(), as conversation.spec.mjs does. Verified on Chromium with a fresh worker per repeat (`bin/pnpm test:browser:ci --project chromium --no-deps --reporter=list`): - diffs: --workers=1 --repeat-each=5 → 5/5 (2.9 s each, 32.7 s total); --workers=2 --repeat-each=4 → 4/4 (14.9 s total). - plugin-cli-reload: --workers=1 --repeat-each=5 → 5/5 (12.6–14.5 s); --workers=2 --repeat-each=4 → 4/4 (13.4–13.8 s). The native fixture was built first with `bin/cargo build --locked -p buzzodz-plugins --example fixture-bridge --bin buzzodz`. The triage reproduced the cold-goto timeout only under load (~25) and with two concurrent cold workers, not on an idle host, so these runs on an idle 32-core host guard against regression rather than reproduce CI timing. Co-Authored-By: Claude Fable 5.1 <[email protected]> Signed-off-by: mtoohey <[email protected]> Signed-off-by: Matt Toohey <[email protected]>
kazemek21
left a comment
There was a problem hiding this comment.
Kyle reviewed this PR and the Nexus review-tracker notes and approved with no comments.
Posted by Codex (gpt-6.1-sol) on behalf of kylez
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord automated source review via Wes’s account.
No actionable findings at head e262000f2bd577c430b78837b218f5e165e2126a, base/merge-base 7f03764beb8eb0ddcb4ff9ec0b8bda3e07699716. Reviewed the preview-fixture lifecycle, static assets/development defines, CLI warm-up ordering and middleware boundary, and preservation of assertions, case counts and timeouts. The changes reuse the existing fixture helpers without changing production code.
Read-only hosted evidence from run 43354824243, checked out at merge 125fd749bd3b984f9f2334a0552b091badd19a21 with those exact parents: each engine passed both changed journeys ten times (20/20 Chromium; 20/20 WebKit). Timing summaries report 185.1s / 198.2s elapsed wall time and 252.3s / 277.5s summed test execution respectively. The reload case was slowest at 23.1s / 22.8s; summed file execution was 204.7s / 210.1s for reload and 47.6s / 67.4s for diffs.
Source-only review; no local tests, builds or apps were run. These hosted results do not establish a matched before/after speedup or reproduce the original forced-load timeout. This is a COMMENT review, not approval.
…y-unreads * origin/main: (24 commits) [1/2] feat(agents): add a recommended agent setup (core) (#3344) test(browser): survive the live-stream restart a page-clock jump causes (#3442) chore(renovate): hold rusqlite below 0.41 for mesh-llm (#3438) test(browser): serve the diffs and CLI reload fixtures outside the navigation budget (#3445) test(browser): play the draft clip at rate 0 instead of looping it before the Play click (#3446) fix(status): reopen a status whose preset deadlines coincide as Today (#3449) fix(messages): tolerate a cancelled reaction-name chunk load (#3450) fix(pairing): tolerate /proc/net/tcp rows printed twice or missed (#3451) test(browser): wait on the signal each test asserts in local-agent-activity and message-navigation (#3444) Expose native channel headings to Solo sources (#3523) test(browser-host): run the 100,000-channel broker scale check alone in the measurements lane (#3447) fix(solo): keep every contributed destination action (#3516) fix(identity): report an issuer that keeps rate-limiting an agent as a limit (#2365) fix(identity): let a stuck at-launch sign-in copy its link (#2453) fix(profiles): open avatar previews on hover in compact density (#3510) feat(solo): smooth chat recency reordering (#3502) Reject self-mentions that cannot wake another session (#3513) feat(status): offer don't clear for every status (#3515) Let plugin panels name their tab with panels.useTabTitle (#3251) fix(agents): report a conversation wake that fails before its turn starts (#2192) ... # Conflicts: # tests/browser/message-management.spec.mjs
* origin/main: (27 commits) [2/2] feat(agents): offer Automatic (Recommended) in Create agent and Identity (#3345) fix(solo): preserve and resume unsent chat drafts (#3525) fix(builderlab): give refused app sign-ins and Identity links a route to Organization sign-in (#3078) fix(agents): say why Import an agent can't import here, and link Manage plugins (#3073) [1/2] feat(agents): add a recommended agent setup (core) (#3344) test(browser): survive the live-stream restart a page-clock jump causes (#3442) chore(renovate): hold rusqlite below 0.41 for mesh-llm (#3438) test(browser): serve the diffs and CLI reload fixtures outside the navigation budget (#3445) test(browser): play the draft clip at rate 0 instead of looping it before the Play click (#3446) fix(status): reopen a status whose preset deadlines coincide as Today (#3449) fix(messages): tolerate a cancelled reaction-name chunk load (#3450) fix(pairing): tolerate /proc/net/tcp rows printed twice or missed (#3451) test(browser): wait on the signal each test asserts in local-agent-activity and message-navigation (#3444) Expose native channel headings to Solo sources (#3523) test(browser-host): run the 100,000-channel broker scale check alone in the measurements lane (#3447) fix(solo): keep every contributed destination action (#3516) fix(identity): report an issuer that keeps rate-limiting an agent as a limit (#2365) fix(identity): let a stuck at-launch sign-in copy its link (#2453) fix(profiles): open avatar previews on hover in compact density (#3510) feat(solo): smooth chat recency reordering (#3502) ... # Conflicts: # src-tauri/src/federated_identity/agent/tests.rs # src-tauri/src/federated_identity/mod.rs # src-tauri/src/federated_identity/protocol.rs
* origin/main: (133 commits) Expose ordinary chats without workspace headings (block#3530) [2/2] feat(agents): offer Automatic (Recommended) in Create agent and Identity (block#3345) fix(solo): preserve and resume unsent chat drafts (block#3525) fix(builderlab): give refused app sign-ins and Identity links a route to Organization sign-in (block#3078) fix(agents): say why Import an agent can't import here, and link Manage plugins (block#3073) [1/2] feat(agents): add a recommended agent setup (core) (block#3344) test(browser): survive the live-stream restart a page-clock jump causes (block#3442) chore(renovate): hold rusqlite below 0.41 for mesh-llm (block#3438) test(browser): serve the diffs and CLI reload fixtures outside the navigation budget (block#3445) test(browser): play the draft clip at rate 0 instead of looping it before the Play click (block#3446) fix(status): reopen a status whose preset deadlines coincide as Today (block#3449) fix(messages): tolerate a cancelled reaction-name chunk load (block#3450) fix(pairing): tolerate /proc/net/tcp rows printed twice or missed (block#3451) test(browser): wait on the signal each test asserts in local-agent-activity and message-navigation (block#3444) Expose native channel headings to Solo sources (block#3523) test(browser-host): run the 100,000-channel broker scale check alone in the measurements lane (block#3447) fix(solo): keep every contributed destination action (block#3516) fix(identity): report an issuer that keeps rate-limiting an agent as a limit (block#2365) fix(identity): let a stuck at-launch sign-in copy its link (block#2453) fix(profiles): open avatar previews on hover in compact density (block#3510) ... Signed-off-by: Joah Gerstenberg <[email protected]> # Conflicts: # src/bundled/codex/prompt.test.ts # src/bundled/goose/runtime.ts
Why
Two Chromium journeys time out at
page.gotoin the Flake check lane because each test starts its own cold Vite dev server and navigates at once.diffs.spec.mjs, "diff preview expands in both layouts and keeps focus and scroll containment"plugin-cli-reload.spec.mjs, "CLI reload replaces an enabled folder plugin without a Settings action"Root cause
Both specs created a Vite dev server inside each test. The diffs fixture reaches the bundled plugins, the message row, the thread panel, the conversation service, the relay session and the global stylesheet, about 1,800 modules. The conversation page is about 1,900. The worker-level warm-up from #3055 lives in
source-fixture.mjsand only covers specs that take their base URL from it.The Flake check lane runs
--repeat-each=10with two workers, and every repeat is a fresh worker. Each repeat therefore paid for a cold Node process, a cold Tailwind build and a cold module graph. In the failing traces 1,671 to 1,707 module requests were still in flight when the 15 s navigation timeout fired, with the global stylesheet alone taking about 9 s. The page itself was requested once, so this was not a dependency re-optimisation.Fix
diffs.spec.mjs: build the page once per worker withpreviewFixturesand drop the per-test dev server, as the typeahead and voice-notes specs do. The spec has no server middleware and no pixel assertions, so the static bundle is enough.previewFixtureskeeps development React. Most of the diff is the test body moving out of the server'stryblock by one indent level.plugin-cli-reload.spec.mjs: it needs its proof middleware, so it keeps the dev server and warms up the conversation entry right afterlisten(), asconversation.spec.mjsdoes.The navigation timeout is unchanged. No assertions changed and no browser cases were added or removed.
Evidence
Local runs on an idle 32-core Linux host, Chromium, a fresh worker per repeat,
bin/pnpm test:browser:ci --project chromium --no-deps --reporter=list.diffs.spec.mjs,--workers=1 --repeat-each=5diffs.spec.mjs,--workers=2 --repeat-each=4plugin-cli-reload.spec.mjs,--workers=1 --repeat-each=5plugin-cli-reload.spec.mjs,--workers=2 --repeat-each=4The native fixture for the reload spec was built first with
bin/cargo build --locked -p buzzodz-plugins --example fixture-bridge --bin buzzodz.Before the change, during triage on the same host: the unchanged diffs spec passed 5/5 on a quiet host, failed 5/5 at a load average near 25, and failed 4/4 with two workers. A standalone cold navigation took 5.4 to 7.7 s idle, 14.1 s on two cores and 15.3 s on one core. Passing repeats of the diffs test in the failing CI jobs took about 17.8 s; hosted timings after the change are only known once CI runs this PR.
Not reproduced, not run
buzz-review-completedis not set.Left alone
Other specs still serve fixture pages from a per-test cold dev server, including
window-chrome,composer-attachments,image-strip,image-zoomandmessage-edit. They have not shown this timeout in CI and are candidates for the same treatment in their own change. Open draft #2746 edits other parts ofplugin-cli-reload.spec.mjs; a trial merge against this change is clean.🤖 Generated with Claude Code