{"repo":"NousResearch/hermes-agent","public_id":"115772","display_label":"Relay stream aclose blocking and cleanup fixes","summary":"These issues and pull requests address scenarios where aclose() on Relay managed streams can block indefinitely, particularly during provider fallback and stream close, with fixes including bounded timeouts and deterministic close behavior.","subsystem":null,"counts":{"members":4,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":116666,"merged_at":"2026-09-20T06:38:49+00:00"},"resolution":{"state":"resolved","by":"pr-116666"},"freshness":{"state":"verified","last_verified_at":"2026-09-20T06:38:49+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.5},"fix_edges":[{"issue_number":115417,"pr_number":116666,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-20T06:38:49+00:00"},{"issue_number":115772,"pr_number":116666,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-20T06:38:49+00:00"},{"issue_number":115788,"pr_number":116666,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-20T06:38:49+00:00"}],"members":[{"kind":"issue","number":115772,"title":"Relay stream aclose() can block forever during provider fallback and stream close","url":null,"state":"closed"},{"kind":"pr","number":115776,"title":"bound Relay stream aclose during cleanup","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"5c7ebc5e6262","number":0},{"kind":"pr","value":"#116666","number":116666},{"kind":"pr","value":"#115788","number":115788},{"kind":"pr","value":"#115772","number":115772},{"kind":"pr","value":"#115417","number":115417},{"kind":"pr","value":"#115790","number":115790},{"kind":"pr","value":"#115776","number":115776},{"kind":"pr","value":"#115421","number":115421}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":115785,"title":"fix(relay): bound ManagedLlmStream aclose with 10s daemon-thread timeout","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"5c7ebc5e6262","number":0},{"kind":"pr","value":"#116666","number":116666},{"kind":"pr","value":"#115788","number":115788},{"kind":"pr","value":"#115772","number":115772},{"kind":"pr","value":"#115417","number":115417},{"kind":"pr","value":"#115790","number":115790},{"kind":"pr","value":"#115776","number":115776},{"kind":"pr","value":"#115421","number":115421}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":116666,"title":"fix(relay): managed streams close deterministically, aclose is bounded, transformed output is never replayed raw (#115788, #115772, #115417, salvage #115790 #115776 #115421)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/relay_llm.py","tests/agent/test_relay_llm.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}