{"owner":"dwarvesf","repo":"hidden","hasSkills":true,"totalSkillsCount":1,"totalTokensCount":1439,"categories":["project-spec"],"hasMcp":false,"mcpConfig":null,"found":["docs/ARCHITECTURE.md"],"skills":{"docs/ARCHITECTURE.md":"# Architecture\n\nHidden Bar is a single-process, sandboxed AppKit menubar utility (~1.5k lines of\nSwift, one dependency: [HotKey](https://github.com/soffes/HotKey)). There is no\nhelper app, no daemon, no network. Everything happens inside three\n`NSStatusItem`s and one window.\n\n## The core trick\n\nmacOS offers no API to hide other apps' menubar icons. Hidden Bar fakes it with\ngeometry: a separator status item whose **length is inflated to roughly the\nwidth of the widest attached screen**, shoving every icon to its left off-screen.\nCollapsing and expanding is just flipping that length between ~20pt and the\ninflated value.\n\n```mermaid\nflowchart LR\n    subgraph menubar [menu bar, right to left]\n        direction RL\n        ARROW[\"arrow item\\n(toggle, variable length)\"]\n        SEP[\"separator item\\n20pt expanded / ~2x screen width collapsed\"]\n        HIDDEN[\"other apps' icons\\npushed off-screen when collapsed\"]\n        ALWAYS[\"always-hidden separator\\n(optional)\"]\n    end\n    ARROW --- SEP --- HIDDEN --- ALWAYS\n```\n\nKey consequences of this design:\n\n- The menubar replicates on every display, so the collapse length derives from\n  the **widest** screen (`NSScreen.screens`), never `NSScreen.main`, and is\n  re-applied to the live item on `didChangeScreenParametersNotification`\n  (display hot-plug).\n- The length is bounded: `max(500, min(widestFrameWidth * 2, 10_000))`. macOS\n  enforces a hard 10,000pt maximum on `NSStatusItem.length`.\n- `isCollapsed` is derived state: `separator.length > 20`, deliberately not an\n  equality check, so it survives the length being recomputed while collapsed.\n- Icons macOS inserts to the LEFT of the separator (where new status items\n  appear) are in the hidden zone by default; that is inherent to the trick.\n\n## Topology\n\n```mermaid\nflowchart TD\n    AD[AppDelegate] -->|owns| SBC[StatusBarController]\n    AD -->|registers| SM[\"SMAppService.mainApp\\n(login item, macOS 13+)\"]\n    AD -->|global hotkey| HK[HotKey lib]\n    SBC -->|3 status items| NSB[NSStatusBar.system]\n    SBC -->|auto-hide| T[\"one-shot Timer\\n(re-arms while pointer in menubar)\"]\n    SBC -->|opt-in| HM[\"global mouseMoved monitor\\n(hover-to-expand, only if pref on)\"]\n    PREFS[Preferences facade] -->|UserDefaults| UD[(UserDefaults)]\n    PREFS -->|posts| NC{{NotificationCenter\\n.prefsChanged / .alwayHideToggle}}\n    NC --> SBC\n    PVC[PreferencesViewController] --> PREFS\n    SBC -->|context menu| PVC\n```\n\n- **`AppDelegate`** (entry): registers default prefs, sets up the global hotkey,\n  runs the one-shot legacy login-item migration, owns the `StatusBarController`.\n- **`StatusBarController`** (the product, ~370 lines): the three status items,\n  when to collapse/expand, auto-hide timer, interaction-awareness, hover-to-expand,\n  self-restore of dragged-off items.\n- **`MenuBarEngine`** (`Features/StatusBar/Engine/`): how hiding is achieved.\n  The controller calls `collapse` / `expand` / `updateAlwaysHiddenSection` /\n  `invalidateLayout` and never writes a status-item length itself.\n  `MenuBarEngineFactory` is the one place that picks an engine for the running\n  OS; today that is always `LegacyLengthEngine` (the length trick below).\n- **`Preferences`** (facade enum): typed accessors over `UserDefaults`; setters\n  post `NotificationCenter` notifications that the controller and prefs window\n  observe. There is no other state store.\n- **`PreferencesViewController` / `PreferencesWindowController`**: the only\n  window (storyboard-based), shown on demand from the context menu.\n\n## Behavior layers on the core trick\n\n| Layer | Mechanism | Cost when unused |\n|---|---|---|\n| Auto-hide | one-shot `Timer` after expand; at fire, if the pointer sits in any screen's menubar band (`visibleFrame.maxY ... frame.maxY`), it re-arms instead of collapsing | none (single point-in-rect check at fire) |\n| Hover-to-expand (opt-in) | global `.mouseMoved` monitor + 0.5s dwell timer; installed only when the `hoverToExpand` default is true at launch | zero: monitor not installed |\n| Self-restore | `isVisible = true` forced on our items at launch; Cmd-dragging them off otherwise bricks the app (its only UI is those items) | none |\n| Always-hidden section | a second separator item; its own length games, gated by `alwaysHiddenSectionEnabled` | item not created |\n\n## Autostart\n\nmacOS 13+ `SMAppService.mainApp`: the app registers itself; the login item is\nvisible and revocable in System Settings > General > Login Items. On first\nlaunch after upgrade, a one-shot migration deauthorizes the legacy\n`com.dwarvesv.LauncherApplication` helper registration (the BTM database never\ngarbage-collects those; see Apple TN3111). The helper app itself is gone.\n\n## Security posture\n\nSandboxed (`com.apple.security.app-sandbox`), hardened runtime, no network\nentitlement, no file I/O, no IPC surface, no shell or subprocess use. The only\ndependency is HotKey (a small Carbon `RegisterEventHotKey` wrapper) locked by\nthe committed `Package.resolved`. The opt-in hover monitor observes pointer\nposition only and discards event payloads. About-window links are hardcoded.\nA full-tree audit (2026-06) scored 9/10 with hygiene-level findings only.\n\n## Known architectural limits\n\n- **The notch**: hidden icons sit \"under\" the notch area on notched Macs; the\n  trick cannot reveal them there. The real fix is a spillover/second-bar design\n  (tracked in issues #357/#341/#148; candidate implementations in PRs #350/#358).\n- **macOS 27**: the menu bar re-architecture in macOS 27 betas\n  (`NSMenuBarNavigationSceneExtension`) breaks length-inflation hiding entirely\n  (issue #360). A different mechanism may be required.\n- **Other apps' open menus**: interaction-awareness is pointer-position-based;\n  a pointer deep inside another app's open dropdown is below the menubar band,\n  so the collapse can still fire there.\n"},"files":{"docs/ARCHITECTURE.md":"# Architecture\n\nHidden Bar is a single-process, sandboxed AppKit menubar utility (~1.5k lines of\nSwift, one dependency: [HotKey](https://github.com/soffes/HotKey)). There is no\nhelper app, no daemon, no network. Everything happens inside three\n`NSStatusItem`s and one window.\n\n## The core trick\n\nmacOS offers no API to hide other apps' menubar icons. Hidden Bar fakes it with\ngeometry: a separator status item whose **length is inflated to roughly the\nwidth of the widest attached screen**, shoving every icon to its left off-screen.\nCollapsing and expanding is just flipping that length between ~20pt and the\ninflated value.\n\n```mermaid\nflowchart LR\n    subgraph menubar [menu bar, right to left]\n        direction RL\n        ARROW[\"arrow item\\n(toggle, variable length)\"]\n        SEP[\"separator item\\n20pt expanded / ~2x screen width collapsed\"]\n        HIDDEN[\"other apps' icons\\npushed off-screen when collapsed\"]\n        ALWAYS[\"always-hidden separator\\n(optional)\"]\n    end\n    ARROW --- SEP --- HIDDEN --- ALWAYS\n```\n\nKey consequences of this design:\n\n- The menubar replicates on every display, so the collapse length derives from\n  the **widest** screen (`NSScreen.screens`), never `NSScreen.main`, and is\n  re-applied to the live item on `didChangeScreenParametersNotification`\n  (display hot-plug).\n- The length is bounded: `max(500, min(widestFrameWidth * 2, 10_000))`. macOS\n  enforces a hard 10,000pt maximum on `NSStatusItem.length`.\n- `isCollapsed` is derived state: `separator.length > 20`, deliberately not an\n  equality check, so it survives the length being recomputed while collapsed.\n- Icons macOS inserts to the LEFT of the separator (where new status items\n  appear) are in the hidden zone by default; that is inherent to the trick.\n\n## Topology\n\n```mermaid\nflowchart TD\n    AD[AppDelegate] -->|owns| SBC[StatusBarController]\n    AD -->|registers| SM[\"SMAppService.mainApp\\n(login item, macOS 13+)\"]\n    AD -->|global hotkey| HK[HotKey lib]\n    SBC -->|3 status items| NSB[NSStatusBar.system]\n    SBC -->|auto-hide| T[\"one-shot Timer\\n(re-arms while pointer in menubar)\"]\n    SBC -->|opt-in| HM[\"global mouseMoved monitor\\n(hover-to-expand, only if pref on)\"]\n    PREFS[Preferences facade] -->|UserDefaults| UD[(UserDefaults)]\n    PREFS -->|posts| NC{{NotificationCenter\\n.prefsChanged / .alwayHideToggle}}\n    NC --> SBC\n    PVC[PreferencesViewController] --> PREFS\n    SBC -->|context menu| PVC\n```\n\n- **`AppDelegate`** (entry): registers default prefs, sets up the global hotkey,\n  runs the one-shot legacy login-item migration, owns the `StatusBarController`.\n- **`StatusBarController`** (the product, ~370 lines): the three status items,\n  when to collapse/expand, auto-hide timer, interaction-awareness, hover-to-expand,\n  self-restore of dragged-off items.\n- **`MenuBarEngine`** (`Features/StatusBar/Engine/`): how hiding is achieved.\n  The controller calls `collapse` / `expand` / `updateAlwaysHiddenSection` /\n  `invalidateLayout` and never writes a status-item length itself.\n  `MenuBarEngineFactory` is the one place that picks an engine for the running\n  OS; today that is always `LegacyLengthEngine` (the length trick below).\n- **`Preferences`** (facade enum): typed accessors over `UserDefaults`; setters\n  post `NotificationCenter` notifications that the controller and prefs window\n  observe. There is no other state store.\n- **`PreferencesViewController` / `PreferencesWindowController`**: the only\n  window (storyboard-based), shown on demand from the context menu.\n\n## Behavior layers on the core trick\n\n| Layer | Mechanism | Cost when unused |\n|---|---|---|\n| Auto-hide | one-shot `Timer` after expand; at fire, if the pointer sits in any screen's menubar band (`visibleFrame.maxY ... frame.maxY`), it re-arms instead of collapsing | none (single point-in-rect check at fire) |\n| Hover-to-expand (opt-in) | global `.mouseMoved` monitor + 0.5s dwell timer; installed only when the `hoverToExpand` default is true at launch | zero: monitor not installed |\n| Self-restore | `isVisible = true` forced on our items at launch; Cmd-dragging them off otherwise bricks the app (its only UI is those items) | none |\n| Always-hidden section | a second separator item; its own length games, gated by `alwaysHiddenSectionEnabled` | item not created |\n\n## Autostart\n\nmacOS 13+ `SMAppService.mainApp`: the app registers itself; the login item is\nvisible and revocable in System Settings > General > Login Items. On first\nlaunch after upgrade, a one-shot migration deauthorizes the legacy\n`com.dwarvesv.LauncherApplication` helper registration (the BTM database never\ngarbage-collects those; see Apple TN3111). The helper app itself is gone.\n\n## Security posture\n\nSandboxed (`com.apple.security.app-sandbox`), hardened runtime, no network\nentitlement, no file I/O, no IPC surface, no shell or subprocess use. The only\ndependency is HotKey (a small Carbon `RegisterEventHotKey` wrapper) locked by\nthe committed `Package.resolved`. The opt-in hover monitor observes pointer\nposition only and discards event payloads. About-window links are hardcoded.\nA full-tree audit (2026-06) scored 9/10 with hygiene-level findings only.\n\n## Known architectural limits\n\n- **The notch**: hidden icons sit \"under\" the notch area on notched Macs; the\n  trick cannot reveal them there. The real fix is a spillover/second-bar design\n  (tracked in issues #357/#341/#148; candidate implementations in PRs #350/#358).\n- **macOS 27**: the menu bar re-architecture in macOS 27 betas\n  (`NSMenuBarNavigationSceneExtension`) breaks length-inflation hiding entirely\n  (issue #360). A different mechanism may be required.\n- **Other apps' open menus**: interaction-awareness is pointer-position-based;\n  a pointer deep inside another app's open dropdown is below the menubar band,\n  so the collapse can still fire there.\n"},"items":[{"name":"ARCHITECTURE.md","path":"docs/ARCHITECTURE.md","rawUrl":"https://raw.githubusercontent.com/dwarvesf/hidden/HEAD/docs/ARCHITECTURE.md","title":"docs - System Architecture & Module Boundaries","category":"project-spec","format":"markdown","content":"# Architecture\n\nHidden Bar is a single-process, sandboxed AppKit menubar utility (~1.5k lines of\nSwift, one dependency: [HotKey](https://github.com/soffes/HotKey)). There is no\nhelper app, no daemon, no network. Everything happens inside three\n`NSStatusItem`s and one window.\n\n## The core trick\n\nmacOS offers no API to hide other apps' menubar icons. Hidden Bar fakes it with\ngeometry: a separator status item whose **length is inflated to roughly the\nwidth of the widest attached screen**, shoving every icon to its left off-screen.\nCollapsing and expanding is just flipping that length between ~20pt and the\ninflated value.\n\n```mermaid\nflowchart LR\n    subgraph menubar [menu bar, right to left]\n        direction RL\n        ARROW[\"arrow item\\n(toggle, variable length)\"]\n        SEP[\"separator item\\n20pt expanded / ~2x screen width collapsed\"]\n        HIDDEN[\"other apps' icons\\npushed off-screen when collapsed\"]\n        ALWAYS[\"always-hidden separator\\n(optional)\"]\n    end\n    ARROW --- SEP --- HIDDEN --- ALWAYS\n```\n\nKey consequences of this design:\n\n- The menubar replicates on every display, so the collapse length derives from\n  the **widest** screen (`NSScreen.screens`), never `NSScreen.main`, and is\n  re-applied to the live item on `didChangeScreenParametersNotification`\n  (display hot-plug).\n- The length is bounded: `max(500, min(widestFrameWidth * 2, 10_000))`. macOS\n  enforces a hard 10,000pt maximum on `NSStatusItem.length`.\n- `isCollapsed` is derived state: `separator.length > 20`, deliberately not an\n  equality check, so it survives the length being recomputed while collapsed.\n- Icons macOS inserts to the LEFT of the separator (where new status items\n  appear) are in the hidden zone by default; that is inherent to the trick.\n\n## Topology\n\n```mermaid\nflowchart TD\n    AD[AppDelegate] -->|owns| SBC[StatusBarController]\n    AD -->|registers| SM[\"SMAppService.mainApp\\n(login item, macOS 13+)\"]\n    AD -->|global hotkey| HK[HotKey lib]\n    SBC -->|3 status items| NSB[NSStatusBar.system]\n    SBC -->|auto-hide| T[\"one-shot Timer\\n(re-arms while pointer in menubar)\"]\n    SBC -->|opt-in| HM[\"global mouseMoved monitor\\n(hover-to-expand, only if pref on)\"]\n    PREFS[Preferences facade] -->|UserDefaults| UD[(UserDefaults)]\n    PREFS -->|posts| NC{{NotificationCenter\\n.prefsChanged / .alwayHideToggle}}\n    NC --> SBC\n    PVC[PreferencesViewController] --> PREFS\n    SBC -->|context menu| PVC\n```\n\n- **`AppDelegate`** (entry): registers default prefs, sets up the global hotkey,\n  runs the one-shot legacy login-item migration, owns the `StatusBarController`.\n- **`StatusBarController`** (the product, ~370 lines): the three status items,\n  when to collapse/expand, auto-hide timer, interaction-awareness, hover-to-expand,\n  self-restore of dragged-off items.\n- **`MenuBarEngine`** (`Features/StatusBar/Engine/`): how hiding is achieved.\n  The controller calls `collapse` / `expand` / `updateAlwaysHiddenSection` /\n  `invalidateLayout` and never writes a status-item length itself.\n  `MenuBarEngineFactory` is the one place that picks an engine for the running\n  OS; today that is always `LegacyLengthEngine` (the length trick below).\n- **`Preferences`** (facade enum): typed accessors over `UserDefaults`; setters\n  post `NotificationCenter` notifications that the controller and prefs window\n  observe. There is no other state store.\n- **`PreferencesViewController` / `PreferencesWindowController`**: the only\n  window (storyboard-based), shown on demand from the context menu.\n\n## Behavior layers on the core trick\n\n| Layer | Mechanism | Cost when unused |\n|---|---|---|\n| Auto-hide | one-shot `Timer` after expand; at fire, if the pointer sits in any screen's menubar band (`visibleFrame.maxY ... frame.maxY`), it re-arms instead of collapsing | none (single point-in-rect check at fire) |\n| Hover-to-expand (opt-in) | global `.mouseMoved` monitor + 0.5s dwell timer; installed only when the `hoverToExpand` default is true at launch | zero: monitor not installed |\n| Self-restore | `isVisible = true` forced on our items at launch; Cmd-dragging them off otherwise bricks the app (its only UI is those items) | none |\n| Always-hidden section | a second separator item; its own length games, gated by `alwaysHiddenSectionEnabled` | item not created |\n\n## Autostart\n\nmacOS 13+ `SMAppService.mainApp`: the app registers itself; the login item is\nvisible and revocable in System Settings > General > Login Items. On first\nlaunch after upgrade, a one-shot migration deauthorizes the legacy\n`com.dwarvesv.LauncherApplication` helper registration (the BTM database never\ngarbage-collects those; see Apple TN3111). The helper app itself is gone.\n\n## Security posture\n\nSandboxed (`com.apple.security.app-sandbox`), hardened runtime, no network\nentitlement, no file I/O, no IPC surface, no shell or subprocess use. The only\ndependency is HotKey (a small Carbon `RegisterEventHotKey` wrapper) locked by\nthe committed `Package.resolved`. The opt-in hover monitor observes pointer\nposition only and discards event payloads. About-window links are hardcoded.\nA full-tree audit (2026-06) scored 9/10 with hygiene-level findings only.\n\n## Known architectural limits\n\n- **The notch**: hidden icons sit \"under\" the notch area on notched Macs; the\n  trick cannot reveal them there. The real fix is a spillover/second-bar design\n  (tracked in issues #357/#341/#148; candidate implementations in PRs #350/#358).\n- **macOS 27**: the menu bar re-architecture in macOS 27 betas\n  (`NSMenuBarNavigationSceneExtension`) breaks length-inflation hiding entirely\n  (issue #360). A different mechanism may be required.\n- **Other apps' open menus**: interaction-awareness is pointer-position-based;\n  a pointer deep inside another app's open dropdown is below the menubar band,\n  so the collapse can still fire there.\n","isInternal":false,"tokens":1439,"sizeBytes":5818}],"systemPromptSnippet":"<yakaai_skills repo=\"dwarvesf/hidden\">\n<!-- File: docs/ARCHITECTURE.md (Tokens: ~1439 | Category: project-spec) -->\n# Architecture\n\nHidden Bar is a single-process, sandboxed AppKit menubar utility (~1.5k lines of\nSwift, one dependency: [HotKey](https://github.com/soffes/HotKey)). There is no\nhelper app, no daemon, no network. Everything happens inside three\n`NSStatusItem`s and one window.\n\n## The core trick\n\nmacOS offers no API to hide other apps' menubar icons. Hidden Bar fakes it with\ngeometry: a separator status item whose **length is inflated to roughly the\nwidth of the widest attached screen**, shoving every icon to its left off-screen.\nCollapsing and expanding is just flipping that length between ~20pt and the\ninflated value.\n\n```mermaid\nflowchart LR\n    subgraph menubar [menu bar, right to left]\n        direction RL\n        ARROW[\"arrow item\\n(toggle, variable length)\"]\n        SEP[\"separator item\\n20pt expanded / ~2x screen width collapsed\"]\n        HIDDEN[\"other apps' icons\\npushed off-screen when collapsed\"]\n        ALWAYS[\"always-hidden separator\\n(optional)\"]\n    end\n    ARROW --- SEP --- HIDDEN --- ALWAYS\n```\n\nKey consequences of this design:\n\n- The menubar replicates on every display, so the collapse length derives from\n  the **widest** screen (`NSScreen.screens`), never `NSScreen.main`, and is\n  re-applied to the live item on `didChangeScreenParametersNotification`\n  (display hot-plug).\n- The length is bounded: `max(500, min(widestFrameWidth * 2, 10_000))`. macOS\n  enforces a hard 10,000pt maximum on `NSStatusItem.length`.\n- `isCollapsed` is derived state: `separator.length > 20`, deliberately not an\n  equality check, so it survives the length being recomputed while collapsed.\n- Icons macOS inserts to the LEFT of the separator (where new status items\n  appear) are in the hidden zone by default; that is inherent to the trick.\n\n## Topology\n\n```mermaid\nflowchart TD\n    AD[AppDelegate] -->|owns| SBC[StatusBarController]\n    AD -->|registers| SM[\"SMAppService.mainApp\\n(login item, macOS 13+)\"]\n    AD -->|global hotkey| HK[HotKey lib]\n    SBC -->|3 status items| NSB[NSStatusBar.system]\n    SBC -->|auto-hide| T[\"one-shot Timer\\n(re-arms while pointer in menubar)\"]\n    SBC -->|opt-in| HM[\"global mouseMoved monitor\\n(hover-to-expand, only if pref on)\"]\n    PREFS[Preferences facade] -->|UserDefaults| UD[(UserDefaults)]\n    PREFS -->|posts| NC{{NotificationCenter\\n.prefsChanged / .alwayHideToggle}}\n    NC --> SBC\n    PVC[PreferencesViewController] --> PREFS\n    SBC -->|context menu| PVC\n```\n\n- **`AppDelegate`** (entry): registers default prefs, sets up the global hotkey,\n  runs the one-shot legacy login-item migration, owns the `StatusBarController`.\n- **`StatusBarController`** (the product, ~370 lines): the three status items,\n  when to collapse/expand, auto-hide timer, interaction-awareness, hover-to-expand,\n  self-restore of dragged-off items.\n- **`MenuBarEngine`** (`Features/StatusBar/Engine/`): how hiding is achieved.\n  The controller calls `collapse` / `expand` / `updateAlwaysHiddenSection` /\n  `invalidateLayout` and never writes a status-item length itself.\n  `MenuBarEngineFactory` is the one place that picks an engine for the running\n  OS; today that is always `LegacyLengthEngine` (the length trick below).\n- **`Preferences`** (facade enum): typed accessors over `UserDefaults`; setters\n  post `NotificationCenter` notifications that the controller and prefs window\n  observe. There is no other state store.\n- **`PreferencesViewController` / `PreferencesWindowController`**: the only\n  window (storyboard-based), shown on demand from the context menu.\n\n## Behavior layers on the core trick\n\n| Layer | Mechanism | Cost when unused |\n|---|---|---|\n| Auto-hide | one-shot `Timer` after expand; at fire, if the pointer sits in any screen's menubar band (`visibleFrame.maxY ... frame.maxY`), it re-arms instead of collapsing | none (single point-in-rect check at fire) |\n| Hover-to-expand (opt-in) | global `.mouseMoved` monitor + 0.5s dwell timer; installed only when the `hoverToExpand` default is true at launch | zero: monitor not installed |\n| Self-restore | `isVisible = true` forced on our items at launch; Cmd-dragging them off otherwise bricks the app (its only UI is those items) | none |\n| Always-hidden section | a second separator item; its own length games, gated by `alwaysHiddenSectionEnabled` | item not created |\n\n## Autostart\n\nmacOS 13+ `SMAppService.mainApp`: the app registers itself; the login item is\nvisible and revocable in System Settings > General > Login Items. On first\nlaunch after upgrade, a one-shot migration deauthorizes the legacy\n`com.dwarvesv.LauncherApplication` helper registration (the BTM database never\ngarbage-collects those; see Apple TN3111). The helper app itself is gone.\n\n## Security posture\n\nSandboxed (`com.apple.security.app-sandbox`), hardened runtime, no network\nentitlement, no file I/O, no IPC surface, no shell or subprocess use. The only\ndependency is HotKey (a small Carbon `RegisterEventHotKey` wrapper) locked by\nthe committed `Package.resolved`. The opt-in hover monitor observes pointer\nposition only and discards event payloads. About-window links are hardcoded.\nA full-tree audit (2026-06) scored 9/10 with hygiene-level findings only.\n\n## Known architectural limits\n\n- **The notch**: hidden icons sit \"under\" the notch area on notched Macs; the\n  trick cannot reveal them there. The real fix is a spillover/second-bar design\n  (tracked in issues #357/#341/#148; candidate implementations in PRs #350/#358).\n- **macOS 27**: the menu bar re-architecture in macOS 27 betas\n  (`NSMenuBarNavigationSceneExtension`) breaks length-inflation hiding entirely\n  (issue #360). A different mechanism may be required.\n- **Other apps' open menus**: interaction-awareness is pointer-position-based;\n  a pointer deep inside another app's open dropdown is below the menubar band,\n  so the collapse can still fire there.\n</yakaai_skills>"}