feat(tui): browse branches with scoped diagnostics - #119
Open
danielkov wants to merge 7 commits into
Open
Conversation
danielkov
force-pushed
the
feat/transcript-continuation
branch
from
September 6, 2026 13:13
71cd3b8 to
6fa8e1f
Compare
danielkov
force-pushed
the
feat/transcript-branch-navigation
branch
from
September 6, 2026 13:32
1ea177d to
6a8e6e4
Compare
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.
Summary
Add F4 and
/branchesto browse and resume preserved conversation futures in a lineage-aware session tree. Keep asynchronous diagnostics scoped to their producing operations so switching or reloading sessions cannot attribute old work to the active conversation.Motivation
Completes the navigation and branching stack on #116: read-only navigation in #110, earlier-prompt branching in #115, safe message-boundary continuation in #116, and saved-branch switching here.
Impact
Browsing remains available while streaming; switching requires idle state. Selecting the current session explicitly reloads committed history while preserving its unsent draft and attachments. Switching conversation context does not undo files, commands, or external effects.
Technical details
Derived branch catalog and safe activation
The session tree derives from validated persisted lineage without rewriting history. Legacy sessions remain roots, while orphaned or invalid lineage is labeled without hiding unrelated sessions. The loading dialog owns input immediately, and stale scan or activation results cannot replace a later view. Failed same-session reloads restore bounded parked state and allow disconnected retry.
Immutable diagnostic ownership
Updated ACP v1 peers negotiate version-1
_metaownership and exchange connection-local operation tokens. Producer scopes survive asynchronous tasks, Runlet execution, reuse, native v1 forks, and nested children; background continuation ownership follows actual result or input consumption rather than the currently displayed session. Mixed or missing provenance stays unattributed. Legacy peers retain immutable launch provenance, and native ACP v2 fork remains unsupported.Bounded child bookkeeping
Initialization retains at most 256 KiB of stderr while continuing to drain; overflow discards partial lines safely. Negotiated connections retain at most 4,096 issued operation mappings without eviction or token reuse. Exhaustion rejects new prompts and forks with a restart instruction, but close remains available without inventing ownership. Issued mappings survive cancellation and completion through process exit and stderr drain.