fix(session): bind broker state to peer ownership - #898
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
Greptile SummaryThis PR binds broker mutations and command results to the WebSocket peer that owns each session, rejects competing live registrations, and prevents queued or late command work from crossing reconnects.
Confidence Score: 5/5The PR appears safe to merge, with ownership enforcement consistently propagated through the broker core, daemon, client connection, and Hunk adapter. The changed paths reject cross-peer state mutations and forged command results, preserve owner state after duplicate registration attempts, and prevent stale client work from migrating onto replacement sockets without leaving a demonstrated blocking failure. Important Files Changed
Sequence DiagramsequenceDiagram
participant Client as Session client
participant Socket as Owning socket
participant Broker as Broker state
participant Caller as API caller
Client->>Broker: register(sessionId, snapshot)
Broker->>Broker: bind sessionId to Socket
Client->>Broker: snapshot / heartbeat via Socket
Broker->>Broker: verify Socket owns sessionId
Caller->>Broker: dispatch command
Broker->>Socket: command(requestId)
Socket-->>Broker: command-result(requestId)
Broker->>Broker: verify result came from originating Socket
Broker-->>Caller: resolve result
Socket--xBroker: disconnect
Broker->>Broker: retire session and reject pending commands
Reviews (1): Last reviewed commit: "fix(session): bind broker state to peer ..." | Re-trigger Greptile |
Summary
Validation
bun test packages/session-broker-core/src/brokerState.test.ts packages/session-broker/src/broker.test.ts packages/session-broker/src/daemon.test.ts packages/session-broker/src/connection.test.ts src/session/broker/brokerServer.test.ts src/session/broker/browserReviewServer.integration.test.ts src/session/broker/reviewResources.integration.test.tsbun run typecheckbun run deps:checkoxfmt --checkgit diff --checkStack
This PR description was generated by Pi using gpt-5.6-sol