{"repo":"NousResearch/hermes-agent","public_id":"109786","display_label":"state.db WAL lifecycle and multi-process safety fixes","summary":"These items address bugs in state.db WAL generation management, including premature unlinking by short-lived connections, lock guard behavior across handle lifecycles, and second-process maintenance refusing to run while live holders exist. Several fixes target specific symptoms like Desktop chat dying after updates and hermes doctor disrupting a running gateway.","subsystem":null,"counts":{"members":7,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":5,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":109841},"resolution":{"state":"resolved","by":"pr-109841"},"freshness":{"state":"verified","last_verified_at":"2026-09-14T17:18:19+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.2857142857142857},"fix_edges":[{"issue_number":103339,"pr_number":110914,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"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":109687,"pr_number":109841,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":109727,"pr_number":109841,"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":109728,"pr_number":109841,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":109786,"pr_number":109841,"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":109786,"pr_number":110872,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":109786,"pr_number":110914,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":109786,"pr_number":111033,"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":109946,"pr_number":110544,"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":109786,"title":"state.db WAL generation is unlinked by short-lived write-then-close connections (`hermes doctor` kills a running gateway)","url":null,"state":"closed"},{"kind":"pr","number":109841,"title":"fix(state): tightening state.db modes no longer drops the holder's SQLite locks (#109786, salvage #109754)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["hermes_state.py","tests/test_hermes_state.py"]},{"kind":"pr","number":109864,"title":"fix(state): short-lived write-then-close connections must not unlink a live WAL generation (#109786)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#110544","number":110544},{"kind":"pr","value":"#110872","number":110872},{"kind":"pr","value":"#110914","number":110914},{"kind":"pr","value":"#111033","number":111033}],"category":"implemented_elsewhere","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":110872,"title":"state.db WAL lock guard follows the handle lifecycle: reopen, checkpoint-vs-close, fd reuse (review of #110544)","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_wal_lock_guard_lifecycle.py"]},{"kind":"pr","number":110914,"title":"state.db maintenance from a second process refuses any live holder (doctor --fix checkpoint, schema repair; #103339 item 2)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["hermes_cli/doctor_state.py","hermes_state_holders.py","hermes_state_repair.py","tests/hermes_cli/test_doctor_wal_checkpoint_guard.py","tests/hermes_state/test_state_db_malformed_repair.py","tests/hermes_state/test_state_db_repair_non_destructive.py","tests/hermes_state/test_state_db_second_process_maintenance.py"]},{"kind":"pr","number":111033,"title":"fix(desktop): stopped clarify no longer swallows the next question; doctor counts state.db holders on macOS (#109641)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/desktop/src/components/assistant-ui/thread/message-parts.tsx","apps/desktop/src/lib/chat-messages.test.ts","apps/desktop/src/lib/chat-messages/tool-parts.ts","hermes_state_dbfile.py","tests/hermes_state/test_state_db_stats.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}