{"repo":"NousResearch/hermes-agent","public_id":"100302","display_label":"Desktop composer caret lost during DOM normalization","summary":"A bug in the desktop client causes the DOM normalizer to remove Chromium's active caret node, disrupting typing and transcript stability. The associated fixes aim to preserve the caret position and keep the composer and transcripts stable during normalization.","subsystem":"apps/desktop","counts":{"members":3,"open_issues":0,"open_issues_distinct":0,"open_prs":1,"closed_issues":1,"merged_prs":1,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":119605,"merged_at":"2026-09-22T22:36:40+00:00"},"resolution":{"state":"resolved","by":"pr-119605"},"freshness":{"state":"verified","last_verified_at":"2026-09-22T22:36:40+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.6666666666666666},"fix_edges":[{"issue_number":100302,"pr_number":119605,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-22T22:36:40+00:00"}],"members":[{"kind":"issue","number":100302,"title":"[Bug][Desktop]: DOM normalizer removes Chromium's active caret node and typing stops","url":null,"state":"closed"},{"kind":"pr","number":100333,"title":"fix(desktop): preserve composer caret during normalization","url":null,"state":"open","close_reason":{"refs":[{"kind":"pr","value":"#110066","number":110066},{"kind":"pr","value":"#100302","number":100302}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":119605,"title":"fix(desktop): keep typing and refreshed transcripts stable","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/desktop/src/app/chat/composer/rich-editor.test.ts","apps/desktop/src/app/chat/composer/rich-editor.ts","apps/desktop/src/app/session/hooks/use-message-stream/completion-boundaries.test.tsx","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/types.ts","apps/desktop/src/app/session/hooks/use-message-stream/index.ts","apps/desktop/src/app/session/hooks/use-prompt-actions/submit.ts","apps/desktop/src/app/session/hooks/use-session-actions/pending-turn-identity.ts","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/types.ts","apps/shared/src/gateway-contract.generated.ts","apps/shared/src/gateway-contract.openrpc.json","tests/tui_gateway/test_submit_time_user_row.py","tui_gateway/contracts/events.py","tui_gateway/contracts/prompt_voice.py","tui_gateway/methods_prompt.py","tui_gateway/prompt_turn.py","tui_gateway/session_workdir.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}