Repository navigation
perf(web): switching threads no longer re-renders the outgoing thread's rows - #21123
Merged
Merged
Conversation
…'s rows Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This single-file change narrowly adjusts timeline context propagation so outgoing thread rows avoid an unnecessary final render while mounted rows still receive updated shared state. It introduces no new capability, schema or API changes, deployment changes, product-default changes, or static-analysis overrides. You can add or adjust custom eligibility rules. Learn more. |
Contributor
rahil-patel-21
added a commit
to rahil-patel-21/t3code
that referenced
this pull request
Oct 18, 2026
Resolved the MessagesTimeline conflict by taking upstream's per-row context provider (pingdotgg#21123) while keeping this branch's removal of the timeline minimap. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
github-actions Bot
added a commit
to omarcresp/t3code-flake
that referenced
this pull request
Oct 18, 2026
## What's Changed * perf(web): switching threads no longer re-renders the chat view for an unchanged preview list by @juliusmarminge in pingdotgg/t3code#21130 * fix(server): opening a large database no longer blocks startup for minutes by @t3dotgg in pingdotgg/t3code#21122 * perf(web): switching threads no longer re-renders the outgoing thread's rows by @juliusmarminge in pingdotgg/t3code#21123 * perf(web): reasoning rows skip the tool-failure text scan by @juliusmarminge in pingdotgg/t3code#21146 * perf(web): pull request chains parse each link's URL once by @juliusmarminge in pingdotgg/t3code#21147 **Full Changelog**: pingdotgg/t3code@v0.1.1-nightly.20261018.3302...v0.1.1-nightly.20261018.3315 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.1.1-nightly.20261018.3315
github-actions Bot
added a commit
to davidvanderklay/t3code-flake
that referenced
this pull request
Oct 18, 2026
## What's Changed * perf(web): switching threads no longer re-renders the chat view for an unchanged preview list by @juliusmarminge in pingdotgg/t3code#21130 * fix(server): opening a large database no longer blocks startup for minutes by @t3dotgg in pingdotgg/t3code#21122 * perf(web): switching threads no longer re-renders the outgoing thread's rows by @juliusmarminge in pingdotgg/t3code#21123 * perf(web): reasoning rows skip the tool-failure text scan by @juliusmarminge in pingdotgg/t3code#21146 * perf(web): pull request chains parse each link's URL once by @juliusmarminge in pingdotgg/t3code#21147 **Full Changelog**: pingdotgg/t3code@v0.1.1-nightly.20261018.3302...v0.1.1-nightly.20261018.3315 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.1.1-nightly.20261018.3315
This was referenced Oct 21, 2026
Merged
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.
Switching threads re-rendered the outgoing thread's visible rows one last time, with the incoming thread's context, right before they unmounted.
TimelineRowCtxwrapped the wholeLegendList. On a switch,MessagesTimelinerenders with the new thread'srouteThreadKey,threadRef,markdownCwd,workspaceRootand skills. LegendList only swaps its containers to the new rows a commit later (in a layout effect). So in the switch commit every mounted row of the old thread saw a new context value, and everyChatMarkdowngot a newcwd/threadRef/skills. That re-rendered all of its paragraphs, list items, code spans andSkillInlineTextfor content that was about to disappear.The provider now sits inside
renderItem, so each row gets the context through its container. A row only sees a new value when LegendList re-renders that row.extraDatanow includessharedState, so rows that stay mounted still pick up a changed value, the same way they already did for a list identity change.Measurement
The thread-switch scenario from the web perf before/after report: 3 seeded threads (2,662 / 149 / 45 messages), switched L→M→S x3 with 2 s each. Production build (
vp build --minify false), served by the worktree's own server (no--watch), headless Chromium 1600x1000, renders counted by a fiber probe that skips bailed-out subtrees. Base and fix were built from the samemain(ea97e8ba31) and alternated per run.SkillInlineTextMarkdownParagraphMarkdownListItemMarkdownCodeChatMarkdownTooltipTriggerWhat's left in the markdown counts is mounting: the new thread's rows that come into view. That work is needed. Most of the other ~14k renders are outside the timeline (header, sidebar, composer, popovers).
Claude Opus 5.5 via Claude Code.
🤖 Generated with Claude Code