{"repo":"NousResearch/hermes-agent","public_id":"77833","display_label":"Kanban WS disconnect leaks poll tasks, CPU saturation","summary":"These items address a bug where disconnected WebSocket clients on idle Kanban boards leave orphaned polling tasks that saturate the executor pool and cause sustained high CPU usage. Related work bundles additional idle and polling CPU fixes across desktop UI components.","subsystem":"dashboard","counts":{"members":3,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":86754,"merged_at":"2026-08-15T07:32:53+00:00"},"resolution":{"state":"resolved","by":"pr-86754"},"freshness":{"state":"verified","last_verified_at":"2026-08-15T07:32:53+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.6666666666666666},"fix_edges":[{"issue_number":42627,"pr_number":86754,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-08-15T07:32:53+00:00"},{"issue_number":77833,"pr_number":86754,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-08-15T07:32:53+00:00"},{"issue_number":78325,"pr_number":86754,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-08-15T07:32:53+00:00"}],"members":[{"kind":"issue","number":77833,"title":"[Bug] Kanban event-stream WS handler leaks poll tasks on client disconnect — executor pool saturates, sustained 100%+ CPU","url":null,"state":"closed"},{"kind":"pr","number":77884,"title":"fix(kanban): detect WS client disconnect on idle board, prevent zombie poll tasks","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#86754","number":86754}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":86754,"title":"perf(desktop/dashboard): salvage idle & polling CPU fixes — unfocused UI pause, sidebar scan bounds, pet poll, PTY back-off, kanban WS zombie reap","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/desktop/src/app/contrib/hooks/use-background-sync.test.ts","apps/desktop/src/app/contrib/hooks/use-background-sync.ts","apps/desktop/src/app/shell/hooks/use-status-snapshot.test.ts","apps/desktop/src/app/shell/hooks/use-status-snapshot.ts","apps/desktop/src/components/assistant-ui/thread/status.test.tsx","apps/desktop/src/components/chat/activity-timer.test.tsx","apps/desktop/src/components/chat/activity-timer.ts","apps/desktop/src/hooks/use-viewed-interval.ts","apps/desktop/src/lib/statusbar.tsx","contributors/emails/[redacted:email]","contributors/emails/[redacted:email]","contributors/emails/{ID}+{username}@users.noreply.github.com","hermes_cli/web_routers/profiles.py","hermes_cli/web_server.py","plugins/kanban/dashboard/plugin_api.py","tests/hermes_cli/test_cron_profile_enumeration_lightweight.py","tests/hermes_cli/test_profiles_sidebar_cache.py","tests/hermes_cli/test_web_server_pty_idle_backoff.py","tests/plugins/test_kanban_ws_idle_disconnect.py","ui-tui/src/__tests__/petPolling.test.ts","ui-tui/src/app/usePet.ts","ui-tui/src/lib/petPolling.ts"]}],"trust":{"default_tier":"verified","includes_suggested":false}}