fix(desktop): close the window before quit cleanup - #6562
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 9a82604. Configure here.
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — Straightforward bug fix that reorders quit cleanup operations to destroy windows before waiting for backend shutdown. Changes are well-contained to the lifecycle/quit flow with proper test coverage added. You can add or adjust custom eligibility rules. Learn more. |
CDVolvik
left a comment
There was a problem hiding this comment.
DesktopLifecycle.test.ts: 5/5, including win32.
Quitting while the window is still up runs renderer/cleanup against a dying UI. Destroy the window first, then the rest. The updater before-quit-for-update path still proceeds. MERGEABLE.
65ecd5a to
e1564a1
Compare
Dismissing prior approval to re-evaluate e1564a1
e1564a1 to
b146aa0
Compare
## What's Changed * fix(desktop): upgrade Clerk OAuth transport by @t3dotgg in pingdotgg/t3code#7479 * feat(server): run the background service on macOS via launchd by @t3dotgg in pingdotgg/t3code#6286 * fix(web): align sidebar statuses with project names by @RakshithBhat03 in pingdotgg/t3code#7491 * fix(desktop): close the window before quit cleanup by @t3dotgg in pingdotgg/t3code#6562 **Full Changelog**: pingdotgg/t3code@v0.0.34-nightly.20260819.1132...v0.0.34-nightly.20260819.1133 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.34-nightly.20260819.1133
* fix(web): align sidebar statuses with project names (pingdotgg#7491) Co-authored-by: GPT-5.6 <noreply@openai.com> * fix(desktop): close the window before quit cleanup (pingdotgg#6562) * fix(desktop): stop automatic passkey prompts (pingdotgg#7522) * feat: choose the app icon, and name the artwork scenes Artwork options are Night sky, Blueprint, None, and your own uploads; "Match the build" is gone and Night sky is the default. An explicit pick now outranks the environment-identification mode and the palette heuristic, which is why choosing a scene did nothing on a release build. App icon adds the MT mark, a light variant, a dark variant, or your own image. It is applied to the running app - Dock tile on macOS, window icon elsewhere - because rewriting the installed bundle's icon would break the code signature and take every macOS permission grant with it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Rakshith Bhat <88523594+RakshithBhat03@users.noreply.github.com> Co-authored-by: GPT-5.6 <noreply@openai.com> Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 24c4ba6)
* test(web): remove duplicate lookup assertion (pingdotgg#7364) * fix(mobile): show structured input option descriptions (pingdotgg#7321) * fix(orchestration): do not revive idle tasks from status-free progress (pingdotgg#7172) * refactor(server): simplify error transformation with Effect.mapError in GitHubPullRequestCli (pingdotgg#7385) Signed-off-by: aoright <102943475+aoright@users.noreply.github.com> * fix(preview): open local environment ports on localhost (pingdotgg#7300) * fix(desktop): prevent quit shortcut spillover (pingdotgg#7397) * fix(desktop): stop overwriting a custom dock icon on launch (pingdotgg#7125) * feat(web): show project location in new thread picker (pingdotgg#7392) Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> * fix(packaging): install AUR launcher icons where icon themes look (pingdotgg#7421) * fix(web): label pull request merge actions (pingdotgg#7381) * fix(server): avoid PRs inherited from default upstreams (pingdotgg#7317) * fix(desktop): stop the passkey dialog from popping as soon as sign-in opens (pingdotgg#7437) * feat(desktop): mute a browser tab (pingdotgg#7252) * fix(web): improve disconnected composer placeholder (pingdotgg#7122) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com> * fix(desktop): throttle hidden preview rendering (pingdotgg#7445) Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com> * fix(server): stop probing Grok, Cursor, and OpenCode unless turned on (pingdotgg#7459) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(desktop): boot the main window unthrottled so cold start paints at full speed (pingdotgg#7460) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(threads): a merged PR settles its thread only once (pingdotgg#7454) * feat(cli): npx t3 triage hands broken installs to your own coding agent (pingdotgg#6563) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(marketing): Safari gets the arm64 Mac download (pingdotgg#7473) * feat(web): add shortcuts to the surface dropdown (pingdotgg#7318) * fix(marketing): never serve the Intel build to Apple Silicon Macs (pingdotgg#7477) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): animate command palette when closing (pingdotgg#5169) * fix(desktop): upgrade Clerk OAuth transport (pingdotgg#7479) * feat(server): run the background service on macOS via launchd (pingdotgg#6286) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * fix(web): align sidebar statuses with project names (pingdotgg#7491) Co-authored-by: GPT-5.6 <noreply@openai.com> * fix(desktop): close the window before quit cleanup (pingdotgg#6562) * fix(desktop): stop automatic passkey prompts (pingdotgg#7522) * docs(user): document phoenix triage and macOS background service The 2026-08-19 upstream sync added the triage command with no docs/user entry, and the docs index still called the background service Linux-only after launchd support landed. Found by PR #61 code review. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Signed-off-by: aoright <102943475+aoright@users.noreply.github.com> Co-authored-by: t3-code[bot] <269035359+t3-code[bot]@users.noreply.github.com> Co-authored-by: Nick Anisimov <n.anisimov.23@gmail.com> Co-authored-by: Maslin Edwin <maslinje@gmail.com> Co-authored-by: aoright <102943475+aoright@users.noreply.github.com> Co-authored-by: Guilherme Barros <gbarros1095@gmail.com> Co-authored-by: Bilal Bakr <62337003+Bil0000@users.noreply.github.com> Co-authored-by: Rishet11 <154429365+Rishet11@users.noreply.github.com> Co-authored-by: Wout Stiens <71498452+StiensWout@users.noreply.github.com> Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com> Co-authored-by: Augie <augie@luebbers.email> Co-authored-by: Taras <Taras.Fomin@gmail.com> Co-authored-by: Gianmarco <gianmarcosimone89@gmail.com> Co-authored-by: Theo Browne <me@t3.gg> Co-authored-by: Chris Deeming <chris@xenforo.com> Co-authored-by: Inaya Yousfi <zied.essaber@gmail.com> Co-authored-by: maria <254055478+maria-rcks@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Rakshith Bhat <88523594+RakshithBhat03@users.noreply.github.com> Co-authored-by: GPT-5.6 <noreply@openai.com>

Quitting T3 Code kept the desktop window visible while the local backend completed about two seconds of graceful cleanup. This made Cmd+Q feel unresponsive on macOS.
The desktop now saves window bounds and destroys all Electron windows before it starts backend cleanup. The Electron process remains alive until cleanup completes, then exits as before. Updater-controlled quits still use the updater path.
Tests:
Made by GPT-5.6 using T3 Code through the Codex harness.
Note
Medium Risk
Touches core quit/teardown ordering in the desktop lifecycle; behavior is well-tested but incorrect ordering could affect shutdown or updater paths.
Overview
Quit now hides the UI immediately by flushing main window bounds, destroying all Electron windows, and only then requesting backend shutdown—the process still exits after cleanup finishes.
ElectronWindow.destroyAllattempts every window and surfaces the first destroy error instead of stopping at the first failure; lifecycle logs destroy failures but does not block shutdown. macOSactivateis ignored whileDesktopState.quittingis set so a window cannot reopen during teardown.Tests add shared mock layers plus coverage for flush → destroy → shutdown ordering and suppressed activation while quitting.
Reviewed by Cursor Bugbot for commit b146aa0. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Close all Electron windows before backend shutdown on quit
before-quit, all Electron windows are now destroyed before requesting backend shutdown, ensuring windows close cleanly prior to teardown.destroyAllinElectronWindow.tsnow attempts to destroy every window even if earlier ones fail, reporting only the first failure cause.activateevents are ignored once the quitting flag is set, preventing activation during shutdown.requestDesktopShutdownAndWaitnow accepts an optionalafterBoundsFlusheffect, changing the quit sequence to: flush bounds → destroy windows → request shutdown → quit.Macroscope summarized b146aa0.