{"repo":"NousResearch/hermes-agent","public_id":"106963","display_label":"Gateway: interrupt runs when session slot evicted","summary":"These issues and pull requests address gateway behavior around in-flight runs whose session turn slots are evicted or reaped, ensuring such runs are properly interrupted. A related concern involves a one-shot model override surviving a /stop command correctly.","subsystem":null,"counts":{"members":5,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":3},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":107979},"resolution":{"state":"resolved","by":"pr-107979"},"freshness":{"state":"verified","last_verified_at":"2026-09-12T06:33:40+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.5},"fix_edges":[{"issue_number":106963,"pr_number":107979,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true}],"members":[{"kind":"issue","number":106963,"title":"gateway: evicting a reaped session does not interrupt the in-flight run (51 calls / 7.9M tokens after its result was dropped)","url":null,"state":"closed"},{"kind":"pr","number":106964,"title":"fix(gateway): interrupt in-flight run on reaped-session eviction","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#106963","number":106963},{"kind":"pr","value":"#107013","number":107013},{"kind":"pr","value":"#106964","number":106964},{"kind":"pr","value":"#106966","number":106966},{"kind":"pr","value":"#107013","number":107013},{"kind":"pr","value":"#107013","number":107013},{"kind":"pr","value":"#106964","number":106964}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":106966,"title":"fix(gateway): interrupt the run when its session's turn slot is evicted","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"a4fe4806fc9ba5b6449219c5c0e87169e2f6a304","number":0},{"kind":"commit","value":"8e85b276f1dba5a92f74125127f5dc7841bf24a8","number":0},{"kind":"pr","value":"#106963","number":106963},{"kind":"pr","value":"#44212","number":44212},{"kind":"pr","value":"#44222","number":44222},{"kind":"pr","value":"#106964","number":106964},{"kind":"pr","value":"#105918","number":105918},{"kind":"pr","value":"#44212","number":44212},{"kind":"pr","value":"#106964","number":106964},{"kind":"pr","value":"#106963","number":106963},{"kind":"pr","value":"#106966","number":106966},{"kind":"pr","value":"#105918","number":105918},{"kind":"pr","value":"#44212","number":44212},{"kind":"pr","value":"#44222","number":44222}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":107013,"title":"fix(gateway): interrupt evicted in-flight runs","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"0240afd336aed805cc04eff4291a26bd634b27a1","number":0},{"kind":"commit","value":"cdf4c765213d7f4f7562f642e2b2df00d42c8ffd","number":0},{"kind":"commit","value":"77e55b4d1f1d3cf2df1e8143ccacf7527b5f7cf0","number":0},{"kind":"commit","value":"0240afd336aed805cc04eff4291a26bd634b27a1","number":0},{"kind":"commit","value":"0240afd336aed805cc04eff4291a26bd634b27a1","number":0},{"kind":"commit","value":"0240afd336aed805cc04eff4291a26bd634b27a1","number":0},{"kind":"commit","value":"0240afd336aed805cc04eff4291a26bd634b27a1","number":0},{"kind":"commit","value":"0240afd336aed805cc04eff4291a26bd634b27a1","number":0},{"kind":"commit","value":"0240afd336aed805cc04eff4291a26bd634b27a1","number":0},{"kind":"commit","value":"cdf4c765213d7f4f7562f642e2b2df00d42c8ffd","number":0},{"kind":"commit","value":"cdf4c765213d7f4f7562f642e2b2df00d42c8ffd","number":0},{"kind":"commit","value":"0240afd336aed805cc04eff4291a26bd634b27a1","number":0},{"kind":"commit","value":"539381d7291001a95e5f5ff3caa5b16cb79723e8","number":0},{"kind":"commit","value":"ae0f4fa33f40a07ff35dcbfeb720a16d8417bd1f","number":0},{"kind":"commit","value":"09fe65d73dc56fa79e70a5040402f70a3c791282","number":0},{"kind":"pr","value":"#107013","number":107013},{"kind":"pr","value":"#28686","number":28686},{"kind":"pr","value":"#106963","number":106963},{"kind":"pr","value":"#106966","number":106966},{"kind":"pr","value":"#106964","number":106964},{"kind":"pr","value":"#106966","number":106966},{"kind":"pr","value":"#106966","number":106966},{"kind":"pr","value":"#28686","number":28686},{"kind":"pr","value":"#99183","number":99183}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":107979,"title":"fix(gateway): a run whose session slot is evicted is interrupted, and a one-shot model override survives /stop correctly (#106963, salvage #107013)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["gateway/run.py","gateway/run_agent_cache.py","gateway/run_inbound.py","gateway/run_turn.py","gateway/session_state.py","gateway/slash_commands_model.py","gateway/turn_lease.py","tests/gateway/test_gateway_command_dispatch_minimal.py","tests/gateway/test_moa_one_shot_restore.py","tests/gateway/test_model_switch_persistence.py","tests/gateway/test_reaped_eviction_interrupts_run.py","tests/gateway/test_reaped_session_recovery.py","tests/hermes_cli/test_pre_command_hook.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}