# HANDOFF — Session State ## Branch / Commit State **`main`**, clean tree, **pushed to `origin/main` through `b4f3b52`** (user "push", 2026-09-01). Session's five commits: - `b4f3b52` — docs: HANDOFF rewrite (this file, pre-push state) - `6799c40` — fix: first-native-launch crash (3 stacked faults) + RoundClip test root-caused → green - `711ba54` — docs: HANDOFF rewrite + TASK 21 picker spec imported into TASKS.md - `e1d8b10` — docs: v1 = feature-complete ruling; TASKs 32–36; out-of-product list; map-lie fixes - `7c6ec3e` — docs: pre-GA posture (visibility lock, flash preview-only + escalation, audit → gold) ## What this session accomplished 1. **Product/PM gap audit** (the creator's "potholes and gone streets" fear): everything un-tasked surfaced and ruled. Read ai.md → Monetization + TASKS.md → file end ("v1 = the finished product", "Out of product — permanently", TASKs 32–36) — the rulings are IN the map now, not here. 2. **Fixed the first-startup crash** (user launched post-refactor for the first time — NRE): SceneGraph ctor-order + window-scope styles the extracted LeftPanel couldn't see (full audit: exactly 2 offenders). App verified booting + closing clean on the real desktop; real DB intact. 3. **Killed one of the two "known failures":** RoundClip was stale TEST code, not product — `window.FindName` across namescopes + `VisualTreeHelper.HitTest` (which ignores input semantics and returned the invisible WebViewHostPanel overlay for every point). `UIElement.InputHitTest` proved the corner IS grabbable. Test green. Recipes recorded in MyMistakes.md. ## Test suite truth (2026-09-01, verified natively) - 247 tests, **246 pass**; the SOLE known failure is `AudioPipelineTests.Mix_HonorsProviderGains…`. The creator's hint: they attribute it to "sound channel declaration/init". Clue spotted tonight: real launches log "Audio: using system default mic + default output" TWICE (19:16 and 19:30 sessions) — possibly double mixer start or double log call; worth a look when the audio slice is picked up. Not chased (out of scope, Good Dog). - Per-class `dotnet.exe vstest` runs RealApp/MainWindow suites fine from WSL (6 classes + RoundClip green tonight). Full-suite still hangs (WASAPI) — don't run it. - The RealApp testhost shares `%APPDATA%\ytLlive\startup.log` with the real app — 'test-camera' failure lines in there are test noise; check DB state by querying, not reading. ## What's next (creator's queue — do not expand) **TASK 21 UI picker slice** (spec now lives in TASKS.md → TASK 21, imported from the old handoff so it can't be lost by a rewrite). Then TASK 32 → 33 → 34 → 35 → text source → monetization chain → MARCOM → TASK 36 gold pass, per "v1 execution order" in TASKS.md. ## Landmines - Remote state: `main` == `origin/main` at `b4f3b52` (+ this push). Re-check `git log origin/main..main` after any further commits. - Stale `testhost` can lock ytLive.dll (MSB3027) → `taskkill /PID N /F` via cmd.exe. - WSL cannot spawn Linux ffmpeg from the Windows CLR shim; contract verification recipe + static ffmpeg live at `/tmp/opencode/` (MyMistakes has the how-to). - Pre-commit gate: `./scripts/verify.sh ""` — but its full-suite step hangs; tonight's flow (clean build + per-class vstest + scope-check) is the working substitute from WSL. - Real-`MainWindow` tests MUST set `MainViewModel.LayoutPathOverride` (temp DB) or shutdown saves pollute the user's real layout. ## @ User note — no unsolicited roadmap Work what's queued; report what changed; no forward-looking "what's next" lists unless asked. Prefers short, spaced-out output over dense text (tired eyes — one idea per line beats a table).