{"repo":"NousResearch/hermes-agent","public_id":"81094","display_label":"Desktop profile-switch gateway error handling","summary":"These items address a desktop issue where failures or declines during profile switching and gateway changes were being silently suppressed or incorrectly routed to the primary backend. The work focuses on surfacing these errors rather than falling back silently.","subsystem":"apps/desktop","counts":{"members":7,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":4,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":89785},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-08-26T05:51:32+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.2857142857142857},"fix_edges":[{"issue_number":68594,"pr_number":95080,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":81094,"pr_number":89785,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":81094,"pr_number":89797,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":81094,"pr_number":89875,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":81094,"pr_number":95080,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":89586,"pr_number":89785,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":89586,"pr_number":89797,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":89586,"pr_number":89875,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":93888,"pr_number":95080,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":93937,"pr_number":95080,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":94162,"pr_number":95080,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false}],"members":[{"kind":"issue","number":81094,"title":"Desktop: switching to a secondary profile can route messages to the primary backend when a manual gateway process exists","url":null,"state":"closed"},{"kind":"pr","number":81165,"title":"fix(desktop): surface profile-switch failures instead of falling back to primary socket","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"682a34a7c","number":0},{"kind":"pr","value":"#95080","number":95080},{"kind":"pr","value":"#94724","number":94724}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":89609,"title":"fix(desktop): report a declined gateway switch instead of resolving silently","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#89622","number":89622},{"kind":"pr","value":"#89785","number":89785},{"kind":"pr","value":"#89797","number":89797},{"kind":"pr","value":"#89875","number":89875},{"kind":"pr","value":"#89621","number":89621},{"kind":"pr","value":"#89609","number":89609}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":89785,"title":"fix(desktop): profile switching works again — revert the atomic-publish activation series (#89622)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/desktop/src/store/gateway.ts","apps/desktop/src/store/profile-agent-activation.test.ts","apps/desktop/src/store/profile.test.ts","apps/desktop/src/store/profile.ts"]},{"kind":"pr","number":89797,"title":"fix(desktop): profile switches publish atomically without ever failing closed (#46651, #89622)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/desktop/src/store/gateway-activation-prune-lease.test.ts","apps/desktop/src/store/gateway.ts","apps/desktop/src/store/profile-agent-activation.test.ts","apps/desktop/src/store/profile.ts"]},{"kind":"pr","number":89875,"title":"fix(desktop): release builds keep profile-switch publications — nanostores 1.4.2 (salvage #89690)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/bootstrap-installer/package.json","apps/desktop/package.json","apps/desktop/src/store/nanostores-batch-guard.test.ts","contributors/emails/[redacted:email]","ui-tui/package.json"]},{"kind":"pr","number":95080,"title":"fix(desktop): gateway switches, primary reuse, and session routing hold exact route identity (multi-gateway class 1, tracker #94724)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/desktop/electron/main.ts","apps/desktop/electron/profile-session-routing.test.ts","apps/desktop/electron/profile-session-routing.ts","apps/desktop/src/app/contrib/wiring.tsx","apps/desktop/src/app/gateway/hooks/use-gateway-boot.test.tsx","apps/desktop/src/app/gateway/hooks/use-gateway-boot.ts","apps/desktop/src/app/session/hooks/use-hermes-config.test.ts","apps/desktop/src/app/session/hooks/use-hermes-config.ts","apps/desktop/src/app/session/hooks/use-prompt-actions/index.test.tsx","apps/desktop/src/app/session/hooks/use-prompt-actions/index.ts","apps/desktop/src/app/session/hooks/use-route-resume.test.tsx","apps/desktop/src/app/session/hooks/use-route-resume.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-list-actions.test.tsx","apps/desktop/src/app/session/hooks/use-session-list-actions.ts","apps/desktop/src/lib/json-rpc-gateway-recovery.test.ts","apps/desktop/src/lib/with-timeout.test.ts","apps/desktop/src/lib/with-timeout.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-connection-scope.test.ts","apps/desktop/src/store/gateway-profile-request.test.ts","apps/desktop/src/store/gateway-shared-remote.test.ts","apps/desktop/src/store/gateway-switch.test.ts","apps/desktop/src/store/gateway-switch.ts","apps/desktop/src/store/gateway.test.ts","apps/desktop/src/store/gateway.ts","apps/desktop/src/store/profile-agent-activation.test.ts","apps/desktop/src/store/profile-select-source.test.ts","apps/desktop/src/store/profile-switch-failure.test.ts","apps/desktop/src/store/profile.ts","apps/desktop/src/store/session.test.ts","apps/desktop/src/store/session.ts","apps/shared/src/json-rpc-gateway.ts","contributors/emails/[redacted:email]","contributors/emails/[redacted:email]","contributors/emails/[redacted:email]"]}],"trust":{"default_tier":"verified","includes_suggested":false}}