dokunfuk
This commit is contained in:
+25
-25
@@ -5,11 +5,11 @@
|
||||
> a problem. Conventions: [`schema.md`](schema.md). Rewrite this file at session
|
||||
> end, compaction, or any interruption.
|
||||
|
||||
## Session state (last updated: 2026-08-16)
|
||||
## Session state (last updated: 2026-08-16, renumbering pass)
|
||||
|
||||
- **Branch:** `main`, tracking `origin/main`. Working tree: the **TASK 5 reusable-stream slice** is
|
||||
- **Branch:** `main`, tracking `origin/main`. Working tree: the **TASK 9 reusable-stream slice** is
|
||||
committed + pushed (details below). Local branches `social-bar`/`webcam-validation` untouched (no secrets).
|
||||
- **TASK 5 — REUSABLE STREAM + HEALTH BANNER — SHIPPED 2026-08-16 (items 1–3).**
|
||||
- **TASK 9 — REUSABLE STREAM + HEALTH BANNER — SHIPPED 2026-08-16 (items 1–3).**
|
||||
- **Items 1–2 (reusable stream):** `_rtmpUrlProvider` now yields a real RTMP URL.
|
||||
`YouTubeStreamService` gains `GetOrCreateReusableStreamAsync` (lists `liveStreams?mine=true`,
|
||||
reuses the existing `cdn.isReusable` stream, inserts once on first use with
|
||||
@@ -32,18 +32,18 @@
|
||||
- **CONFIDENTIAL files created (gitignored):** `MONETIZATION.md` (pricing, billing research, unlock
|
||||
mechanics) and `MARCOM.md` (launch marketing strategy, positioning, platform strategy). These are
|
||||
NOT committed to the public repo. `Helpers/OAuthCredentials.cs` was already gitignored.
|
||||
- **TASK 5 items 6-7 scoped (not built):** visibility unlock (remove temporary "always Private" enforcement)
|
||||
- **TASK 9 items 6-7 scoped (not built):** visibility unlock (remove temporary "always Private" enforcement)
|
||||
and full broadcast form (Core + Advanced tabs with all YouTube API-supported fields). These are the
|
||||
next technical tasks after live chat (item 4) and error handling (item 5).
|
||||
- **TASK 23 trimmed** to technical scope only (billing decision, unlock mechanism, bug report, alerts gating).
|
||||
- **TASK 12 trimmed** to technical scope only (billing decision, unlock mechanism, bug report, alerts gating).
|
||||
Business details moved to `MONETIZATION.md`.
|
||||
- **TASK 26 added** — marcom/launch kit. Business details moved to `MARCOM.md`. Queued after all v1 features.
|
||||
- **TASK 15 added** — marcom/launch kit. Business details moved to `MARCOM.md`. Queued after all v1 features.
|
||||
- **Backlog updated** — removed v0.3 (stream scheduling, not needed for casual streamers). Multi-destination
|
||||
restreaming noted as "congrats, you're ready for OBS" moment.
|
||||
- **Resume point (next branch):** **TASK 5 item 4 — live chat** (`liveChat/messages` poll, right-panel
|
||||
- **Resume point (next branch):** **TASK 9 item 4 — live chat** (`liveChat/messages` poll, right-panel
|
||||
render, Super Chat + membership badges). Then item 5 (error handling), item 6 (visibility unlock),
|
||||
item 7 (full broadcast form), then TASK 23 (billing + unlock + support).
|
||||
- **TASK 25 — MASTER LIMITER — COMMITTED + PUSHED 2026-08-15.** Queued from the TRAX discussion: the
|
||||
item 7 (full broadcast form), then TASK 12 (billing + unlock + support).
|
||||
- **TASK 14 — MASTER LIMITER — COMMITTED + PUSHED 2026-08-15.** Queued from the TRAX discussion: the
|
||||
live mix summed mic + loopback with no ceiling, so hot gains could pass 0 dBFS and clip the AAC
|
||||
encode. New pure `Services/Audio/MasterLimiter.cs` (−1 dBFS ceiling, instant attack per frame,
|
||||
smoothed release) applied at the end of `AudioMixer.FillAndMix`. ONE integration test
|
||||
@@ -56,27 +56,27 @@
|
||||
TRAX music played). The whole `IGameAudioDetector`/`GameAudioDetector`/`GameAudioHysteresis` stack +
|
||||
the VM's 250ms poll timer + its two test files were **deleted**; the bar is now permanently overlaid
|
||||
at the bottom of the preview. Build **0 warnings**, full suite green.
|
||||
- **TASK 24 — POST-PAUSE POLISH BATCH — SHIPPED + COMMITTED + PUSHED 2026-08-15.** All 8 creator
|
||||
- **TASK 13 — POST-PAUSE POLISH BATCH — SHIPPED + COMMITTED + PUSHED 2026-08-15.** All 8 creator
|
||||
review issues fixed in one branch (details below). Build **0 warnings**, full suite **197 passing**
|
||||
(ONE integration test for that branch: `AudioPipelineTests.Mix_HonorsProviderGains_AndGameMute_KillsTheLoopback`).
|
||||
- **AUDIO MILESTONE (TASK 9) — SHIPPED + COMMITTED + PUSHED.** Real stream audio + voice filters +
|
||||
- **AUDIO MILESTONE (TASK 8) — SHIPPED + COMMITTED + PUSHED.** Real stream audio + voice filters +
|
||||
auto-duck + free TRAX background music. Commits `6d71ace` (milestone) + `f2f6401` (secrets cleanup),
|
||||
force-pushed (`725f5a7...f2f6401`).
|
||||
- **MONETIZATION LOCKED (2026-08-14, creator) — committed `86fcd86`.** 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**; candidates Gumroad (native affiliates =
|
||||
tiebreaker) / Lemon Squeezy. Support = in-app bug-report → git issues. Full policy in `ai.md` →
|
||||
Monetization; scoped plan in `TASKS.md` **TASK 23**.
|
||||
tiebreaker) / Lemon Squeezy. Support = in-app bug-report → git issues. Full policy in `ai.md` →
|
||||
Monetization; scoped plan in `TASKS.md` **TASK 12**.
|
||||
- **Secrets scrubbed from git history.** The DO token + passwords were purged via `git filter-branch`
|
||||
+ `git gc --prune=now --aggressive` (all-refs scan = 0 hits); values still exist in chat — keep
|
||||
treating as **compromised**; rotate the DO API token.
|
||||
- **Shipped, all pushed:** TASK 5 items 1–3 (reusable stream + health banner, 2026-08-16), TASK 25
|
||||
master limiter, TASK 24 polish batch, 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
|
||||
- **Shipped, all pushed:** TASK 9 items 1–3 (reusable stream + health banner, 2026-08-16), TASK 14
|
||||
master limiter, TASK 13 polish batch, TASK 11 (creator-hub About, `3d92bd0`), TASK 7 (meter +10 dB),
|
||||
TASK 4 ship step 7 (one-click go-live + private-only), TASK 8 audio milestone (`6d71ace`), secrets
|
||||
cleanup (`f2f6401`), monetization docs (`86fcd86`).
|
||||
|
||||
## TASK 5 — reusable stream + health banner 2026-08-16 (what changed, items 1–3)
|
||||
## TASK 9 — reusable stream + health banner 2026-08-16 (what changed, items 1–3)
|
||||
|
||||
The recorded resume point: the "last blocker" was that go-live ran the visual flow but never pushed —
|
||||
`_rtmpUrlProvider` returned null, so `FramePump.StartAsync` skipped the encoder entirely.
|
||||
@@ -103,7 +103,7 @@ The recorded resume point: the "last blocker" was that go-live ran the visual fl
|
||||
`FramePumpTests.ReusableStream_Url_From_Service_Feeds_Encoder_Startup` (real service + real pump +
|
||||
hermetic HTTP: the reusable stream's URL lands in `EncoderOptions.RtmpUrl` and the encoder starts).
|
||||
|
||||
**Out of scope this branch (next branches):** TASK 5 item 4 live chat, item 5 the YouTube error-code
|
||||
**Out of scope this branch (next branches):** TASK 9 item 4 live chat, item 5 the YouTube error-code
|
||||
mappings, and the design's bottom-strip YouTube logo/green-red dot (clickable → dialog).
|
||||
|
||||
### Item 3 — report-by-exception health banner (same session, second branch-worth of scope)
|
||||
@@ -129,9 +129,9 @@ mappings, and the design's bottom-strip YouTube logo/green-red dot (clickable
|
||||
+ the ONE integration test `GetStreamHealthAsync_Report_By_Exception_Banner_Only_On_Warning_Or_Error`
|
||||
(real service JSON parse → real reporter: good → no banner, error issue → banner text + error color).
|
||||
|
||||
## TASK 24 — the 8-issue polish batch — SHIPPED 2026-08-15 (what changed)
|
||||
## TASK 13 — the 8-issue polish batch — SHIPPED 2026-08-15 (what changed)
|
||||
|
||||
The creator's review of the TASK 9 build, all fixed in one branch (full record in `TASKS.md` TASK 24).
|
||||
The creator's review of the TASK 8 build, all fixed in one branch (full record in `TASKS.md` TASK 13).
|
||||
|
||||
1. ✅ **Desktop/game audio volume slider had no effect** — the `AudioMixer` gain seams defaulted to
|
||||
unity (the VM never passed them): the slider/mute were decorative, stream AND local. Fixed with a
|
||||
@@ -175,7 +175,7 @@ sound or TRAX played, so it sat hidden during normal use. Fix = the bar is now *
|
||||
- **MainWindow.xaml:** dropped the `Visibility` binding on the preview-overlay game bar; it renders
|
||||
unconditionally (TRAX button + "Desktop Audio" label + meter + mute + volume unchanged).
|
||||
|
||||
## TASK 25 — master limiter 2026-08-15 (what changed)
|
||||
## TASK 14 — master limiter 2026-08-15 (what changed)
|
||||
|
||||
Came out of the TRAX discussion (file-size guard? 20% cap? sound-event balance?). Verdict: two of the
|
||||
three instincts were already satisfied, one real gap existed:
|
||||
@@ -195,10 +195,10 @@ three instincts were already satisfied, one real gap existed:
|
||||
0.95 loopback bed capped to exactly 0.891 on the wire while staying audible. Plus 3 unit tests for
|
||||
the pure math.
|
||||
|
||||
## TASK 9 audio milestone — SHIPPED 2026-08-14 (what changed)
|
||||
## TASK 8 audio milestone — SHIPPED 2026-08-14 (what changed)
|
||||
|
||||
The creator's feature review settled this as the single next branch ("all the audio issues done and
|
||||
tested — a huge milestone"). Final spec and full shipped-state records live in `TASKS.md` (TASK 9)
|
||||
tested — a huge milestone"). Final spec and full shipped-state records live in `TASKS.md` (TASK 8)
|
||||
and `ai.md` ("Live audio capture"). Highlights:
|
||||
|
||||
- **Real audio into the encoder.** `FfmpegArgs` now builds `-f f32le -ar 48000 -ac 2 -i \\.\pipe\ytllive_audio`
|
||||
@@ -207,7 +207,7 @@ and `ai.md` ("Live audio capture"). Highlights:
|
||||
before `_framePump.StopAsync()`.
|
||||
- **2-input mix (mic + loopback)**, honest gains: `micGain = MicVolume` (mute = 0),
|
||||
`loopbackGain = GameMuted ? 0 : GameAudioVolume` × duck. No third music channel.
|
||||
- **Voice chain on the mic** (TASK 22), before meter AND mix: bass 120 Hz +4 dB → treble 8 kHz +3 dB →
|
||||
- **Voice chain on the mic** (TASK 10), before meter AND mix: bass 120 Hz +4 dB → treble 8 kHz +3 dB →
|
||||
gate (0.005 / hysteresis 0.5) → compressor (0.5, 4:1). Pure TDF2 DSP, per-sample, always on.
|
||||
- **Auto-duck:** mic RMS > 0.02 → loopback ×0.25 (−12 dB), attack 0.05 / release 0.005.
|
||||
- **TRAX (free BGM):** `MusicPlayer` = MediaFoundationReader → `VolumeWaveProvider16` at fixed **0.20** →
|
||||
@@ -224,7 +224,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), `PremiumUrl` (TASK 23 seam).
|
||||
track (YouTube mutes VODs with copyrighted music — future feature), `PremiumUrl` (TASK 12 seam).
|
||||
|
||||
- **Landmines:**
|
||||
- Never add another test that constructs `new App()` — use `RealAppHost.Run(...)` (shared STA host
|
||||
|
||||
Reference in New Issue
Block a user