Uninstall server plugin support; isolate Enhanced Inspector in GsEnhancedInspector (#318) - #384
Merged
Merged
Conversation
…n GsEnhancedInspector (#318) Adds a "Uninstall Server Support" command (Enhanced Inspector + refactoring engine) mirroring the install flow, and reworks the Enhanced Inspector to install into a dedicated GsEnhancedInspector dictionary so it can be removed cleanly by dropping that dictionary -- the same isolation the refactoring engine already uses with GsRefactoring. Install + uninstall: - Uninstall command gated on serverSupportInstalled; confirmation modal; one consolidated "GemStone server support installed/uninstalled." toast. - Refactoring uninstall drops GsRefactoring from every user's symbol list (and empties the dictionary), removes the loader and the *ast-core-compat backports. - Enhanced Inspector files its payload into GsEnhancedInspector (build transform + topaz loader updated); uninstall drops that dictionary and removes *GToolkit extension methods, with a legacy Published sweep for older installs. UI gating exposed by uninstall: - Every engine-dependent Explorer refactoring menu item and the editor "Refactor..." code actions now gate on gemstone.rbSupportAvailable (Delete Method / Rename Method Category stay available). - Per-pane Filter buttons no longer require pane focus (always visible). - Explorer clears the class/hierarchy/method panes when the selected dictionary is removed, instead of showing orphaned classes. Tests: 86 new (unit + live-stone integration on both 3.6.2/3.7.5); no new gci/. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
MatiasFernandez
approved these changes
Aug 7, 2026
MatiasFernandez
left a comment
Collaborator
There was a problem hiding this comment.
Left some comment worth reviewing
…318) - New client/src/serverPlugin/uninstallServerPlugin.ts module (+ test) — the uninstall counterpart to installServerPlugin. - New client/bin/uninstall-server-plugin.mjs + uninstallServerPluginMain.ts CLI, wired as the npm script `test:server:uninstall-plugin` (mirrors install-plugin). - Refine the Enhanced Inspector install/uninstall and refactoring uninstall commands and their tests (assert outcomes, not self-calls). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
# Conflicts: # package.json
…esh latch (#384 review) Addresses the optionalSupportOffer review thread: the install feature drivers returned `base.<latch> === true`, but the latch only flips when refreshWorkingSessionAfterInstall succeeds. When the session has uncommitted changes and the user picks "Later", the install landed + committed + verified server-side yet the driver reported false, so the bundle showed neither a success toast nor an error — the operation looked like it never happened. The uninstall drivers were already fixed this way; this brings the two install drivers into line: - refactoringInstallCommand: return true after result.success is verified (latch still drives the context key / menu gating). - enhancedInspectorCommand: performInstall now returns boolean (was void) so the feature can report the server-side result; installEnhancedInspectorFeature returns it. Regression tests for both drivers cover the deferred-refresh ("Later") path (verified via a negative control that they fail against the latch-based return). Co-Authored-By: Claude Opus 4.8 (1M context) <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.
Summary
Implements #318: adds a way to uninstall the optional server-plugin support, and reworks the Enhanced Inspector so it can be removed cleanly.
Before this, neither the Enhanced Inspector nor the refactoring engine had any removal path — once filed into an image, their classes stayed forever. The Enhanced Inspector was also filed into the shared
Publisheddictionary, commingled with unrelated content, so it couldn't be dropped as a unit. This change gives both an install/uninstall pair and isolates the Enhanced Inspector in its ownGsEnhancedInspectordictionary — the same isolation the refactoring engine already uses withGsRefactoring.What's included
Uninstall command (
GemStone: Uninstall Server Support)GemStone server support installed/uninstalled.toast (not one per feature).gemstone.serverSupportInstalledcontext key); also reachable from the settings/walkthrough links.GsRefactoringfrom every user's symbol list, empties the dictionary object, removes the loader and the feature-detected*ast-core-compatkernel backports.GsEnhancedInspectorfrom every user's symbol list and removes the*GToolkitextension methods, plus a legacyPublishedsweep so stones installed by the old build are fully cleaned.Enhanced Inspector → dedicated dictionary
GsEnhancedInspector(build transformapply_jasper_transforms.shretargeted; topaz loader updated to create/share the dictionary first). Install creates + shares the dictionary and migrates any legacyPublished-resident classes.UI gating the uninstall exposed
gemstone.rbSupportAvailable, so they disappear when the engine is absent and return after reinstall (Delete Method / Rename Method Category stay — they don't need the engine).GsRefactoring), instead of leaving orphaned classes.Testing
gci/tests).querySunitRunLimit) unrelated to this change.🤖 Generated with Claude Code