# HANDOFF — 2026-09-22 (TASK 39 YPP journey tracker slice 1 DONE, COMMITTED `a9d5f29`, PUSHED) ## Branch / Commit State `main` HEAD = **`a9d5f29` — feat(ypp): YPP journey tracker slice 1 — the YPP pull-out below Stream Settings (TASK 39, Good Dog ONE test)**. **PUSHED** `4e0915a..a9d5f29`. **Working tree CLEAN.** ## ⚠️ Open action items / landmines - **The app is RUNNING on the desktop** (`ytLive` pid 8696 was seen locking `bin\net8.0…\ytLive.dll`) — normal `dotnet build` to `bin` fails with MSB3021/MSB3027 until it's closed. Sessions verified the build with `-p:OutDir=C:\Users\gramp\AppData\Local\Temp\ytLive-build39\ -p:UseAppHost=false` and ran vstest against the temp dll. Close the app before committing/final verification. - **`subscriberCount` is rounded to 3 significant figures** by Google — near-threshold ETA/bar reads are coarse; documented in `TASK 39` doc + the drawer's `WhatCounts` text. - **LayerReorderPersistenceTests.RealMouseDrag…** flaked once pre-TASK-38 (fullscreen game on the desktop); unrelated, re-ran green. - **Slice 2 (Analytics) needs Google re-consent** — `yt-analytics.readonly` added to `YouTubeAuthService.Scope` (line 18) triggers it; do NOT merge with slice-1 work. - Polar product `d105dfa1…` still `$99/yr` — must become one-time before launch (carried; see `TASKS/task-10-monetization.md`). `MARCOM.md`/`MONETIZATION.md` are gitignored — never commit. ## What this session did (TASK 39 slice 1 — creator ruling 2026-09-21, plan 2026-09-22) Add the **"YPP"** pull-out below **Stream Settings** on the Live screen's right edge. Current-OAuth- scope data (no re-consent) shown in-app: subscriber bars for both tiers (500 f.funding / 1,000 ad — the 1,000/4,000h/10M→8,000h/20M doubling on **2027-02-01** handled as versioned data in `YppThresholds`), 3-uploads/90d bar, live standing from `auditDetails`, self-reported 2FA/AdSense checkboxes + deep links, and the "what counts" education text. Every refresh appends a `YppSnapshot` (SQLite v10) so slice 2's velocity/ETA has history from day one. - `ChannelStatsService` (`channels.list statistics,auditDetails,contentDetails` + `playlistItems.list`, virtual `CaptureCurrentAsync` = test seam); `YppTrackerViewModel` mirrors `LiveBroadcastFormViewModel` (drawer state + commands); `MainViewModel.Ypp.cs` wires `Ypp`, `ChannelStatsFactoryOverride`, and **one-open-at-a-time exclusivity** (both directions); account hooks in `MainViewModel.Account.cs`. - `PreviewPane.xaml` — `TextPullOutHost` is now a drawer bank: [broadcast drawer][ypp drawer] [stacked white-tab column]; same animated-width pattern (To=320, 0.2s CubicEase). Outside-click collapse in `MainWindow.xaml.cs` covers both. `IsClickInsideDrawer` unchanged. - **Good Dog = ONE integration test** (`YppPullOutTests`): connected-VM snapshot capture + persistence + checklist round-trip + drawer toggles; real-window exclusivity both ways. ## Next step ## Next step 1. TASK 39 **slice 2** (Analytics scope re-consent → watch-hours/Shorts + velocity/ETA + sparkline) per `TASKS/task-39-ypp-journey-tracker.md`, when the user queues it. Before any build, close the running ytLive instance or use the temp-OutDir build described below. ## Critical working rules (unchanged, still binding) - **Good Dog = ONE integration test per change.** - **Scope lock:** declare the exact file list before editing; run `scripts/scope-check.sh` before commit. No "while I'm here" edits. - **Run from WSL** always uses the Windows dotnet host (`/mnt/c/Program Files/dotnet/dotnet.exe`) with quoted paths and `--TestCaseFilter` for filtered vstest runs. - **ai.md + code in the SAME commit**; rewrite HANDOFF.md at session end. ## Where the machine facts live - `%APPDATA%\ytLive\ytLive.db` = real layout DB (`layout.db` is a 0-byte legacy file). sqlite3 at `/root/android-sdk/platform-tools/sqlite3`. Schema is now **user_version = 10**. - ffmpeg/ffprobe: `/mnt/c/Program Files/Krita (x64)/bin/` with Windows paths. - `ai.md` §Screen backdrop capture = authoritative backdrop/capture-key/heal doc (incl. TASK 38). - `ai.md` §Monetization awareness = authoritative monetization roadmap (incl. the TASK 39 journey-tracker state). YPP thresholds/date doubling live there + `Models/YppThresholds.cs`. - Business/marcom facts: `MONETIZATION.md` + `MARCOM.md` (both gitignored).