fix(go): close all medium-divergence parity findings (M1-M19) - #236
Merged
Conversation
…8); seeding failure aborts boot (M19) (#210)
…t pages serialize rows:[] when empty, page cap 500, sessions cursor key sessionId (M16) (#210)
…er_for 30d (M13); MCP path resolves per-account maxSessions from the store (M5) (#210)
…10); terminal-path connection death cancels stranded prompts via OnConnectionEnded + broker CancelForConnection broadcasts sign:resolved (M8/M9); SSH transport distinguishes transport errors from normal closes (M7) (#210)
…r enabled — Node parity incl. the get-by-id quirk; prevents resurrection of Node-era deletions on shared data dirs (M14) (#210)
…en closes keep registry+buffer (tail/re-attach work), lists hide closed but show errored, explicit Close clears+removes, close-on-closed is a no-op; MCP cap prune treats retained dead sessions as dead (M6) (#210)
…ecycle/sudo guidance (M3); serverInfo.version from build info; Node's notifications section deliberately omitted (M1 blocked: go-sdk has no public API for custom notification methods) (#210)
…o Background-context forwarding awaiters can't leak (deliberate Node divergence); MCP cap counts live sessions only but keeps dead ids owned for post-mortem reads; explicit max_sessions=0 blocks MCP creation (negative = default 5); atomic Close guard + locked reasonOr (race-clean); account deletion purges retained post-mortem sessions (#210)
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.
Closes every remaining medium item from the parity audit (
data/go-parity-findings-2026-07-04.md). M2/M4/M11/M12/M17 were already closed ongo-parity-highs; this branch lands the other 14, one commit per logical group.Session & transport semantics
closedbut showerror(exact NodelistSessionsfilter, including the close-on-closed no-op). Only an explicitCloseclears the buffer and removes the entry. The MCP cap prune treats retained dead sessions as dead.status=error/transport-errorin WS + audit.OnConnectionEndedhook on the passkey factory, fired on connect failure and transport end) andBroker.CancelForConnectionbroadcastssign:resolvedso stale toasts clear on every tab (agent-proxy path switched to it too).MCP surface
serverInfo.versionnow comes from build info.accounts.max_sessionsinstead of always defaulting to 5.notifications/shellwatch/*is rejected by its typed method registry and the underlying jsonrpc2 connection is unexported. Until the sdk grows an escape hatch, agents must poll; the instructions deliberately omit Node's notifications section so they poll instead of waiting for notifications that cannot arrive. Recorded as a known divergence.Wire & config
remember: true, remember_for: 30d— the SPA client shows up in "Authorized clients" and remembered skips renew.enabled=0) and lists filterenabled— Node parity including the get-by-id quirk (post-delete PUT/session-create by id still work); Node-era deletions can no longer resurrect on a shared data dir.createdAt/expiresAtare epoch-ms integers per the contract."rows": []when empty, page cap is 500, and the sessions cursor payload usessessionId— pre-migration cursors keep working.keyDirectoryis kept as-is (path.resolve semantics).Tests
New coverage: manager retention semantics (post-mortem read, list filters, no-op close), server-hangup test updated to pin retention, MCP instructions assertion, config/store behavior via the existing suites.
go build && go vet && go test -count=1 ./...andpnpm spdx:checkclean.