TASK 21: real logo + creator-hub About overlay — the About overlay is now the in-app creator hub: real logo (the creator's 'llama fortnite superman logo' copied to Assets/llama-logo.png, creator-owned art), hub links — llama chile shop on YouTube (MainViewModel.ChannelUrl, now public), Mastodon (https://mastodon.llamachile.tube/@gramps), Buy me a coffee (https://buymeacoffee.com/llamachiley, live), Unlock Premium (greyed 'coming soon'; IsPremiumAvailable flips on once the tabled itch.io PremiumUrl lands); a Licenses & legal sub-panel loads the full shipped THIRD-PARTY-NOTICES.txt in-app (ShowLicenses reads from the executable dir on first open, 'not found' fallback — never the OS viewer) with '← Back to About' (BackToAbout_Click) — the AboutHubTests integration test drives the real window + VM asserting the hub opens, link URLs are real, licensing loads the shipped notices text, and back returns to the hub — 174 tests passing, 0 warnings

This commit is contained in:
2026-08-14 12:39:05 -07:00
parent 801219ec46
commit 3d92bd0225
9 changed files with 225 additions and 32 deletions
+23 -10
View File
@@ -8,6 +8,18 @@
## Session state (last updated: 2026-08-14)
- **Branch:** `main`, in sync with `origin/main`.
- **TASK 21 — real logo + creator-hub About: SHIPPED** (this session). The About overlay is now the
**creator hub**: the real logo ("llama fortnite superman logo" copied from `\\llamavault``Assets/llama-logo.png`,
the creator's own art — no third-party license), plus hub links — **llama chile shop on YouTube**
(`MainViewModel.ChannelUrl`, public now), **Mastodon** (`https://mastodon.llamachile.tube/@gramps`),
**Buy me a coffee** (`https://buymeacoffee.com/llamachiley` — LIVE), and **Unlock Premium** (greyed
"coming soon"; the itch.io product URL is a **tabled seam**, `MainViewModel.PremiumUrl` — the itch.io
account was just created and needs a setup session later). **Licenses & legal** flips the About overlay
to an in-app scrolling panel loading the shipped `THIRD-PARTY-NOTICES.txt` (`ShowLicenses()` reads from
the executable dir on first open, graceful "not found" fallback — never the OS viewer); "← Back to
About" (`BackToAbout_Click`) returns. Integration test (ONE): `AboutHubTests` drives the real window,
asserting the hub opens, the link URLs are real, licensing loads the shipped notices text, and back
returns to the hub. **174 tests passing, 0 warnings.**
- **TASK 8 — meter scaling amplification:** SHIPPED + pushed (`0b71b03`). `AudioLevelMeter.ToDisplay`
adds **+10 dB input amplification** before the 60..0 dBFS log map: speech peaks (~0.2 RMS) read
~0.93 (red) and normal speech (~0.05) ~0.73 (yellow) at maxed volume; ≤0.001 linear still reads 0
@@ -26,17 +38,18 @@
IsLivePrivate}"` (MainWindow.xaml ~110).
5. **Integration test** — `ytLive.Tests/YouTubeStreamServiceTests.cs`: the broadcast-insert request
must carry `"privacyStatus":"private"` (RecordingHandler seam) + a no-session → null guard test.
- **Verified:** build 0 warnings / 0 errors; **173/173 tests pass** (171 + the 2 stream-service tests).
- **Uncommitted (this session's ship step 7 batch):** `GoLiveWindow.xaml`, `ViewModels/GoLiveViewModel.cs`,
`ViewModels/MainViewModel.cs`, `Services/YouTubeStreamService.cs`, `MainWindow.xaml`,
`ytLive.Tests/YouTubeStreamServiceTests.cs` (new), `TASKS.md`, `ai.md`, `ViewModels/index.md`,
`Services/index.md`, `HANDOFF.md`. **Commit + push before continuing.**
- **Next step:** commit + push ship step 7, then **TASK 5 — reusable `variable` stream** (create once
- **Verified:** build 0 warnings / 0 errors; **174/174 tests pass** (173 + the new AboutHubTests).
- **Uncommitted (this session's TASK 21 batch):** `MainWindow.xaml`, `ViewModels/MainViewModel.cs`,
`MainWindow.xaml.cs`, `Assets/llama-logo.png` (replaced with the real logo), `ytLive.Tests/AboutHubTests.cs`
(new), `TASKS.md`, `HANDOFF.md`. ai.md + ViewModels/index.md updates pending — **commit + push
before continuing.**
- **Next step:** commit + push TASK 21, then **TASK 5 — reusable `variable` stream** (create once
per channel, cache ingestion URL, bind to broadcast, feed `_rtmpUrlProvider` so the pump actually
pushes — `_currentBroadcastId` is already stashed for it). Also queued: task 21 (logo + About hub),
task 22 (voice filters). Nothing else queued — do not expand the task queue on your own. Optional,
not queued: rewriting the healed entry's `ProfileUrl` to `https://mastodon.llamachile.tube/@gramps`
(user must say the word).
pushes — `_currentBroadcastId` is already stashed for it). Also queued: **task 22 (voice filters)**,
and **setting up the itch.io product page** (the creator just made the account; the premium-unlock
URL then lands in `MainViewModel.PremiumUrl` and the About hub's "Unlock Premium" button lights up).
Nothing else queued — do not expand the task queue on your own. Optional, not queued: rewriting the
healed entry's `ProfileUrl` to `https://mastodon.llamachile.tube/@gramps` (user must say the word).
- **Landmines:**
- Never add another test that constructs `new App()` — use `RealAppHost.Run(...)` (shared STA host