state.db WAL lifecycle and multi-process safety fixes

NousResearch/hermes-agent · cluster 109786

Data as of

Nothing open on GitHub. Fix merged in #109841. Check it covers your case.

The short answer

0open issues
0open PRs
7items grouped
Known?
Yes. 7 related items grouped here, 1 issue already closed.
Fix event
A fix was merged to main in PR #109841. Check it covers your case. No release data is tracked.
Tracker
The maintainers' tracker marks this resolved, deciding PR #109841. That is separate from the fix event.
Still open
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.

Open issues0

No open issues.

Open PRs0

No open pull requests.

Fixes on record

Merged to main. A stamp counts the issues a fix is linked to.

  • #109841 fix(state): tightening state.db modes no longer drops the holder's SQLite locks (#109786, salvage #109754)

    merged to main

    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

    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

    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

    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

    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

1 PR closed without merging

From the close comments: done elsewhere 1

  • #109864 fix(state): short-lived write-then-close connections must not unlink a live WAL generation (#109786) · done elsewhere → #110544, #110872, #110914, #111033
Closed issues · 1
  • Closed#109786state.db WAL generation is unlinked by short-lived write-then-close connections (`hermes doctor` kills a running gateway)
How this cluster was grouped
  • Link evidence (structural links throughout): every member is connected by structural evidence: shared changed files, or a closing/superseded reference.
  • Pairwise link density 0.29: the share of item 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.

Pick up a Lab task

Check whether a fix covers the open issues here, with your own agent. Bring back evidence for maintainers.

Open the Lab

At a glance

Merged PRs
#109841, #110544, #110872, #110914, #111033
Closed issues
1
Attempts
1 PR closed without merging
Fix link checked
14 Sep 2026

For your agent

The same facts, typed.