Repository navigation
Restore tab membership without opening every saved conversation - #1337
Merged
Merged
Conversation
trissim
force-pushed
the
fix/startup-restore-selection
branch
2 times, most recently
from
October 30, 2026 01:06
146ac2b to
eea641f
Compare
trissim
force-pushed
the
fix/startup-restore-selection
branch
from
October 30, 2026 01:50
eea641f to
83598d7
Compare
trissim
marked this pull request as ready for review
October 30, 2026 01:51
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
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.
Delivered: merged, installed and physically checked
Startup1337 and its correction1345 are merged and installed together (Corea8b8b957, Toad6a01d8d2, Textualbea0d377). Read the complete commander rule set and whole ownership family; corrected the stale removed-method caller, deleted the copied open sequence, repaired the actual project-origin type contract and replaced nullable missing-agent launch with its named failure. A suspected preview-origin change was rejected after reading its actual entered transition, not shipped as a fake fix.
Final installed physical journey: eight restored tabs, one native body and one hidden owner shell; fresh copied latency-history inputc1c71204253b received the genuine SOL6.1/medium answer INSTALLED_READY_REPLY_OK_1337. Images02/03/04 in installed-ui-ready physically show reply, #comms after five previous-tab keys, then the same answer after five next-tab keys. NORMAL visible, ordinary quit0, root retired. Both private roots and helpers are retired; originals/auth/UNKNOWN preserved.
The first installed run completed its different input29ccdea91195 but FAILED navigation: Neovim could not start. This was not accepted. nvim was absent from PATH/user/system locations; PATH search ended EACCES. Official Neovim0.12.4 matching CI is now installed user-locally. The final distinct input was not a replay. Product prerequisite/bootstrap remains with vim-neovim/1343.
Correction1345 exact hosted debt ratchet passes. Full suite collection still fails on the deleted DetachedChildStdio import owned by awareness-schema/1344; it is not called green. Original delayed-burst causality and16ms remain open. Generic ACP-origin and interaction racing startup are source-traced rather than physically accepted.
Concise result and inspected evidence: /home/ts/.cache/agent-scratch/codex-latency/commander-binding/ssh-observation-phases/WRAP-UP.json. Common source clone retained because two linked worktrees depend on its .git. git diff --stat origin/main...HEAD is empty after both merges; no new work is hidden locally.
What changes
Restore logical tabs first; select and prepare the final destination once. Do not run every restored mailbox/channel through the visible workspace transition.
TabIdentity.restorenow owns common membership restoration. Concrete identities supply the existingSessionEntryfactories.SessionNavigation.registerowns membership/persistence; normal interactiveopenretains selection and readiness. Existing native-entry/launch preparation is shared rather than copied. No new type registry, cache, queue, mode flag or wire format.Mailbox history already has its original thread identity, so it needs only its owner shell. Generic ACP-owned history still establishes the actual session identity before routing; that dependency is not replaced with a guessed name. Inactive mailbox labels derive status/unread from their original backend identity without requiring a mounted conversation.
Actual before-case
Same installed Gaming application and genuine saved state, real st over Tailscale SSH. Eight serial restores consumed 11.214 seconds after application startup began. The #comms restore consumed 4.699 seconds, including 2.765 seconds mounting channel content, before later tabs could restore. At 15 seconds the channel body was blank; at 30 seconds saved native history was visible. This is an instrumented run, not a universal latency bound. Original sender quit timeout was not reproduced: both owned diagnostics quit normally. No provider inputs or production-package changes in either diagnostic.
Evidence:
/home/ts/.cache/agent-scratch/codex-latency/commander-binding/ssh-observation-phases/{RESULT.json,events.jsonl,15-startup.png,30-startup.png}. The owned frontend/display exited and the tracing helper was deleted.Source ownership and coverage
Before: durable identity restoration also decided which native view to select/prepare. After: identity/SessionEntry supplies the original source; SessionNavigation owns logical membership; WorkspaceSessions retains native attachment, resource limits, frame publication and user navigation. TabOrder still owns durable order. Startup chooses the same last successfully restored entry unless an explicit --session launch supersedes it. Existing source/incarnation and route checks remain.
NRA ModuleSyntaxIndex + per-module class-family projection: 1,179 production modules across current Toad, Core a8a71 and actual Gaming Textual 4ecfb; 8,367 original class declarations; zero parse omissions. Full selected-family imports, methods, calls, writes and decisions retained in startup-before-nra.json. This is lexical/source evidence, not global dynamic binding or behavioral proof. The behavioral restructuring is an authored patch, not a claimed NRA codemod equivalence proof. IDEN-1: logical membership and visible readiness had shared one restoration operation.
Fresh complete app import and concrete tab-family checks pass. No automated tests run. The single existing deleted-method caller is migrated, without adding cases. No speedup, merged, installed or final performance claim yet. User navigation arriving during startup is part of the candidate qualification; no new intent queue is introduced.
Integration
Open #1330 touches these identity/entry files for import relocation only. Preserve that nominal-address migration when integrating; this branch does not carry its Core dependency or change nominal module addresses. No other open PR intersects the six edited files at the overlap readback.
Source-app qualification and current integration state
Current head
a8d91c4083c6d1b8157f5a10a2e2c7aa83f6f72d, rebased onto ToAD maincdd01f2e79037bb343d1229079d5cb42d07eea38; Core source fast-forwarded toa8b8b9570. Live installation remains separate.The physical source journey on
faa3f4fa6with Core a8a71/Textual4ecfb passed: eight retained tabs, only one native body opened at startup; one genuine SOL6.1 reply visibly rendered; five previous-tab keys reached #comms, five next-tab keys returned to the same answer; ordinary Ctrl-Q exited0. Read the actual selected 02/03/04 images and native final record incandidate-ui-3. Startup registration took0.753s on BOUNDED copied history; this is NOT an end-to-end or before/after speedup claim.First candidate exposed an actual initialization defect: hidden owner-shell preparation ran before Textual initialized workspace. WorkspaceSessions now invokes Textual's existing idempotent initialization; hidden preparation uses the EXISTING App mode-transition lock, with no extra lock or initialized flag. The second attempt committed its one DM, then my receipt writer accessed nonexistent message.id instead of message.message_id. Its uncertain input/stopped wire is retained; it was not replayed. A distinct fresh private input in the corrected run completed. All private roots/frontends/controllers are closed and executable helpers retired; originals are preserved.
Later changes declare owner types; NRA lexical-symbol comparison reports no method-body differences from the qualified code. Fresh app import passed before the final Neovim-main rebase. This new upstream changes the dependency pair: that older runtime proof does not qualify current main's Neovim stack. Installed latest-pair continuation remains owed. Generic ACP-origin and navigation-during-startup controls remain source-traced, not physically qualified.
Hosted failures on faa3 were (1) upstream VimInsert import mismatch, now superseded by #1320's main merge, and (2) the Core ratchet running git archive for tools/stored_formats.py inside ToAD, where no such file exists. This existing absent-reader surface belongs to P872/#3606; its concrete log was passed to the commander for the Gaming owner. No ratchet/budget/checker bypass or test edit is included.
Current diff: 9 files,+127/−54. No automated tests run; one existing caller migrated. A local mypy attempt could not run because the installed runtime has no mypy; it is not recorded as a typing pass.
Final self-review against commander rules
Read indictment.md and all 16 current commander rule files in full, plus the pinned pattern catalog, refactor-audit and NRA ownership guidance. Reviewed the whole head, not just the last commit. The original full lexical map is retained; targeted current reproof covers 9 modules/39 class declarations with zero parse omissions (startup-final-review.json). This is source evidence, not a global no-slop theorem.
Corrections in the same PR:
Logical membership stays with SessionNavigation/TabOrder; original source identity stays with each tab identity; mounted lifecycle stays with WorkspaceSessions; native status comes from the original backend row and the mounted view's existing disposition. ACP-origin history keeps its real session-identity dependency; no name guessing replaces it. The new prepare_session method admits hidden shell mounts through the SAME native transition lock, not a parallel lock or state mirror.
Core3606 and Toad1342 are now merged, removing the absent-reader checker defect. This head includes1342. The latest pair includes Neovim; the prior physical proof is not relabeled as latest-pair acceptance. Final installed copied-agent startup/reply/tab-return/quit remains the integration owner's next step. Original large delayed burst and16ms target are not completed by this PR.
Assumed: the existing generic ACP restoration dependency still requires actual session attachment; startup restores the same last successful durable tab unless --session is explicit. User interaction racing restoration is not physically qualified. No originals, auth or uncertain inputs are altered or replayed.
Delivery checklist
Hosted suite collection currently names the already-owned1344 defect: test_compaction_turn_events imports removed DetachedChildStdio from native_build_inputs. That is not a startup regression and is not silently called green. No local ratchet/suite or compatibility API added.