{"repo":"NousResearch/hermes-agent","public_id":"38319","display_label":"Desktop duplicate message rendering and hydration fixes","summary":"Multiple reports and fixes addressing duplicate assistant message rendering in the desktop app, primarily caused by race conditions between active streams and hydration. One unrelated TUI fix for raw vs. Rich-rendered ANSI text display is also included.","subsystem":"apps/desktop","counts":{"members":5,"open_issues":0,"open_issues_distinct":0,"open_prs":1,"closed_issues":3,"merged_prs":1,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":70232,"merged_at":"2026-07-23T20:13:02+00:00"},"resolution":{"state":"partially_resolved","by":"pr-70232"},"freshness":{"state":"verified","last_verified_at":"2026-07-23T20:13:02+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.27199999999999996},"fix_edges":[{"issue_number":59423,"pr_number":70232,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-07-23T20:13:02+00:00"},{"issue_number":63679,"pr_number":70232,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-07-23T20:13:02+00:00"},{"issue_number":70108,"pr_number":70232,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-07-23T20:13:02+00:00"}],"members":[{"kind":"issue","number":38319,"title":"Duplicate messages in desktop app — hydration race condition with active stream","url":null,"state":"closed"},{"kind":"issue","number":63194,"title":"Desktop App: Duplicate assistant response (streaming vs hydration race)","url":null,"state":"closed"},{"kind":"issue","number":63679,"title":"Desktop App: every assistant message renders twice after recent update","url":null,"state":"closed"},{"kind":"pr","number":70232,"title":"fix(desktop): stop assistant reply rendering twice after a tool-call turn (#63679)","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-message-stream/index.ts","apps/desktop/src/app/session/hooks/use-message-stream/interim-sealing.test.tsx"]},{"kind":"pr","number":71877,"title":"fix(desktop): preserve active stream across hydration","url":null,"state":"open","close_reason":{"category":"implemented_elsewhere","implication":"superseded"},"merged":false}],"trust":{"default_tier":"verified","includes_suggested":false}}