From a9d5f290849d79120730eb54a4c8d2ee1468141b Mon Sep 17 00:00:00 2001 From: gramps Date: Tue, 22 Sep 2026 08:07:54 -0700 Subject: [PATCH] =?UTF-8?q?feat(ypp):=20YPP=20journey=20tracker=20slice=20?= =?UTF-8?q?1=20=E2=80=94=20the=20YPP=20pull-out=20below=20Stream=20Setting?= =?UTF-8?q?s=20(TASK=2039,=20Good=20Dog=20ONE=20test)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Current-OAuth-scope data, no re-consent: subscriber bars for both tiers (500 fan-funding / 1,000 ad-revenue; the 2027-02-01 doubling is versioned date-aware data in YppThresholds), 3-uploads/90d, live standing from channels.list auditDetails, self-reported 2FA/AdSense checkboxes + deep links (Google 2-Step / youtube.com/earn), and the "what counts" education. Every refresh appends a YppSnapshot (SQLite v10) so the analytics slice has history from day one. - ChannelStatsService (channels.list statistics,auditDetails,contentDetails + playlistItems.list, virtual CaptureCurrentAsync = test seam); YppTrackerViewModel mirrors LiveBroadcastFormViewModel. - MainViewModel.Ypp.cs: Ypp property, ChannelStatsFactoryOverride seam, one-open-at-a-time drawer exclusivity (both directions); account sign-in/out/restore hooks in Account.cs. - PreviewPane.xaml: TextPullOutHost is now a drawer bank [broadcast][ypp][stacked white tabs]; outside-click collapse covers both drawers. MainWindow.xaml.cs updated. - Wait - watchers: the whole feature already reviewed against YouTube's own docs (YPP Earn tab + API availability) before building — see TASKS/task-39-ypp-journey-tracker.md. - ONE integration test: YppPullOutTests (snapshot capture/persist + checklist round-trip + drawer exclusivity). 313/313 pass, 0 warnings. - Memory in same commit: TASKS.md row, ai.md Journey-tracker bullet (roadmap→reality), HANDOFF.md. Slice 2 (Analytics yt-analytics.readonly re-consent → watch-hours/Shorts + velocity/ETA + sparkline) is queued behind this, not merged. --- Controls/PreviewPane.xaml | 195 +++++++++++++++-- HANDOFF.md | 147 ++++++------- MainWindow.xaml.cs | 8 +- Models/YppStatSnapshot.cs | 17 ++ Models/YppThresholds.cs | 31 +++ Services/ChannelStatsService.cs | 119 +++++++++++ Services/LayoutStore.Migrations.cs | 18 +- Services/LayoutStore.Ypp.cs | 90 ++++++++ Services/YppTrackerViewModel.cs | 303 +++++++++++++++++++++++++++ TASKS.md | 1 + TASKS/task-39-ypp-journey-tracker.md | 84 ++++++++ ViewModels/MainViewModel.Account.cs | 3 + ViewModels/MainViewModel.Ypp.cs | 36 ++++ ViewModels/MainViewModel.cs | 1 + ai.md | 25 ++- ytLive.Tests/YppPullOutTests.cs | 142 +++++++++++++ 16 files changed, 1103 insertions(+), 117 deletions(-) create mode 100644 Models/YppStatSnapshot.cs create mode 100644 Models/YppThresholds.cs create mode 100644 Services/ChannelStatsService.cs create mode 100644 Services/LayoutStore.Ypp.cs create mode 100644 Services/YppTrackerViewModel.cs create mode 100644 TASKS/task-39-ypp-journey-tracker.md create mode 100644 ViewModels/MainViewModel.Ypp.cs create mode 100644 ytLive.Tests/YppPullOutTests.cs diff --git a/Controls/PreviewPane.xaml b/Controls/PreviewPane.xaml index 76460be..29a4d0f 100644 --- a/Controls/PreviewPane.xaml +++ b/Controls/PreviewPane.xaml @@ -413,13 +413,16 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +