feat: the menu bar is a surface, not a launcher (goal 0189) - #519
Merged
Conversation
The tray icon's left-click now toggles an attached status panel (SystemTray.AttachWindow + a declared non-activating NSPanel, beta.12 MacWindowClassPanel — never hand-managed activation, the 0182/0186/0188 seam). The panel carries presence, a Needs-you section (parked runs, agent writes, plugin asks — rows land on Review), Running-now with per-run Stop (CancelRun; Stop not Pause per the goal's engine audit), and the honest quit contract naming how many automatic workflows stop. SetTemplateIcon replaces SetIcon; SetLabel shows the pending count, driven by the SAME frontend aggregate the dock badge uses (SetPendingBadge's injected tray hook — one count, two chromes). Right-click keeps the native Open Mill/Quit menu. Panel content e2e-proven at /#/traypanel (dedicated server pair); the OS attachment joins testing.md's manual-only registry. Tray setup moves beside the aux-window family (main.go's 500-line convention). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012im1JxQQV2ahnXzZDdVmZq
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Owner-raised: "when I click the Mill icon it just opens the app... jobs that are running that you can quickly pause or stop, Docker style." The tray icon now anchors a real status surface.
SystemTray.AttachWindow— a DECLARED non-activating NSPanel (beta.12MacWindowClassPanel+PanelPreferences{FloatingPanel, NonActivating, BecomesKeyOnlyIfNeeded}), never hand-managed activation (the 0182/0186/0188 defect seam). Its own window, deliberately not the Quick Panel's (owner decision 2026-08-24).app/TrayPanel.tsxat/#/traypanel): presence header ("Mill · Running" + Open Mill), Needs you (parked runs / agent writes / plugin asks — rows land on Review), Running now with per-run Stop (CancelRun; Stop not Pause, per the goal's engine audit — a Pause button that doesn't pause is the lie this product exists to remove), and the honest quit contract: quitting first names how many automatic workflows (schedules/hotkeys/watchers) stop.SetTemplateIconreplacesSetIcon(adapts to menu-bar appearance);SetLabelshows the pending count, driven by the SAME frontend aggregate the dock badge uses (SetPendingBadge's injected tray hook — one count, two chromes). Right-click keeps the native Open Mill/Quit menu.runningRunssplit Vitest'd, the badge→tray fan-out Go-tested (with a newdockBadgeSetFnseam — the real dock call hangs headless), and the OS attachment (click-toggle, label, template rendering, click-away) joins testing.md's manual-only registry. State screenshots reviewed against the design contract. Riders: tray setup moved beside the aux-window family (main.go 500-line gate).🤖 Generated with Claude Code
https://claude.ai/code/session_012im1JxQQV2ahnXzZDdVmZq