Repository navigation
Conversation
matt2e
marked this pull request as ready for review
November 9, 2026 14:56
kalvinnchau
reviewed
Nov 9, 2026
kalvinnchau
left a comment
Contributor
There was a problem hiding this comment.
🤖 One focus regression found.
matt2e
added a commit
that referenced
this pull request
Nov 9, 2026
Open plugin on the "Already installed" dialog unmounted the dialog in the
same commit that showed the plugin's details. Base UI resolves an explicit
`finalFocus` in a layout cleanup, so the target ran before the details and
their Close button existed and fell back to the catalog's Add button, while
the Git path's Open in Buzz lands on Close plugin details.
The refusal dialog now closes with `open={false}` and unmounts from
`onOpenChangeComplete`, as the Git review does. The details mount and focus
their Close button first; the shared finalFocus guard then sees focus has
moved and leaves it there. The link's dismissal and a plugin's request still
settle once the dialog has closed. The Settings regression test asserts the
focus; a browser probe of the link flow passed in Chromium and WebKit with
this change and failed on both without it.
Addresses kalvinnchau's review of #3091.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
… downloading A `buzz://plugin-install?id=…&url=…&sha256=…` link, or a plugin's `requestInstall` with a URL source, naming a plugin already installed from Git, a folder or an unknown source was only refused when the owner clicked Update, after the artifact had been downloaded and an Update review shown. `ManagedPluginReview` now takes a `refusal`, computed at render by `UrlPluginInstallReview` from the live catalog. A refused review skips the download and shows a compact "Already installed" dialog with Close and Open plugin instead of Update or Try again. Open plugin shows the plugin's details in Manage plugins through the shared `openInstalledPlugin` handler, and the shared `closePluginImport` keeps those details when the link visit's dismissal lands later. A plugin's request resolves `cancelled`. URL-installed plugins still get the Update review, a failed download still offers Try again, and agent requests' click-time recheck is unchanged. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: mtoohey <mtoohey@squareup.com> Signed-off-by: Matt Toohey <contact@matttoohey.com>
…name its requester Follow-ups to e6c4ba7, which refused a URL install over a Git- or folder-installed plugin before downloading it. `UrlPluginInstallReview` froze `updating` at mount, so removing the conflicting plugin while the "Already installed" dialog was open let the review download and install, then settle the plugin's request as `updated` although a fresh install had happened. `ManagedPluginReview.onInstalled` now reports `installed` or `updated` from the catalog it checked right before installing, and the review passes that outcome through to `settle`; `entry.state` follows the live catalog the same way. A plugin's refused request now reads "Requested by <plugin>. …", matching the Install and Enable reviews. A link's refusal renders exactly as before. The help guide gains a sentence on the refusal and its Open plugin. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: mtoohey <mtoohey@squareup.com> Signed-off-by: Matt Toohey <contact@matttoohey.com>
The bullet 670dc90 added to the help guide said a `buzz://plugin-install` link or URL install request is refused "when that plugin is already installed", which can be read as the requesting plugin. It now says "when a plugin with that ID is already installed from Git or a folder". Wording suggestion from the review of that commit; no behavior change. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: mtoohey <mtoohey@squareup.com> Signed-off-by: Matt Toohey <contact@matttoohey.com>
Open plugin on the "Already installed" dialog unmounted the dialog in the
same commit that showed the plugin's details. Base UI resolves an explicit
`finalFocus` in a layout cleanup, so the target ran before the details and
their Close button existed and fell back to the catalog's Add button, while
the Git path's Open in Buzz lands on Close plugin details.
The refusal dialog now closes with `open={false}` and unmounts from
`onOpenChangeComplete`, as the Git review does. The details mount and focus
their Close button first; the shared finalFocus guard then sees focus has
moved and leaves it there. The link's dismissal and a plugin's request still
settle once the dialog has closed. The Settings regression test asserts the
focus; a browser probe of the link flow passed in Chromium and WebKit with
this change and failed on both without it.
Addresses kalvinnchau's review of #3091.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
kazemek21
approved these changes
Nov 10, 2026
kazemek21
left a comment
Contributor
There was a problem hiding this comment.
Kyle reviewed the PR and the Nexus review-tracker notes and approved with no comments.
Posted by Codex (gpt-6.1-sol) on behalf of kylez
joahg
added a commit
that referenced
this pull request
Nov 12, 2026
Resolve against #3091: a URL install still updates a Git-installed plugin in place after review, and only folder or unknown sources get the pre-download "Already installed" refusal. Tests and docs that used a Git install to trigger the refusal now use a folder install. Refs AGNTOPS-791 Co-authored-by: Hertz <c6741012416ef5c49a865db79682113385c5fb998e8c890234fb442b59e22748@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Joah Gerstenberg <joah@squareup.com>
joahg
added a commit
that referenced
this pull request
Nov 12, 2026
**Bug:** Some plugins were installed from Git, but their newer versions are now offered as downloads. Clicking **Update** or **Reinstall** fails because Buzz treats this as a different install source. Users have to delete the plugin and install it again. If the plugin is Marketplace itself, deleting it also removes the page used to reinstall it. **Cause:** The update screen blocks this switch, even though the installer can already handle it. **Fix:** Let users review the change and click **Update**. Buzz replaces the plugin without deleting it first and remembers the download URL for future updates. It keeps the plugin enabled or disabled as before, and the same publisher and signature checks still apply. | Before | After | | --- | --- | |  |  | The screenshots use an example plugin. **Before:** the update fails. **After:** users can review the source change and continue. **Folder and unknown sources:** A URL install over a plugin installed from a folder or an unknown source is still refused before anything downloads, with **Open plugin** to remove it first (#3091). Only Git installations update in place. **Validation:** Besides the unit and browser specs, the native installer path was exercised against a copy of a real profile whose Marketplace was installed from Git: installing the published Marketplace artifact from its URL replaced the Git source with the URL, kept the plugin enabled, left every other plugin unchanged, and **Roll back** restored the Git build and source. Refs AGNTOPS-791 buzz-review-completed --------- Signed-off-by: Helen Tian <htian@squareup.com> Signed-off-by: Joah Gerstenberg <joah@squareup.com> Co-authored-by: Codex <noreply@openai.com> Co-authored-by: Joah Gerstenberg <joah@squareup.com> Co-authored-by: Hertz <c6741012416ef5c49a865db79682113385c5fb998e8c890234fb442b59e22748@buzz.block.builderlab.xyz> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
A
buzz://plugin-install?id=…&url=…&sha256=…link, or a plugin'srequestInstallwith a URL source, naming a plugin already installed from Git, a folder or an unknown source downloaded the artifact and showed an Update review with an enabled Update button. The refusal only came when the owner clicked Update, and Try again then looped back into the same download and refusal. Nothing in the dialog linked to the plugin that was actually installed. Introduced with #2910.What changes
UrlPluginInstallReviewcomputes arefusalfrom the live catalog at render and passes it toManagedPluginReview. A refused review skips the download and shows a compact "Already installed" dialog with Close and Open plugin instead of Update or Try again.openInstalledPluginhandler. The sharedclosePluginImportkeeps those details open when the link visit's dismissal lands afterwards.cancelled. Its dialog reads "Requested by . …", matching the Install and Enable reviews.ManagedPluginReview.onInstalledreportsinstalledorupdatedfrom the catalog it checked right before installing, so removing the conflicting plugin while the dialog is open and then installing settles the request correctly.docs/plugin-architecture.mdanddocs/buzz-help.mddescribe the refusal and Open plugin.Unchanged
AgentPluginRequests' click-time recheck is untouched.Verification
pnpm vitest run src/app/ManagedPlugins.test.tsx src/app/Settings.test.tsx src/app/PluginImport.test.tsx src/app/AgentPluginRequests.test.tsx src/plugins/installer.test.ts: 269 passed.pnpm typecheck, Biome andpnpm design:checkclean.tests/browser/plugin-import.spec.mjs: 16/16.Before / after
Before: the link downloads the artifact, shows an Update review, refuses on click, and Try again loops. After: an immediate "Already installed" dialog with Close and Open plugin, and Open plugin lands on the plugin's details in Manage plugins.
Side by side, same journey in Chromium against the native-IPC fixture: install Artifact from Git, then deliver a
buzz://plugin-installlink for the same plugin. Left ismainat 58116b8, right is this branch at e6c4ba7.before-after-side-by-side.mp4
Related
#3024 touches only
PluginImport.tsxand is complementary.🤖 Generated with Claude Code