Files
LlamaCasty/HANDOFF.md
T

4.3 KiB

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).