{"repo":"NousResearch/hermes-agent","public_id":"77277","display_label":"Desktop updater respawn causes infinite update loop","summary":"These items address a bug where the desktop updater incorrectly identifies its own respawned backend process as a virtual environment blocker, causing the in-app update process to loop indefinitely on Windows. Fixes involve excluding respawned backends from the venv-blocker scan and gating respawn logic on update state.","subsystem":"apps/desktop","counts":{"members":7,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":5,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":73928},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-08-23T02:30:11+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.2857142857142857},"fix_edges":[{"issue_number":61514,"pr_number":92013,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":70337,"pr_number":92013,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":73822,"pr_number":73928,"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":75788,"pr_number":92013,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":77277,"pr_number":91869,"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":77277,"pr_number":92447,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":77277,"pr_number":92617,"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":90778,"pr_number":91869,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true}],"members":[{"kind":"issue","number":77277,"title":"Desktop in-app update loops forever on Windows: updater reports its own respawning backend as the venv blocker","url":null,"state":"closed"},{"kind":"pr","number":73928,"title":"fix(desktop): gate backend respawns on updateInFlight, not just the update marker (#73822)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/desktop/electron/main.ts","apps/desktop/electron/update-gate.test.ts","apps/desktop/electron/update-gate.ts"]},{"kind":"pr","number":77772,"title":"fix(desktop): exclude respawned backends from venv-blocker scan (#77277)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#91277","number":91277},{"kind":"pr","value":"#73822","number":73822},{"kind":"pr","value":"#92617","number":92617},{"kind":"pr","value":"#92013","number":92013},{"kind":"pr","value":"#91869","number":91869},{"kind":"pr","value":"#77277","number":77277},{"kind":"pr","value":"#92091","number":92091},{"kind":"pr","value":"#92447","number":92447}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":91869,"title":"fix(update): Windows venv-holder guard names holders correctly and can see the gateway it must pause (#90778, #87594 — proven live on windows-latest)","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","hermes_cli/update_cmd.py","tests/gateway/test_goal_resume_restart.py","tests/hermes_cli/test_venv_holder_classifier.py","tests/hermes_cli/test_venv_holder_windows_live.py"]},{"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":92447,"title":"feat(gateway): fleet consumers now ask the gateway itself — control socket with identify/status (#92091 step 1)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["gateway/control_socket.py","gateway/run.py","hermes_cli/update_inventory.py","hermes_cli/update_receipt.py","tests/gateway/test_control_socket.py","tests/gateway/test_control_socket_windows_live.py","website/docs/getting-started/updating.md"]},{"kind":"pr","number":92617,"title":"fix(update): a contended Windows venv is never mutated — failed shim quarantine refuses instead of warning (#87331)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["hermes_cli/_install_repair.py","hermes_cli/main.py","hermes_cli/update_cmd.py","tests/agent/test_bedrock_adapter.py","tests/agent/test_bedrock_integration.py","tests/hermes_cli/test_bedrock_model_picker.py","tests/hermes_cli/test_shim_fail_closed_windows_live.py","tests/hermes_cli/test_update_shim_fail_closed.py","tests/run_agent/test_streaming.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}