{"repo":"NousResearch/hermes-agent","public_id":"92145","display_label":"Update restart recovery and reverse proxy fixes","summary":"These items address bugs in the update process where aborted or crashed restart phases leave gateways and services in broken states, with repeated salvage attempts at a fix. One unrelated item corrects reverse proxy trust in the dashboard.","subsystem":"hermes_cli","counts":{"members":6,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":3,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":94126},"resolution":{"state":"resolved","by":"pr-100165"},"freshness":{"state":"verified","last_verified_at":"2026-09-01T14:00:55+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.4},"fix_edges":[{"issue_number":92145,"pr_number":94126,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":92145,"pr_number":95930,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":92145,"pr_number":100165,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":97633,"pr_number":100165,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false}],"members":[{"kind":"issue","number":92145,"title":"`hermes update` leaves running services on stale `sys.modules` when the auto-restart phase aborts on an ImportError","url":null,"state":"closed"},{"kind":"pr","number":94126,"title":"fix(dashboard): trust configured reverse proxies","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["cli-config.yaml.example","hermes_cli/config_defaults.py","hermes_cli/web_server.py","pyproject.toml","tests/hermes_cli/test_dashboard_auth_gate.py","website/docs/user-guide/configuration.md","website/docs/user-guide/docker.md","website/docs/user-guide/features/web-dashboard.md"]},{"kind":"pr","number":94392,"title":"fix(update): recover aborted gateway restart in a fresh process","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"b2c011364e9e","number":0},{"kind":"pr","value":"#95930","number":95930},{"kind":"pr","value":"#92145","number":92145}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":95930,"title":"fix(update): crashed updates no longer strand stopped gateways — a fresh process settles the restart debt (#92145, salvage #94392)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["hermes_cli/main.py","hermes_cli/update_cmd.py","hermes_cli/update_receipt.py","hermes_cli/update_restart_recovery.py","tests/hermes_cli/test_update_receipt.py","tests/hermes_cli/test_update_restart_recovery.py","website/docs/reference/cli-commands.md"]},{"kind":"pr","number":96235,"title":"fix(update): recover the hermes serve generation after an aborted restart phase","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"0dfba37b11ff2ca908ae2df85b55f4f4c9b7fd8b","number":0},{"kind":"commit","value":"5664e4512b29bad020e3ec939c3d99cb81f3a78c","number":0},{"kind":"commit","value":"3fd465c7250bb7a3ee3b4b0789b93679b0ffa097","number":0},{"kind":"commit","value":"5664e4512b29bad020e3ec939c3d99cb81f3a78c","number":0},{"kind":"pr","value":"#94126","number":94126}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":100165,"title":"fix(update): recover the hermes serve generation after an aborted restart phase (salvage #96235)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["hermes_cli/dashboard_procs.py","hermes_cli/update_abort_recovery.py","hermes_cli/update_cmd.py","hermes_cli/update_inventory.py","hermes_cli/update_receipt.py","hermes_cli/update_restart_recovery.py","tests/hermes_cli/test_serve_runtime_inventory.py","tests/hermes_cli/test_update_receipt.py","tests/hermes_cli/test_update_restart_recovery.py","tests/hermes_cli/test_update_serve_generation_recovery.py","tests/hermes_cli/test_update_stale_dashboard.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}