fix(macOS): keep legacy Home visible when toggled
Root cause
ShellWindowChrome intentionally leaves the top-level window clear and non-opaque. The modern query-shell Home owns its own glass, but when useLegacyHomeDesign selected DashboardPage, PageGlassLanePolicy still classified the dashboard as self-contained. The legacy dashboard therefore received no panel ground and exposed the transparent shell.
Fix
Make PageGlassLanePolicy receive the resolved Home surface ownership decision from DesktopHomeView. The modern query-shell Home and Rewind keep their existing self-owned panel behavior; the redesigned and oldest legacy Home surfaces mount through the shared PageGlassLane, which supplies the visible panel ground. The Home switcher now reaches all three presentations, and the window maximum follows the visible display while the content lane remains 900pt. Tests cover both ownership polarities, the unknown-index route, all three presentations, and the display-sized maximum.
Product invariants affected
- INV-CHAT-1
- INV-NAV-1
Verification
xcrun swift build -c debug --package-path Desktop— passed.xcrun swift test --package-path Desktop --filter PageGlassLaneTests— 8 passed.xcrun swift test --package-path Desktop --filter QueryShellTests— 38 passed.xcrun swift test --package-path Desktop --filter DesktopWindowLayoutPolicyTests— 2 passed.xcrun swift test --package-path Desktop --filter ShellSummonTests— 26 passed.xcrun swift test --package-path Desktop --filter TopNavigationBarLayoutTests— 18 passed.xcrun swift test --package-path Desktop --filter ConversationDisplayStateTests— 10 passed.- Strict Swift-format lint passed for the functional patch.
- Named bundle
com.omi.omi-legacy-homewas built, installed, launched, and exercised through the automation bridge with a synthetic local Auth/Firestore profile. Screenshots cover QueryShell Home, redesigned hub, oldest Home, and visible-frame fill.
Failure-Class: FC-transparent-top-level-window-occlusion
Line-Count-Exception: desktop/macos/Desktop/Sources/MainWindow/DesktopHomeView.swift | 1636 -> 1637 | Rebase onto current main kept Memory-hub destination glass ownership on the same PageGlassLane call; one extra argument is cheaper than splitting the router.
[!NOTE]
Medium Risk
Touches main-window glass ownership and AppKit min/max sizing, so a wrong flag or max-size can make Home transparent or let the window fill the display. No auth or data-path changes.
Overview
Stops the older Home designs from rendering onto the wallpaper. PageGlassLane now takes a router-supplied homeOwnsItsPanels flag, so QueryShell Home and Rewind keep their own glass while redesigned and oldest Home get the shared panel.
Adds a nested Use oldest Home theme setting under legacy Home, resolved through HomeDesignPresentation (query shell / redesigned hub / oldest widgets-and-chat). Older Home backgrounds stay clear so the lane is the ground.
The shell’s max size follows the visible display instead of the 900pt readable lane. Summoned windows still hug ChatComposerLayout.contentLaneMaxWidth. Tests cover both ownership polarities, all three presentations, and display-sized maxima.
Reviewed by Cursor Bugbot for commit 63fd3a59016d51aeec1eb84663fc62961291e439. Configure here.