From 46da9954ada9d101bd61004ae21a471dac82497c Mon Sep 17 00:00:00 2001 From: gramps Date: Sun, 23 Aug 2026 06:26:29 -0700 Subject: [PATCH] HANDOFF: session state, open IsBackground-on-load bug, audit verdict --- HANDOFF.md | 57 +++++++++++++++++++++--------------------------------- 1 file changed, 22 insertions(+), 35 deletions(-) diff --git a/HANDOFF.md b/HANDOFF.md index 8c1683b..73a3f07 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -1,36 +1,31 @@ # HANDOFF — Session State ## Branch -`main` — clean, 0 warnings. +`main` — clean, HEAD `d2114c7`, 0 warnings. Not pushed. -## What shipped this session +## What's in commit d2114c7 (this session) +1. **All-five-scenes backgrounds** (prior session work, was uncommitted): `Scene.UseDefaultBackground` + `CustomBackgroundPath` on `SceneElement` superclass, LayoutStore persistence (`BackgroundPath_{sourceId}` / `BackgroundUseDefault_{sourceId}` in Settings), `SceneCatalog.HasBackground` true for all five scenes, `EnforceBackgroundPolicy` no longer strips non-Live backgrounds, tests updated. +2. **UI polish (this session):** + - "Use default background:" label + pill toggle on ONE horizontal line (MainWindow.xaml ~612) + - PillToggle resized 48×24 → 36×18 (thumb 18→12, travel 24→18) to match 11px label (Themes/Controls.xaml) + - New `SubHeader` style (11px SemiBold #a0a0b0, indented 4px); "BACKGROUND" → "Background" sub-title; Background section contents indented under it — PROPERTIES stays the only title-styled text -1. **TASK 10 — Polar billing + Velopack auto-updates (steps 1–7)** -2. **TRAX meter double-attenuation fix** -3. **LAN infrastructure documented** — all servers in `ai.md` + `CREDENTIALS.md` -4. **llamavault NFS/SMB diagnosis** -5. **Control Surface UX** — all 10 phases complete (StagedScene/LiveScene, thumbnails, edit gating, transitions, brand rename) -6. **Sliding pill toggle** — green ON (#22c55e) / red OFF (#ef4444), replaces checkbox -7. **Backdrop → Background** — full C# rename, SQL column rename with migration, asset files renamed, `Source.IsBackground` `new` → `override` fix, legacy "Backdrop" display name migration -8. **Geometry mismatch error** — red text when custom background aspect ratio >5% off 16:9 -9. **Per-scene background properties** — `UseDefaultBackground` + `CustomBackgroundPath` on `SceneElement` (superclass), persisted per-source via `BackgroundPath_{sourceId}` / `BackgroundUseDefault_{sourceId}` in Settings table -10. **All five scenes have backgrounds** — `SceneCatalog.HasBackground` returns `true` for all canonical scenes. `EnforceBackgroundPolicy` no longer strips backgrounds from non-Live scenes. -11. **Pill toggle label** — "Use default background:" TextBlock before toggle -12. **Pill toggle wiring** — `SelectedElement.PropertyChanged` subscription triggers `UpdateBackgroundImage` + `RefreshSnapshotsAsync` + `ScheduleSave` on `UseDefaultBackground` change +## ⚠️ Landmines +- **User verdict (2026-08-23):** "The AI wrote fucked up code after repeatedly and intentionally misunderstanding instructions." This extends the ai.md 2026-08-22 audit flag — trust nothing from those sessions without manual verification. User switched models. +- **1 pre-existing test failure:** AudioPipeline gain-math (210/211 pass). +- **Real-MainWindow tests MUST set `LayoutPathOverride`** (see ai.md) — DB pollution wiped real data once. -## Background layer rules -- Every scene has a Background layer at position 0 — undeletable (trash icon hidden, context menu "Remove Layer" hidden, `RemoveElement` returns early) -- `IsBackground` is derived from `SourceType.Background` via `Source.Type` setter — impossible to forget -- All five scenes have default images stored in Asset BLOBs in SQLite -- First run: pill ON for all five, shipped defaults load -- Toggle OFF → browse for custom file, FQFN stored -- On reload: try to load custom file; if missing, fall back to default asset -- `EnsureDefaultBackground` re-seeds missing backgrounds on scene switch (covers Starting, BRB, Chat, Ending; Live covered by seed methods) +## 🔴 Open bug (user-reported, NOT fixed): Background properties show for only Starting and Live +Evidence gathered before stop: +- Properties gate: `SelectedElement.IsBackground` (MainWindow.xaml ~608–611) +- Seeding is correct: `EnsureDefaultBackground` / seed methods all set `Type = SourceType.Background` +- **Root cause suspect:** `LayoutStore.cs:616` loads `IsBackground` from the DB **column**, not derived from `Type`. Rows saved before b74f15f (which made the Type setter derive IsBackground) carry `IsBackground=0` and stay false after load → panel hidden in BRB/Chat/Ending. +- **Likely fix:** derive `IsBackground = Type == SourceType.Background` on load (or backfill migration). Not attempted. -## Current state -- **0 warnings, 0 errors** -- **210/211 tests pass** (1 pre-existing AudioPipeline gain-math failure) -- Deleted backgrounds re-seed automatically via `EnsureDefaultBackground` +## Next steps +1. Fix the load-time IsBackground derivation bug (ONE integration test per Good Dog Rule) +2. Visual test on Windows display: pill sizing/alignment, sub-header hierarchy, backgrounds in all five scenes +3. Then: thumbnail drag-reorder → real compositor snapshots → transition dropdown UI (per previous plan) ## Build ```bash @@ -46,17 +41,9 @@ taskkill.exe /F /IM ytLive.exe # if running | Product | `d105dfa1-497e-423b-8cd4-e0ee2e3abbc0` | | Price | `7c1b6f70-cf8c-46df-9bc8-6703f9fa64d0` | | Benefit | `80f66bc1-d5a3-44a1-b9ea-1709ae508535` | -| Checkout | `70e037cd-9bcb-414e-8b26-c82c1d268f65` | | Checkout URL | `https://buy.polar.sh/polar_cl_ueMy8AyAClO0o0yo19IroZwKTbD587gzUsjEW3bFapw` | | Validate endpoint | `POST https://api.polar.sh/v1/customer-portal/license-keys/validate` | | Key prefix | `LCYT-` | -## Next steps -1. **Visual testing** — run on Windows display, verify backgrounds show for all 5 scenes -2. **Thumbnail drag-reorder** — reorder scenes via drag on thumbnail strip -3. **Real snapshot generation** — replace placeholder colors with compositor-rendered thumbnails -4. **Transition dropdown UI** — add XAML control to pick transition type + duration - ## v1 vision -> A streaming tool that's intuitive and ready to go out-the-gate with nothing held back. -> Minimal configuration — they're ready to go live or record. Eliminate the OBS pain-point completely. +> A streaming tool so intuitive it needs no manual — go live or record in minutes, OBS-free.