Web: instant, flicker-free workspace switching + unified loading UI - #349
Open
Olga Lavrichenko (OLavrik) wants to merge 17 commits into
Open
Web: instant, flicker-free workspace switching + unified loading UI #349Olga Lavrichenko (OLavrik) wants to merge 17 commits into
Olga Lavrichenko (OLavrik) wants to merge 17 commits into
Conversation
Olga Lavrichenko (OLavrik)
requested review from
Rustam Sadykov (SBOne-Kenobi),
danyaberezun and
Rinat S (rsolmano)
as code owners
August 29, 2026 17:58
Olga Lavrichenko (OLavrik)
force-pushed
the
olga.lavrichenko/async
branch
from
August 31, 2026 11:39
ac6a699 to
75cbd8a
Compare
Olga Lavrichenko (OLavrik)
force-pushed
the
olga.lavrichenko/async
branch
from
August 31, 2026 15:29
75cbd8a to
7dbae9e
Compare
Olga Lavrichenko (OLavrik)
force-pushed
the
olga.lavrichenko/async
branch
from
August 31, 2026 23:17
5784b64 to
75d04da
Compare
…cross async panels
…r a worktree is created ThinkRail-Todo: 01a03102-63c8-7e34-a17a-2874e98866f8/t_2752e41ad684
…row during creation
…ll sites the rebase left un-awaited, and fix retired t-shirt spacing classes reintroduced by pre-migration commits
…at retry button until it's actually stalled
…ix Welcome's blank card gap
…e, land the creating-row where the item lands Deleting the active workspace cleared its layout document/attention in the same tick React's deferred workspaceId hadn't caught up in yet, so the fallback briefly rendered the full-skeleton for the vanishing workspace and remounted the side panels; hold the last-known document/attention through that transition instead. Also move the "Creating worktree…" placeholder row below the list, since new worktrees land at the bottom, not the top.
…of popping it Switching to a workspace whose default preset has a different panel shape (e.g. Balanced to Focus) forces react-resizable-panels to remount the aligned-row/outer panel groups — it can't reconcile a panel-count change in place. Soften that unavoidable remount with an opacity-only fade (never transform, since these subtrees can hold ChatView's sticky breadcrumbs).
… most SkeletonRows call sites Fifteen call sites across panels and shell each hand-rolled the same <div className="..."><SkeletonRows/></div> wrapper; three of them additionally opened a redundant second role="status" region around SkeletonRows' own. Centralize the shape in one component and thread label/testId into SkeletonRows' existing live region instead of duplicating it. Also fixes two SPEC.md references to ChatResourcePending left stale by its post-rebase merge into ChatResourceBody, and adds unit coverage for the new primitive.
…ialog's git worktree list was left synchronous gitWorktreeEntries (behind listExistingWorktrees/openExistingWorktree) still ran git worktree list --porcelain through the sync runner, blocking the host's single event loop on the same request path the gitAsync migration was meant to cover — it wasn't gitStatus/gitDiffFile/listCommits/listBranches, so it slipped through both that commit and the rebase follow-up fixing its un-awaited call sites.
…iled blob read Both are rebase-exposed gaps from the gitAsync migration commits: workspace.list/openExisting handlers weren't updated to await the now-async workspaces.ts functions, and blobFrom's ref/path params went unused once its warning message was split out of readBlobAt.
The gitAsync-migration commit awaited buildSendPackage's sibling reads (getReviewSnapshot, markCommentsSent) in these same two spots but missed the call itself, so both a manual TODO fix and a reflected fix interpolated a literal [object Promise] into fixText instead of the findings package. Also drops a migration-rationale comment per the near-zero-comment rule.
Both drove page.getByTestId(...).first() against whatever provider sorts first, which is only the e2e fake in the dev boot (THINKRAIL_E2E_FAKE_OAUTH); in binary/desktop mode that resolves to a real provider and its OAuth/API-key flow hangs or errors in the sandboxed CI runner, timing out the login-cancel/login-success wait. provider-login.spec.ts/provider-apikey.spec.ts already carry this tag for the same reason.
Olga Lavrichenko (OLavrik)
force-pushed
the
olga.lavrichenko/async
branch
from
September 1, 2026 00:50
75d04da to
46c754e
Compare
danyaberezun
approved these changes
Sep 1, 2026
github-merge-queue
Bot
removed this pull request from the merge queue due to no response for status checks
Sep 1, 2026
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.
geometry syncs via setLayout instead of a remount-triggering key.
chat/plan/editor tab restore path. Resolved content now fades in instead of popping in; a retry affordance never appears alongside an active loading indicator (the chat-restore retry only surfaces once
auto-hydration has genuinely stalled).
Server: git off the event loop
Migrates git read paths through gitAsync so they no longer block the event loop; keeps review/todo read-modify-write passes atomic across the async reads and free of post-teardown writes.