Repository navigation
A drawn thread opens its tab at once; its birth was already on the row - #1559
Merged
Merged
Conversation
ThreadNavigator.open took a thread name and, before the tab could even be keyed, awaited observed.registry_for(name).require(name).incarnation: a Core round trip (170-260 ms of TLS handshake alone to a remote Core, measured) just to recover the incarnation the clicked sidebar row's ThreadRowModel already held. ThreadOpening already mounts its loading view before it reads; the wait was all before it existed. - The target answers its own birth: ThreadTarget.incarnation_in asks Core (a name from text or a command), KnownThreadTarget(name, incarnation) already knows it. ThreadStatusRow.show holds a KnownThreadTarget from the row model it draws. - open() takes the target; open_named(name) is the one place a bare name becomes a ThreadTarget, for a command result and a session label (thread_actions sits below navigation_target). - comms_sidebar's two imports from navigation_target are one. Also: toad#1555 deleted LineLink.click and left seven test files comparing meta with it; they now compare with OpenLineLink(link). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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. Try requesting a review at a lower effort level.
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.
…rves them now
It called channel_history with a bare string and no worktree, counted an InboxPage with len(),
and expected a mention to be OpenTarget("alpha") where main draws it as a reference to alpha's
exact incarnation on the wire. It reads through ChannelTarget.display_history and the page's
messages, and expects that reference. ui.link_at returns the StyleAction a click runs.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…uple Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
1 commit, 17 files, +70/-41. Clicking a thread in the sidebar now shows its tab right away. Before, the click waited on a Core round trip before the tab could even be keyed.
The wait
ThreadNavigator.opentook a thread name and awaitedobserved.registry_for(name).require(name).incarnationto build the tab'sMailboxTabidentity. Against a remote Core, the TLS handshake alone measured 170–260 ms per call (RemoteCoreAccess.postopens a fresh connection per call, a separate defect). The incarnation it went to fetch was already on the clicked row'sThreadRowModel.incarnation.ThreadOpening.runalready mounts its loading view before it reads, so all the waiting happened before the opening existed.That's IDEN-3: a bare name standing in for an identity the caller already held, paid for in a round trip.
The change
ThreadTarget.incarnation_in(preparation, observed)asks Core, for a name from text or a command.KnownThreadTarget(name, incarnation)already knows it.ThreadStatusRow.showholds aKnownThreadTargetbuilt from the row model it draws.ThreadNavigator.opentakes the target.open_named(name)is the one place a bare name becomes aThreadTarget, for a command's result (thread_actions) and a session label.thread_actionssits belownavigation_targetin the import graph, and importing it there closed a cycle.comms_sidebar's two imports fromnavigation_targetare now one.Also fixed: my breakage from #1555
#1555 deleted
LineLink.clickand left seven test files comparing style meta with it:test_existing_thread_link,test_block_menu_and_copy,test_wire_message_lines,test_hovered_name_link,test_scroll_down_bounce,test_channel_mentionsandtest_markdown_file_links. They now compare withOpenLineLink(link). I greppedsrcfor the deleted name and nottests, and the PR's CI runs only the NRA guards.Proof
test_channel_mentionsnow fails onHistoryViews.channel_history() missing … 'worktree'inside agent-comms, an API mismatch unrelated to this change.🤖 Generated with Claude Code