Repository navigation
NEXUS-4337: Expose retained plugin update reviews - #3075
Merged
Merged
Conversation
kazemek21
force-pushed
the
kylez_NEXUS-4337_expose_plugin_update_queue
branch
from
November 9, 2026 11:06
8279899 to
d46ac9a
Compare
kazemek21
force-pushed
the
kylez_NEXUS-4337_expose_plugin_update_queue
branch
8 times, most recently
from
November 10, 2026 20:16
4bb57cc to
f4f7d0b
Compare
Expose the retained checker through an optional caller-owned capability and serialize explicit update reviews. Bind request recovery to provider, plugin identity and exact candidate tokens; preserve unknown results after replacement or restart. Keep confirmation and native settlement custody intact, refresh failed reviews, and retain existing source, publisher, access and enabled-choice guards. Co-authored-by: Codex <noreply@openai.com> Signed-off-by: Kyle Zemek <kylez@squareup.com>
kazemek21
force-pushed
the
kylez_NEXUS-4337_expose_plugin_update_queue
branch
from
November 10, 2026 20:28
f4f7d0b to
affbcd7
Compare
kazemek21
marked this pull request as ready for review
November 10, 2026 20:53
gilgtm
approved these changes
Nov 10, 2026
gilgtm
left a comment
Contributor
There was a problem hiding this comment.
🤖 No P0/P1 findings from the completed deep-dual review of affbcd7. Reviewed the full PR against main@e02509fbe173cd60872e2addaa098a57cbee4f63 using read-only code and test inspection. Native app behavior was not exercised.
Posted by duel-review skill [driver: codex(high), mode: deep-dual, review synthesized by codex(high)]
dr0uleau
approved these changes
Nov 10, 2026
dr0uleau
left a comment
Contributor
There was a problem hiding this comment.
🤖 approved at this commit. CI is green. Native and visual checks remain unverified
bostonaholic
added a commit
that referenced
this pull request
Nov 11, 2026
…y-untagged-reactions * origin/main: (324 commits) fix(github): show private-repo body images from signed links (#3252) NEXUS-4029: Preserve semantic chips in the core composer (#2303) Make plugin signature enforcement opt-in (#2212) NEXUS-4156: Add workspace Leads and choose a chat's workspace (#2788) feat(plugins): report conclusively retired update providers (#3263) feat(messages): let attachment renderers open files from the host file card (#2239) feat(charts): bundle a Charts code-block renderer (#3226) Expose native reply grouping through Conversation.ui (#3245) NEXUS-4163: Keep plugin-owned chat deletion in Solo (#2787) NEXUS-4156: Expose Solo Workspaces to plugin regions (#2786) NEXUS-4022: Start region chats in the New Chat editor (#2784) feat(link-previews): unfurl web links below messages by default (#3225) fix(messages): keep names in literal Markdown as written when editing (#2834) feat(plugins): fetch a packaged managed plugin policy from a URL (#2504) fix(goose): enable deferred tool loading for goose agents (#3227) fix(unread): preserve manual intent in captured explicit reads (#3228) NEXUS-4337: Expose retained plugin update reviews (#3075) feat(conversation): add a link preview slot below messages (#3219) feat(plugins): let link previews read a public page's preview fields (#3217) Let sidebar row plugins decorate ordinary Solo chats (#3222) ...
kazemek21
added a commit
that referenced
this pull request
Nov 11, 2026
## TL;DR The optional `PluginInstaller.getInstallationSource` method lets Marketplace retain a saved Git, URL, folder, or bundled route without exposing its location. It reports only `git`, `url`, `folder`, `bundled`, `absent`, or `unavailable`, and does not change installation behavior. Fixes NEXUS-4433 ([Linear issue](https://linear.app/squareup/issue/NEXUS-4433/update-marketplace-plugins-from-the-source-they-were-installed-from)). ## Behavior - It returns `unavailable` before the catalog is ready or when saved metadata is missing, unknown, malformed, or ambiguous. - It returns `absent` only for a missing manifest ID in a ready catalog; otherwise it returns only a recognized source kind. This is independent of [#3075](#3075), which owns retained update queues. ## Testing No manual testing. Required CI covers the changed contract. ## Scope This adds source support only. It does not prove or change an installed runtime. Status: [Buzz improvements](https://g2.sqprod.co/apps/kylez-buzz-improvements-status) *Generated with Codex (gpt-6-luna, high) on behalf of kylez.* --------- Signed-off-by: Kyle Zemek <kylez@squareup.com> Co-authored-by: Codex <noreply@openai.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.
TL;DR
Expose optional plugin update discovery and explicit review queues through the existing
pluginInstallerservice. Reuse the host's retained checker and importer; a missing result remains unknown, not proof that a plugin is current.What
getSnapshot,subscribe, andrefreshexpose aggregate status, known candidates, and known errors. Plugin-triggered refreshes share a one-minute minimum interval.queueUpdatesaccepts opaque tokens for current candidates from a recent completed check. Each item opens the existing confirmation dialog, identifies its requesting plugin, and preserves source, publisher, access, and saved enabled-choice guards.getQueueRequestreturnsadmitted,not-admitted,unknown, orconflictwithout submitting. Onlynot-admittedfrom the same live provider proves non-admission. Replacement, restart, or queue eviction stays unknown and cannot create a duplicate on replay.Validation and limits
Focused regression coverage covers review drift and missing candidates, busy-manager admission, late native settlement, caller cleanup, request isolation, and provider replacement. Hosted CI passed on
affbcd72, including all JavaScript shards and changed-file repetitions. The repairs were not run locally; normal precommit checks passed.No native installed/runtime or fail-before/pass-after proof is claimed. Queue state lasts only for the host provider lifetime. The frontend checks and immutable prepared import preserve the existing boundary; this does not add native enforcement or cross-restart idempotency. No second checker or per-plugin checked-current result is added.
Tracking
Fixes NEXUS-4337
Pinned-link classification and ref-change disclosure are in #3024.
Generated with Codex (gpt-6.1-sol, high) on behalf of kylez