Reshape the IA so it reads by intent instead of a flat pile of pages.
- Grouped sidebar: Monitor / Diagnose / System / App (section headers).
- Renames: Health → System Health, Environment → Tuning, Logs → Recordings,
Setup → Settings.
- Settings absorbs Notifications (alerts) as a section; Notifications dropped as a
separate page (notifications_page.py removed; SetupPage gains the alerts card +
`changed` signal wired to the live alert monitor).
- Recordings is now a hub: a source dropdown to view any captured log (always-on /
last diagnostic / preserved crash) + Analyze-crash in place, plus the recorder
controls; status line now shows the captured game.
- main_window nav is data-driven (_NAV groups → _PAGES order → stack); show_page,
badges, and tray flows updated. GUI smoke test asserts the new page set.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
QSystemTrayIcon applet (gui/tray.py, D13): menu with live CPU/GPU temp + memory
used/total, a status line, a Run Diagnostic submenu per detected game, plus Open
dashboard / Start-Stop recording / Snapshot-copy / Quit. Reuses the dashboard's
sample stream; drives existing MainWindow flows.
- MainWindow creates the tray when one is available; closing the window hides to
tray (Quit exits); setQuitOnLastWindowClosed(False) so dialogs don't quit it.
- app: `--tray` starts hidden for autostart.
- tests/test_gui_smoke.py: construct MainWindow headless + exercise the tray, so
a startup crash (like the 0.18.0 import bug) fails the build. Skips if no PySide6.
- docs: M10/M11 marked done in MODULES/ROADMAP.
Completes the Desktop UI bundle (M10 + M11).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>