Skip to content

Fix managed relay enrollment connection race#94

Merged
burakgon merged 1 commit into
mainfrom
fix/managed-relay-enrollment-race
Jul 18, 2026
Merged

Fix managed relay enrollment connection race#94
burakgon merged 1 commit into
mainfrom
fix/managed-relay-enrollment-race

Conversation

@burakgon

Copy link
Copy Markdown
Owner

What changed

  • defer the persistent browser relay client while managed Node enrollment owns its short-lived proof connection
  • start the persistent transport only after enrollment advances to validation
  • add a regression assertion that prevents both relay owners from starting together
  • prepare the stable 1.4.2 release with user-facing notes

Root cause

Reopening an already-enrolled managed Node started two browser relay clients for the same route and device. The broker correctly superseded one connection. Once the short-lived proof client closed, the persistent client could remain in a terminal superseded state, so session polling showed Couldn't reach the server even though the Node and relay were healthy.

Impact

Managed Cloud users can reopen an existing Node and proceed directly to Sessions without entering a retry loop or re-pairing the browser.

Validation

  • pnpm exec vitest run packages/web/src/App.test.tsx (43 tests)
  • managed enrollment, relay manager, and server enrollment suites (29 tests)
  • pnpm lint
  • pnpm exec tsc -b --force
  • pnpm format:check
  • pnpm build

@burakgon
burakgon marked this pull request as ready for review July 18, 2026 22:49
Copilot AI review requested due to automatic review settings July 18, 2026 22:49
@burakgon
burakgon merged commit a460d3d into main Jul 18, 2026
4 checks passed

Copilot AI 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.

Pull request overview

Fixes a relay-connection ownership race during managed Node enrollment by preventing the persistent browser relay transport from starting until enrollment has advanced past its short-lived proof connection, and prepares the 1.4.2 release metadata/notes.

Changes:

  • Defer the persistent relay transport while phase === "managed-enrollment" to avoid competing relay clients for the same device/route.
  • Add an App-shell regression assertion ensuring the persistent relay client is not started during managed enrollment.
  • Bump workspace/package versions to 1.4.2 and add release notes.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
packages/web/src/App.tsx Defers persistent relay transport during managed enrollment to prevent superseded connections.
packages/web/src/App.test.tsx Mocks relay host client manager and asserts managed enrollment closes the persistent host and does not start a persistent relay client.
packages/web/package.json Bumps web package version to 1.4.2.
packages/server/package.json Bumps server package version to 1.4.2.
packages/cli/package.json Bumps CLI package version to 1.4.2.
package.json Bumps workspace version to 1.4.2.
CHANGELOG.md Adds 1.4.2 release notes.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/web/src/App.tsx
disposed = true;
};
}, [activeDirectHost, relayAttempt, relayClientManager, token, tokenHostId]);
}, [activeDirectHost, phase, relayAttempt, relayClientManager, token, tokenHostId]);
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.

2 participants