Repository navigation
test(solo): cover agent tagging behind a background read-state snapshot - #2941
Merged
Merged
Conversation
atishpatel
marked this pull request as ready for review
November 7, 2026 02:13
A Solo chat alone with one agent addresses it from the composer's pill. That broke when the read-state snapshot's deadline grew (#2627): the owner inventory read waited behind the snapshot in the reader's single background slot and timed out, leaving "Retry agents" and no pill. The fix (#2751) moved the read to foreground capacity, with Node coverage that holds a fake background read and calls seedAgents directly. This journey covers the composed contract those tests cannot: the real reader scheduling the broker's snapshot, the inventory re-read a gap causes, and the Solo composer seeding its pill. Startup's snapshot is a foreground read, so the journey drops the relay connection; read state then has no capacity basis and takes a fresh background snapshot, which the route holds. Inventory reads are refused with a relay-signed record from another author (rejected by the library, no transport error) until that snapshot is in flight, so the read "Retry agents" issues is the one scheduled against it. Fails at the pill with the inventory read back on background priority; passes in Chromium and WebKit with the fix. Co-authored-by: Worker Bee (Opus) <4a3bc7fd57a7b2c126e4f3d3462dd16f375242e1c176b4b3f25ca93e3edb6a84@buzz.block.builderlab.xyz> Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: Atish Patel <atishpatel2012@gmail.com>
atishpatel
force-pushed
the
worker-bee/solo-agent-tagging-journey
branch
from
November 7, 2026 02:16
a37ed7b to
b96f237
Compare
kazemek21
approved these changes
Nov 7, 2026
kazemek21
left a comment
Contributor
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.
loganj
added a commit
that referenced
this pull request
Nov 8, 2026
… journey #2948 removed the Solo composer's standing "Retry agents" notice; the failure and its Retry now sit in the mention menu. #2941's journey still waited for that notice, so it failed on main. Drive the same recovery through the mention menu's "Retry suggestions" while the background read-state snapshot is held. Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Logan Johnson <loganj@squareup.com>
loganj
added a commit
that referenced
this pull request
Nov 8, 2026
… journey #2948 removed the Solo composer's standing "Retry agents" notice; the failure and its Retry now sit in the mention menu. #2941's journey still waited for that notice, so it failed on main. Drive the same recovery through the mention menu's "Retry suggestions" while the background read-state snapshot is held. Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Logan Johnson <loganj@squareup.com>
loganj
added a commit
that referenced
this pull request
Nov 8, 2026
… journey #2948 removed the Solo composer's standing "Retry agents" notice; the failure and its Retry now sit in the mention menu. #2941's journey still waited for that notice, so it failed on main. Drive the same recovery through the mention menu's "Retry suggestions" while the background read-state snapshot is held. Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Logan Johnson <loganj@squareup.com>
baxen
added a commit
that referenced
this pull request
Nov 8, 2026
Fixes today's broken and flaky buzz-app CI in one PR: red main plus two flakes that hit several PRs. Supersedes #3017 and #3018. # 1. Red main: `solo-agent-tagging.spec.mjs` Main is red: `tests/browser/solo-agent-tagging.spec.mjs` (#2941) fails on main and on every PR CI'd since. The test waits for a composer `alert` holding a "Retry agents" button. #2948 removed that standing notice; a failed agent read now offers "Retry agent list" inside the Choose agent picker. #2941 was written before #2948 landed and merged without rerunning against it. The test now opens the Choose agent picker and asserts and clicks "Retry agent list" there, then checks the retry goes away once the agent is addressed. The behaviour it covers (tag nobody without complete inventory, address the lone agent after retry, unchanged once the background snapshot completes) is the same. Verified locally: `playwright test solo-agent-tagging` passes on chromium and webkit. ## Follow-up: trigger shape The first push failed this PR's webkit Flake check: 8 of 10 repeats found no "Choose agent" button. The screenshot shows the composer's "Mention a member" (@) button instead. The chat only shows the agent pill when every member is a known agent. With the inventory missing, that depends on whether the agent's profile has loaded, which is a background read. Both trigger shapes are correct while the inventory is missing, and both open the same picker with "Retry agent list". The test now opens the picker from either trigger. To check the @ path deterministically, I held kind-0 profile reads after the gap until Retry. The trigger was then "Mention a member", and the updated test passed on chromium and webkit. Without that hold, it passes `--repeat-each=15 --workers=6` on both engines (30 passed). # 2. `conversation.spec.mjs` page-load flake (from #3017) ## Cause `tests/fixtures/conversation.tsx` imports `bundledPlugins`, so its first load makes the fresh dev server transform about 1,650 modules. A failing CI trace (run 42422209266, repeat7) shows no reload and no failed request: the module graph just finishes transforming about 15 s in, while the other worker runs the same test's `pnpm build`s. `prepareFixtureDependencies` already keeps dependency bundling out of navigation budgets. Source transforms had no equivalent. ## Change `warmUp(server, entry)` in `vite-server.mjs` asks Vite to transform the entry and waits for its static-import crawl: `server.warmupRequest` + `server.waitForRequestsIdle`, which are Vite's own APIs. The conversation spec calls it after `listen()`, before `page.goto`. The navigation timeout, retries and assertions are unchanged. ## Evidence (local, macOS, chromium, `--repeat-each=4 --workers=2`) | | goto → load | |---|---| | before | 3.6–3.9 s | | after | 1.03–1.07 s (warm-up takes ~2.7 s, outside the budget) | The full `conversation.spec.mjs` passes on chromium and webkit (22 passed). I didn't reproduce the CI timeout itself locally. The before/after split is the evidence that compile work has moved out of the budget. No browser cases are added or removed. # 3. `huddles.spec.mjs` roster animation flake (from #3018) `huddles.spec.mjs` › "capsule and companion presentation share mute and leave" fails intermittently in webkit Flake check lanes on unrelated PRs today: `locator.evaluate: AbortError: The operation was aborted.` at the roster settle step (jobs 128522170397 on mbot/bottom-activity and 128560887574 on mbot/community-denied, repeats 9 and 5). ## Cause The step awaits `Promise.all(getAnimations().map((a) => a.finished))`. When Motion replaces an animation it cancels the old one, and a cancelled animation's `finished` promise rejects with `AbortError`. So any interruption while the roster settles fails the test, even though the roster ends up correct. A standalone webkit check shows the same message: cancel a running animation, and the old wait throws `locator.evaluate: AbortError: The operation was aborted.` The new wait resolves. ## Change Wait until no animation in the roster is still `running`, using `Promise.allSettled` so a cancelled one ends the wait for that animation rather than failing the test. The geometry assertions after this step are unchanged. ## Evidence - The fixed test passes `--repeat-each=10` on chromium and webkit locally (20 passed). - I couldn't reproduce the cancellation locally (the old code passed 30/30 on webkit), so the evidence for the fix is the matching error and the standalone check above. Two other sites in this file use the same `Promise.all(... finished)` wait (around lines 698 and 2019). Neither has failed in today's runs, so I left them alone. --------- Signed-off-by: Bradley Axen <baxen@squareup.com> Co-authored-by: mbot <3754f8729004d95654c46dbab3129e4ab9ef05cc2534e2a3fbfc155983bd637b@buzz.block.builderlab.xyz>
baxen
added a commit
that referenced
this pull request
Nov 8, 2026
* origin/main: test(browser): fix red main and two cross-PR flakes (#3015) feat(agent-activity): keep remote agent outcomes readable (#2913) test(solo): cover agent tagging behind a background read-state snapshot (#2941) fix(desktop): quit on SIGTERM, SIGINT and SIGHUP so agents stop with Buzz (#2905) Signed-off-by: Bradley Axen <baxen@squareup.com>
tlongwell-block
added a commit
that referenced
this pull request
Nov 8, 2026
* origin/main: (47 commits) fix(relay): report a community's membership refusal once, not as raw 403s (#3012) test(browser): fix red main and two cross-PR flakes (#3015) feat(agent-activity): keep remote agent outcomes readable (#2913) test(solo): cover agent tagging behind a background read-state snapshot (#2941) fix(desktop): quit on SIGTERM, SIGINT and SIGHUP so agents stop with Buzz (#2905) feat(unread): opening a channel quiets its sidebar row (#2998) fix(goose): end the turn when a final send succeeds (#2997) fix(relay): report a community's refusal once, not as raw 403s (#2978) Give fast Builderlab models their own section and a bolt in the model picker (#2592) feat(dev): `just desktop me` keeps Keychain approvals across rebuilds (#3002) fix(relay): show one quiet reconnect toast after 30 s, above the composer (#2968) feat(memory): render rich markdown and navigable buzz links (#2981) fix(identity): never strand first run on a key another account holds (#2996) Let agent_create propose instructions (#2332) fix(unread): raise a local read floor over dropped marks, and halve save validation (#2977) Add Codex huddle auto-join and thinking presence (#2927) feat(claude): set up Claude from a button beside Harness (#2975) docs(plugins): document the decisions API in the authoring guide (#2994) fix(agent-harness): stop telling agents to use GitHub-flavored Markdown (#2639) feat(identity): brand federated sign-in and return to the app (#2982) ... Signed-off-by: Tyler Longwell <tlongwell@squareup.com> Co-authored-by: Eva <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@buzz.block.builderlab.xyz> # Conflicts: # src/bundled/codex/voice.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
A Solo chat alone with one agent addresses it from the composer's pill. #2627 lengthened the read-state snapshot's deadline, so the owner inventory read waited behind it in the reader's single background slot, timed out, and Solo showed Retry agents with no agent tagged. #2751 fixed it by reading the inventory on foreground capacity. Its Node coverage holds a fake background read and calls
seedAgentsdirectly, so nothing exercised the composed app path that actually broke.What
One Playwright journey,
tests/browser/solo-agent-tagging.spec.mjs. No production code changes.app.relay.disconnect). Read state loses its capacity basis and takes a fresh background snapshot; the route holds that request (and asserts itsX-Buzz-Read-Priorityisbackground).readRelayLibraryrejects outright (no transport error to retry, no console error), until the snapshot is in flight.Sending to Owned Honey. Change agentsmust appear while the snapshot is still held and with no alert. Releasing the snapshot changes nothing.Browser-only justification
Representative app-composition journey across transport and the composer: the regression came from reader scheduling interacting with read-state's gap recovery and the Solo composer's seeding gate, each of which stayed green in its own Node tests. Two fixture facts drove the shape: the startup snapshot is a foreground read (holding it blocks nothing), and the startup inventory read fires before any snapshot, so only a gap-driven re-read reproduces the production ordering.
Evidence (local, macOS, main at cae3922 + this commit)
playwright test tests/browser/solo-agent-tagging.spec.mjs --project chromium --project webkit --repeat-each 2→ 4 passed (about 7.5s each).src/features/agents/relay-library.tsflipped back topriority: "background", the same journey fails atexpect(pill).toBeVisible()after Retry, the reported symptom. Restored before committing.biome checkclean; existingsrc/features/agents/inventory.test.tspasses.Deferred checks
buzz-review-completed.Human steps: open a Solo chat with one agent; toggle network off/on (or let the relay reconnect); switch away to a team channel and back to the Solo chat. Working looks like the pill already reading "Sending to " without a Retry alert.
🤖 Generated with Claude Code