Files
LlamaCasty/HANDOFF.md
T
gramps 7acf044e4a docs(handoff): bitrate correction landed — four units, next is the creator's live check
Scope justification: the only file outside this commit's declared scope is
Assets/starting-background.jpg, the creator's replacement art still awaiting their
visual check (recorded in the landmines).
2026-11-12 08:26:52 -08:00

2.7 KiB

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.