{"repo":"NousResearch/hermes-agent","public_id":"111944","display_label":"update purge fails on stale root-level modules","summary":"A bug where post-pull purge misses root-level modules causes update failures, bad exit codes, and missing receipts. Related fixes address stale root module removal and suppression of resulting ImportError tracebacks.","subsystem":null,"counts":{"members":4,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":2,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":113093,"merged_at":"2026-09-16T23:57:04+00:00"},"resolution":{"state":"resolved","by":"pr-112062"},"freshness":{"state":"verified","last_verified_at":"2026-09-16T23:57:04+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.5},"fix_edges":[{"issue_number":111943,"pr_number":112062,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-15T16:28:00+00:00"},{"issue_number":111944,"pr_number":112062,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-15T16:28:00+00:00"},{"issue_number":111944,"pr_number":113093,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-16T23:57:04+00:00"},{"issue_number":112437,"pr_number":113093,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-16T23:57:04+00:00"},{"issue_number":112522,"pr_number":113093,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-16T23:57:04+00:00"}],"members":[{"kind":"issue","number":111944,"title":"bug(update): post-pull purge misses root-level modules — successful update exits 1, fleet check says \"verification incomplete\", and the run writes no receipt","url":null,"state":"closed"},{"kind":"pr","number":111954,"title":"fix(update): purge stale root modules after pull","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#112062","number":112062},{"kind":"pr","value":"#109314","number":109314}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":112062,"title":"fix(update): hermes update no longer dies on stale root-level modules like utils (#111943, #111944, salvage #109314)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["contributors/emails/[redacted:email]","hermes_cli/update_cmd.py","hermes_cli/update_cmd_config.py","hermes_cli/update_cmd_maint.py","tests/hermes_cli/test_update_config_reload_tools_config.py","tests/hermes_cli/test_update_stale_module_purge.py"]},{"kind":"pr","number":113093,"title":"fix(browser): hermes update no longer prints atexit ImportError tracebacks on a half-updated tree (#112437, #112522, salvage #112439)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["tests/tools/test_browser_cleanup.py","tools/browser_tool_lifecycle.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}