# NousResearch/hermes-agent · state.db WAL lifecycle and multi-process safety fixes

## Open now

- Nothing open on GitHub.

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.

## TL;DR

- 7 member(s): 0 open issue(s), 1 closed issue(s), 0 open PR(s), 5 merged PR(s), 1 PR(s) closed without merging.
- A fix was merged to main in PR #109841. Verify it addresses your case.
- **Recommended:** read PR #109841 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `resolved` · deciding PR(s): `pr-109841`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_SPANNING`): every member is connected by structural evidence: shared changed files, or a closing/superseded reference.
- Pairwise link density `0.29`: the share of member pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. `1.00` means every pair is linked.

## Closed / duplicate issues

- #109786: state.db WAL generation is unlinked by short-lived write-then-close connections (\`hermes doctor\` kills a running gateway)

## Prior & competing PRs

- **#109841: fix(state): tightening state.db modes no longer drops the holder's SQLite locks (#109786, salvage #109754)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `hermes_state.py`, `tests/test_hermes_state.py`
- **#110544: state.db WAL survives sibling closes and stray lock cancellation on every runtime (Desktop chat dies after update; salvage #109758)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `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`
- **#110872: state.db WAL lock guard follows the handle lifecycle: reopen, checkpoint-vs-close, fd reuse (review of #110544)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `hermes_state.py`, `hermes_state_dbfile.py`, `hermes_state_lockguard.py`, `tests/hermes_state/test_wal_lock_guard_lifecycle.py`
- **#110914: state.db maintenance from a second process refuses any live holder (doctor --fix checkpoint, schema repair; #103339 item 2)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `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`
- **#111033: fix(desktop): stopped clarify no longer swallows the next question; doctor counts state.db holders on macOS (#109641)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `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`
- **#109864: fix(state): short-lived write-then-close connections must not unlink a live WAL generation (#109786)**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `#110544`, `#110872`, `#110914`, `#111033`

## Fix status

- Merged to main in PR #109841 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-09-14`.
