{"repo":"NousResearch/hermes-agent","public_id":"94811","display_label":"Fix session RPC routing by connection ownership","summary":"Multiple fixes addressing how session-scoped RPCs are routed to the correct owning connection rather than by profile name alone. Covers edge cases including same-named profiles, multi-gateway scenarios, and bot-mode second prompts.","subsystem":null,"counts":{"members":5,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":2,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":113378,"merged_at":"2026-09-16T23:49:21+00:00"},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-09-16T23:49:21+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.4},"fix_edges":[{"issue_number":94709,"pr_number":95407,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-08-26T10:22:38+00:00"},{"issue_number":94811,"pr_number":95407,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-08-26T10:22:38+00:00"},{"issue_number":94811,"pr_number":113378,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-16T23:49:21+00:00"}],"members":[{"kind":"issue","number":94811,"title":"fix(desktop): session-scoped RPCs collapse onto the primary connection when two connections share a profile name (4001 session not found from the 2nd prompt)","url":null,"state":"closed"},{"kind":"pr","number":94864,"title":"fix(desktop): preserve ordinary session connection ownership","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"8e9459c97","number":0},{"kind":"pr","value":"#94864","number":94864},{"kind":"pr","value":"#94877","number":94877},{"kind":"pr","value":"#94901","number":94901},{"kind":"pr","value":"#95007","number":95007},{"kind":"pr","value":"#94656","number":94656},{"kind":"pr","value":"#95407","number":95407},{"kind":"pr","value":"#94724","number":94724}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":95407,"title":"fix(desktop): session ownership is durable across multi-gateway — rows keep their exact owner (wave-2 phase A, tracker #94724)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/desktop/electron/connection-registry.test.ts","apps/desktop/electron/connection-registry.ts","apps/desktop/electron/main.ts","apps/desktop/src/api/sessions.test.ts","apps/desktop/src/api/sessions.ts","apps/desktop/src/app/contrib/hooks/use-session-tile-delegate.ts","apps/desktop/src/app/contrib/session-rpc-dispatcher.test.ts","apps/desktop/src/app/contrib/session-rpc-dispatcher.ts","apps/desktop/src/app/contrib/wiring-routing.test.ts","apps/desktop/src/app/contrib/wiring-routing.ts","apps/desktop/src/app/contrib/wiring.tsx","apps/desktop/src/app/gateway/hooks/use-gateway-boot.ts","apps/desktop/src/app/session/hooks/profile-rail-fresh-chat-owner.test.tsx","apps/desktop/src/app/session/hooks/use-prompt-actions/slash.ts","apps/desktop/src/app/session/hooks/use-prompt-actions/submit.ts","apps/desktop/src/app/session/hooks/use-session-actions.test.tsx","apps/desktop/src/app/session/hooks/use-session-actions/index.ts","apps/desktop/src/app/session/hooks/use-session-actions/utils.ts","apps/desktop/src/lib/session-owner-stamp.ts","apps/desktop/src/plugins/accent/plugin.js","apps/desktop/src/plugins/kanban/plugin.js","apps/desktop/src/store/connection-registry-state.ts","apps/desktop/src/store/connections.test.ts","apps/desktop/src/store/connections.ts","apps/desktop/src/store/gateway-connection-lifecycle.test.ts","apps/desktop/src/store/gateway-foreground-retention.test.ts","apps/desktop/src/store/gateway.ts","apps/desktop/src/store/profile-agent-activation.test.ts","apps/desktop/src/store/profile.ts","apps/desktop/src/store/projects.test.ts","apps/desktop/src/store/projects.ts","apps/desktop/src/store/session-owner-resolution.test.ts","apps/desktop/src/store/session-owner-resolution.ts","apps/desktop/src/store/session-request-router.test.ts","apps/desktop/src/store/session-request-router.ts","apps/desktop/src/store/session-states-foreground-scopes.test.ts","apps/desktop/src/store/session-states-runtime-map.test.ts","apps/desktop/src/store/session-states.ts","apps/desktop/src/store/session.test.ts","apps/desktop/src/store/session.ts","apps/desktop/src/store/updates.test.ts","contributors/emails/[redacted:email]","contributors/emails/[redacted:email]"]},{"kind":"pr","number":113284,"title":"fix(desktop): session RPCs route by the owning connection, not a bare profile name","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"924e47003013","number":0},{"kind":"pr","value":"#113378","number":113378}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":113378,"title":"fix(bot-mode): second prompt on a same-named profile no longer lands on the primary connection; Passwords & Logins asks the connection it shows (#94811, salvage #113284)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/desktop/src/app/contrib/session-rpc-dispatcher.test.ts","apps/desktop/src/app/contrib/session-rpc-dispatcher.ts","apps/desktop/src/app/contrib/wiring-routing.ts","apps/desktop/src/app/session/hooks/use-session-actions/utils.ts","apps/desktop/src/app/settings/vault-settings.owner.test.tsx","apps/desktop/src/app/settings/vault-settings.test.tsx","apps/desktop/src/app/settings/vault-settings.tsx","apps/desktop/src/store/session-states.test.ts","apps/desktop/src/store/session-states.ts","contributors/emails/[redacted:email]"]}],"trust":{"default_tier":"verified","includes_suggested":false}}