Repository navigation
Conversation
abate
force-pushed
the
dev/lazy-restore-clear-rekey
branch
from
October 5, 2026 10:59
86d05f8 to
620070a
Compare
abate
force-pushed
the
dev/lazy-restore-clear-rekey
branch
2 times, most recently
from
October 8, 2026 09:59
bf902c9 to
ff3caa4
Compare
abate
force-pushed
the
dev/lazy-restore-clear-rekey
branch
from
October 9, 2026 14:54
ff3caa4 to
9a3f977
Compare
abate
force-pushed
the
dev/lazy-restore-clear-rekey
branch
3 times, most recently
from
October 11, 2026 14:50
8c5f798 to
adc2564
Compare
abate
force-pushed
the
dev/lazy-restore-clear-rekey
branch
3 times, most recently
from
October 13, 2026 08:59
4352c6e to
78d16d8
Compare
abate
force-pushed
the
dev/lazy-restore-clear-rekey
branch
from
October 14, 2026 10:56
78d16d8 to
dfc280a
Compare
Restoring the working set resumes a claude process per session at startup, which costs a lot of memory. The new lazy mode marks last run's sessions in the sidebar (outlined dot, always visible) and resumes each one only when it is opened. Unopened sessions stay in the saved working set across restarts; "Don't restore" drops one without starting it. A reload reattaches only to a PTY that still runs and never spawns.
…while reattaching A held previous/next key resumed one dormant session after another: an auto-repeat now cycles the open sessions only. The lazy branch keeps its candidates in restoreInFlight while it awaits the reattaches, so a persist in that window keeps them, and a failed open from the keyboard is logged instead of left as an unhandled rejection. The changelog entry moves under Unreleased and names the keys.
…rking, held keys A dormant session whose conversation continues under another id must not stay marked under the old id; a session opened while the marking awaits a reattach must not be marked; a click during a reattach-only open of the same id must resume it; the session keys must pass e.repeat; a reattach-only open must not follow a continuation.
…ions opened during the marking A click resolving a dormant session to another id moved the saved index and the skipped entry but not the dormant one, so the old id came back marked on every start. The marking now skips a candidate the user opened while it awaited a reattach, and reattach-only opens no longer follow a continuation.
…now on main A fresh entry (a session cleared by /clear, no transcript) has no row to click, so the marking drops it. Test harnesses declare the state the merged exit flush and /clear restore read.
…d during the marking
…, and skip a candidate opened under its continuation The remap moved the dormant entry onto the continuation id, and the already-open branch returned before deleting it, so a closed continuation came back at every start. The remap also leaves restoreInFlight, so the marking no longer marks a session the user opened under a continuation.
… and a save during the marking writes each session once
…t until that open settles A click that resolves a candidate the marking has not reached to a continuation used to drop it from restoreInFlight at once, so a refused or failed continuation left it neither dormant nor saved. In Restore on click mode the entry now moves to the continuation id and, when the open settles, becomes dormant there unless the continuation opened. The marking also takes a candidate out of restoreInFlight once it is dormant, so a save during a later reattach writes it once. Other modes keep main's handling.
… the held entries and the continuation settle A saved member of a merged row has no sessionMap entry of its own: the marking, the row click, the session keys, "Don't restore", Delete and the slug-group fold must all find it through its row.
…ession row The marking, the reattach and the session keys resolve a member id through its row (indexedSessionById). A row click resumes the row's dormant member, and opening or showing any member clears every dormant id of the row, since the row is then open. Row marks go through sessionItemEl and follow every id of the row. "Don't restore", Delete and the slug-group fold use rowSessionIds. The changelog entry moves to Unreleased.
… member, whatever the saved order After a reload, a later saved member of a row whose other member was reattached is still marked, and the session keys then resume it beside the running one. The result also depends on the saved order.
…ked, and the session keys show that member The marking now clears a candidate whose row already has an open member, so the result no longer depends on the saved order, and navigateSession opens the whole row for such a member instead of resuming it beside the running one. indexedRowOf maps a member to its row through localMergedMemberRows instead of scanning sessionMap.
…s in flight, and a later member clears the members marked earlier
… still in flight A member opened during the marking counted as open before its openTerminal settled, so a failed open lost the other saved members of its row.
…nd answer the in-app confirm
…d open of its row, keeps the saved sessions when it fails
… or by a second open of its row The marking now marks a candidate whose open is still in flight, so a failed open leaves it saved; the open's own clearDormantRow drops it on success. openSessionNow waits for an in-flight open of the row's member before clearing the row, and resumes that member when the open it waited for was an automatic reattach that found no PTY.
…open is kept when it fails, and a session opened during the marking stays active Production rows carry headSessionId, so a member's reattach looks at the head's open; setupMerged can now set it.
…, and count only a session left open A reattach that returned early after another member's open failed was taken as done, dropping a running member from the saved set; and restoring the active session afterwards hid a session the user opened during the marking.
abate
force-pushed
the
dev/lazy-restore-clear-rekey
branch
from
October 15, 2026 09:06
dfc280a to
09369d0
Compare
Owner
Collaborator
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Dev branch for local testing only — do not merge.
Current main (1168203) plus:
Dev head: 09369d0 (
git merge --no-ffof #441 onto main). Merge resolution: no conflicts; released sections as on main.