Repository navigation
refactor(builderlab): keep capabilities fresh in the session - #3003
Conversation
Cache capability checks for one minute, retain permissions on failure, and keep sign-in identity stable. Signed-off-by: Jarrod Sibbison <jsibbison@squareup.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Jarrod Sibbison <jsibbison@squareup.com> Co-authored-by: Codex <codex@openai.com>
Check provider availability independently of registration when opening Decisions settings and within the existing request deadline. Signed-off-by: Jarrod Sibbison <jsibbison@squareup.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Jarrod Sibbison <jsibbison@squareup.com> Co-authored-by: Codex <codex@openai.com>
kalvinnchau
left a comment
There was a problem hiding this comment.
🤖 Three capability-refresh regressions need attention; details inline.
Signed-off-by: Jarrod Sibbison <jsibbison@squareup.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Jarrod Sibbison <jsibbison@squareup.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Jarrod Sibbison <jsibbison@squareup.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Jarrod Sibbison <jsibbison@squareup.com> Co-authored-by: Codex <codex@openai.com>
kalvinnchau
left a comment
There was a problem hiding this comment.
🤖 One reproduced sign-out regression and one maintenance finding remain; the three previously reported repair paths are addressed.
Signed-off-by: Jarrod Sibbison <jsibbison@squareup.com> Co-authored-by: Codex <codex@openai.com>
Signed-off-by: Jarrod Sibbison <jsibbison@squareup.com> Co-authored-by: Codex <codex@openai.com>
…f at each gate Reading a signed-in session snapshot now re-reads permissions once they are a minute old, and actions wait for that through freshCredential. Gates read flags and no longer refresh by hand. Builderlab stays registered as a Decisions provider while signed in and reports needs-setup without access, or checking while a refusal is being re-read. Default routing passes over a default that needs setup, and decide waits for a checking provider within its deadline. This replaces the provider discovery API and its routing and readiness special cases. Communities keeps its own account read, as on main. Signed-off-by: Bradley Axen <baxen@squareup.com>
A default still checking whether it can answer no longer takes the selection: without a choice, the first default that is ready or unconfirmed answers, and otherwise TypeSafe, whose key the user can add, with status checking while another default is still finding out. A refused Builderlab re-reading its permissions therefore no longer flips the selected provider once a minute or holds TypeSafe requests behind its account read, and a user without Builderlab access or a TypeSafe key is shown TypeSafe's setup rather than Builderlab's refusal. The session no longer parses can_delete_buzz_communities, which only Communities' own account read uses, and the development broker parses capability flags in one place for sign-in and capability checks. Signed-off-by: Bradley Axen <baxen@squareup.com> Co-authored-by: mbot <3754f8729004d95654c46dbab3129e4ab9ef05cc2534e2a3fbfc155983bd637b@buzz.block.builderlab.xyz>
baxen
left a comment
There was a problem hiding this comment.
🤖 Reviewed at a4fd6f5. Permissions now stay fresh in the session, so gates just read flags and only acting paths (agent requests, agent creation, Decisions) wait for a re-check, cancellably. The provider-discovery API is gone; Decisions routing picks the first default that can answer and falls back to TypeSafe, so a re-check without access no longer flips the selected provider. Typecheck clean; builderlab, decisions, agents, attention and browser-host suites pass locally (2,307 tests). The CI failures on the first run were GitHub 504s fetching pnpm/hermit, not test failures.
Picks up c202642 (block#2837), which fixes the ThreadPanel catch-up test that fails on every run of a merge with the older main. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * origin/main: (155 commits) deps: accept RUSTSEC-2026-0459 for libsqlite3-sys 0.38, move rmcp to 3.9.0 (block#3077) fix(communities): accept invite links and bare hosts in Join a community (block#2412) fix(builderlab): open a remote agent's Activity on the conversation it was opened from (block#3051) refactor(builderlab): keep capabilities fresh in the session (block#3003) feat(moderation): show invite links as a QR code (block#3029) Keep Create agent's Model row readable and give Goose a Thinking row (block#2673) Join a community right after creating it in Settings (block#2991) Let new Solo chats start temporary by default (block#2874) fix(messages): fill a screen that a head of folded agent activity leaves empty (block#3037) fix(search): search saved conversations while the community is offline or connecting (block#2724) test(agents): make version-history date assertion time-zone independent (block#3010) feat(relay): gate artifact writers on NIP-AR support (block#2735) fix(channels): open the dock's community switcher from Personal space (block#2806) fix(members): keep the list's place after a member change (block#2818) fix(channels): keep a launcher's side panel open on Close all tabs (block#2803) fix(activity): show a remote agent's Buzz send as its reply (block#3025) refactor(settings): move external identity authorization to security (block#3032) test(typeahead): serve the fixture pages as a build so cold loads fit (block#2793) feat(channels): list unread top-level mentions in sidebar Activity, and count only unread mentions on the Inbox card (block#2722) fix(solo): delete a removed workspace's settings after the groups write (block#2819) ... Signed-off-by: Andrew Harvard <aharvard@squareup.com>
* origin/main: deps: accept RUSTSEC-2026-0459 for libsqlite3-sys 0.38, move rmcp to 3.9.0 (#3077) fix(communities): accept invite links and bare hosts in Join a community (#2412) fix(builderlab): open a remote agent's Activity on the conversation it was opened from (#3051) refactor(builderlab): keep capabilities fresh in the session (#3003) feat(moderation): show invite links as a QR code (#3029) Keep Create agent's Model row readable and give Goose a Thinking row (#2673) Signed-off-by: Bradley Axen <baxen@squareup.com>
…pover-card-layout-7eeda1e0 * origin/main: (128 commits) deps: accept RUSTSEC-2026-0459 for libsqlite3-sys 0.38, move rmcp to 3.9.0 (#3077) fix(communities): accept invite links and bare hosts in Join a community (#2412) fix(builderlab): open a remote agent's Activity on the conversation it was opened from (#3051) refactor(builderlab): keep capabilities fresh in the session (#3003) feat(moderation): show invite links as a QR code (#3029) Keep Create agent's Model row readable and give Goose a Thinking row (#2673) Join a community right after creating it in Settings (#2991) Let new Solo chats start temporary by default (#2874) fix(messages): fill a screen that a head of folded agent activity leaves empty (#3037) fix(search): search saved conversations while the community is offline or connecting (#2724) test(agents): make version-history date assertion time-zone independent (#3010) feat(relay): gate artifact writers on NIP-AR support (#2735) fix(channels): open the dock's community switcher from Personal space (#2806) fix(members): keep the list's place after a member change (#2818) fix(channels): keep a launcher's side panel open on Close all tabs (#2803) fix(activity): show a remote agent's Buzz send as its reply (#3025) refactor(settings): move external identity authorization to security (#3032) test(typeahead): serve the fixture pages as a build so cold loads fit (#2793) feat(channels): list unread top-level mentions in sidebar Activity, and count only unread mentions on the Inbox card (#2722) fix(solo): delete a removed workspace's settings after the groups write (#2819) ...
Why
Key changes
/v1/auth/mein the background once they are a minute old. Acting on a permission waits for that read throughfreshCredential(signal), which can be cancelled. This covers agent requests, agent creation and Decisions. Gates only read flags; they no longer refresh by hand.needs-setup, and its settings say decisions are unavailable for this account. While it re-reads a refusal it reportschecking.readyorunconfirmed) answers. When none can, TypeSafe is the provider, since adding its key is something the user can do. The status ischeckingwhile another default is still finding out. A request waits forcheckingwithin its deadline, as Attention readiness already did. AcheckingBuilderlab therefore never moves the selection or delays TypeSafe.Reviewer highlights
registerProviderDiscovery/refreshProvidersplugin API and its routing and readiness special cases are removed. The Decisions Settings refresh no longer depends on an unstableactiveprop.unauthorizedinstead of falling back./auth/meread, at most once a minute. There is no timer.Validation
pnpm typecheckandpnpm lintare clean.vitest runata4fd6f57: 1,031 of 1,040 files pass and 8 are skipped. The one failure,MediaDownloadAction.test.tsx, passes when run alone, and this PR doesn't touch it. Pre-push hooks passed.checkingdefault not moving the selection or holding a request when another can answer, and no dispatch after the deadline.Deferred acceptance