# NousResearch/hermes-agent · WAL deletion detection fix for OpenZFS dentries

## Open now

- Nothing open on GitHub.

These items address a bug where the deleted-WAL guard incorrectly identifies OpenZFS '(deleted)' directory entries as unlinked files, causing spurious DeletedWalGenerationError and related database wedging. The fix changes the identity check to compare file descriptors against the watched path rather than st_nlink.

## TL;DR

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

- #107401: \[Bug\]: deleted-WAL guard misreads OpenZFS \`(deleted)\` dentries as unlinked sidecars — permanent DeletedWalGenerationError, JSONL fallback

## Prior & competing PRs

- **#108082: state.db no longer wedges on a healthy WAL: OpenZFS/close() false DeletedWalGenerationError, unconfirmed-WAL read pool, transient read IOERR, stale lock banner (#107401 #105567 #86515 #100871 #108031, salvage #107411 #105578 #105711 #106958)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`
  - files: `agent/turn_explainers.py`, `contributors/emails/[redacted:email]`, `contributors/emails/nikkoxgonzales@users.noreply.github.com`, `gateway/run_notifications.py`, `hermes_state.py`, `hermes_state_dbfile.py`, `hermes_state_errors.py`, `hermes_state_readpool.py`, `hermes_state_wal.py`, `tests/gateway/test_session_db_warning_recheck.py`, `tests/hermes_state/test_deleted_wal_generation_guard.py`, `tests/hermes_state/test_read_path_transient_ioerr.py`, `tests/hermes_state/test_wal_active_confirmed.py`, `tests/run_agent/test_turn_completion_explainer.py`, `tests/test_hermes_state_wal_fallback.py`
- **#107411: fix(state): compare fd identity against the watched path, not st_nlink**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `d956e05e5e`, `#108082`

## Fix status

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