{"repo":"NousResearch/hermes-agent","public_id":"86516","display_label":"Fix unsynchronized SessionDB reads causing crashes","summary":"These issues and patches address multiple read paths in SessionDB that bypass locking and the read context, accessing the shared writer connection without synchronization. The fixes route reads through the proper context and connection pool to prevent dirty reads and crashes such as SIGSEGV and SystemError.","subsystem":"agent","counts":{"members":4,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":99502,"merged_at":"2026-08-31T16:56:05+00:00"},"resolution":{"state":"resolved","by":"pr-99502"},"freshness":{"state":"verified","last_verified_at":"2026-08-31T16:56:05+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.5},"fix_edges":[{"issue_number":85079,"pr_number":99502,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-08-31T16:56:05+00:00"},{"issue_number":86516,"pr_number":99502,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-08-31T16:56:05+00:00"},{"issue_number":94258,"pr_number":99502,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-08-31T16:56:05+00:00"},{"issue_number":98332,"pr_number":99502,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-08-31T16:56:05+00:00"},{"issue_number":99349,"pr_number":99502,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-08-31T16:56:05+00:00"}],"members":[{"kind":"issue","number":86516,"title":"state: four read paths bypass self._lock / _read_ctx and read on the shared write connection (dirty reads of uncommitted transactions)","url":null,"state":"closed"},{"kind":"pr","number":87612,"title":"fix(state): WAL probe fallback, bare-SELECT locking, writable_schema finally, read-pool self-heal","url":null,"state":"closed","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":99454,"title":"fix(state): route remaining SessionDB SELECTs through _read_ctx","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#82428","number":82428}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":99502,"title":"fix(state): eliminate unsynchronized reads on the shared SessionDB writer connection (SIGSEGV / SystemError class)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["hermes_state.py","hermes_state_search.py","tests/state/test_writer_conn_thread_safety.py","tests/test_hermes_state_conn_lock_audit.py","tests/test_session_db_read_path_split.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}