Files
LlamaCasty/TASKS.md
T
gramps a9d5f29084 feat(ypp): YPP journey tracker slice 1 — the YPP pull-out below Stream Settings (TASK 39, Good Dog ONE test)
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.
2026-09-22 08:07:54 -07:00

8.0 KiB
Raw Blame History

ytLlive — Task List

Catalog: task files live in TASKS/ (one file per task). This file is the index. Memory-map conventions: schema.md; architecture/decisions: ai.md.

Checklist markers — every task's Status line uses the same states:

  1. ✅ — completed / shipped
  2. 🔶 — in progress
  3. ⏳ — blocked / waiting
  4. ☐ — not started / queued
  5. ❌ — exception (known-issue, deliberately excluded, or merged)

2026-09-01 — v1 = feature-complete ruling: there is no v1.x. Everything queues to v1 or to "Out of product — permanently" (file end). Read those two sections before adding or reviving anything here.


Task catalog

# Task Status File
01 Initial Scaffold ✅ Done TASKS/task-01-initial-scaffold.md
02 YouTube OAuth2 Authentication ✅ Done TASKS/task-02-oauth2-auth.md
03 Capture Pipeline (Scenes/Sources) 🔶 In progress — 27/30 items done; items 16, 17, 20 open TASKS/task-03-capture-pipeline.md
04 RTMP Ingest to YouTube ✅ Done — all 7 items shipped TASKS/task-04-rtmp-ingest.md
05 Layout Persistence (SQLite) ✅ Done TASKS/task-05-layout-persistence.md
06 UI polish batch ✅ Done TASKS/task-06-ui-polish-batch.md
07 Meter scaling amplification ✅ Done TASKS/task-07-meter-scaling.md
08 Audio milestone ✅ SHIPPED 2026-08-14 TASKS/task-08-audio-milestone.md
09 YouTube Live Stream Management ⏳ In progress — items 1–3, 4 shipped; item 5 open; item 6 locked (TASK 36) TASKS/task-09-live-stream-management.md
10 Monetization: watermark-only one-time license + Polar billing 🔶 In progress — steps 1–7 shipped TASKS/task-10-monetization.md
11 Post-pause polish batch (creator's 8 review issues) ✅ SHIPPED 2026-08-15 TASKS/task-11-polish-batch.md
12 Master limiter on the live mix ☐ Queued TASKS/task-12-master-limiter.md
13 Social media launch kit 🔶 Scoped — queued after v1 TASKS/task-13-social-launch-kit.md
14 Creator feedback batch 🔶 In progress — Branch 2 shipped TASKS/task-14-creator-feedback-batch.md
15 Stock scene background images ✅ Shipped TASKS/task-15-scene-backgrounds.md
16 Kill infinity display ✅ Shipped TASKS/task-16-kill-infinity-display.md
17 Web source rendering (WebView2) ✅ Done TASKS/task-17-web-source-rendering.md
18 Local recording ✅ Shipped a9eb360 (2026-08-29) TASKS/task-18-local-recording.md
19 Scene transitions MERGED → TASK 23 (Control Surface UX) TASKS/task-19-scene-transitions.md
20 Hotkeys (keyboard shortcuts) ✅ Done — shipped 2026-08-26 TASKS/task-20-hotkeys.md
21 Media source (video file playback) 🔶 In progress — UI picker remaining TASKS/task-21-media-source.md
22 Audio sync offset ✅ Done (2026-08-31) TASKS/task-22-audio-sync-offset.md
23 Studio mode MERGED → TASK 23 (Control Surface UX) TASKS/task-23-studio-mode.md
24 Toast notifications ✅ Done (2026-08-23) TASKS/task-24-toast-notifications.md
25 Background consolidation ✅ Done (2026-08-23) TASKS/task-25-background-consolidation.md
30 Gear menu cleanup + Default Location for Recordings + preview layout ✅ Done (2026-08-29) TASKS/task-30-gear-cleanup-preview-layout.md
31 SceneGraph component + static/dynamic compositor optimization ✅ Done (2026-08-31) TASKS/task-31-scenegraph-optimization.md
32 Stream resilience ☐ Queued (2026-09-01) TASKS/task-32-stream-resilience.md
33 Bandwidth auto step-down ☐ Queued (2026-09-01) TASKS/task-33-bandwidth-step-down.md
34 Scheduled streams (Text-drawer version) ☐ Queued (2026-09-01) TASKS/task-34-scheduled-streams.md
35 Scene-linked audio ☐ Queued (2026-09-01) TASKS/task-35-scene-linked-audio.md
36 Gold pass ☐ Queued (2026-09-01) TASKS/task-36-gold-pass.md
37 Defaults vs current layout split ☐ Queued (2026-09-20) TASKS/task-37-defaults-current-split.md
38 Capture Window… backdrop (in-app window picker) ✅ Done — shipped 2026-09-21 TASKS/task-38-window-backdrop.md
39 YPP journey tracker (slice 1: current-scope data) 🔶 Slice 1 ✅ — 2026-09-22; slice 2 (Analytics + ETA) queued TASKS/task-39-ypp-journey-tracker.md

Open items (at a glance)

  • TASK 3 — items 16 (Text source), 17 (Alerts), 20 (Alerts precursor: RewardEvent capture) open
  • TASK 9 — item 5 open (webcam identity key reconciliation)
  • TASK 10 — Velopack update URL pending
  • TASK 12 — queued future
  • TASK 13 — queued post-v1
  • TASK 14 — Branch 2 shipped; branch 3+ in progress
  • TASK 21 — UI picker slice remaining (Windows-only verification pending)
  • TASK 32–36 — all queued future work (2026-09-01)
  • Webcam resource lifecycle (2026-09-17) — startup slice shipped (OS poll at start, single-camera auto-lock, persistent red alert in the Layers panel on lock failure, re-polls until resolved); gate slice shipped same day — webcam = app-level default, one per stream per scene, Add places the default directly, offered only when a camera is ATTAINABLE (identity + live session, not just a saved identity), app base lock keeps the session after the last placement is removed, startup adopts a solo camera as default. TASK 26's app-wide gate superseded by creator directive. Next slices (user-queued): multi-camera webcam selector in the App Settings dialog (gear), static (+) catalog rows (Background, YouTubeEvent, quoted labels) with reason-greying.
  • TASK 37 — queued (2026-09-20): split the layout data into a default set (the established DB) and a current set carrying the build-id; a saved current is honored only by the same build-id, otherwise defaults load — enables one-click revert to defaults too. Capture needed work OUT of current scope here; do not bolt it onto an in-flight change.

YouTube Live API research facts

See TASKS/research-youtube-api.md — authoritative facts for v3 build.


Out of product — permanently

These were explicitly ruled out:

  • D3D11 swap compositor (superseded by software compositor; TASK 3 item 16)
  • Background removal (ONNX/DirectML; TASK 3 item 19)
  • OBS-style source expansion (game capture, browser source, media playlist, VLC, color-key, MIDI — the minimal source set is deliberate; creators who need more have graduated to OBS)
  • Multi-layout (auto-save, single layout; multi-layout = OBS territory)
  • Cross-process stream resume (API makes it impossible; creator ruling 2026-09-01)