# NousResearch/hermes-agent · WAL unlink race and state.db corruption fixes

## Open now

- Nothing open on GitHub.

A bug report and several fix attempts address a race condition where a deleted WAL file coexists with a fresh zero-byte WAL, causing state.db corruption. The fixes focus on refusing writes on deleted WAL generations and restoring journal mode safely within repair guards.

## TL;DR

- 5 member(s): 0 open issue(s), 1 closed issue(s), 0 open PR(s), 2 merged PR(s), 2 PR(s) closed without merging.
- A fix was merged to main in PR #101221. Verify it addresses your case.
- **Recommended:** read PR #101221 (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-101221`. 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.40`: 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

- #101064: \[Bug\] state.db WAL unlink race: writer holds deleted 4.3MB state.db-wal while a fresh 0-byte WAL appears on disk — corruption recurred after WAL-mode rebuild, stopped only by database.journal_mode: delete

## Prior & competing PRs

- **#101221: fix(state): refuse SessionDB open and writes on a deleted WAL generation (salvage #101081)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `hermes_state.py`, `tests/hermes_state/test_deleted_wal_generation_guard.py`
- **#101736: fix(state): restore journal mode inside the repair guard, never reopen after release (salvage #101085)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `hermes_state.py`, `tests/state/test_state_db_wal_unlink_race.py`
- **#101081: fix(state): refuse SessionDB open and writes on a deleted WAL generation**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `7f7df1ce44`, `e9fa7bc05e`, `#101221`, `#101064`, `#94736`
- **#101085: fix(state): avoid WAL unlink race during state.db repair**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `#101736`, `#98552`, `#100533`

## Fix status

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