Files
LlamaCasty/HANDOFF.md
T
gramps b2e8b26b6e docs(tasks): the surge week, coding only — five days sized at 3-5 units each
Non-coding is parked on Valve (identity verification, store page, depot); the week is code,
tests, debugging, polish. Ordered by what actually blocks a public build: entitlement seam
and licence UI (days 1-2), greyed tiers (2), visibility picker (3), stream resilience (3-4),
output contract (4), gold pass (5).

Sized honestly against the measured rate: ~50 units remain, 15-25 fit in five days, so the
plan names week-2 candidates and the five items that should not block launch at all
(scheduled streams, scene audio, defaults split, YPP slice 2, feedback batch).

Every unit carries the same definition of done — clean build, per-class tests, verify.sh on
the declared scope, and the falsified doc corrected in the same commit.
2026-11-01 07:31:52 -08:00

2.8 KiB
Raw Blame History

HANDOFF — 2026-11-01 (exe renamed, depot builds, output rule enforced)

State

  • Branch main, level with origin through 8f79b20; this unit is local.
  • The shipped exe is LlamaCasty.exe (AssemblyName renamed; four pack URIs fixed — the docs said three, KeepBroadcastDialog.xaml:5 was the fourth). Guarded by AssemblyIdentityTests.
  • scripts/publish.sh stages artifacts/steam-stage and refuses to finish if ffmpeg\, the licence, privacy or notices file is missing, or test assemblies leaked in. Output 257 MB.
  • The output-profile rule is built and enforced: Models/OutputProfile.cs (921,600 px / 30 fps, fail closed) resolved once in BuildEncoderOptions, which feeds the one ffmpeg process writing both outputs. MainViewModel.DeveloperMode bypasses it in Debug only.
  • Distribution is Steam-exclusive (2026-10-31): free app + paid edition as a Steam DLC; the $10/month plan sold off-Steam by Polar, stated, never sold, in-app.
  • Entitlement is steamDlcOwned || polarKeyValid; steam_api64.dll ships beside the exe and the app must start without Steam, falling back to free.
  • Site live with Steam (a9d07ce); www.llamacasty.com 301s to the apex.

Next action

Tomorrow, day 1 of the surge: the entitlement seam. IEntitlement (HasDlc, IsValid), the Steam DLC implementation on Steamworks.NET behind it, a fake for tests, and HasProOutput consuming the interface instead of IsPremium directly. The Steam-less path must fall back to the free profile. Then the licence UI's four states against the fake.

Full week in TASKS.md → "Surge week — coding only": day 2 greyed tiers, day 3 visibility picker, days 3–4 stream resilience, day 4 output contract, day 5 gold pass.

Landmines

  • ⛔ ExcludeFromSingleFile="true" on the ffmpeg content — without it the publisher bundles libav*.dll into the exe and the app ships unable to find ffmpeg. Recipe in MyMistakes.md.
  • Dev affordances are compiled out, not hidden — DeveloperPanel is removed from the Release build; Helpers/DevBuild.cs is the single source for the flag (never const).
  • Nothing may gate a feature. The only paid delta is the output profile; ShowBrandFlash stays false and entitlement must never enable it.
  • No checkout inside a Steam build — the Wallet rule. The monthly is named, never sold, in-app.
  • The org access token never ships. organization_id is public; the token is not.
  • The site publishes the model, never the numbers, and never takes payment or links a checkout.
  • No self-updater and no version banner: Steam updates the app.
  • Pre-existing: the full test suite hangs (WASAPI teardown) — per-class runs; ytLive.Tests carries 3 xUnit warnings the app-only gate does not see; a red settings control is still a bug.