{"repo":"NousResearch/hermes-agent","public_id":"70337","display_label":"Windows desktop update process fixes and gateway handling","summary":"These issues and pull requests address problems in the Windows desktop auto-update pipeline, including stopping the messaging gateway before updates, resolving race conditions and deadlocks in the update process, and preventing loss of files during ZIP-fallback scenarios.","subsystem":"apps/desktop","counts":{"members":11,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":7,"attempt_prs":3},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":92013},"resolution":{"state":"resolved","by":"pr-100124"},"freshness":{"state":"verified","last_verified_at":"2026-09-01T08:30:10+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.18181818181818182},"fix_edges":[{"issue_number":61514,"pr_number":92013,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":61514,"pr_number":95069,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":61514,"pr_number":95313,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":61514,"pr_number":95949,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":70337,"pr_number":92013,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":70337,"pr_number":95069,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":70337,"pr_number":95313,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":70337,"pr_number":95949,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":70337,"pr_number":99558,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":70337,"pr_number":99724,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":70337,"pr_number":100124,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":74805,"pr_number":92013,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":74805,"pr_number":95069,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":74805,"pr_number":95313,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":74805,"pr_number":95949,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":75788,"pr_number":92013,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":75788,"pr_number":95069,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":75788,"pr_number":95313,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":75788,"pr_number":95949,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":77277,"pr_number":92013,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":87304,"pr_number":92013,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":89614,"pr_number":99558,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":98336,"pr_number":99724,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":98336,"pr_number":100124,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":98814,"pr_number":99558,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true}],"members":[{"kind":"issue","number":70337,"title":"Windows Desktop auto-update fails when gateway is running","url":null,"state":"closed"},{"kind":"pr","number":70477,"title":"fix(desktop): stop gateway before update + preserve release dir in ZIP fallback (#70337)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#92013","number":92013}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":76057,"title":"fix(desktop): stop messaging gateway before venv lock check during update","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#99558","number":99558},{"kind":"pr","value":"#99724","number":99724},{"kind":"pr","value":"#100124","number":100124}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":78037,"title":"fix: Windows update pipeline — first-attempt race, marker deadlock, orphaned venv helpers, ZIP-fallback binary loss","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"b04f8578eb68","number":0},{"kind":"commit","value":"e1e72f109c95","number":0},{"kind":"pr","value":"#91277","number":91277},{"kind":"pr","value":"#74805","number":74805},{"kind":"pr","value":"#95313","number":95313},{"kind":"pr","value":"#75788","number":75788},{"kind":"pr","value":"#95069","number":95069},{"kind":"pr","value":"#61514","number":61514},{"kind":"pr","value":"#95949","number":95949},{"kind":"pr","value":"#92013","number":92013}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":92013,"title":"fix(update): ZIP fallback no longer destroys user work or the desktop build (#87331, #91962, #87304, #70337 — salvage #87878 + #70477)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["hermes_cli/update_cmd.py","tests/hermes_cli/test_cmd_update.py","tests/hermes_cli/test_update_zip_fallback_guards.py","tests/hermes_cli/test_update_zip_release_preserve.py","tests/hermes_cli/test_update_zip_symlink_reject.py"]},{"kind":"pr","number":95069,"title":"fix(bootstrap): stale checkouts can no longer deadlock the in-app updater against its own marker (#75788, salvage #78037)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/bootstrap-installer/src-tauri/src/update.rs"]},{"kind":"pr","number":95313,"title":"fix(desktop): first Windows update attempt no longer fails on the app's own dying backends (#74805, salvage #78037)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/desktop/electron/backend-release-gate.test.ts","apps/desktop/electron/backend-release-gate.ts","apps/desktop/electron/backend-release-gate.windows-live.test.ts","apps/desktop/electron/main.ts"]},{"kind":"pr","number":95949,"title":"fix(mcp): stdio helper children join the spawn ledger — orphans get reaped (#61514, completes #78037)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["hermes_cli/process_identity.py","hermes_cli/web_server.py","tests/hermes_cli/test_mcp_helper_ledger.py","tools/mcp_tool.py"]},{"kind":"pr","number":99558,"title":"fix(windows): fail-closed process-identity guard before every unverified taskkill","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":[".github/workflows/windows-venv-e2e.yml","gateway/run.py","gateway/status.py","hermes_cli/_subprocess_compat.py","hermes_cli/dashboard_procs.py","hermes_cli/gateway.py","hermes_cli/gateway_windows.py","hermes_cli/profiles.py","hermes_cli/update_cmd.py","plugins/platforms/whatsapp/adapter.py","tests/gateway/test_runner_startup_failures.py","tests/gateway/test_status.py","tests/gateway/test_whatsapp_connect.py","tests/hermes_cli/test_gateway.py","tests/hermes_cli/test_stale_pid_guard.py","tests/hermes_cli/test_taskkill_identity_windows_live.py","tests/hermes_cli/test_update_concurrent_quarantine.py","tests/hermes_cli/test_update_orphan_backend_reap.py","tests/hermes_cli/test_update_stale_dashboard.py","tests/hermes_cli/test_update_wedged_gateway.py","tests/tools/test_browser_orphan_reaper.py","tests/tools/test_windows_native_support.py","tools/browser_tool.py","tools/environments/local.py"]},{"kind":"pr","number":99724,"title":"fix(update): defer ledger-verified serve/dashboard venv holders to the updater (Windows os error 32)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["hermes_cli/_scan_venv_blockers.py","tests/hermes_cli/test_scan_venv_blockers.py","tests/hermes_cli/test_venv_holder_windows_live.py"]},{"kind":"pr","number":100124,"title":"fix(desktop): Windows update-preflight family — deferral evidence, hindsight daemon reap, gateway stop/restore (salvage #98350/#75477/#76057)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/desktop/electron/gateway-stop-before-update.test.ts","apps/desktop/electron/gateway-stop-before-update.ts","apps/desktop/electron/main.ts","apps/desktop/electron/venv-blocker-scan.test.ts","apps/desktop/electron/venv-holder-select.test.ts","apps/desktop/electron/venv-holder-select.ts","contributors/emails/[redacted:email]","contributors/emails/[redacted:email]","hermes_cli/_scan_venv_blockers.py","tests/hermes_cli/test_scan_venv_blockers.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}