Multiplayer harness where people and agents work together and build on shared context.
The selector changes two scopes: the gateway connection, then the active workspace. The old thread must stop receiving updates as soon as we leave its scope. The protocol records already carry workspace and thread IDs. The handoff should clear the previous thread view, load the destination gateway's workspaces, and open a thread from the selected workspace only after that load completes. Keeping the old discussion on screen makes a delayed event look like new content. I also checked the task navigation separately. A task card opens its childThreadId inside the same workspace. The protocol check results are in the linked task's conversation. For the review, I'd exercise three cases: switch while a thread is loading, switch while a background task runs, and return to a gateway that is temporarily offline.
Review checklist: 1. Open a local thread, then select Team Gateway. The gateway label changes immediately; the old timeline clears while the destination workspace loads. 2. Add latency to the destination connection. The loading state stays associated with Team Gateway, and a late local event never appears in the new timeline. 3. Select an offline gateway. The error identifies that gateway, and switching back to Local Gateway restores a usable workspace. 4. Start a background task before leaving. Returning opens the parent conversation; its task card still leads to the same child thread. 5. Repeat the handoff from the mobile workspace selector. In the event trace, compare each update's gateway binding, workspace ID and thread ID with the active scope. The UI alone won't tell us whether a stale event was dropped or never arrived.
I would start at client admission, before the page reaches the desktop view. Capture the gateway binding, workspace ID and thread ID when the page request starts. On completion, compare that full scope with the active one. A thread ID on its own cannot tell us which connection delivered the page. The regression should hold a local page request open, switch to Team Gateway, load its selected thread, then release the local response. The destination timeline must remain unchanged. Include the reverse order too: return to Local Gateway while a remote page is still pending. This is a test proposal, not a confirmed fix. We need Sam's trace to establish whether the wrong page is admitted into shared state or the desktop simply keeps painting the old view.
While connecting: Connecting to Team Gateway… If the connection fails: Couldn't connect to Team Gateway. Check its address or try again. Offer Retry and a way to select another gateway. Keep the gateway name visible so the person knows which connection failed. I would avoid 'Your workspace is empty' here. We haven't loaded the destination workspaces yet, so that sentence says something the app doesn't know. If the gateway connects and really has no workspaces, use a separate empty state.