Skip to content

Roaming M2.5 client: unified pairing in the one Add Environment flow - #22

Merged
thanostourik merged 2 commits into
feature/roamingfrom
roaming/m25-client
Jul 5, 2026
Merged

Roaming M2.5 client: unified pairing in the one Add Environment flow#22
thanostourik merged 2 commits into
feature/roamingfrom
roaming/m25-client

Conversation

@thanostourik

Copy link
Copy Markdown
Owner

Client seam for M2.5 — folds M2's standalone Machine sync pairing into the existing pairing/thin-client flow, per the canonical workflow.

  • client-runtime: registerBearerGrant (registration half of connectPairing, factored out) registers a connection from the handshake's attach bearer, verifying the descriptor at the URL matches the granted environmentId. PeerIntroduction is the peer-introduction seam for future T3 Cloud/relay discovery.
  • Add Environment → Remote link gains the JetBrains-style sync-options step (Projects always-on; Secret files pre-checked) and drives the unified handshake through the local server when the session can administer it; otherwise falls back to the plain attach with no sync options shown. Attach-only outcomes get an honest toast telling the user how to enable offline availability (regenerate the code with the new preset).
  • Create-pairing-URL dialog gains an "Another machine of yours" preset (admin scopes; existing access:write warning stays loud).
  • MachineSyncSettings.tsx deleted — no second pairing flow, no "sync"/"roaming" concept anywhere. The secrets consent survives as one ordinary settings row under Remote environments, visible once paired.
  • Sidebar live→offline flip: rows from a non-live remote environment (shell status not live/synchronizing) leave the merged list, so a killed peer's rows stop suppressing the mirrored offline+Materialize rows. Single filter point feeds both the rendered rows and the dedup (per the design-review spec); primary and desktop-local environments exempt.

Resolves both P2s from the server PR's codex review (attach-only result now consumed; syncOptions now sent from the dialog).

🤖 Generated with Claude Code

thanostourik and others added 2 commits July 5, 2026 23:03
client-runtime: registerBearerGrant registers a connection from an
already-exchanged bearer (the attach half of the unified handshake),
verifying the descriptor at the URL matches the granted environmentId.
PeerIntroduction is the peer-introduction seam: manual URL+code dialog
is producer #1, T3 Cloud/relay discovery later constructs the same
value with everything downstream identical.

web: the Add Environment -> Remote link dialog gains the JetBrains-
style sync-options step (Projects always on; Secret files pre-checked)
and, when this client's session can administer its own server, drives
the unified handshake (addRoamingPeer -> registerBearerGrant) instead
of the plain attach; without administrative rights it falls back to
plain connectPairing with no sync options shown. Attach-only outcomes
get an honest toast that says how to enable offline availability. The
create-pairing-URL dialog gains an 'Another machine of yours' preset
(admin scopes, existing loud warning). MachineSyncSettings is deleted;
the secrets toggle survives as one ordinary settings row under Remote
environments, visible once paired.

Sidebar: rows from a non-live remote environment (status not live or
synchronizing) leave the merged list, letting the mirrored registry
rows surface as offline + Materialize — fixing the visible-but-dead
state a killed peer used to leave. One filter point feeds both the
rendered rows and the offline-row dedup; primary and desktop-local
environments are exempt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
codex review P2: a user who had explicitly disabled roamingSecretsSync
would have it silently re-enabled by the pre-checked box on a later
pairing. The dialog now seeds the checkbox from the current setting
when roaming is already on; pre-checked only for a first pairing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@thanostourik
thanostourik merged commit 96033d3 into feature/roaming Jul 5, 2026
@thanostourik
thanostourik deleted the roaming/m25-client branch July 5, 2026 20:07
thanostourik added a commit that referenced this pull request Jul 6, 2026
…22)

* Roaming M2.5 client: unified pairing in the one Add Environment flow

client-runtime: registerBearerGrant registers a connection from an
already-exchanged bearer (the attach half of the unified handshake),
verifying the descriptor at the URL matches the granted environmentId.
PeerIntroduction is the peer-introduction seam: manual URL+code dialog
is producer #1, T3 Cloud/relay discovery later constructs the same
value with everything downstream identical.

web: the Add Environment -> Remote link dialog gains the JetBrains-
style sync-options step (Projects always on; Secret files pre-checked)
and, when this client's session can administer its own server, drives
the unified handshake (addRoamingPeer -> registerBearerGrant) instead
of the plain attach; without administrative rights it falls back to
plain connectPairing with no sync options shown. Attach-only outcomes
get an honest toast that says how to enable offline availability. The
create-pairing-URL dialog gains an 'Another machine of yours' preset
(admin scopes, existing loud warning). MachineSyncSettings is deleted;
the secrets toggle survives as one ordinary settings row under Remote
environments, visible once paired.

Sidebar: rows from a non-live remote environment (status not live or
synchronizing) leave the merged list, letting the mirrored registry
rows surface as offline + Materialize — fixing the visible-but-dead
state a killed peer used to leave. One filter point feeds both the
rendered rows and the offline-row dedup; primary and desktop-local
environments are exempt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Roaming M2.5 client: seed the secrets checkbox from the existing choice

codex review P2: a user who had explicitly disabled roamingSecretsSync
would have it silently re-enabled by the pre-checked box on a later
pairing. The dialog now seeds the checkbox from the current setting
when roaming is already on; pre-checked only for a first pairing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
thanostourik added a commit that referenced this pull request Jul 10, 2026
…22)

* Roaming M2.5 client: unified pairing in the one Add Environment flow

client-runtime: registerBearerGrant registers a connection from an
already-exchanged bearer (the attach half of the unified handshake),
verifying the descriptor at the URL matches the granted environmentId.
PeerIntroduction is the peer-introduction seam: manual URL+code dialog
is producer #1, T3 Cloud/relay discovery later constructs the same
value with everything downstream identical.

web: the Add Environment -> Remote link dialog gains the JetBrains-
style sync-options step (Projects always on; Secret files pre-checked)
and, when this client's session can administer its own server, drives
the unified handshake (addRoamingPeer -> registerBearerGrant) instead
of the plain attach; without administrative rights it falls back to
plain connectPairing with no sync options shown. Attach-only outcomes
get an honest toast that says how to enable offline availability. The
create-pairing-URL dialog gains an 'Another machine of yours' preset
(admin scopes, existing loud warning). MachineSyncSettings is deleted;
the secrets toggle survives as one ordinary settings row under Remote
environments, visible once paired.

Sidebar: rows from a non-live remote environment (status not live or
synchronizing) leave the merged list, letting the mirrored registry
rows surface as offline + Materialize — fixing the visible-but-dead
state a killed peer used to leave. One filter point feeds both the
rendered rows and the offline-row dedup; primary and desktop-local
environments are exempt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Roaming M2.5 client: seed the secrets checkbox from the existing choice

codex review P2: a user who had explicitly disabled roamingSecretsSync
would have it silently re-enabled by the pre-checked box on a later
pairing. The dialog now seeds the checkbox from the current setting
when roaming is already on; pre-checked only for a first pairing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
thanostourik added a commit that referenced this pull request Jul 16, 2026
…22)

* Roaming M2.5 client: unified pairing in the one Add Environment flow

client-runtime: registerBearerGrant registers a connection from an
already-exchanged bearer (the attach half of the unified handshake),
verifying the descriptor at the URL matches the granted environmentId.
PeerIntroduction is the peer-introduction seam: manual URL+code dialog
is producer #1, T3 Cloud/relay discovery later constructs the same
value with everything downstream identical.

web: the Add Environment -> Remote link dialog gains the JetBrains-
style sync-options step (Projects always on; Secret files pre-checked)
and, when this client's session can administer its own server, drives
the unified handshake (addRoamingPeer -> registerBearerGrant) instead
of the plain attach; without administrative rights it falls back to
plain connectPairing with no sync options shown. Attach-only outcomes
get an honest toast that says how to enable offline availability. The
create-pairing-URL dialog gains an 'Another machine of yours' preset
(admin scopes, existing loud warning). MachineSyncSettings is deleted;
the secrets toggle survives as one ordinary settings row under Remote
environments, visible once paired.

Sidebar: rows from a non-live remote environment (status not live or
synchronizing) leave the merged list, letting the mirrored registry
rows surface as offline + Materialize — fixing the visible-but-dead
state a killed peer used to leave. One filter point feeds both the
rendered rows and the offline-row dedup; primary and desktop-local
environments are exempt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Roaming M2.5 client: seed the secrets checkbox from the existing choice

codex review P2: a user who had explicitly disabled roamingSecretsSync
would have it silently re-enabled by the pre-checked box on a later
pairing. The dialog now seeds the checkbox from the current setting
when roaming is already on; pre-checked only for a first pairing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
thanostourik added a commit that referenced this pull request Jul 21, 2026
…22)

* Roaming M2.5 client: unified pairing in the one Add Environment flow

client-runtime: registerBearerGrant registers a connection from an
already-exchanged bearer (the attach half of the unified handshake),
verifying the descriptor at the URL matches the granted environmentId.
PeerIntroduction is the peer-introduction seam: manual URL+code dialog
is producer #1, T3 Cloud/relay discovery later constructs the same
value with everything downstream identical.

web: the Add Environment -> Remote link dialog gains the JetBrains-
style sync-options step (Projects always on; Secret files pre-checked)
and, when this client's session can administer its own server, drives
the unified handshake (addRoamingPeer -> registerBearerGrant) instead
of the plain attach; without administrative rights it falls back to
plain connectPairing with no sync options shown. Attach-only outcomes
get an honest toast that says how to enable offline availability. The
create-pairing-URL dialog gains an 'Another machine of yours' preset
(admin scopes, existing loud warning). MachineSyncSettings is deleted;
the secrets toggle survives as one ordinary settings row under Remote
environments, visible once paired.

Sidebar: rows from a non-live remote environment (status not live or
synchronizing) leave the merged list, letting the mirrored registry
rows surface as offline + Materialize — fixing the visible-but-dead
state a killed peer used to leave. One filter point feeds both the
rendered rows and the offline-row dedup; primary and desktop-local
environments are exempt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Roaming M2.5 client: seed the secrets checkbox from the existing choice

codex review P2: a user who had explicitly disabled roamingSecretsSync
would have it silently re-enabled by the pre-checked box on a later
pairing. The dialog now seeds the checkbox from the current setting
when roaming is already on; pre-checked only for a first pairing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
thanostourik added a commit that referenced this pull request Jul 25, 2026
…22)

* Roaming M2.5 client: unified pairing in the one Add Environment flow

client-runtime: registerBearerGrant registers a connection from an
already-exchanged bearer (the attach half of the unified handshake),
verifying the descriptor at the URL matches the granted environmentId.
PeerIntroduction is the peer-introduction seam: manual URL+code dialog
is producer #1, T3 Cloud/relay discovery later constructs the same
value with everything downstream identical.

web: the Add Environment -> Remote link dialog gains the JetBrains-
style sync-options step (Projects always on; Secret files pre-checked)
and, when this client's session can administer its own server, drives
the unified handshake (addRoamingPeer -> registerBearerGrant) instead
of the plain attach; without administrative rights it falls back to
plain connectPairing with no sync options shown. Attach-only outcomes
get an honest toast that says how to enable offline availability. The
create-pairing-URL dialog gains an 'Another machine of yours' preset
(admin scopes, existing loud warning). MachineSyncSettings is deleted;
the secrets toggle survives as one ordinary settings row under Remote
environments, visible once paired.

Sidebar: rows from a non-live remote environment (status not live or
synchronizing) leave the merged list, letting the mirrored registry
rows surface as offline + Materialize — fixing the visible-but-dead
state a killed peer used to leave. One filter point feeds both the
rendered rows and the offline-row dedup; primary and desktop-local
environments are exempt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Roaming M2.5 client: seed the secrets checkbox from the existing choice

codex review P2: a user who had explicitly disabled roamingSecretsSync
would have it silently re-enabled by the pre-checked box on a later
pairing. The dialog now seeds the checkbox from the current setting
when roaming is already on; pre-checked only for a first pairing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
thanostourik added a commit that referenced this pull request Jul 30, 2026
…22)

* Roaming M2.5 client: unified pairing in the one Add Environment flow

client-runtime: registerBearerGrant registers a connection from an
already-exchanged bearer (the attach half of the unified handshake),
verifying the descriptor at the URL matches the granted environmentId.
PeerIntroduction is the peer-introduction seam: manual URL+code dialog
is producer #1, T3 Cloud/relay discovery later constructs the same
value with everything downstream identical.

web: the Add Environment -> Remote link dialog gains the JetBrains-
style sync-options step (Projects always on; Secret files pre-checked)
and, when this client's session can administer its own server, drives
the unified handshake (addRoamingPeer -> registerBearerGrant) instead
of the plain attach; without administrative rights it falls back to
plain connectPairing with no sync options shown. Attach-only outcomes
get an honest toast that says how to enable offline availability. The
create-pairing-URL dialog gains an 'Another machine of yours' preset
(admin scopes, existing loud warning). MachineSyncSettings is deleted;
the secrets toggle survives as one ordinary settings row under Remote
environments, visible once paired.

Sidebar: rows from a non-live remote environment (status not live or
synchronizing) leave the merged list, letting the mirrored registry
rows surface as offline + Materialize — fixing the visible-but-dead
state a killed peer used to leave. One filter point feeds both the
rendered rows and the offline-row dedup; primary and desktop-local
environments are exempt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Roaming M2.5 client: seed the secrets checkbox from the existing choice

codex review P2: a user who had explicitly disabled roamingSecretsSync
would have it silently re-enabled by the pre-checked box on a later
pairing. The dialog now seeds the checkbox from the current setting
when roaming is already on; pre-checked only for a first pairing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
thanostourik added a commit that referenced this pull request Jul 31, 2026
…22)

* Roaming M2.5 client: unified pairing in the one Add Environment flow

client-runtime: registerBearerGrant registers a connection from an
already-exchanged bearer (the attach half of the unified handshake),
verifying the descriptor at the URL matches the granted environmentId.
PeerIntroduction is the peer-introduction seam: manual URL+code dialog
is producer #1, T3 Cloud/relay discovery later constructs the same
value with everything downstream identical.

web: the Add Environment -> Remote link dialog gains the JetBrains-
style sync-options step (Projects always on; Secret files pre-checked)
and, when this client's session can administer its own server, drives
the unified handshake (addRoamingPeer -> registerBearerGrant) instead
of the plain attach; without administrative rights it falls back to
plain connectPairing with no sync options shown. Attach-only outcomes
get an honest toast that says how to enable offline availability. The
create-pairing-URL dialog gains an 'Another machine of yours' preset
(admin scopes, existing loud warning). MachineSyncSettings is deleted;
the secrets toggle survives as one ordinary settings row under Remote
environments, visible once paired.

Sidebar: rows from a non-live remote environment (status not live or
synchronizing) leave the merged list, letting the mirrored registry
rows surface as offline + Materialize — fixing the visible-but-dead
state a killed peer used to leave. One filter point feeds both the
rendered rows and the offline-row dedup; primary and desktop-local
environments are exempt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Roaming M2.5 client: seed the secrets checkbox from the existing choice

codex review P2: a user who had explicitly disabled roamingSecretsSync
would have it silently re-enabled by the pre-checked box on a later
pairing. The dialog now seeds the checkbox from the current setting
when roaming is already on; pre-checked only for a first pairing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
thanostourik added a commit that referenced this pull request Aug 1, 2026
…22)

* Roaming M2.5 client: unified pairing in the one Add Environment flow

client-runtime: registerBearerGrant registers a connection from an
already-exchanged bearer (the attach half of the unified handshake),
verifying the descriptor at the URL matches the granted environmentId.
PeerIntroduction is the peer-introduction seam: manual URL+code dialog
is producer #1, T3 Cloud/relay discovery later constructs the same
value with everything downstream identical.

web: the Add Environment -> Remote link dialog gains the JetBrains-
style sync-options step (Projects always on; Secret files pre-checked)
and, when this client's session can administer its own server, drives
the unified handshake (addRoamingPeer -> registerBearerGrant) instead
of the plain attach; without administrative rights it falls back to
plain connectPairing with no sync options shown. Attach-only outcomes
get an honest toast that says how to enable offline availability. The
create-pairing-URL dialog gains an 'Another machine of yours' preset
(admin scopes, existing loud warning). MachineSyncSettings is deleted;
the secrets toggle survives as one ordinary settings row under Remote
environments, visible once paired.

Sidebar: rows from a non-live remote environment (status not live or
synchronizing) leave the merged list, letting the mirrored registry
rows surface as offline + Materialize — fixing the visible-but-dead
state a killed peer used to leave. One filter point feeds both the
rendered rows and the offline-row dedup; primary and desktop-local
environments are exempt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Roaming M2.5 client: seed the secrets checkbox from the existing choice

codex review P2: a user who had explicitly disabled roamingSecretsSync
would have it silently re-enabled by the pre-checked box on a later
pairing. The dialog now seeds the checkbox from the current setting
when roaming is already on; pre-checked only for a first pairing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
thanostourik added a commit that referenced this pull request Aug 5, 2026
…22)

* Roaming M2.5 client: unified pairing in the one Add Environment flow

client-runtime: registerBearerGrant registers a connection from an
already-exchanged bearer (the attach half of the unified handshake),
verifying the descriptor at the URL matches the granted environmentId.
PeerIntroduction is the peer-introduction seam: manual URL+code dialog
is producer #1, T3 Cloud/relay discovery later constructs the same
value with everything downstream identical.

web: the Add Environment -> Remote link dialog gains the JetBrains-
style sync-options step (Projects always on; Secret files pre-checked)
and, when this client's session can administer its own server, drives
the unified handshake (addRoamingPeer -> registerBearerGrant) instead
of the plain attach; without administrative rights it falls back to
plain connectPairing with no sync options shown. Attach-only outcomes
get an honest toast that says how to enable offline availability. The
create-pairing-URL dialog gains an 'Another machine of yours' preset
(admin scopes, existing loud warning). MachineSyncSettings is deleted;
the secrets toggle survives as one ordinary settings row under Remote
environments, visible once paired.

Sidebar: rows from a non-live remote environment (status not live or
synchronizing) leave the merged list, letting the mirrored registry
rows surface as offline + Materialize — fixing the visible-but-dead
state a killed peer used to leave. One filter point feeds both the
rendered rows and the offline-row dedup; primary and desktop-local
environments are exempt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Roaming M2.5 client: seed the secrets checkbox from the existing choice

codex review P2: a user who had explicitly disabled roamingSecretsSync
would have it silently re-enabled by the pre-checked box on a later
pairing. The dialog now seeds the checkbox from the current setting
when roaming is already on; pre-checked only for a first pairing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

1 participant