Skip to content

fix(installer): clean up a conflicting Claude sentry plugin - #322

Merged
evanpurkhiser merged 1 commit into
mainfrom
evanpurkhiser/fix-installer-remove-the-plugin-left-by-our-own-claude-marketplace
Aug 5, 2026
Merged

fix(installer): clean up a conflicting Claude sentry plugin#322
evanpurkhiser merged 1 commit into
mainfrom
evanpurkhiser/fix-installer-remove-the-plugin-left-by-our-own-claude-marketplace

Conversation

@evanpurkhiser

@evanpurkhiser evanpurkhiser commented Aug 5, 2026

Copy link
Copy Markdown
Member

Claude was the only harness with no cleanup hook, so nothing stopped a second sentry plugin from resolving alongside the one the installer manages.

Our plugin is installable from two marketplaces under two ids. The installer uses Anthropic's official catalog (sentry@claude-plugins-official), which pins getsentry/plugin-claude — but adding our own catalog by hand gives sentry@sentry-plugin-marketplace from the same repo, and Claude will hold both. Two plugins then serve the same skills and both resolve. I have exactly that: ours enabled, the official one disabled, so the installer manages one plugin while a different one is live.

This removes the copy the installer does not manage, before installing. The check is just whether the other id is present, so it is a no-op for anyone who only ever ran the installer.

isSentryInstalled becomes hasPlugin(system, pluginId) so one listing can be checked for either id.

How this relates to the other harnesses' cleanups

Not by doing the same thing — worth being precise, because the direction differs:

Harness The two copies are Cleanup removes Keeps
Codex different plugins — OpenAI's own vs ours the vendor's sentry@openai-curated ours, via our marketplace
Grok the same plugin, two delivery paths the vendor-catalog delivery the direct-repo install
Claude (this PR) the same plugin, two delivery paths our marketplace delivery the vendor-catalog install

Claude is the inverse of Grok for an identical situation, since both vendors catalog our own repo. That is not a preference: Grok's marketplace install is TUI-only, so its direct-repo install is a workaround with a standing TODO to switch once it is headless — at which point Grok's direction would flip to match Claude's.

The rule all three share is weaker but real: keep whatever the harness's install produces and evict every other sentry. Today each harness open-codes that; #320 expresses it once, which is why it needs this hook to exist.

Scope, honestly: the installer has always installed Claude from Anthropic's marketplace — that source has been in claude.ts since the first installer commit (#180) — so this is not repairing a migration the installer caused. The duplicate comes from a manual marketplace add, which in practice means people developing on this repo.

Stacked on #321.

@evanpurkhiser
evanpurkhiser requested review from HazAT and dcramer August 5, 2026 17:07
@evanpurkhiser evanpurkhiser changed the title fix(installer): remove the plugin left by our own Claude marketplace fix(installer): clean up a conflicting Claude sentry plugin Aug 5, 2026
Our plugin reaches Claude two ways. The installer uses Anthropic's
official catalog, which pins getsentry/plugin-claude; adding our own
catalog by hand installs the same repo under a second id. Claude holds
both happily, so two plugins end up serving the same skills and both
resolve.

Claude had no cleanup hook, so nothing dropped the copy the installer
does not manage. It gets one, checking only whether the other id is
present -- a no-op for anyone who has only ever run the installer.

The direction is not the same as the other harnesses and is not meant to
be: Grok evicts the vendor catalog's copy to keep its direct-repo
install, because its marketplace install is TUI-only. The rule they share
is to keep whatever the harness installs and evict every other sentry.
@evanpurkhiser
evanpurkhiser force-pushed the evanpurkhiser/fix-installer-remove-the-plugin-left-by-our-own-claude-marketplace branch from e779eb9 to c0f5a3e Compare August 5, 2026 18:31
@evanpurkhiser
evanpurkhiser merged commit 3ac2e8d into main Aug 5, 2026
19 checks passed
@evanpurkhiser
evanpurkhiser deleted the evanpurkhiser/fix-installer-remove-the-plugin-left-by-our-own-claude-marketplace branch August 5, 2026 18:34

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit c0f5a3e. Configure here.

}

await runCommand(system, `claude plugin uninstall ${OUR_PLUGIN_ID}`, output);
return `Removed conflicting plugin ${OUR_PLUGIN_ID}`;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cleanup can leave Sentry disabled

High Severity

When the official plugin is installed but disabled, cleanup removes the enabled marketplace copy and then the installer selects update. Activation state is ignored, so a successful run can leave no active Sentry plugin.

Additional Locations (2)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit c0f5a3e. Configure here.

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