{"repo":"NousResearch/hermes-agent","public_id":"109824","display_label":"WAL stability and MCP session crash fixes","summary":"These issues address two related bugs: transient cron handles rotating the WAL generation and causing inode conflicts, and MCP tool refresh crashing when the server session is None during restart. Fixes include read-only state.db access for read paths and guarding dynamic tool refresh against missing sessions.","subsystem":null,"counts":{"members":6,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":3,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":110544},"resolution":{"state":"resolved","by":"pr-114413"},"freshness":{"state":"verified","last_verified_at":"2026-09-17T23:06:30+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.3333333333333333},"fix_edges":[{"issue_number":104596,"pr_number":110544,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":109641,"pr_number":110544,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":109727,"pr_number":110544,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":109786,"pr_number":110544,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":109824,"pr_number":110544,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":109824,"pr_number":110718,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":109824,"pr_number":114413,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":109946,"pr_number":110544,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":109946,"pr_number":110718,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":110082,"pr_number":110544,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":110106,"pr_number":110544,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":110214,"pr_number":110544,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":110276,"pr_number":110544,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false}],"members":[{"kind":"issue","number":109824,"title":"Two WAL stability bugs: cron writer causes inode conflict every 30 min; `_refresh_tools` crashes on `None` session during MCP restart","url":null,"state":"closed"},{"kind":"pr","number":110116,"title":"fix(cron): stop transient cron state.db handles from rotating the WAL generation on close (#109824)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"3e43cee5050f","number":0},{"kind":"pr","value":"#110544","number":110544},{"kind":"pr","value":"#110718","number":110718}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":110117,"title":"fix(mcp): _refresh_tools no longer crashes on None session during restart (#109824)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#114413","number":114413}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":110544,"title":"state.db WAL survives sibling closes and stray lock cancellation on every runtime (Desktop chat dies after update; salvage #109758)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["hermes_state.py","hermes_state_dbfile.py","hermes_state_lockguard.py","tests/hermes_state/test_deleted_wal_generation_guard.py","tests/hermes_state/test_wal_lock_guard.py"]},{"kind":"pr","number":110718,"title":"fix(state): read paths open state.db read-only instead of taking a writer","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["contributors/emails/[redacted:email]","contributors/emails/[redacted:email]","hermes_cli/cli_info_mixin.py","hermes_cli/main_agent_cmds.py","tests/hermes_cli/test_cli_insights_command.py","tests/tui_gateway/test_profile_db_readonly.py","tests/tui_gateway/test_tui_gateway_server.py","tui_gateway/methods_projects.py","tui_gateway/methods_session.py","tui_gateway/methods_session_foreign.py","tui_gateway/server.py"]},{"kind":"pr","number":114413,"title":"fix(mcp): skip dynamic tool refresh when the server session is already gone","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["tests/tools/test_mcp_dynamic_discovery.py","tools/mcp_tool_health.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}