{"repo":"NousResearch/hermes-agent","public_id":"85894","display_label":"Desktop updater stale-lock and retry fixes","summary":"These items address a deadlock and blocking condition in the Desktop updater where stale update state prevents retries from succeeding. Two fixes target preserving holder age across handoffs and clearing stale updates after retries.","subsystem":"apps/desktop","counts":{"members":5,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":3,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":90937,"merged_at":null},"resolution":{"state":"resolved","by":"pr-90994"},"freshness":{"state":"verified","last_verified_at":"2026-08-20T18:01:25+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.4},"fix_edges":[{"issue_number":85894,"pr_number":90937,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":null},{"issue_number":85894,"pr_number":90941,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":null},{"issue_number":85894,"pr_number":90994,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":null},{"issue_number":90455,"pr_number":90937,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":null}],"members":[{"kind":"issue","number":85894,"title":"Desktop updater deadlocks against launchd gateways, then the stale updater blocks every retry","url":null,"state":"closed"},{"kind":"pr","number":85964,"title":"fix(updater): let stale Desktop updates clear after retries","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#90994","number":90994},{"kind":"pr","value":"#90937","number":90937},{"kind":"pr","value":"#90941","number":90941},{"kind":"pr","value":"#90937","number":90937},{"kind":"pr","value":"#90941","number":90941},{"kind":"pr","value":"#90994","number":90994}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":90937,"title":"fix(update): Windows Desktop updates finish instead of parking on \"Updating Hermes\"","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["scripts/desktop-update/windows.ps1","tests/test_desktop_update_windows_pipe_drain.py","tests/test_desktop_update_windows_python_handoff.py"]},{"kind":"pr","number":90941,"title":"fix(installer): the bootstrap installer stops waiting on pipe EOF","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":[".github/actions/detect-changes/action.yml",".github/workflows/ci.yaml",".github/workflows/rust-tests.yml","apps/bootstrap-installer/src-tauri/src/powershell.rs","apps/bootstrap-installer/src-tauri/src/update.rs","scripts/ci/classify_changes.py","tests/ci/test_classify_changes.py"]},{"kind":"pr","number":90994,"title":"fix(updater): preserve the holder's age across update-marker handoffs","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","apps/desktop/electron/main.ts","apps/desktop/electron/update-handoff-marker.test.ts","apps/desktop/electron/update-marker.test.ts","apps/desktop/electron/update-marker.ts","scripts/desktop-update/posix.sh","scripts/desktop-update/windows.ps1"]}],"trust":{"default_tier":"verified","includes_suggested":false}}