feat: session start/shutdown spinners#62
Closed
AThraen wants to merge 10 commits into
Closed
Conversation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…nd the overlay Addresses Copilot review feedback on the parallel PR #63: `bootDone` was only posted on the first PTY byte, so a child process that writes nothing (or exits without output) would leave the spinner up indefinitely. NavCompleted now also schedules a Task.Delay(8000) → PostBootDoneIfNeeded; the existing Interlocked.CompareExchange guard makes this idempotent if the first byte beat the timer.
Contributor
Author
2 tasks
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
Starting <cmd>…orConnecting to <host>…), visible from the moment the terminal pane mounts and faded out when the first PTY byte arrives.Shutting down…, shown at the top ofOnClosingwith a single dispatcher yield so it paints before the existing synchronous disposal sequence blocks the UI thread.Design + plan
docs/superpowers/specs/2026-05-16-session-spinners-design.mddocs/superpowers/plans/2026-05-16-session-spinners.mdImplementation notes
Assets/terminal.htmlandAssets/terminal-transparent.htmlso it disappears the moment xterm.js sees output — no cross-tier coordination.DefaultBackgroundColoris set to#1e1e2ebefore navigation so the init flicker blends with the spinner.TerminalBridge.PostBootDoneIfNeeded()usesInterlocked.CompareExchangefor race-safe one-shot dispatch fromOnPtyData+ defensive call inDispose.Dispatcher.InvokeAsync(..., DispatcherPriority.Background)— Background is below Render in WPF's priority order, so the overlay paints before the continuation runs.MainWindow.xamlroot was aDockPanel; the overlay was added by wrapping it in a new outerGrid(no layout side effects since a DockPanel inside a single-cell Grid behaves identically).Test plan
dotnet test tests/CodeShellManager.Tests/CodeShellManager.Tests.csproj— 206 unit tests pass on this branchStarting <cmd>…and fades on first prompt byteConnecting to <host>…Shutting down…overlay visible during disposal, then window closes🤖 Generated with Claude Code