Skip to content

fix(desktop): variant-aware connecting gate for first-run handoffs#1938

Merged
matt2e merged 2 commits into
mainfrom
after-providing-key
Jul 16, 2026
Merged

fix(desktop): variant-aware connecting gate for first-run handoffs#1938
matt2e merged 2 commits into
mainfrom
after-providing-key

Conversation

@matt2e

@matt2e matt2e commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Summary

After importing an existing key (or redeeming an invite / joining a community) on first run, the handoff loading gate rendered a disabled replica of the step-1 welcome page — which read as being kicked back to the start while the community config applied and relay round trips settled.

  • Thread the WelcomeSetup sub-page that initiated the handoff through onComplete into App state, and make OnboardingLoadingGate variant-aware: the default-community path keeps the welcome replica (now with the real app icon instead of the mismatched Hexagon glyph), while key-import / invite / join-community render a forward-motion connecting view — the source page's heading over a BeeLoader with "Connecting to your community…".
  • Apply the variant at both render sites (pre-apply in App and inside AppReady) so the view persists across the whole handoff.
  • Add e2e coverage (desktop/tests/e2e/onboarding.spec.ts) asserting the key-import handoff shows the connecting gate and never the welcome replica, and that the default-community path still shows the replica.
  • Persist the desktop verification recipe as a project verify skill (desktop/.claude/skills/verify/SKILL.md).

Testing

  • Verified end-to-end with Playwright screenshot drives of the key-import, join-community, and default-community paths.
  • New onboarding e2e specs pass alongside desktop unit tests, Tauri Rust tests, and mobile tests (full pre-push suite green).

🤖 Generated with Claude Code

After importing an existing key (or redeeming an invite / joining a
community) on first run, the handoff loading gate rendered a disabled
replica of the step-1 welcome page, which read as being kicked back to
the start while the community config applied and the relay round trips
settled.

Thread the WelcomeSetup sub-page that initiated the handoff through
onComplete into App state, and make OnboardingLoadingGate variant-aware:
the default-community path keeps the welcome replica (now with the real
app icon instead of the mismatched Hexagon glyph), while every other
source renders a forward-motion connecting view — the source page's
heading over a BeeLoader with "Connecting to your community…" — at both
render sites (pre-apply and inside AppReady) so the view persists across
the whole handoff.

Verified end-to-end with Playwright screenshot drives of the key-import,
join-community, and default-community paths; adds e2e coverage asserting
the key-import handoff shows the connecting gate and never the welcome
replica, and that the default path still shows the replica. Also
persists the desktop verification recipe as a project verify skill.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
@matt2e
matt2e requested a review from a team as a code owner July 16, 2026 03:21
Comment thread desktop/.claude/skills/verify/SKILL.md Outdated
Comment on lines +1 to +14
---
name: verify
description: Drive the desktop app end-to-end with Playwright and capture screenshot evidence that a change works
---

# Verifying desktop changes

The desktop app only renders with the E2E mock bridge — it cannot run in a
plain browser, and there is no headless Tauri. Drive the built frontend with
Playwright and read the screenshots.

## Recipe

1. Build, killing any stale preview server first (`reuseExistingServer: true`

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.

Do we need this file in the project?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

oops sorry

Address review feedback on the variant-aware connecting gate and drop
the checked-in verify skill:

- Export the sub-page headings from WelcomeSetup as
  WELCOME_SETUP_PAGE_HEADINGS and render both the sub-pages and the
  connecting gate from it, so rewording a heading can no longer
  silently drift the two apart.
- Add the missing disabled "Have an invite?" button to the welcome
  replica so the default-community handoff no longer drops a button
  when the gate swaps in.
- Collapse isCompletingFirstRunCommunity into firstRunHandoffSource —
  the boolean was always exactly "source is non-null" — and make
  OnboardingLoadingGate's source prop non-nullable, removing the
  representable-but-impossible completing-with-no-source state.
- Remove desktop/.claude/skills/verify/SKILL.md.

Verified with tsc, biome, desktop unit tests (2920 passed), and the
onboarding Playwright suite (38 passed).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
@matt2e
matt2e merged commit dd39b62 into main Jul 16, 2026
25 checks passed
@matt2e
matt2e deleted the after-providing-key branch July 16, 2026 04:26
tlongwell-block pushed a commit that referenced this pull request Jul 16, 2026
…r-channels

* origin/main:
  feat(desktop): Projects v3 — overview redesign, activity feed, agent access & sync controls (#1851)
  Rework first-launch community onboarding (#1936)
  fix(desktop): stop marking users away while active on the machine (#1942)
  Add pre-push branch-skew guard and changed-spec e2e recipe (#1940)
  ci: build the relay once and cache it by source hash (#1941)
  fix(desktop): variant-aware connecting gate for first-run handoffs (#1938)
  Redesign agent AI configuration and defaults (#1935)
  Add Buzz-managed Node runtime for agent installs (#1930)
  feat(desktop): return nostr binding proof in browser fragment (#1933)
  Use selected relay for desktop pairing socket (#1934)

Co-authored-by: npub12gtutshhh76rx0jx697f32f9tffd4hhp3hx58fp4x6u4uemkm7sqf8f757 <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@sprout-oss.stage.blox.sqprod.co>
Signed-off-by: npub12gtutshhh76rx0jx697f32f9tffd4hhp3hx58fp4x6u4uemkm7sqf8f757 <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@sprout-oss.stage.blox.sqprod.co>

# Conflicts:
#	desktop/src/features/onboarding/hooks.ts
tlongwell-block pushed a commit that referenced this pull request Jul 16, 2026
* origin/main: (29 commits)
  chore(release): release Buzz Mobile version 0.4.5 (#1965)
  fix(mobile): support open pairing relays (#1939)
  feat(desktop): refine Projects navigation and overview hierarchy (#1956)
  Log handoff token counts (#1954)
  fix(onboarding): add Welcome finalize skip escape hatch (#1960)
  Welcome channel: Browse channels card, browser sorting, shortcut hint placement (#1948)
  chore(release): release Buzz Desktop version 0.4.7 (#1955)
  feat(desktop): confirm invites with an Opening-invite loading gate before machine onboarding (#1950)
  fix(mobile): replace pairing placeholder with Buzz icon (#1952)
  feat(desktop): remove theme selection from onboarding, default to Buzz + System (#1947)
  fix(desktop): sentence-case runtime descriptions in onboarding setup (#1944)
  feat(desktop): Projects v3 — overview redesign, activity feed, agent access & sync controls (#1851)
  Rework first-launch community onboarding (#1936)
  fix(desktop): stop marking users away while active on the machine (#1942)
  Add pre-push branch-skew guard and changed-spec e2e recipe (#1940)
  ci: build the relay once and cache it by source hash (#1941)
  fix(desktop): variant-aware connecting gate for first-run handoffs (#1938)
  Redesign agent AI configuration and defaults (#1935)
  Add Buzz-managed Node runtime for agent installs (#1930)
  feat(desktop): return nostr binding proof in browser fragment (#1933)
  ...

# Conflicts:
#	desktop/src/features/communities/ui/AddCommunityDialog.tsx
#	desktop/src/features/communities/ui/WelcomeSetup.tsx
#	desktop/src/features/onboarding/ui/MembershipDenied.tsx
#	desktop/src/shared/deep-link.ts
#	desktop/tests/e2e/onboarding.spec.ts
tlongwell-block pushed a commit that referenced this pull request Jul 16, 2026
* origin/main: (29 commits)
  chore(release): release Buzz Mobile version 0.4.5 (#1965)
  fix(mobile): support open pairing relays (#1939)
  feat(desktop): refine Projects navigation and overview hierarchy (#1956)
  Log handoff token counts (#1954)
  fix(onboarding): add Welcome finalize skip escape hatch (#1960)
  Welcome channel: Browse channels card, browser sorting, shortcut hint placement (#1948)
  chore(release): release Buzz Desktop version 0.4.7 (#1955)
  feat(desktop): confirm invites with an Opening-invite loading gate before machine onboarding (#1950)
  fix(mobile): replace pairing placeholder with Buzz icon (#1952)
  feat(desktop): remove theme selection from onboarding, default to Buzz + System (#1947)
  fix(desktop): sentence-case runtime descriptions in onboarding setup (#1944)
  feat(desktop): Projects v3 — overview redesign, activity feed, agent access & sync controls (#1851)
  Rework first-launch community onboarding (#1936)
  fix(desktop): stop marking users away while active on the machine (#1942)
  Add pre-push branch-skew guard and changed-spec e2e recipe (#1940)
  ci: build the relay once and cache it by source hash (#1941)
  fix(desktop): variant-aware connecting gate for first-run handoffs (#1938)
  Redesign agent AI configuration and defaults (#1935)
  Add Buzz-managed Node runtime for agent installs (#1930)
  feat(desktop): return nostr binding proof in browser fragment (#1933)
  ...

# Conflicts:
#	desktop/src/features/communities/ui/AddCommunityDialog.tsx
#	desktop/src/features/communities/ui/WelcomeSetup.tsx
#	desktop/src/features/onboarding/ui/MembershipDenied.tsx
#	desktop/src/shared/deep-link.ts
#	desktop/tests/e2e/onboarding.spec.ts

Signed-off-by: npub12gtutshhh76rx0jx697f32f9tffd4hhp3hx58fp4x6u4uemkm7sqf8f757 <5217c5c2f7bfb4333e46d17c98a9255a52dadee18dcd43a43536b95e6776dfa0@sprout-oss.stage.blox.sqprod.co>
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.

2 participants