diff --git a/HANDOFF.md b/HANDOFF.md index 2979185..b6df16d 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -7,35 +7,39 @@ ## Session state (last updated: 2026-08-14) -- **Branch:** `main` (audio milestone work is uncommitted, see "Uncommitted"). -- **AUDIO MILESTONE (TASK 9) — SHIPPED this session.** Real stream audio + voice filters + auto-duck - + free TRAX background music. Build **0 warnings**, full suite **196 passing** (ONE integration - test: `AudioPipelineTests.Mix_WithFiltersDuckAndGain_Lands_On_AudioPipe`). Everything below in the - milestone section is DONE. **NOT yet committed** — next step is review + commit (with `ai.md`/ - `TASKS.md`/this file already updated in the same changeset). -- **Two build-time deviations from the settled plan (both recorded in ai.md + TASKS.md):** - 1. `MusicPlayer` uses **`WaveOutEvent`** (new sibling package `NAudio.WinMM` 2.2.1) — not `WasapiOut` - as planned; `WaveOutEvent` isn't in `NAudio.Wasapi`/`NAudio.Core`. - 2. No forced 48 kHz capture — NAudio 2.2.1's `WasapiCapture` has no overridable - `GetDefaultMixFormat`, so both sources run the device mix format and the mixer's - `TinyResampler` normalizes any rate to 48 kHz (resampler IS the design, not a fallback). - 3. `FfmpegEncoder.cs` is **untouched** — the VM closes the audio pipe (`_audioMixer.StopLive()`) in - `StopStream` BEFORE the frame pump stops (audio EOF then video EOF, in order). -- **SERVER RECOVERY (llamachile.tube / YunoHost / DO droplet) — done earlier session.** Side task - complete; **rotate the DO API token** (control-panel only) and any password no longer trusted. -- **Shipped, all pushed before this session:** TASK 21 (creator-hub About, `3d92bd0`), TASK 8 (meter - +10 dB), TASK 4 ship step 7 (one-click go-live + private-only). **174 tests passing, 0 warnings.** -- **Uncommitted (whole TASK 9 milestone):** `Services/Audio/` (new `VoiceFilterChain.cs`, - `AudioRingBuffer.cs`, `AutoDucker.cs`, `TinyResampler.cs`, `MusicPlayer.cs`, `NamedPipeAudioWriter.cs`, - rewritten `AudioMixer.cs`, simplified `WasapiMicAudioSource.cs`), `Models/Music.cs` (new), - `FfmpegArgs.cs`, `EncoderOptions.cs`, `LayoutStore.cs` (v9), `MainViewModel.cs`, `MainWindow.xaml`, - `MainWindow.xaml.cs`, `ytLive.csproj` (NAudio.WinMM), `ytLive.Tests/` (`AudioPipelineTests.cs` new, - `FfmpegEncoderTests.cs` + `LayoutStorePersistenceTests.cs` updated), and docs `ai.md`, `TASKS.md`, - `HANDOFF.md`. -- **Next step:** commit the milestone (docs already staged in the same changeset), push, then start - **TASK 5** (reusable stream → `_rtmpUrlProvider` — the last blocker before go-live actually encodes). - Then **itch.io product page setup** (premium URL lands in `MainViewModel.PremiumUrl`, lights up - Unlock Premium). Optional, not queued: rewriting the healed entry's `ProfileUrl` to +- **Branch:** `main`, tracking `origin/main` at **`f2f6401`** (pushed). Working tree was clean until the + monetization docs changeset below. +- **AUDIO MILESTONE (TASK 9) — SHIPPED + COMMITTED + PUSHED this session.** Real stream audio + voice + filters + auto-duck + free TRAX background music. Build **0 warnings**, full suite **196 passing** + (ONE integration test: `AudioPipelineTests.Mix_WithFiltersDuckAndGain_Lands_On_AudioPipe`). Commits + **`6d71ace`** (milestone) + **`f2f6401`** (secrets cleanup), force-pushed (`725f5a7...f2f6401`). +- **Secrets scrubbed from git history.** The DO token + passwords recorded in `HANDOFF.md` were removed + from the working file and **purged from all history** via `git filter-branch` over `3d92bd0..main` + + `git gc --prune=now --aggressive` (scan of all refs = 0 hits). They still exist in chat — **keep + treating as compromised**; rotate the DO API token. Old objects remain in llgit's store until server + GC (unreachable, not fetchable). If a value is ever needed, `git reflog` is expired — it's gone. +- **MONETIZATION LOCKED (2026-08-14, creator).** One paid line = **annual subscription**: early access + **$49.99/yr** → **$99/yr list at GA**, **grandfather-while-subscribed**, lapse → list on renewal. + Free tier unchanged (branding flash = the billboard + no Alerts; Alerts is the paid feature). + **Billing NOT itch-locked** — itch.io has no native subscription billing; candidates Gumroad (native + affiliates = tiebreaker) / Lemon Squeezy. Support = in-app bug-report → git issues, "when I get + around to it" + emergency patches. Full policy in `ai.md` → Monetization; scoped plan + line-items + in `TASKS.md` **TASK 23**. +- **DEVELOPMENT PAUSED (creator's call 2026-08-14) — resuming streaming instead.** Channel revival = + **pair-programming dev streams via OBS** (ytLlive can't go live yet: private-only + `_rtmpUrlProvider` + null) + **The Division 2** gaming streams under the **"gramps/GOAT"** persona (67, gaming since 1981). + 3D-printing content retired (printer hard down, novelty gone). **Dogfood switch** later: when TASK 5 + + go-live capability land, stream *with* ytLlive — Division 2 (loud game + voice) is the demo for the + ducking/voice-filter story. Early-access strategy + affiliate/ads are their own future line-item tasks. +- **Docs changeset in flight (THIS changeset):** `ai.md` Monetization rewritten + stale paid-unlock seams + fixed; `TASKS.md` TASK 23 added + TASK 21's itch.io URL mention corrected; this file rewritten. Commit + + push as one change. +- **Shipped, all pushed:** TASK 21 (creator-hub About, `3d92bd0`), TASK 8 (meter +10 dB), TASK 4 ship + step 7 (one-click go-live + private-only), TASK 9 audio milestone (`6d71ace`), secrets cleanup + (`f2f6401`). +- **Resume point (when dev starts again):** **TASK 5** — reusable stream → `_rtmpUrlProvider` (the last + blocker before go-live actually encodes + pushes). Then TASK 23 (billing + unlock + support). + Optional, not queued: rewriting the healed entry's `ProfileUrl` to `https://mastodon.llamachile.tube/@gramps` (user must say the word). ## TASK 9 audio milestone — SHIPPED 2026-08-14 (what changed) @@ -67,7 +71,7 @@ and `ai.md` ("Live audio capture"). Highlights: start-of-stream silence race was seen and eliminated). **Out of scope this branch:** IP webcam, chat box, alt-key crop, credits, bg removal, music-off-VOD -track (YouTube mutes VODs with copyrighted music — future feature), itch.io `PremiumUrl`. +track (YouTube mutes VODs with copyrighted music — future feature), `PremiumUrl` (TASK 23 seam). - **Landmines:** - Never add another test that constructs `new App()` — use `RealAppHost.Run(...)` (shared STA host diff --git a/MainWindow.xaml b/MainWindow.xaml index d6fddcc..b23a3c5 100644 --- a/MainWindow.xaml +++ b/MainWindow.xaml @@ -1158,7 +1158,7 @@