mirror of
https://github.com/nesquena/hermes-webui.git
synced 2026-05-25 11:10:18 +00:00
3d34a72ee8
Opus identified that PR #2227's preservation block had two related bugs in the parent_session_id handling: 1. During preservation save: code did _old_parent = s.parent_session_id s.parent_session_id = None s.save(touch_updated_at=False, skip_index=True) s.parent_session_id = _old_parent The save persisted parent=None to disk. The in-memory restoration didn't reach the disk copy. Result: a /branch fork session that subsequently compressed lost its 'Forked from X' badge on the preserved old snapshot. 2. Stamping the continuation: code did if not s.parent_session_id: s.parent_session_id = old_sid The 'if not' guard skipped the stamp when the session already had a parent_session_id from a prior fork. Result: fork-of-fork compression broke lineage — the continuation jumped back to the original fork parent instead of the just-preserved immediate predecessor snapshot. Fix (matches Opus's recommendation): - Remove the parent clearing during preservation save (preserve as-is) - Drop the 'if not' guard; always stamp continuation to old_sid This makes the lineage chain consistent: new → old → old.parent → ... root. Traversal from the continuation always walks through the just-preserved snapshot to get to its parent's parent, never jumping over the snapshot. Two new regression tests pin both invariants: - test_parent_session_id_stamped_unconditionally (no 'if not' guard) - test_old_session_parent_preserved_during_archive_save (no parent=None) Both pass against the fix. All 8 tests in the file pass.