diff --git a/NEXT_STEPS.md b/NEXT_STEPS.md index ec7bf84..ee6e353 100644 --- a/NEXT_STEPS.md +++ b/NEXT_STEPS.md @@ -1,89 +1,107 @@ -# Where we left off — v2 "Studio Terminal" shell landed (2026-05-13 night) +# Where we left off — Studio Terminal shell shipped, paper-cuts being chipped (2026-05-16 morning) -## What's done (uncommitted on local main) +## State of main right now -**v2 redesign shape:** Approved brief at `docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md`. Aesthetic register is "broadcast-engineering instrument" — Linear's keyboard-first density × Avid console legibility. Goes hard against the "screams AI" failure mode. +Origin tip: `f3e1f50` — *docs: refresh participants-table column summary + ISO toggle comment* -**PRODUCT.md + DESIGN.md** updated to reflect WPF as the host (WinUI 3 lines removed), v2 IA decisions absorbed, recording references softened, theme implementation rewritten for WPF DynamicResource swap. +Recent commits on `origin/main`, newest first: -**Theme system split:** -- `src/TeamsISO.App/Themes/Theme.Dark.xaml` — color brushes only, dark variant -- `src/TeamsISO.App/Themes/Theme.Light.xaml` — color brushes only, light variant -- `src/TeamsISO.App/Themes/WildDragonTheme.xaml` — styles + control templates (no color brushes anymore; uses `DynamicResource` for every brush ref) -- `src/TeamsISO.App/Services/ThemeManager.cs` — singleton that swaps the merged dictionary at runtime, reads `HKCU\...\AppsUseLightTheme` for System mode, subscribes to `SystemEvents.UserPreferenceChanged`, persists via `UIPreferences.Theme`. -- `App.xaml` merges Theme.Dark.xaml + WildDragonTheme.xaml by default; `App.xaml.cs.OnStartup` calls `ThemeManager.Current.Apply()` before MainWindow shows. -- `UIPreferences.Prefs` record gets a new `Theme = "System"` field (forward-compatible — old json files still load). -- New brush key: `Wd.Accent.CyanText` (Dark `#97EDF0` / Light `#0E7C82`) for cyan-as-text contrast on light canvas. The existing `Wd.Accent.Cyan` stays bright in both modes for fill use. +``` +f3e1f50 docs: refresh participants-table column summary + ISO toggle comment +a98ab81 ISO toggle: widen column 110->124, tighten padding so 'Enable' fits +25229bd ISO toggle: square corners to match the rest of the button family +29f7e56 gear icon: swap Path glyph for U+2699 + bump column to 56px +5a43c9c feat: per-ISO framerate/resolution/aspect/audio overrides + thumbnail BMP +647deec feat(web): topology + thumbnail endpoints, redesigned /ui control panel +4944de5 feat(wpf): v2 - restore live thumbnail preview column in participants table +209b643 fix(wpf): MainViewModel subscription via direct Subscribe + Dispatcher marshal +d282e1b feat(wpf): v2 task 39+40 - studio table redesign + Ctrl+K command palette +c271303 feat(wpf): v2 'Studio Terminal' shell - theme system, header, transport strip, drawer +1d1ce6a feat(wpf): rollback to WPF host, axe recording, fix settings pane +``` -**v2 main window shell:** -- Default Windows title bar (no more custom chromeless caption buttons — they looked generic and broke on DPI scaling). -- 32px header: Wild Dragon mark + "TeamsISO" wordmark left; three icon buttons right (⌘K command palette, theme toggle, settings gear). The mark is small (20px) as a quality cue — click opens About. -- 40px transport strip: mono-typed single line. `● 02:14:32 PART 4 · LIVE 2 CTRL :9755`. Cyan dot + timer only when at least one ISO live. CTRL cluster right-aligned in a Grid column. -- Body: alert banner + update banner + action toolbar (Enable / Refresh / Presets / Stop all + Teams launch/hide icons) + participants DataGrid. -- Conditional meeting bar at bottom — appears only when `IsTeamsInCall == true`, with Mute / Cam / Leave. -- 72px left rail: **gone**. -- 380px permanent settings panel: **gone**. -- Six-column footer: **gone**. -- Settings: slide-over drawer overlay (420px from right) triggered by the header gear; OUTPUT / NETWORK / APP tabs (DISPLAY renamed to APP); same bindings as v1. Scrim click dismisses; Esc dismisses. +The v2 "Studio Terminal" shell, the v2 participants table redesign (task 39), +the Ctrl+K command palette (task 40), per-ISO overrides + thumbnails, and the +redesigned `/ui` control panel are **all shipped**. The previous NEXT_STEPS.md +listed 39 + 40 as queued — that's stale. -**Hotkeys preserved + new:** -- F1 help, Ctrl+R refresh, Ctrl+Shift+S panic stop, 1–9 / NumPad 1–9 toggle Nth participant — all preserved. -- **Ctrl+T toggle theme (NEW)** — cycles dark ↔ light. Hooked through `MainViewModel.ToggleThemeCommand` → `ThemeManager.Toggle()`. -- **Ctrl+K command palette (placeholder)** — currently opens the help dialog. Task 40 replaces this with a real fuzzy-search palette window. +## What's running -**View-model additions (MainViewModel):** -- `ParticipantCount` and `LiveCount` — feed the transport strip's "PART N · LIVE N" readout. Updated on the 1Hz stats tick. -- `ToggleThemeCommand` — wraps `ThemeManager.Current.Toggle()`. +A fresh Release build (PID changes each session — current one is `7928`, +started 2026-05-16 00:17). Source: `src/TeamsISO.App/bin/Release/net8.0-windows/TeamsISO.exe`, +last write 23:50ish after the comment-refresh rebuild. -**MainWindow code-behind cleanup:** -- Removed `OnMinimize`, `OnMaximizeRestore`, `OnClose`, `OnWindowStateChanged`, the maximize-icon swap logic (no more custom title bar). -- Added `OnCommandPaletteClick`, `OnSettingsScrimClick`, `OnPreviewKeyDown` (Esc to close drawer). -- `OnSettingsToggleClick` now toggles `SettingsDrawerOverlay.Visibility` (the slide-over) instead of toggling the v1 right-column width. +## Verified this session -## To build, push, and demo +- `dotnet test src/tests/TeamsISO.Engine.Tests/` → **104 passed / 0 failed**. +- `dotnet build src/TeamsISO.App/TeamsISO.App.csproj -c Release` → 0 warnings, 0 errors. +- Pushed three new commits to forgejo: `5a43c9c..f3e1f50`. + +## Candidate paper-cuts I noticed but didn't touch + +These are the same shape of fix as the ones in `25229bd` / `29f7e56` / +`a98ab81` — small, single-file, low-risk — but I want you to sign off +before they ship: + +1. **Header gear button still uses the thin-Path glyph.** `MainWindow.xaml:149`. + The exact same near-invisible 1.4px stroke that drove the per-row swap to + `U+2699` in `29f7e56` is still on the header settings gear. Same fix + probably applies — swap Path → `TextBlock` with `U+2699` from Segoe UI + Symbol, drop the size hack. + +2. **Header theme-toggle button.** `MainWindow.xaml:137`. Hand-rolled + crescent-moon Path with 1.4px stroke. Reads as a vague grey blob in dark + mode. Candidates: `U+263D` (☽), `U+263E` (☾), or `U+2600` / `U+263C` + (☀ for light), with a `DataTrigger` swapping by `ThemeManager.Current.Mode`. + +3. **Launch-Teams / Hide-Teams icon buttons in the toolbar.** + `MainWindow.xaml:388` and `:400`. Custom Path glyphs at 1.4 / 1.5 stroke + thickness — same legibility complaint, just less load-bearing because + the buttons also have tooltips. + +4. **Per-row gear column** (`CFG`, 56px wide). Was widened in `29f7e56` + from 32 → 56 specifically to fit the "CFG" header. The gear glyph + inside is centered and only ~16px wide, so 56px is generous; could + probably go to 48px and reclaim 8px for the flex `*` column without + losing anything. + +## What's queued for an actual feature pass + +Nothing committed-against. Conversation has danced around: + +- **Real command palette content.** The `Ctrl+K` window exists (commit + `d282e1b`) — actions feed from `CommandPaletteCommands.cs`. Worth a pass + to make sure every toolbar action and settings tab is mirrored there, + and that the keyboard shortcut hints render right. + +- **Settings drawer copy.** The OUTPUT / NETWORK / APP tabs were rewritten + during the v2 shell pass. Some of the help text is still v1-era and + refers to controls that aren't there anymore. Worth a sweep through + `MainWindow.xaml` around the drawer body. + +- **Onboarding window.** `OnboardingWindow.xaml` exists. Last touched + before the v2 shell. Probably out of date visually. + +## Build, push, demo cheatsheet ```powershell cd "C:\Users\zacga\Documents\Claude\Projects\Teams ISO" -# Clear the corrupt local index from the earlier session -Remove-Item .git\index -Force -ErrorAction SilentlyContinue -git reset +# Clear a stale index lock if you hit one +Remove-Item .git\index.lock -Force -ErrorAction SilentlyContinue -# Build the WPF host +# Stop any running instance (release the DLL locks) +Stop-Process -Name TeamsISO -Force -ErrorAction SilentlyContinue + +# Build + run dotnet build src\TeamsISO.App\TeamsISO.App.csproj -c Release +Start-Process .\src\TeamsISO.App\bin\Release\net8.0-windows\TeamsISO.exe -# If the build is clean: -.\src\TeamsISO.App\bin\Release\net8.0-windows\TeamsISO.exe +# Push when ready +git add -A +git commit -m "your message" +git push origin main # forge.wilddragon.net ``` -In the running app, test: -1. **Theme toggle** — press `Ctrl+T`. Should swap dark ↔ light without restart. Header colors, surfaces, and text foregrounds all repaint. -2. **System theme follow** — open Windows Settings → Personalization → Colors → "Choose your mode" → flip between Dark and Light. TeamsISO should track the OS automatically (default preference is `System`). -3. **Settings drawer** — click the header gear icon. 420px drawer slides in from the right with OUTPUT / NETWORK / APP tabs. Esc or click-scrim dismisses. -4. **Transport strip** — should show the session timer when at least one ISO goes live, and the PART/LIVE counts always. -5. **Conditional meeting bar** — only appears when Teams is in a call. - -If anything regresses, the v1 shell is preserved in git history at `1d1ce6a` — easy rollback with `git reset --hard 1d1ce6a` then publish. - -## Commit + push when ready - -```powershell -git add -A src/TeamsISO.App/ docs/ PRODUCT.md DESIGN.md -git commit -m "feat(wpf): v2 'Studio Terminal' shell — theme system, header, transport strip, drawer - -- Theme split: Theme.Dark.xaml + Theme.Light.xaml + ThemeManager -- New shell: 32px header (mark + wordmark + 3 icons), 40px transport strip, - conditional meeting bar, slide-over settings drawer -- Removed: 72px rail, 380px permanent settings panel, 6-column footer, - custom chromeless title bar buttons -- Ctrl+T toggles theme; follows Windows app-mode by default -- Shape doc at docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md" -git push origin HEAD -``` - -## What's still queued (tasks 39 + 40) - -- **Task 39** — Participants table redesign. The DataGrid columns in the v2 shell are still v1-style (Name / Source / ISO toggle). v2 wants: 5 columns (state LED, name+codec, audio meter, output name mono, ISO pill), 52px rows, full-row active-speaker tint instead of left stripe, hard-edged 8px state LED. -- **Task 40** — Real Ctrl+K command palette window. Floating 560×360 dialog, fuzzy search across categories (Quick / Teams / Presets / Output / Network / App). Replaces the current placeholder that opens the help dialog. - -Both are scoped commits and depend on the v2 shell being confirmed working first. After this lands and you've verified the theme swap + drawer + transport strip render correctly, ping me and we'll knock those out. +If anything regresses the v2 shell, the v1 entry point is preserved in git +history at `1d1ce6a` — rollback with `git reset --hard 1d1ce6a` then publish.