{"repo":"NousResearch/hermes-agent","public_id":"119014","display_label":"Desktop duplicate reply bugs after reconnect or refresh","summary":"These issues and fixes address multiple scenarios where desktop assistant replies were duplicated, misplaced, or incorrectly replayed—particularly after WebSocket reconnects, transcript refreshes, and background-review supersede events.","subsystem":null,"counts":{"members":4,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":2,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":120601,"merged_at":"2026-09-23T20:00:48+00:00"},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-09-23T20:00:48+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.5},"fix_edges":[{"issue_number":118002,"pr_number":119878,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-23T14:05:10+00:00"},{"issue_number":119014,"pr_number":119878,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-23T14:05:10+00:00"},{"issue_number":119014,"pr_number":120601,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-23T20:00:48+00:00"},{"issue_number":119543,"pr_number":120601,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-23T20:00:48+00:00"},{"issue_number":119569,"pr_number":120601,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-23T20:00:48+00:00"},{"issue_number":120580,"pr_number":120601,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-23T20:00:48+00:00"}],"members":[{"kind":"issue","number":119014,"title":"[Bug]: Desktop re-renders (and re-persists) an old assistant reply after WebSocket reconnect (code=1012)","url":null,"state":"closed"},{"kind":"pr","number":119020,"title":"fix(desktop): ignore stale replayed message events","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#119014","number":119014},{"kind":"pr","value":"#119878","number":119878},{"kind":"pr","value":"#120601","number":120601}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":119878,"title":"fix(desktop): stop duplicate and misplaced turns after transcript refresh","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/desktop/src/app/session/hooks/use-session-actions/utils.test.ts","apps/desktop/src/app/session/hooks/use-session-actions/utils.ts","apps/desktop/src/lib/chat-messages/reconciliation.test.ts","apps/desktop/src/lib/chat-messages/reconciliation.ts"]},{"kind":"pr","number":120601,"title":"fix: background-review supersede no longer duplicates or drops desktop replies; fork turns tagged in logs","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/background_review.py","agent/turn_context.py","agent/turn_finalizer.py","apps/desktop/src/app/session/hooks/use-message-stream/background-review-interrupt.test.tsx","apps/desktop/src/app/session/hooks/use-message-stream/gateway-event/index.ts","apps/desktop/src/app/session/hooks/use-message-stream/gateway-event/message-stream.test.ts","apps/desktop/src/app/session/hooks/use-message-stream/gateway-event/message-stream.ts","apps/desktop/src/app/session/hooks/use-message-stream/gateway-event/session-info.ts","apps/desktop/src/app/session/hooks/use-message-stream/gateway-event/types.ts","apps/desktop/src/app/session/hooks/use-message-stream/heartbeat-complete-reorder.test.tsx","apps/desktop/src/app/session/hooks/use-message-stream/index.ts","apps/desktop/src/app/session/hooks/use-prompt-actions/steering-recovery.test.tsx","apps/desktop/src/app/types.ts","tests/agent/test_background_review.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}