docs(next-steps): refresh — v2 shell + table + palette already shipped
Some checks failed
CI / build-and-test (push) Failing after 26s

The prior NEXT_STEPS.md was written the night the Studio Terminal shell
landed and listed tasks 39 + 40 (table redesign, command palette) as
queued — but they shipped in d282e1b, and several rounds of polish have
landed since (per-ISO overrides, thumbnails, web /ui redesign, gear
glyph swap, ISO toggle corner-radius + column-width fixes).

Rewrite the doc to reflect actual state: what's on main, what's running,
verified-this-session, candidate paper-cuts still to consider, and what
the next real feature pass would look like.
This commit is contained in:
Zac Gaetano 2026-05-16 00:18:35 -04:00
parent f3e1f50ece
commit 150dd3f029

View file

@ -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, 19 / NumPad 19 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.