# HANDOFF — Session State ## Branch / Commit State **`main`**, working tree is **CLEAN**. Commits `46978b8` (AGENTS push policy), `fc33022` (HANDOFF), and refactor commits `0–5` through `e286719` are **pushed** (incl. `refactor-commit-0..5`). Refactor commits **6–11 are LOCAL ONLY** (policy 2026-08-30: no per-commit push; `git push --tags` only at a user-agreed milestone / "push it"): | Commit | Hash | Tag | Partial | Lines | |--------|------|-----|---------|-------| | 6 Audio | `c1126a5` | `refactor-commit-6` | `MainViewModel.Audio.cs` | 408 | | 7 Trax | `535a501` | `refactor-commit-7` | `MainViewModel.Trax.cs` | 132 | | 8 Socials | `c41ff7f` | `refactor-commit-8` | `MainViewModel.Socials.cs` | 161 | | 9 Streaming | `e1006a0` | `refactor-commit-9` | `MainViewModel.Streaming.cs` | 787 | | 10 Chat | `3b77a13` | `refactor-commit-10` | `MainViewModel.Chat.cs` | 194 | | 11 Overlays | `1efde5a` | `refactor-commit-11` | `MainViewModel.Overlays.cs` | 194 | Nightly summary: **Phase 1 complete.** The plan was 11 partials + scaffold; all live in `ViewModels/`. Core `MainViewModel.cs` shrank 1,890 → **758 lines**. Every change: clean build (0 warnings), `scripts/verify.sh` (246 passed + 2 known failures only), `scripts/scope-check.sh` with explicit file args, `ViewModels/index.md` updated in the SAME commit, tagged `refactor-commit-N`, no per-commit push. ## What's In Flight Nothing code-in-flight — working tree clean, Phase 1 done. **Next (queued, not started): Phase 2 — split `MainWindow.xaml` (1,681 lines) into UserControls.** Same rules: one work unit per control, docs in the same commit, verify + scope-check, commit locally, `git push` only on user go. **Push pending:** refactor commits 6–11 + their tags are local. The Session-1 push checkpoint was never reached because the user directive was to run the series to completion; Phase 1 completion is the natural milestone to push on explicit user confirmation. ## Landmines - **Pre-existing test failures (do not chase):** `AudioPipelineTests.Mix_HonorsProviderGains_AndGameMute_KillsTheLoopback` + `RoundClipInteractionTests.Round_Clip_Corner_Is_Grabbable_And_Shape_Is_Circle`. - **Tests occasionally abort early (236/237)** — known flake, accepted by `verify.sh`. - **App running locks `ytLive.exe`** → build fails MSB3027. Kill PID before building. - **Implicit usings are SDK-default but partials must still carry their own domain usings** (they do not inherit core's): `ICommand`/`ObservableCollection`/ `WriteableBitmap`/`DispatcherTimer` etc. are NOT implicit. Grep-verified usings: - Audio: Input, Media, Threading, `NAudio.CoreAudioApi`, `ytLive`, Helpers, Models, Services, Services.Audio - Trax: IO, Media, `Microsoft.Win32`, Helpers, Models, Services.Audio - Socials: Windows, Input, Media, `ytLive`, Helpers, Models, Services, Services.Compositor - Streaming: ObjectModel, IO, Windows, Input, Threading, `Microsoft.Win32`, Helpers, Models, Services, Services.Encoder - Chat: ObjectModel, Media, Media.Imaging, Threading, Helpers, Models, Services - Overlays: Diagnostics, IO, Input, Helpers - **Pre-commit gate:** `scripts/verify.sh` (0-warning build + full tests) and `scripts/scope-check.sh "file1" …` — scope-check REQUIRES explicit file args. - Build from WSL with the Windows dotnet host only (see `AGENTS.md`). ## Todo state - MainViewModel refactor: **Phase 1 complete (11/11 partials + scaffold).** `ViewModels/index.md` has a per-partial table row (code↔commit map in the tracker section). Core row now describes only what remains (ctor wiring, lifecycle, source commands, WebView2 hosting, frame-pump seam, `SelectedElement`, `BrandFlash*`, `BuildCompositorOptions`/`ResolveOutputFrame`). - TASK 3: 27/30 (preview compositor 16, text source 17, alerts 20 still open). - TASK 4: ✅ shipped. TASK 9: items 1–3 shipped; 4–7 open. TASK 10: steps 1–7; Velopack pending. - TASK 18: shipped, creator verification pending. TASK 19/23, 20, 21-A: shipped. - TASK 22 (audio sync offset): not started — required for v1. - Monitoring: cross-partial private access is the point of partial classes — no moved member re-declared anywhere; moved setters reference other partials purely by name. ## Session summary (2026-08-30) - Ran the MainViewModel split to completion under the standing directive ("continue until you can continue no longer" — no interruption prompts). - Commits 9 (Streaming), 10 (Chat), 11 (Overlays) landed locally, each ~8:40 back-to-back: cut → 0-warning build → verify (246 pass + 2 known) → scope-check → index.md in-commit → `git tag refactor-commit-N`. No push. - Streaming was the hardest cut (interleaved props, master-frame consts, session timer, health pipeline, record rename-on-stop); Chat and Overlays were clean contiguous cuts. One build fix each: Streaming needed `ObjectModel`/`Input`, Chat needed `Media.Imaging` for `WriteableBitmap`. - Docs kept honest throughout: `index.md` rows for Streaming/Chat/Overlays, About-hub row re-pointed to the Overlays partial, core row trimmed each time.