Skip to content

fix(session): make SQLite transcript rewrites transactional - #16926

Merged
teknium1 merged 2 commits into
mainfrom
hermes/hermes-66017c71
Apr 28, 2026
Merged

teknium1 merged 2 commits into
mainfrom
hermes/hermes-66017c71

Conversation

@teknium1

Copy link
Copy Markdown
Collaborator

Salvage of #16810 onto current main (clean cherry-pick, @ThomassJonax's authorship preserved).

Summary

rewrite_transcript() (used by /retry, /undo, /compress) now replaces SQLite messages in a single transaction, so a failure mid-rewrite can no longer leave the DB half-empty.

Changes

  • hermes_state.py: new SessionDB.replace_messages() — DELETE + reinsert + counter update inside one _execute_write (BEGIN IMMEDIATE / rollback on raise).
  • gateway/session.py: rewrite_transcript() now calls replace_messages() instead of clear_messages + per-message append_message loop.
  • tests/gateway/test_session.py: regression test asserting a failed rewrite preserves the previous DB transcript.
  • scripts/release.py: AUTHOR_MAP entry for @ThomassJonax.

Validation

scripts/run_tests.sh tests/gateway/test_session.py -k 'rewrite or reasoning_survives or atomic' → 4 passed.

Closes #16810.

@teknium1
teknium1 merged commit 1b9b5d2 into main Apr 28, 2026
10 of 11 checks passed
@teknium1
teknium1 deleted the hermes/hermes-66017c71 branch April 28, 2026 08:49
@alt-glitch alt-glitch added type/bug Something isn't working P1 High — major feature broken, no workaround comp/gateway Gateway runner, session dispatch, delivery labels Apr 28, 2026
@alt-glitch

Copy link
Copy Markdown
Contributor

Salvage of #16810 (now closed). Supersedes open PRs #8065 and #8077 which fix the same non-atomic rewrite_transcript issue (#8042). Those PRs can likely be closed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/gateway Gateway runner, session dispatch, delivery P1 High — major feature broken, no workaround type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants