{"repo":"NousResearch/hermes-agent","public_id":"112548","display_label":"TUI gateway prompt-answer race and stall fixes","summary":"A cluster of fixes addressing race conditions and stall scenarios in the TUI gateway, specifically around prompt/approval answer delivery, request settlement atomicity, and legacy client deadline handling.","subsystem":"gateway","counts":{"members":5,"open_issues":0,"open_issues_distinct":0,"open_prs":1,"closed_issues":1,"merged_prs":2,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":113820,"merged_at":"2026-09-17T16:04:39+00:00"},"resolution":{"state":"resolved","by":"pr-113820"},"freshness":{"state":"verified","last_verified_at":"2026-09-17T16:04:39+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.4},"fix_edges":[{"issue_number":98728,"pr_number":113820,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-17T16:04:39+00:00"},{"issue_number":112548,"pr_number":113227,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-17T00:54:43+00:00"},{"issue_number":112548,"pr_number":113820,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-09-17T16:04:39+00:00"}],"members":[{"kind":"issue","number":112548,"title":"Follow-up to #110677: resolve_response/cancel race, old-client full-deadline stall, and a doc misname","url":null,"state":"closed"},{"kind":"pr","number":112559,"title":"fix(tui_gateway): make server request settlement atomic","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#113227","number":113227},{"kind":"pr","value":"#113820","number":113820},{"kind":"pr","value":"#112548","number":112548}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":112563,"title":"fix(gateway): prevent lost prompt answers and legacy client stalls","url":null,"state":"open","close_reason":{"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":113227,"title":"fix(tui_gateway): prompt answers survive a racing cancel or a last-second deadline (#112548, salvage #112559)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["tests/tui_gateway/test_protocol.py","tui_gateway/server_requests.py","website/docs/developer-guide/programmatic-integration.md"]},{"kind":"pr","number":113820,"title":"fix(tui_gateway): old app builds no longer stall the agent on clarify/approval (closes remaining atoms of #112548)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/desktop/src/lib/json-rpc-gateway-heartbeat.test.ts","apps/shared/src/gateway-contract.generated.ts","apps/shared/src/gateway-contract.openrpc.json","apps/shared/src/json-rpc-channel.test.ts","apps/shared/src/json-rpc-channel.ts","tests/tools/test_approval_gateway_wait_late_choice.py","tests/tui_gateway/test_protocol.py","tools/approval.py","tools/approval_gateway_wait.py","tui_gateway/AGENTS.md","tui_gateway/contracts/liveness.py","tui_gateway/methods_voice.py","tui_gateway/server.py","tui_gateway/server_requests.py","tui_gateway/session_transports.py","ui-tui/src/__tests__/gatewayClient.test.ts","website/docs/developer-guide/programmatic-integration.md"]}],"trust":{"default_tier":"verified","includes_suggested":false}}