Repository navigation
fix(mcp): atomically replace pending OAuth connections - #476
Merged
Merged
Conversation
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.
Two races in #474's one-pending-connection-per-client rule. Concurrent registrations for the same client can each pass the sweep and leave many pending rows (a review reproduced 100 rows from 100 parallel requests), because the sweep and the create in
connection-api.tsare separate statements. And a connection the owner approves after the sweep's snapshot can still be revoked, because the revoke is unconditional.This makes the replace atomic and the revoke pending-only, so an approved connection is never revoked by a sweep. New tests run N parallel registrations for one client and assert exactly one pending row, and approve a connection mid-sweep and assert it survives; the single-request path is unchanged.
Server suite 2,314 pass; core 49 and IndexedDB 7 pass; typecheck, ESLint and format pass.
Draft: merging to main publishes an npm release and a Docker image. Desktop carries the same races through its own copy of #474 and picks up this fix when it repins onto main.