Skip to content

fix(desktop): make starter channels best-effort for community joiners#2482

Open
thomaspblock wants to merge 1 commit into
mainfrom
starter-channels-best-effort
Open

fix(desktop): make starter channels best-effort for community joiners#2482
thomaspblock wants to merge 1 commit into
mainfrom
starter-channels-best-effort

Conversation

@thomaspblock

@thomaspblock thomaspblock commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Problem

Joining an established community fails onboarding on the "Meet your starter team" screen with:

starter channels created but metadata not yet available Try again.

Reported for the meshllm community — reproduced by multiple joiners (#buzz-bugs thread).

ensure_starter_channels requires that every member — not just the community founder — can observe two channels matching the pristine starter spec (general / welcome-everyone, open, stream, unarchived). In an established community those channels may have been renamed, made private (their kind:39000 metadata is then invisible to a non-member joiner — channel-scoped storage), archived, or converted to a forum. Any of these makes every subsequent joiner hit the error deterministically. The failure was already effectively non-fatal ("Take me to Buzz" → "Skip for now" after 2 failures), so the error only scared users without protecting anything.

Fix

Starter-channel setup is a real requirement only for the founder creating them; for a joiner, a customized starter set is normal community evolution. Downgrade both layers to best-effort:

  • ensure_starter_channels (Rust, channels.rs) — log and proceed instead of returning Err when the full starter set is not observable after create + metadata polling. ensure_starter_channel_memberships already skips unmatched specs, so membership joins still happen for whatever starter channels do match. The freshly-created case needs no rescue: the relay grants the creator owner membership at create time, so slow kind:39000 propagation only delays sidebar visibility.
  • ensureStarterChannels (TS, welcome.ts)StarterChannelsResult.generalChannel / welcomeChannel become nullable instead of throwing "Starter channels were not available after setup". No callers consumed those fields outside tests (verified by grep — only result.channels is used in hooks.ts).

The private Welcome channel flow is unchanged and was already independent of this failure.

Testing

  • New TS test: ensureStarterChannels succeeds without a full starter set (customized community) — renamed general, no welcome-everyone; asserts no throw, null fields.
  • Full desktop JS suite: 3402 pass (includes the new test). Full Tauri Rust suite: 1560 pass. clippy + fmt + tsc + biome clean.
  • Pre-push hooks (including relay integration tests) green.

Joining an established community failed onboarding with 'starter channels
created but metadata not yet available' whenever the community's starter
channels (general / welcome-everyone) no longer matched the pristine spec —
renamed, made private (their kind:39000 metadata is invisible to a
non-member joiner), archived, or converted to a forum. Every new member hit
the error deterministically on the Meet-your-starter-team screen.

Starter-channel setup is a real requirement only for the community founder
creating them; for a joiner, a customized starter set is normal community
evolution, not a failure. Downgrade both layers to best-effort:

- ensure_starter_channels (Rust) logs and proceeds instead of erroring when
  the full starter set is not observable; membership joins still happen for
  whatever starter channels do match.
- ensureStarterChannels (TS) returns nullable generalChannel/welcomeChannel
  instead of throwing when the ensured list lacks a full match. No callers
  consumed those fields outside tests.

The private Welcome channel flow is unchanged and was already independent
of this failure.

Co-authored-by: Thomas Petersen <thomasp@squareup.com>
Signed-off-by: Thomas Petersen <thomasp@squareup.com>
@thomaspblock
thomaspblock requested a review from a team as a code owner July 23, 2026 06:57
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.

1 participant