Repository navigation
feat(builderlab): one Builderlab settings page and sign-in for communities and agents - #1863
Conversation
kalvinnchau
left a comment
There was a problem hiding this comment.
🤖 Code-only review: repair the stale browser journeys before approval; required CI fails before their behavioral assertions. Additional findings cover expired-session recovery and an obsolete sign-in destination. Source, tests, and hosted CI evidence were reviewed; no application/browser or live Builderlab validation was performed.
…s at the one page Address the PR #1863 review: - A 401 from a community route now signs the shared Builderlab session out, as the account check and the remote agents path already do. Before, Account stayed signed in while Communities asked the user to sign in again with no way to do it. The current-credential check still runs first, so a stale 401 cannot sign out a newer session. - The Apps sign-in error now sends owners to Settings → Plugins → Builderlab. The Builderlab agents section no longer exists. - Browser journeys open the single Builderlab section in place of Builderlab hosting and Builderlab agents. The plugin-defaults journey checks Builderlab in place of the removed Hosted communities entry. Their behavioural assertions are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Matt Toohey <contact@matttoohey.com>
kalvinnchau
left a comment
There was a problem hiding this comment.
🤖 Approved after code-only re-review of afae371. The browser journeys now use the consolidated Builderlab destination without weakening their behavioral assertions, community-route 401 handling ends only the initiating session, and app sign-in guidance points to the correct section. The new held-response test covers stale and current credentials; required CI now passes.
No actionable findings remain. Review covered source, regression tests, and hosted CI evidence; no local application/browser or live Builderlab login/binding validation was performed. The older /me late-response test still covers cancellation before dispatch rather than an in-flight response; this is a nonblocking coverage gap with the production guard present.
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source review via Wes’s account.
One P2 inline: keep a local retry after a transient Communities account-check failure. Rocket, Mantis and Groot supplied independent review lanes. Reviewed head afae3717f37a0fb626f8f303deafc7286c4863f5, base 9bff16b421915ee742921e5a972d685a76e0d04f, including all three fixture screenshots. Hosted CI required was successful; Windows native validation was skipped. Source-only: no tests or app execution; native sign-in, keyboard/focus recovery and human acceptance remain unverified.
🤖 Withdrawing approval: the transient community account-check recovery defect in discussion_r4409305663 is confirmed at afae371. Add local retry and regression coverage before renewed approval.
…ities and agents Fold the Hosted communities plugin into the Builderlab plugin. Settings → Plugins → Builderlab (Block logo) now holds the account, hosted communities and remote agents. Desktop communities use the plugin's shared sign-in and the configured BUZZ_BUILDERLAB_URL instead of a separate production login, and read the account once sign-in's automatic identity link settles. Live development with a pinned viewer keeps the broker. Create community links open the new page. Co-authored-by: mbot <3754f8729004d95654c46dbab3129e4ab9ef05cc2534e2a3fbfc155983bd637b@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Bradley Axen <baxen@squareup.com>
…s at the one page Address the PR #1863 review: - A 401 from a community route now signs the shared Builderlab session out, as the account check and the remote agents path already do. Before, Account stayed signed in while Communities asked the user to sign in again with no way to do it. The current-credential check still runs first, so a stale 401 cannot sign out a newer session. - The Apps sign-in error now sends owners to Settings → Plugins → Builderlab. The Builderlab agents section no longer exists. - Browser journeys open the single Builderlab section in place of Builderlab hosting and Builderlab agents. The plugin-defaults journey checks Builderlab in place of the removed Hosted communities entry. Their behavioural assertions are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Matt Toohey <contact@matttoohey.com>
with the shared sign-in, a failed /v1/auth/me read (network error or 5xx) left communities with only an alert: auth was null, the sign-in empty state is owned by the page, and refresh only renders when signed in. render a try again action that reruns getAuth() and an ordinary load() under the same generation and active fences. a 401 still ends the shared session through the backend, which unmounts the card. Co-authored-by: peon <9ac6794b000690b7e814eb1805ad32405d0bec7d52838de3a86cf967565dacc0@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Kalvin Chau <kalvin@block.xyz>
afae371 to
ead0883
Compare
kalvinnchau
left a comment
There was a problem hiding this comment.
🤖 Reviewed at ead0883. The local account-check retry repair addresses the prior recovery finding while preserving session/lifecycle guards, 401 sign-out, and no deletion replay. No actionable findings from source review. Tests and runtime flows were not executed; native retry/account-replacement integration coverage remains limited.
Why
New users had to sign in to Builderlab twice in Settings: once under Builderlab hosting (communities) and again under Builderlab agents. This PR gives them one sign-in on one page.
What changes
block.hosted-communities) is folded intoblock.builderlabundercommunities/, and its separate registration is removed from the bundle list, the plugin manager and the native grant test.product=buzzlogin. Theproductlogin parameter only sets the branding on the sign-in page; the kgooseBbidentityAuthServiceuses it as anext-producthint, so both credentials are the same session type. Signing out anywhere signs out everywhere.BUZZ_BUILDERLAB_URLinstead of a hardcodedhttps://app.builderlab.xyz. Release builds already set it to production, so the saved pending-deletion origin stays the same there. Builds without the URL now show the unavailable notice for communities.SettingsGrouprows and header Refresh action as the communities list.VITE_BUZZ_LIVE=1) keeps the broker backend and its own sign-in. That mode has no native signer to bind with.A second UX pass is expected. This PR only combines the two pages with the existing design-system parts:
Header,InlineHeader,SettingsGroup,EmptyStateandButton.Screenshots (fixture render, signed in, demo data)
These come from a throwaway fixture, not the native app. It loads the real Builderlab plugin(s) through the real plugin runtime and settings cards, with the in-process test relay as the community relay. The native bridge and Builderlab responses are stubbed with demo data: the account, communities, agents and throwaway keys are all fake. The before shot is from the base commit
911526a87, which had two separate Settings pages, shown stacked here. Each needed its own sign-in.Before (light)
After
Validation
vitest run src/shared/design-system src/app src/features/communities src/bundled: 4938 passed.cargo test -p buzzodz-plugins: passed.cargo check --testsinsrc-tauri: passed.design:checkand the icon checks: passed.native.test.tswas rewritten for the shared session. It covers allowlisted routes, the 401 sign-out, stale-session guards on binding, waiting for the link, andnsec_backup_retrynow using thebuilderlabsource.index.test.tsxchecks that the desktop card shows one Sign out button and communities with the identity connected, and that live development stays on the broker.Not yet done: an agent run of the native desktop app, a human test, and an independent agent review.
Follow-ups / notes
nsec_backupSource::Hostedvariant no longer has a frontend caller. I left it in place to keep this PR to the frontend; it can be removed separately.block.hosted-communitiesis ignored, like the flags of other removed bundles.🤖 Generated with Claude Code