# HANDOFF — Session State ## Branch / Commit State **`main`**, last pushed commit **`46f4696`** (manual-rename modal). Working tree is **DIRTY** — TASK 21 Increment A (model + persistence for media sources) is fully implemented, verified, and ready to commit. See "In flight" below. No feature branches pre-1.0: all work lands on `main` per work unit. ## In flight: TASK 21 — next bounded slice = Increment B (FFmpeg video decoder, items 4–5) **What is DONE (uncommitted, ready to commit):** Increment A — `SourceType.MediaSource` enum, `MediaSourceType`/`MediaPlaybackState` enums, media config fields on `Source` (`MediaPath`, `MediaIsLooping`, `MediaVolume`, `MediaPlaybackState`), LayoutStore migration + SELECT + INSERT, round-trip test (`MediaSource_Config_Survives_Save_And_Reload`). Build 0 warnings, 245/247 tests (2 known failures), scope check clean. **What is NOT started (Increment B):** `MediaVideoDecoder` — FFmpeg-based video decoder → `VideoFrame`. Needs ffmpeg present on Windows PATH or in `%APPDATA%\ytLlive\tools` to test. Currently absent: neither `ffmpeg.exe` on PATH nor in tools cache (locator's network pull hasn't run). This is a **run-the-app wall** — not blocked from writing the code, but blocked from headless integration testing. Can be shipped as a compile-verified code commit gated on creator run, or deferred until ffmpeg is present. ## Landmines (unchanged) - **Pre-existing test failures (do not chase):** `AudioPipelineTests.Mix_HonorsProviderGains…` + `RoundClipInteractionTests.Round_Clip_Corner_Is_Grabbable…`. - **App running locks `ytLive.exe`** → build fails MSB3027 until the creator exits the app. - **Real-MainWindow tests MUST set `LayoutPathOverride`** — DB pollution wiped real data once. - **Pre-commit gate:** run `./scripts/verify.sh ` — clean build (0 warnings) + full tests + scope check. Do NOT trust an incremental build's "0 warnings". - **Good Dog Rule:** ONE integration test per change. - **🔬 Derived-solution rule:** record one-off solutions in `MyMistakes.md` recipes registry same session. - Startup diagnostics: `%APPDATA%\ytLlive\startup.log`. - Media-source feature is large (12 items); each later slice (decode, compositor wiring, loop/volume, UI) is its own bounded increment — decoder needs ffmpeg present, can't be headless-tested unless ffmpeg is installed (currently absent from Windows PATH + empty tools cache). ## Todo state - TASK 18: fully shipped (`a9eb360` recording, `c8374bd` docs, `be529a4` verify.sh, `46f4696` rename modal). Only remaining = **running-app verification** (creator must run the WPF app). - TASK 21: Increment A (model + persistence) done and ready to commit. Increment B (ffmpeg decoder) is the next bounded slice — compile-verifiable without ffmpeg, but integration test is walled. - TASK 22 (audio sync offset): not started. ## Next steps 1. Commit + push Increment A (the code is ready, gates passed, TASKS/HANDOFF docs updated). 2. Commit + push the handoff correction (HANDOFF says done, not partial). 3. Running-app verification of TASK 18 rename/dual-output (creator) — one of two run-app walls. 4. Increment B: write `MediaVideoDecoder` (FFmpeg → BGRA8 `VideoFrame`), compile-verified, gated on creator run for integration test (ffmpeg not present headlessly). 5. Later TASK 21 slices + TASK 22.