63 lines
3.8 KiB
Markdown
63 lines
3.8 KiB
Markdown
# HANDOFF — Session State
|
||
|
||
## Branch
|
||
`main` — clean, 0 warnings.
|
||
|
||
## What shipped this session
|
||
|
||
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
|
||
|
||
## 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)
|
||
|
||
## Current state
|
||
- **0 warnings, 0 errors**
|
||
- **210/211 tests pass** (1 pre-existing AudioPipeline gain-math failure)
|
||
- Deleted backgrounds re-seed automatically via `EnsureDefaultBackground`
|
||
|
||
## Build
|
||
```bash
|
||
taskkill.exe /F /IM ytLive.exe # if running
|
||
"/mnt/c/Program Files/dotnet/dotnet.exe" build "C:\Users\gramp\Documents\Code\projects\ytLive\ytLive.csproj"
|
||
"/mnt/c/Program Files/dotnet/dotnet.exe" vstest "C:\Users\gramp\Documents\Code\projects\ytLive\ytLive.Tests\bin\Debug\net8.0-windows10.0.19041.0\ytLive.Tests.dll"
|
||
```
|
||
|
||
## Polar.sh resources
|
||
| Resource | ID |
|
||
|---|---|
|
||
| Org ID | `c05fb364-b967-4f6c-adf2-8a144e46d085` |
|
||
| 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.
|