{"repo":"NousResearch/hermes-agent","public_id":"75269","display_label":"SQLite WAL reader leak from finished threads","summary":"These issues and PRs address a bug where WAL read connections from finished worker threads accumulate without being reclaimed, potentially exhausting file descriptor limits. The work involves safely reaping, bounding, and reusing these connections at runtime rather than waiting until shutdown.","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":83406},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-08-11T00:02:56+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.4},"fix_edges":[{"issue_number":61349,"pr_number":83406,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":75269,"pr_number":83406,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":77276,"pr_number":83406,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":77573,"pr_number":83406,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":78872,"pr_number":83406,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":81547,"pr_number":83406,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false}],"members":[{"kind":"issue","number":75269,"title":"[Bug]: SessionDB retains WAL readers from finished worker threads until shutdown, exhausting RLIMIT_NOFILE","url":null,"state":"closed"},{"kind":"pr","number":75322,"title":"fix(state): reap finished-thread WAL read connections at runtime (#75269)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#83406","number":83406},{"kind":"pr","value":"#76700","number":76700}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":75352,"title":"fix(state): safely reclaim finished-thread WAL readers","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#83406","number":83406},{"kind":"pr","value":"#76700","number":76700}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":81082,"title":"fix(state): bound reusable SQLite WAL readers","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"87aedbe7b","number":0}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":83406,"title":"fix(state,desktop,runtime): EMFILE cascade — bounded WAL read pool, orphan serve reap, nofile floor","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/desktop/electron/backend-child.ts","apps/desktop/electron/main.ts","apps/desktop/electron/windows-child-options.test.ts","cli-config.yaml.example","contributors/emails/[redacted:email]","contributors/emails/[redacted:email]","contributors/emails/[redacted:email]","gateway/run.py","hermes_cli/config_defaults.py","hermes_cli/dashboard_procs.py","hermes_cli/gateway.py","hermes_cli/main.py","hermes_cli/resource_limits.py","hermes_cli/web_server.py","hermes_state.py","tests/hermes_cli/test_dashboard_admin_endpoints.py","tests/hermes_cli/test_gateway_service.py","tests/hermes_cli/test_orphan_desktop_serve_reap.py","tests/test_resource_limits.py","tests/test_session_db_read_conn_pool.py","tests/test_session_db_read_path_split.py","website/docs/user-guide/configuration.md"]}],"trust":{"default_tier":"verified","includes_suggested":false}}