{"repo":"NousResearch/hermes-agent","public_id":"117275","display_label":"Cron stale-code ticker and gateway restart bugs","summary":"These issues and fixes concern a cron ticker incorrectly treating stale-code yields as dispatch outages, and related problems with gateway restart detection and fleet-restart warning persistence. Multiple adjacent but distinct bugs share a common root area around stale gateway handling and cron scheduling behavior.","subsystem":null,"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":117501},"resolution":{"state":"resolved","by":"pr-117501"},"freshness":{"state":"verified","last_verified_at":"2026-09-21T08:57:32+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.4},"fix_edges":[{"issue_number":117275,"pr_number":117501,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":117275,"pr_number":117679,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":117275,"pr_number":117748,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false}],"members":[{"kind":"issue","number":117275,"title":"[Bug]: hermes update never restarts the running gateway — cron ticker yields every tick as 'stale code' for hours, `cron status` stays green during a total dispatch outage","url":null,"state":"closed"},{"kind":"pr","number":117287,"title":"fix(cron): keep schedules dispatching when the gateway holder is stale","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"95b1f4c855","number":0},{"kind":"pr","value":"#117679","number":117679},{"kind":"pr","value":"#117275","number":117275},{"kind":"pr","value":"#117501","number":117501},{"kind":"pr","value":"#117679","number":117679},{"kind":"pr","value":"#117748","number":117748}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":117501,"title":"fix(update): stale-code cron yield reads as an outage and hermes update restarts proven-stale gateways (#117275)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["cron/scheduler.py","hermes_cli/cron.py","hermes_cli/update_cmd_fleet.py","hermes_cli/update_cmd_stale_survivors.py","tests/hermes_cli/test_update_stale_gateway_yield.py","website/docs/developer-guide/cron-internals.md"]},{"kind":"pr","number":117679,"title":"fix(cron): stale-code ticker keeps dispatching when the lock holder is not a fresh gateway (#117275, salvage #117287)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["cron/scheduler.py","gateway/code_skew.py","tests/cron/test_cron_tick_stale_yield.py","website/docs/developer-guide/cron-internals.md"]},{"kind":"pr","number":117748,"title":"Fleet-restart warning no longer sticks forever on a serve backend, and macOS reports a gateway restarted only when its PID changed (#117275)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["hermes_cli/gateway.py","hermes_cli/update_abort_recovery.py","hermes_cli/update_cmd_fleet.py","tests/hermes_cli/test_update_fleet_restart_pending.py","tests/hermes_cli/test_update_launchd_restart_verification.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}