Welcome new users with a live agent team kickoff#1998
Conversation
01b0d29 to
c57d812
Compare
|
CHANGE: This branch predates |
|
🤖 (posted by Morgan's AI agent) Re: rebase + starter channels — confirmed resolved and decided:
|
5cac624 to
281d636
Compare
tlongwell-block
left a comment
There was a problem hiding this comment.
Requesting one lifecycle fix before merge.
P2 — Re-read channel events after the final closer beat. In the unresolved branch, latestEvents is captured when the 15-second intro timeout fires, then the code waits another 10 seconds before classifying (classifyWelcomeKickoffResolution(latestEvents, ...)). Any Honey/Bumble reply arriving during that final beat is therefore ignored and Fizz can publish false “taking longer to reply” copy immediately after the reply is already visible. Read channelEventsRef.current after waitForWelcomeKickoffBeat resolves (and derive the opener from that same snapshot), then classify that snapshot. Please add a timer/orchestration regression covering a reply during the closer beat.
Source rating: 7.5/10 as-is; 9/10 after this race and CI are green. The overall design is thoughtful: stable persona/team identity, relay-scoped recovery, channel-scoped idempotency markers, readiness degradation, cancellation, reduced motion, and the backend's subscription-before-online boundary are all solid. Focused local validation passed (3,026 desktop tests, typecheck, focused Biome, and diff check). The focused Rust test could not run in this worktree because the required binaries/buzz-acp-aarch64-apple-darwin sidecar is absent; CI Rust checks are green. At review time, Desktop E2E Integration (1/2) is failing and one backend check remains in progress, so this is not merge-ready independently of the source finding.
|
🤖 Addressed the requested Welcome kickoff lifecycle fix in What changed:
I also fixed the related failing onboarding E2E expectations around private Focused local checks passed: Biome on touched files, Welcome kickoff/canvas unit tests, and the two affected onboarding E2E tests. |
tlongwell-block
left a comment
There was a problem hiding this comment.
Re-review of 480bf387: the closer stale-snapshot race is fixed and its focused regression passes, but this is still Request changes.
Blocking
-
The update still blocks first-run navigation on unbounded Welcome-team/canvas provisioning.
initializeStarterChannels()still awaitsensureWelcomeTeam()andensureWelcomeCanvas()before returning (desktop/src/features/onboarding/hooks.ts:97-98), whilecompleteAndShowWelcome()still waits for that whole promise beforegateComplete()and routing (hooks.ts:601-614). A slow create still delays landing once per agent, and a hung command still strands the user behind “Setting up your community…”. Changing the E2E delay from 9s to 1s does not fix the lifecycle boundary; it only makes the test finish sooner. Navigate once the private Welcome channel exists, then run team/canvas setup as bounded background work. -
Swallowing every
ensureStarterChannelserror regresses community onboarding and currently fails CI. The new inner catch athooks.ts:52-63converts starter-channel failure into{ ok: true, warningReason }. That behavior is also used by the community onboarding flow, which needs an actual failure so the user can Skip/Retry. CI’sWelcome failure can be skipped without abandoning community onboardingfails all three attempts because “Channel creation is not permitted.” never reaches the flow. Preserve a failing result for that path, or scope the best-effort behavior specifically to first-run private-Welcome landing.
Test gaps still present
successful starter channel retry clears its actionable toaststill does not click Retry or verify a second command;expectRetrySuccessDismissesToast()only asserts that no toast exists. The new stable toast id may be the right fix, but this test does not exercise it.- The new retry-failure test only checks the first toast. It no longer proves that a second failure leaves an actionable Retry.
first-run onboarding shows setup loading…reduced the adversarial delay from 9s to 1s and is now timing-flaky locally: the shell appears before its laterexpectShellHidden()assertion. It needs a deterministic deferred command, not a short wall-clock delay.- The mock bridge still has no handlers for
has_managed_agent_channel_message_markerorset_canvas, and there is still no E2E assertion that the actual Fizz kickoff runs (including degraded/offline presence).
Validation
- Focused Welcome kickoff unit suite: 16/16 passed.
- Typecheck + focused Biome: passed.
- Fresh-build focused onboarding integration run: 2 passed, 1 failed (the 1s setup-loading timing test).
- CI integration shards: passed.
- CI overall: failed —
Desktop Smoke E2E (2)has the community-onboarding regression above; aggregateDesktopis therefore red.
The stale closer race is resolved, but the primary lifecycle blocker remains and the update introduces a real adjacent onboarding regression. Please do not merge this head.
- Add centralized motion system (motion.css) with shared duration/easing tokens and a one-shot motion-enter-conversation primitive - Play the entrance on the opener in the main timeline; stop auto-opening the kickoff thread (removed thread skeleton / 'No replies' flashes) - Replace kickoff retry with a channel-scoped coordinator that survives rerenders and cancels only on navigation - Restart teammates whose allowlist lacks the lead; scope intro detection to replies within the opener thread - 10s closer beat; closer names delayed teammates distinctly from failed - Forced-fresh dev mode replaces the Welcome channel for clean replays - Idempotent managed-agent sends return resolved thread root/parent - Extract useWelcomeKickoffEntrance + shared pubkey collectors to keep ChannelScreen under the file-size ceiling
…size ceiling Rebase onto main brought back the Browse channels Welcome card (#1948); the intro builder now lives in its own hook file.
Extract the empty-channel intro into one component used by both the virtualized leading row and the non-virtualized empty state, and anchor it at the top in both. The blank Welcome channel and the first-message state now share the same layout, so the Welcome opener's entrance plays with zero layout shift.
Preserve the channel intro while the deferred first message catches up, and align the intro-only timeline with the populated virtualized layout so the Welcome cards do not skeleton-flash or shift when Fizz appears.
- Reuse only agents owned by the built-in Welcome Team, preserving user agent policies - Surface team and canvas initialization failures to the existing retry flow - Retry transient presence reads within the readiness deadline - Continue with Fizz when one teammate fails to start, so degraded copy can close the loop - Reset one-shot entrance state on channel changes - Expose managed agent team identity through the desktop API
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
Signed-off-by: morgmart <98432065+morgmart@users.noreply.github.com>
480bf38 to
7ade128
Compare
Summary
Experience
Testing
just cipnpm -C desktop typecheckpnpm -C desktop exec biome check srcnode desktop/scripts/check-file-sizes.mjscargo test --manifest-path desktop/src-tauri/Cargo.toml managed_agents --lib(672 passed)BUZZ_SHARE_IDENTITY=1 VITE_BUZZ_FORCE_FRESH_ONBOARDING=true just stagingNotes