docs(handoff): preview pane next, with the colour-picker trap recorded

This commit is contained in:
2026-10-30 08:03:44 -07:00
parent 3edb0d10be
commit 66b85d3fcc
+23 -21
View File
@@ -2,35 +2,37 @@
## State
- Branch `main`, worktree clean. **Seven design commits, unpushed** (push at your checkpoint):
`565b8db` DESIGN.md standard · `f2bf577` Tokens.xaml + guard · `84c335a` fonts bundled ·
`ffdf3b6` sans wired into the window · `4ef84f2` Controls.xaml · `0275e30` shell
(top bar, window, scene strip; mono telemetry).
- **The app is half-converted on purpose:** theme, shell and readouts are tokenised; the left
panel, preview pane and dialogs still carry the old palette.
- `DESIGN.md` is normative; `Themes/Tokens.xaml` is its implementation. Blue `#38bdf8` is the
only interactive accent; red `#ff5451` is live/record only; `#e94560` is retired from chrome.
- Branch `main`, worktree clean. **Eight design commits, unpushed** (push at your checkpoint):
`565b8db` DESIGN.md standard · `f2bf577` Tokens.xaml + guard · `84c335a` fonts ·
`ffdf3b6` sans wired · `4ef84f2` Controls.xaml · `0275e30` shell (top bar, window, scene
strip, mono telemetry) · `2dbc35b` left panel · `3edb0d1` positive + dark-scrim tokens.
- **Half-converted on purpose:** theme, shell, left panel and readouts are tokenised; the preview
pane and the dialogs still carry the old palette.
- `DESIGN.md` is normative; `Themes/Tokens.xaml` implements it. Blue `#38bdf8` is the only
interactive accent; red `#ff5451` is live/record only; `#e94560` is retired from chrome.
## Next action
Continue the sweep, one surface per commit, adding each file to
`DesignTokensTests.Converted_surfaces_carry_no_raw_colour`: `Controls/LeftPanel.xaml` (101 hexes)
→ `Controls/PreviewPane.xaml` (110) → `Controls/OverlayHost.xaml` + the dialogs (~85) → the
VM/service brush literals (`MainViewModel.Streaming.cs`, `MainViewModel.Audio.cs`,
`NotificationService.cs`).
**`Controls/PreviewPane.xaml`** (110 hexes), then `Controls/OverlayHost.xaml` + dialogs (~85),
then the VM/service brush literals (`MainViewModel.Streaming.cs`, `.Audio.cs`,
`NotificationService.cs`). Add each file to `DesignTokensTests.Converted_surfaces_carry_no_raw_colour`.
⚠️ **PreviewPane trap:** it holds a **hardcoded chat-border colour menu** — `MenuItem` rows with
`Tag="#22c55e"`-style values bound through `EnumToBool` (~line 265). Those hexes are **user data,
not theme**; tokenising them breaks the picker. Route them through `Models/BorderColorPalette.cs`
first (TASK 63 precedent), then sweep the rest.
## Landmines
- **Never tokenize the on-stream renderers or user data:** `Services/AlertRenderer.cs`,
`ChatBoxRenderer`, `Compositor/*`, `BrandFlashPresenter`, `Models/BorderColorPalette.cs`,
`Models/Source.cs` chat-colour defaults. Those paint the broadcast picture, not app chrome.
- `Themes/Tokens.xaml` is the only file allowed a raw hex; the guard lists converted files, so a
surface that regresses fails the test.
- A red settings control is a bug now — red means live/record. Sliders and toggles are blue.
- **Not every hex is a theme colour.** Tokenise app chrome only; leave `BorderColorPalette`,
picker `Tag=` values, `Models/Source.cs` chat defaults, and the on-stream renderers
(`AlertRenderer`, `ChatBoxRenderer`, `Compositor/*`, `BrandFlashPresenter`) literal.
- `Themes/Tokens.xaml` is the only file allowed a raw hex; the guard lists converted files.
- A red settings control is a bug now — red means live/record.
- Pre-existing: the **full test suite hangs** (WASAPI teardown). Per-class runs are the way.
## Pending
- **Launch once** to confirm Inter/JetBrains Mono render and the blue accent reads right — the
fonts resolve by pack URI, which no test can prove.
- **Launch once**: confirm Inter/JetBrains Mono render (pack-URI resolution is unprovable in the
test host) and that the blue reads right in the room.
- Vertical-tier camera check; webcam-cadence take in the failing geometry.