RELIABILITY TRACKER · P1 OPEN
Cold Resume Transcript Duplication via Session Commands · Issue #68454
A source-linked review of a reported Hermes Agent session-state defect where a cold resume followed immediately by /new, /resume, or /branch can silently duplicate the restored transcript in SQLite.
What the report describes
The open report describes a cold-resume path that restores persisted messages without the usual persisted-row marker. If a user immediately runs /new, /resume, or /branch before sending a new message, those command paths reportedly flush the restored history without passing conversation_history=. The rows are treated as new and inserted again into SQLite, silently duplicating the transcript. The issue identifies merged PR #68205 as related to a different call path while these command sites remain affected.
Scope note: This page summarizes a linked open issue and is not an independent reproduction. The P1 label and reported impact should be evaluated against the affected version, local session workflow, and current upstream issue state.
Failure-chain matrix
| Signal | What to inspect | Safe review response |
|---|---|---|
| Cold-resume precondition | Resume a persisted session, then issue a session command before adding a new message | Treat the restored transcript as persisted state until durable row identity is verified. |
| Persisted-row identity | Whether restored rows retain the marker or metadata used to prevent re-insertion | Trace the restored message representation through every affected command path. |
| Command-specific flush | How /new, /resume, and /branch pass or omit conversation history during persistence | Exercise each command separately and compare writes against the expected transcript count. |
| Silent corruption risk | Whether the CLI reports success while SQLite receives duplicate messages | Check durable transcript counts and identifiers, not only command output or process health. |
| Related-fix boundary | Whether a merged fix addresses this exact command route or only a sibling path | Verify the affected call sites directly before marking the issue resolved. |
Reproduction and recovery protocol
- Use a disposable test database and a known persisted transcript with stable message identifiers.
- Cold-resume the session, then run /new, /resume, and /branch in separate trials before submitting any new message.
- Compare pre- and post-command SQLite row counts, message identifiers, ordering, and conversation ownership.
- Capture non-sensitive logs or traces that show whether conversation_history or equivalent persisted-state context is passed.
- Retest after any upstream change and distinguish a verified command-path fix from a fix limited to a sibling flow.
Source evidence
NousResearch/hermes-agent · Issue #68454
Reported labels include P1, area/sessions, bug, comp/cli, sweeper:risk-session-state, and type/bug. Verify current status, affected versions, and remediation before relying on a session-history migration or recovery workflow.