Repository navigation
port #29984 to v2.2.12-opt: Cmd-Q with local terminals asks how to quit (QUIT P0) - #30182
Conversation
…eep Sessions the default (QUIT P0, red) (cherry picked from commit 8316ec3)
… (default), End Sessions Keep Layout, End Everything, Cancel; Don't ask again writes app.quitBehavior (QUIT P0) Lawrence 2026-11-01: "cmd q needs to prompt for what type of quit". Takes back aba72a3 (cx-7vu, 2026-10-11, Lawrence 2026-10-07 "no confirm dialogs"), which made QuitPolicy.decide quit with Keep and no question unless incognito programs ran, so app.quitBehavior "ask" (the default) never asked. (cherry picked from commit 6bfec69)
…stack inside it, the default on top (QUIT P0 review, red) (cherry picked from commit 325b2a3)
…n top, each the card's width (the quit choice's four buttons); the quit scripts answer the quit dialog's Keep (QUIT P0 review) (cherry picked from commit 1ac555c)
|
Review (claude-review-subagent-30182): FIX at aed37b9 Scope: BlockingB1. Without b52ff17, "Don't ask again" + End Everything makes every later Cmd-Q delete all workspaces with no questionThis PR is the first change on this line that gives the quit dialog an End Everything button next to a "Don't ask again" check box:
So one checked box makes every later accidental Cmd-Q (and every I checked whether b52 applies here:
Checked and correct
Non-blocking
|
…md-Q (red) 2026-10-31 18:46 a Cmd-Q typed mid-sentence, with app.quitBehavior end-everything set, closed all 900 local workspaces with no dialog. (cherry picked from commit a0b0c7e)
…y workspace (port of feat b52ff17 to v2.2.12-opt) On 2026-10-31 18:46 a Cmd-Q typed mid-sentence, with app.quitBehavior end-everything set, quit with no dialog and closed all 900 local workspaces. With the quit question of #29984 a person can store End Everything from the dialog, so this line needs the guard too (review FIX on #30182). - An interactive quit with End Everything remembered asks "Quit and close every workspace?" (Return keeps sessions running, Escape cancels, End Everything has no key). After the unsaved-changes question it ends the sessions but keeps the workspaces. - A scripted quit with no flag maps End Everything to End Sessions, Keep Layout. --end-everything and the File menu item run as before. - The files are feat's at 88dcb89 (b52ff17 + #29984): QuitPolicy, QuitAlert, QuitAlertContent, QuitStrings, Quit.xcstrings, QuitChoice, readiness-soak.py, update-e2e.py, QuitChoiceTests, QuitEndEverythingGuardTests. - Port difference: feat's CmuxNextDaemonService/QuitRules.swift holds six types; here they are one file per type (QuitProgram, QuitAgentFacts, QuitFacts, QuitPrompt, QuitDecision, QuitRules), byte-identical code, so no new multi-type file. (cherry picked from commit b52ff17, files split)
|
Review (claude-review-subagent-30182): SHIP at 1df98d8 Scope: the full PR over merge base 535b6a3 (7 commits). This round I looked closely at c0e623a (red) and 1df98d8 (the guard port), which were added on top of aed37b9. I read the code only. I did not build or run tests. BlockingNone. Round-1 B1 is fixed: a remembered End Everything can no longer delete every workspace with no question
The port is faithful to feat 88dcb89
Non-blocking
|
|
Checks at 1df98d8:
|
What
Port of #29984 (QUIT P0) to the dogfood line
cp/dogfood-v2-2-12-opt: plain cherry-picks (-x) of its commits, no other change.app.quitBehavior)After these, the quit files are byte-identical to feat 88dcb89, except: feat's
CmuxNextDaemonService/QuitRules.swift(six types) is split here one file per type with the same code, because this line's gate refuses a new multi-type file.scripts/cmux-next/quit-launch-bound.pydoes not exist on this line, so its hunks are dropped. readiness-soak.py keeps this line's own quit retry body and gets only feat'sendEverythingflag.Evidence
quit-reopen-restore(kit cp/journey-quit-reopen-restore@a1f077f5641, independent review SHIP; a REAL Cmd-Q by CuaDriver, whole-host lease) on the bench build 504c12edfe12f668361ba19e of 467695a (the first two commits): PASS 5/5 (cmux19 x4, cmux23). On the base dogfood build 9276e456 (be22bd3): RED 3/3 (no dialog).quit-reopen-handoff(prior build 4b3bd8a2, a real version handoff at the reopen): PASS 3/3 on 504c12ed.confirmsEndEverything, which the fix adds), the same as on feat: it is not a behavioral red. The guard's behavior is shown by QuitEndEverythingGuardTests passing at the head, plus feat's own red/green for b52ff17.Risk
risk:normal: Swift UI logic, copy, tests; no new delete (End Everything's delete is existing code, and the guard makes it harder to reach). Dogfood line, never merged into feat. Independent review: SHIP at 1df98d8 (#30182 (comment)).Changelog
Observed / Not run