# NousResearch/hermes-agent · Windows desktop update process fixes and gateway handling

## Open now

- Nothing open on GitHub.

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.

## TL;DR

- 11 member(s): 0 open issue(s), 1 closed issue(s), 0 open PR(s), 7 merged PR(s), 3 PR(s) closed without merging.
- A fix was merged to main in PR #92013. Verify it addresses your case.
- **Recommended:** read PR #92013 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `resolved` · deciding PR(s): `pr-100124`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_SPANNING`): every member is connected by structural evidence: shared changed files, or a closing/superseded reference.
- Pairwise link density `0.18`: the share of member pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. `1.00` means every pair is linked.

## Closed / duplicate issues

- #70337: Windows Desktop auto-update fails when gateway is running

## Prior & competing PRs

- **#92013: fix(update): ZIP fallback no longer destroys user work or the desktop build (#87331, #91962, #87304, #70337 — salvage #87878 + #70477)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `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`
- **#95069: fix(bootstrap): stale checkouts can no longer deadlock the in-app updater against its own marker (#75788, salvage #78037)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `apps/bootstrap-installer/src-tauri/src/update.rs`
- **#95313: fix(desktop): first Windows update attempt no longer fails on the app's own dying backends (#74805, salvage #78037)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `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`
- **#95949: fix(mcp): stdio helper children join the spawn ledger — orphans get reaped (#61514, completes #78037)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `hermes_cli/process_identity.py`, `hermes_cli/web_server.py`, `tests/hermes_cli/test_mcp_helper_ledger.py`, `tools/mcp_tool.py`
- **#99558: fix(windows): fail-closed process-identity guard before every unverified taskkill**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `.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` (+4 more)
- **#99724: fix(update): defer ledger-verified serve/dashboard venv holders to the updater (Windows os error 32)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `hermes_cli/_scan_venv_blockers.py`, `tests/hermes_cli/test_scan_venv_blockers.py`, `tests/hermes_cli/test_venv_holder_windows_live.py`
- **#100124: fix(desktop): Windows update-preflight family — deferral evidence, hindsight daemon reap, gateway stop/restore (salvage #98350/#75477/#76057)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `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`
- **#70477: fix(desktop): stop gateway before update + preserve release dir in ZIP fallback (#70337)**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `#92013`
- **#76057: fix(desktop): stop messaging gateway before venv lock check during update**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `#99558`, `#99724`, `#100124`
- **#78037: fix: Windows update pipeline — first-attempt race, marker deadlock, orphaned venv helpers, ZIP-fallback binary loss**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `b04f8578eb68`, `e1e72f109c95`, `#91277`, `#74805`, `#95313`, `#75788`, `#95069`, `#61514`, `#95949`, `#92013`

## Fix status

- Merged to main in PR #92013 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-09-01`.
- Subsystem: `apps/desktop`
