Repository navigation
Add guarded Close Tab UX #15613
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
+4,915
−3,883
Merged
Add guarded Close Tab UX #15613
Changes from all commits
Commits
Show all changes
54 commits
Select commit
Hold shift + click to select a range
d14fdea
ci: register the nightly owned-Mac producer on the fork default branch
teamleaderleo 366d94a
test: cover guarded close tab entrypoints
teamleaderleo 110e6d6
fix: guard every tab close entrypoint
teamleaderleo a1ddfab
fix: guard socket batch close actions
teamleaderleo a75dd09
fix: import bonsplit tab ids for dock close
teamleaderleo d2ac062
fix: use workspace close safety state in socket action
teamleaderleo 82d67d7
fix: preserve direct tab action call compatibility
teamleaderleo 66a79cc
fix: route context close through workspace batch guard
teamleaderleo 5fbd5c4
test: model running shell state in safety regression
teamleaderleo 16d931a
Merge main into tabclose
teamleaderleo 3445a51
test: assert active process close risk reaches workspace
teamleaderleo d7f4403
test: update shell activity through workspace API
teamleaderleo 504a72e
fix: restore workspace agent close journal
teamleaderleo d3fb88d
fix: restore workspace cloud model imports
teamleaderleo 87f6f37
fix: restore focus history toggle forwarding
teamleaderleo 1b9ba82
fix: restore workspace sidebar lifecycle state
teamleaderleo edc4ade
fix: restore workspace split surface state
teamleaderleo 29c633b
fix: restore split admission workspace state
teamleaderleo 8b65a87
fix: restore remote initial terminal options
teamleaderleo 12559bd
fix: restore welcome delivery compatibility
teamleaderleo 822a098
fix: restore workspace reorder query
teamleaderleo 0225088
fix: restore window close and screenshot actions
teamleaderleo f62c740
fix: reconcile tab close feature with current main
teamleaderleo 2d20e68
fix: use current dock rename action seam
teamleaderleo ef55351
fix: use current Bonsplit with close action
teamleaderleo 79393b2
test: await guarded close confirmation task
teamleaderleo 155371a
test: support async close guard fixture cleanup
teamleaderleo 837bc4a
chore: remove stale nightly workflow
teamleaderleo e168561
fix: guard workspace and window close paths
teamleaderleo 8a391fc
test: await async close guard cleanup
teamleaderleo 0e270da
fix: guard window close automation
teamleaderleo 6004b53
docs: add tab close dogfood demo
teamleaderleo 8278d46
docs: add tab close proposal screenshot
teamleaderleo d39a74a
docs: show tab bar action cluster
teamleaderleo e7d76d2
Merge main (b9bfd725a4d9) into tabclose
teamleaderleo b38c942
Merge main (7051bb58c0e6) into tabclose
teamleaderleo 8430f3a
test: pass force to workspace close
teamleaderleo 0728468
Merge main (40138c68cec9) into tabclose
teamleaderleo 8022567
Merge main (8265e7893424) into tabclose
teamleaderleo 12e6b3e
test: update close warnings for live processes
teamleaderleo be9ea49
fix: keep workspace warning gate separate from safety
teamleaderleo ec68cc9
Merge commit '13c417cb77ead0df5a946da12f36b8633f15eed0' into tabclose
teamleaderleo 9c92428
Merge main (7ed2f6b80798) into tabclose
teamleaderleo 74fbe35
fix: merge Bonsplit base for current main
teamleaderleo f49c044
fix: stabilize close warning tests
teamleaderleo 2964657
Merge origin/main into tabclose
teamleaderleo d30ae45
Merge commit '6d7ad149121a3034a63aa20be6f267380862924a' into tabclose
teamleaderleo 7c82f66
Merge main (c67efdc0a48e) into tabclose
teamleaderleo d2e101a
Merge commit '7d177547949b4199e23831d78518eba5ce9a5379' into tabclose
teamleaderleo 5558ba9
Merge commit 'e94800760c4b82bfd17d36239216fab54e932813' into tabclose
teamleaderleo f9a0e23
fix: advance submodules through main
teamleaderleo b83e289
fix: reconcile bonsplit tab close branch
teamleaderleo db73549
Merge main (e0d5c5eaa0a0) into tabclose
teamleaderleo 5971807
Merge main (d13dde390064) into tabclose
teamleaderleo File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
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
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
21 changes: 21 additions & 0 deletions
21
...trolSocket/Sources/CmuxControlSocket/Coordinator/Sidebar/ControlSidebarCloseStrings.swift
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| public import Foundation | ||
|
|
||
| /// App-bundle-resolved messages for the legacy `close_surface` command. | ||
| public struct ControlSidebarCloseStrings: Sendable, Equatable { | ||
| public let failed: String | ||
| public let confirmationRequired: String | ||
|
|
||
| public init(failed: String, confirmationRequired: String) { | ||
| self.failed = failed | ||
| self.confirmationRequired = confirmationRequired | ||
| } | ||
| } | ||
|
|
||
| public extension ControlSidebarContext { | ||
| func controlSidebarCloseStrings() -> ControlSidebarCloseStrings { | ||
| ControlSidebarCloseStrings( | ||
| failed: "Failed to close surface", | ||
| confirmationRequired: "Surface has a running process; retry with --force" | ||
| ) | ||
| } | ||
| } |
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
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
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
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
21 changes: 21 additions & 0 deletions
21
...trolSocket/Sources/CmuxControlSocket/Coordinator/Surface/ControlSurfaceCloseStrings.swift
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| public import Foundation | ||
|
|
||
| /// App-bundle-resolved messages returned by `surface.close`. | ||
| public struct ControlSurfaceCloseStrings: Sendable, Equatable { | ||
| public let confirmationRequired: String | ||
| public let failed: String | ||
|
|
||
| public init(confirmationRequired: String, failed: String) { | ||
| self.confirmationRequired = confirmationRequired | ||
| self.failed = failed | ||
| } | ||
| } | ||
|
|
||
| public extension ControlSurfaceContext { | ||
| func controlSurfaceCloseStrings() -> ControlSurfaceCloseStrings { | ||
| ControlSurfaceCloseStrings( | ||
| confirmationRequired: "Surface has a running process; retry with force=true", | ||
| failed: "Failed to close surface" | ||
| ) | ||
| } | ||
| } |
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
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
18 changes: 18 additions & 0 deletions
18
...ontrolSocket/Sources/CmuxControlSocket/Coordinator/System/ControlSystemCloseStrings.swift
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| public import Foundation | ||
|
|
||
| /// App-bundle-resolved messages for system tab-action close failures. | ||
| public struct ControlSystemCloseStrings: Sendable, Equatable { | ||
| public let confirmationRequired: String | ||
|
|
||
| public init(confirmationRequired: String) { | ||
| self.confirmationRequired = confirmationRequired | ||
| } | ||
| } | ||
|
|
||
| public extension ControlSystemContext { | ||
| func controlSystemCloseStrings() -> ControlSystemCloseStrings { | ||
| ControlSystemCloseStrings( | ||
| confirmationRequired: "One or more surfaces have a running process; retry with force=true" | ||
| ) | ||
| } | ||
| } |
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
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
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
Oops, something went wrong.
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Localize the new
confirmation_requiredmessage.The message "Surface has a running process; retry with force=true" reaches socket callers as a raw string literal. The retrieved learning requires socket API error messages to use
String(localized:defaultValue:). Keep the English protocol text indefaultValue. Add a matching catalog entry for each supported locale.Proposed fix
Based on learnings: user-facing socket API error messages must be created with
String(localized:defaultValue:).📝 Committable suggestion
🤖 Prompt for AI Agents
Source: Learnings