Gate Enhanced Inspector support to GemStone 3.7.5+#138
Merged
Conversation
The vendored GT payload cannot deliver a working Enhanced Inspector below 3.7.5: pre-3.7.0 stones can't even file it in (RsrAsyncMournHandler uses GcFinalizeNotification, a kernel class new in 3.7.0), and 3.7.0/3.7.2 file in but show no views (GCI-compiled string literals are Unicode there and the platform refuses to '=' compare them against the payload's byte-String dictionary keys, so the view lookup raises and is swallowed). 3.7.5 is the first release where the whole pipeline works. Rather than paper over the platform behavior, limit the feature to 3.7.5+: - supportsEnhancedInspector(stoneVersion) / ENHANCED_INSPECTOR_MIN_VERSION in enhancedInspectorInstall.ts. Semantic comparison (compareGemStoneVersions), so 3.7.6 / 4.0 pass with no list to maintain. Extracts the leading numeric token (GciTsVersion returns "3.7.5 <suffix>") and pads a short "major.minor" form so a future "4.0" compares cleanly. - Three gates: refreshEnhancedInspectorAvailable (routing latch returns false without probing on <3.7.5, so a stone that already has the classes still falls back to the classic inspector), maybeOfferEnhancedInspectorInstall (no offer/auto-install), and runInstallEnhancedInspector (error + stop). - New gemstone.enhancedInspectorSupported context key, driven by session selection, hides the install command in the palette on unsupported stones. - Docs: walkthrough, walkthrough step, and autoInstall setting note 3.7.5+. Tests: version-gate coverage across unsupported (3.6.2 / 3.7.0 / 3.7.2) and supported (3.7.5 / 3.7.6 / 4.0, incl. short + build-suffix forms); the gci routing smoke test now uses the stone's real version and asserts the gated routing decision holds across the CI version matrix. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Owner
|
Hm.. This will be an argument against doing development on 3.6.2! |
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
The Enhanced Inspector support is now limited to GemStone 3.7.5 and later. On older servers Jasper keeps the classic Inspector and never offers to install the enhanced support. The gate is a single semantic version check, so future releases (3.7.6, 4.0, …) are admitted automatically with no list to maintain.
Why we exclude pre-3.7.5 servers
The vendored GToolkit/RSR payload cannot deliver a working Enhanced Inspector below 3.7.5. There are two independent reasons, which together set the floor at 3.7.5:
1. Pre-3.7.0 — the payload won't file in (RSR requirement)
RemoteServiceReplication'sRsrAsyncMournHandlerreferencesGcFinalizeNotification, a GemStone kernel class introduced in 3.7.0. On 3.6.x that symbol does not exist, so filing in the payload fails to compile (CompileError 1001, undefined symbol GcFinalizeNotification) and the install aborts. In other words, RSR itself requires GemStone ≥ 3.7.0 — it is a 3.7-era component (3.7.x even ships RSR as a bundled project).2. 3.7.0–3.7.4 — it installs, but shows no views (Unicode/byte string mismatch)
On these servers the payload files in cleanly, but the inspector comes up empty. The cause is a server-side string-encoding behavior, not the payload files (the same files work on 3.7.5):
Stringkeys.ArgumentErroron a mixed Unicode-vs-byteString =comparison, so the inspector's view lookup (... at: 'views') throws. The error is caught and swallowed, and the inspector renders no views.String, so the comparison is byte-vs-byte and the lookup succeeds.Because reason (1) blocks everything below 3.7.0 and reason (2) blocks 3.7.0 through 3.7.4, the first release where the full pipeline (install and views) works is 3.7.5.
We deliberately chose to gate on version rather than paper over the platform behavior in the queries (e.g. coercing every dictionary key to a byte
String): that touches many comparison sites, is fragile, and would only mask a server limitation. Gating is the honest, maintainable fix.What changed
supportsEnhancedInspector(stoneVersion)/ENHANCED_INSPECTOR_MIN_VERSION(enhancedInspectorInstall.ts) — the single source of truth. Uses the semanticcompareGemStoneVersions, extracts the leading numeric token from the rawGciTsVersionstring (which carries a trailing build suffix), and pads a shortmajor.minorform so a future"4.0"compares cleanly.refreshEnhancedInspectorAvailable— the routing latch returnsfalsewithout even probing on < 3.7.5, so a server that already has the classes (e.g. a shared stone) still falls back to the classic Inspector.maybeOfferEnhancedInspectorInstall— no connect-time offer or auto-install.runInstallEnhancedInspector— reports "requires GemStone 3.7.5 or later" and stops.gemstone.enhancedInspectorSupportedcontext key, driven by session selection, hides the Install Enhanced Inspector Support command in the Command Palette on unsupported servers.enhancedInspector.autoInstallsetting description all note the 3.7.5+ requirement.Testing
major.minorand build-suffix forms) versions, at every gate: helper, routing latch, offer, auto-install, and manual command.npm run compileclean; full suite green (server / client / mcp) and the on-demand GCI suite green against a live 3.7.5 stone.