diff --git a/HANDOFF.md b/HANDOFF.md index afab8cf..7c6d4a1 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -2,55 +2,46 @@ ## 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. +**`main`**, working tree is **DIRTY** — ready to commit. See "Changes" 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) +## Changes (uncommitted, ready to commit) -**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. +**Gear menu cleanup + App Settings + single Start button (TASK 30):** +- Removed Gear-menu `Save Layout`/`Save Layout As…`/`Open Layout…` + dead VM commands/methods. +- App Settings panel: "Default Location for Recordings" with Browse + Use Downloads reset. +- Single Start button (`Content="Start"` in XAML; `PrimaryButtonText`/`IsStreamingStart` removed). +- Fallback chain: configured → `%USERPROFILE%\Downloads` → `MyVideos`. +- ONE fallback test `DefaultRecordFolder_Falls_Back_To_Downloads`. -**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. +**Socials button + hover glow (new):** +- Socials button moved from footer (scenes/sources column) to preview bottom row, left of + TRAX button, inside a horizontal StackPanel. `MouseEnter`/`MouseLeave` handlers pulse + the `SocialBarElement` `DropShadowEffect` (BlurRadius 24→48, Opacity 0.7→1.0 sine wave + at 30ms tick). `MouseLeave` restores original values. -## Landmines (unchanged) +**Bug fix:** `TextBox` binding `RecordFolderDisplay` changed to `Mode=OneWay` (get-only +property caused TwoWay crash on startup). +**Files touched:** `MainWindow.xaml`, `MainWindow.xaml.cs`, `ViewModels/MainViewModel.cs`, +`ytLive.Tests/LayoutStorePersistenceTests.cs`, `TASKS.md`, `HANDOFF.md`. + +## Landmines + +- **TextBox.Mode=OneWay** is required for `RecordFolderDisplay` binding (get-only computed property). - **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). +- **App running locks `ytLive.exe`** → build fails MSB3027. +- **Test suite hangs** when running full suite (WPF `RealAppHost` dispatcher deadlock); individual + tests pass in isolation. Investigate before relying on full-suite results. +- **Pre-commit gate:** `./scripts/verify.sh` — clean build (0 warnings) + full tests + scope check. ## 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 18: shipped. Remaining = running-app verification (creator). +- TASK 21: Increment A shipped (`eba6af5`). Decoder blocked on ffmpeg. - 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. +- TASK 30: gear cleanup + record location + single Start — ready to commit. +- Monetization: deferred (creator rethinking price/subscription model). +- Socials hover glow: new, ready to commit. diff --git a/MainWindow.xaml b/MainWindow.xaml index 2a5f9a1..807815c 100644 --- a/MainWindow.xaml +++ b/MainWindow.xaml @@ -183,7 +183,7 @@ Command="{Binding StartStreamCommand}" Visibility="{Binding ShowLogInButton, Converter={StaticResource BoolToVis}}"/> - + + - - - - - - @@ -1510,11 +1510,8 @@