# HANDOFF — 2026-11-12 (bitrate correction: all four units landed) ## State - `main`; `b265d42` is the latest pushed commit. Everything after it is local. - **Bitrate saga closed.** An @8 stream averaged 5.1 Mbps because the args were capped VBR, not CBR: measured on the bundled build, a static frame at `-b:v 2000k` gave 9 kbps with NVENC's default and 1951 kbps with `-rc cbr`. Not the machine (1.8 ms render, 0 stalls) and not YouTube (no step-down logged). `700c7a8` fixes it: `-rc cbr` for NVENC/AMF, nothing for QSV (it infers CBR from bitrate == maxrate) and nothing for OpenH264 (no measurable difference). - `1e3a4f7` pre-release switch (`OutputProfile.EntitlementEnforced = false`) lets a Release build select 60 fps, and suppresses the licence row while nothing is limited. Flip at launch. - `1708667` ladder retargeted to 1080p60@12 / 1080p30@10 / 720p@6; `93719a2` makes the step-down floor the tier's YouTube minimum (6/5/3) instead of a flat 3. - `f2cab5c` the creator sets the rate (per-tier Mbps box, persisted, clamped only at the YouTube minimum); `b0f8263` files each session locally and proposes a rate between sessions on consent alone. - Verification: **672 tests green, clean build with 0 warnings** (`./scripts/verify.sh`). ## Next action - **Creator check pending in a real Release stream**: 60 fps selectable, live bitrate sitting near the rated number instead of drifting, the Mbps box and the rate prompt behaving. - Resume the queue: **40·A/C/D → Move → 9·5 → 14·16/17/18 → 66 → 67 → 68 → 69 → 70 → 36**. - Ask creator before TASK 68 (first-run ON-AIR default); settle the Release single-instance mutex before the gold pass. Do not push absent a checkpoint request. ## Landmines - `Assets/starting-background.jpg` is modified in the working tree, **awaiting the creator's visual check** — do not commit it with another unit. - **Two load-sensitive flakes, not regressions**: `ChromaKeyRealClipTests.RealClip_PlaysAtItsNativeRate` and `AudioPipelineTests.Mix_WithFiltersDuckAndGain_Lands_On_AudioPipe` failed once each in a full run and passed alone; verify.sh only tolerates its known pair, so rerun the single test first. - `RatedFor` must not cache before `_layoutStore` exists (the ctor resolves the default tier first), or the shipped default shadows the creator's stored rate for the whole run. - Every rate change is a full encoder relaunch (`ChangeEncoderAsync`), so mid-show rate changes stay out. - A tier's rate is read through `MainViewModel.EffectiveQuality`; a call site using the raw tier streams the shipped default. - `MainWindow` tests need a temporary `LayoutPathOverride`, cleared in `finally`; build with the Windows `dotnet.exe` host from WSL and read render numbers in Release.