{"repo":"NousResearch/hermes-agent","public_id":"10616","display_label":"Feishu/Lark WebSocket disconnect and reconnect handling","summary":"These issues and fixes center on the Feishu/Lark gateway failing to recover from WebSocket disconnections, including zombie processes, silent failures, and missing in-process reconnect logic. Several fixes address detection of reconnect exhaustion, watchdog supervision of the receive loop, and proper reconnect triggering.","subsystem":"gateway","counts":{"members":17,"open_issues":5,"open_issues_distinct":5,"open_prs":4,"closed_issues":3,"merged_prs":0,"attempt_prs":9},"landed_fix":null,"resolution":{"state":"unresolved","by":null},"freshness":{"state":"never_verified","last_verified_at":null,"is_stale":false},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.10852941176470585},"fix_edges":[],"members":[{"kind":"issue","number":10616,"title":"Feishu/Lark WebSocket drops lead to Zombie Gateway Process without auto-recovery","url":null,"state":"closed"},{"kind":"issue","number":23491,"title":"[Bug]: Feishu WebSocket disconnect leaves gateway as zombie process — cron ticker stops, no auto-reconnect","url":null,"state":"closed"},{"kind":"issue","number":24807,"title":"gateway/feishu: WS thread exit (ping timeout) is silently swallowed, should trigger in-process reconnect","url":null,"state":"open"},{"kind":"issue","number":31367,"title":"Feishu WebSocket disconnect causes full gateway restart every ~30min","url":null,"state":"open"},{"kind":"issue","number":46561,"title":"Feishu WebSocket does not reconnect after disconnect","url":null,"state":"open"},{"kind":"issue","number":53477,"title":"Feishu gateway: supervise Lark websocket receive-loop and reconnect in-process (1011 keepalive timeout → silently deaf agent)","url":null,"state":"open"},{"kind":"issue","number":64712,"title":"[Bug]: Feishu adapter stuck after Lark SDK WebSocket reconnect exhaustion","url":null,"state":"open"},{"kind":"issue","number":67358,"title":"[bug] Lark WebSocket disconnect causes gateway process crash","url":null,"state":"closed"},{"kind":"pr","number":10620,"title":"fix(feishu): terminate process on unrecoverable websocket drops","url":null,"state":"open","close_reason":{"refs":[{"kind":"commit","value":"5600105478ffde29d7566b45421b100eaa29c4ef","number":0}],"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":10801,"title":"fix(feishu): WebSocket watchdog + approval card PATCH + markdown table rendering","url":null,"state":"open","close_reason":{"refs":[{"kind":"pr","value":"#10251","number":10251},{"kind":"pr","value":"#10251","number":10251},{"kind":"pr","value":"#77364","number":77364}],"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":24813,"title":"fix(gateway/feishu): in-process WS reconnect + fallback send strips thread_id","url":null,"state":"closed","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":31386,"title":"fix(feishu): adapter-level WS reconnect on receive-loop death (#31367)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#53508","number":53508}],"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":53508,"title":"fix(feishu): reconnect when the websocket worker exits after startup","url":null,"state":"open","close_reason":{"refs":[{"kind":"commit","value":"1c1c31aeaf9a3a6b3d9737ad975714ed1c1ea234","number":0}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":64741,"title":"fix(feishu): detect Lark SDK reconnect exhaustion and trigger reconnection","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"e67ae7421fea","number":0},{"kind":"pr","value":"#5500","number":5500},{"kind":"pr","value":"#31386","number":31386},{"kind":"pr","value":"#61271","number":61271},{"kind":"pr","value":"#64741","number":64741},{"kind":"pr","value":"#73202","number":73202},{"kind":"pr","value":"#5500","number":5500},{"kind":"pr","value":"#5665","number":5665},{"kind":"pr","value":"#31386","number":31386},{"kind":"pr","value":"#73202","number":73202},{"kind":"pr","value":"#61271","number":61271},{"kind":"pr","value":"#64741","number":64741},{"kind":"pr","value":"#73202","number":73202},{"kind":"pr","value":"#31386","number":31386},{"kind":"pr","value":"#64741","number":64741},{"kind":"pr","value":"#73202","number":73202},{"kind":"pr","value":"#31386","number":31386},{"kind":"pr","value":"#64741","number":64741},{"kind":"pr","value":"#73202","number":73202},{"kind":"pr","value":"#61271","number":61271},{"kind":"pr","value":"#73202","number":73202},{"kind":"pr","value":"#53508","number":53508},{"kind":"pr","value":"#53508","number":53508},{"kind":"pr","value":"#64741","number":64741},{"kind":"pr","value":"#73202","number":73202},{"kind":"pr","value":"#53508","number":53508},{"kind":"pr","value":"#73202","number":73202},{"kind":"pr","value":"#31367","number":31367},{"kind":"pr","value":"#46561","number":46561},{"kind":"pr","value":"#31386","number":31386},{"kind":"pr","value":"#73202","number":73202},{"kind":"pr","value":"#73202","number":73202},{"kind":"pr","value":"#61271","number":61271},{"kind":"pr","value":"#5500","number":5500},{"kind":"pr","value":"#5665","number":5665},{"kind":"pr","value":"#374151","number":374151},{"kind":"pr","value":"#31367","number":31367},{"kind":"pr","value":"#46561","number":46561},{"kind":"pr","value":"#64712","number":64712},{"kind":"pr","value":"#31386","number":31386},{"kind":"pr","value":"#64741","number":64741},{"kind":"pr","value":"#73202","number":73202}],"category":"partial_fix","implication":"needs_llm"},"merged":false},{"kind":"pr","number":67366,"title":"fix(gateway): treat Feishu/Lark WebSocket close as transient (#67358)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#95252","number":95252}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":73202,"title":"fix(feishu): notify gateway reconnect watcher on WS thread death","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#73779","number":73779},{"kind":"pr","value":"#73779","number":73779}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":95252,"title":"fix(gateway): treat Feishu/Lark WebSocket close as transient (#67358)","url":null,"state":"open","close_reason":{"category":"duplicate_of","implication":"duplicate"},"merged":false}],"trust":{"default_tier":"verified","includes_suggested":false}}