···100100- Trailing commas are mandatory (enforced by `.swiftlint.yml`)
101101- SwiftLint runs in strict mode; never disable lint rules without permission
102102- Custom SwiftLint rule: `store_state_mutation_in_views` — do not mutate `store.*` directly in view files; send actions instead
103103+- Before creating a PR, run `make lint`.
103104104105## UX Standards
105106
···2626 case setCommandFinishedNotification(enabled: Bool, threshold: Int)
2727 case setCanvasMode(Bool)
2828 case setSelectedWorktreeID(Worktree.ID?)
2929+ case saveLayoutSnapshot
3030+ case restoreLayoutSnapshot(worktrees: [Worktree])
2931 }
30323133 enum Event: Equatable {
···3941 case commandPaletteToggleRequested(worktreeID: Worktree.ID)
4042 case setupScriptConsumed(worktreeID: Worktree.ID)
4143 case fontSizeChanged(Float32?)
4444+ case layoutRestored(selectedWorktreeID: Worktree.ID?)
4245 }
4346}
4447
···11+enum LaunchRestoreMode: Equatable, Sendable {
22+ case lastFocusedWorktree
33+ case restoreLayout
44+ // case openWorktree(Worktree.ID) // future CLI support
55+}