Summary
Allow users to define rules that automatically assign windows to specific tiles based on app bundle ID or window title. Currently, every assignment requires a manual Shift+Drop each time an app launches.
Motivation
The most common workflow is predictable: Terminal always goes to the left tile, Slack always goes to the right, browser always goes to the center. Having to Shift+Drop on every launch is the biggest friction point for daily use.
Proposed Behavior
- Rules are stored persistently (e.g., `rules.json` in Application Support)
- A rule maps an app bundle ID (e.g., `com.apple.Terminal`) to a tile position or profile slot
- When `WindowLifecycleProvider` fires `onWindowCreated`, KTApple checks for a matching rule and assigns automatically
- Rules are manageable from Preferences (add / remove / reorder)
Scope
- `RuleStore` in KTAppleCore (following `LayoutStore`/`HotkeyStore` pattern)
- `AppRule` model: `{ bundleID, tileIndex, displayID }`
- Match logic in `AppCoordinator.handleWindowCreated`
- Preferences UI: list of rules with app picker and tile selector
- Optional: wildcard / window title matching (v2)
Notes
Bundle IDs are stable across app updates. Window title matching would add flexibility but increase complexity — keep v1 to bundle ID only.
Summary
Allow users to define rules that automatically assign windows to specific tiles based on app bundle ID or window title. Currently, every assignment requires a manual Shift+Drop each time an app launches.
Motivation
The most common workflow is predictable: Terminal always goes to the left tile, Slack always goes to the right, browser always goes to the center. Having to Shift+Drop on every launch is the biggest friction point for daily use.
Proposed Behavior
Scope
Notes
Bundle IDs are stable across app updates. Window title matching would add flexibility but increase complexity — keep v1 to bundle ID only.