{"repo":"NousResearch/hermes-agent","public_id":"96597","display_label":"Desktop gateway download file preservation fixes","summary":"These issues and PRs address a bug where a `failed` gateway download could truncate or delete a pre-existing file in the downloads directory. The fixes aim to make gateway file saves failure-atomic so existing files are not destroyed on download failure.","subsystem":null,"counts":{"members":4,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":97704,"merged_at":"2026-08-29T06:03:06+00:00"},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-08-29T06:03:06+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.5},"fix_edges":[{"issue_number":95514,"pr_number":97704,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-08-29T06:03:06+00:00"},{"issue_number":96570,"pr_number":97704,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-08-29T06:03:06+00:00"},{"issue_number":96597,"pr_number":97704,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-08-29T06:03:06+00:00"},{"issue_number":96811,"pr_number":97704,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-08-29T06:03:06+00:00"},{"issue_number":97281,"pr_number":97704,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-08-29T06:03:06+00:00"}],"members":[{"kind":"issue","number":96597,"title":"Desktop: failed gateway download truncates/deletes a pre-existing file in the downloads directory","url":null,"state":"closed"},{"kind":"pr","number":96604,"title":"fix(desktop): preserve existing files on failed gateway download","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#96608","number":96608}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":96608,"title":"fix(desktop): make gateway file saves failure-atomic so a failed download never destroys an existing file","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#97704","number":97704}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":97704,"title":"fix: P0 batch — five prompt-cache fixes + two desktop persistence fixes (salvage of #97618 #96755 #97327 #96768 #96608 #95886)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/bedrock_adapter.py","agent/chat_completion_helpers.py","agent/prompt_cache_boundary.py","agent/prompt_caching.py","agent/transcript_repair.py","agent/transports/chat_completions.py","agent/turn_finalizer.py","apps/desktop/electron/gateway-file-download-transport.test.ts","apps/desktop/electron/gateway-file-download.fs.test.ts","apps/desktop/electron/gateway-file-download.test.ts","apps/desktop/electron/gateway-file-download.ts","apps/desktop/electron/main.ts","apps/desktop/src/app/session/hooks/use-message-stream/index.ts","apps/desktop/src/app/session/hooks/use-message-stream/session-info-side-effects.test.tsx","apps/desktop/src/lib/chat-messages.test.ts","apps/desktop/src/lib/chat-messages/parts.ts","contributors/emails/[redacted:email]","contributors/emails/[redacted:email]","hermes_state.py","run_agent.py","tests/agent/test_bedrock_adapter.py","tests/agent/test_prompt_cache_boundary.py","tests/agent/test_prompt_cache_scope.py","tests/agent/test_system_prompt_restore.py","tests/agent/test_turn_finalizer_final_response_persistence.py","tests/agent/transports/test_chat_completions.py","tests/run_agent/test_tool_call_incremental_persistence.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}