build: the exe is LlamaCasty.exe, and the publish script proves the artifact
Renames AssemblyName to LlamaCasty before the first Steam depot — Steamworks is explicit that renaming a live exe is painful, so this had to land first, not later. Four assembly-qualified pack URIs carried the old name, not three: MainWindow (window icon), OverlayHost (logo), RenameRecordingDialog and KeepBroadcastDialog. Pack URIs resolve by assembly name at runtime, so a stale one compiles, passes every test and then silently renders nothing the first time that view opens. AssemblyIdentityTests guards both halves — the assembly name, and no source XAML still naming the legacy assembly. Packaging/Package.appxmanifest and package-msix.sh carry the exe name too. scripts/publish.sh replaces the by-hand publish: single-file win-x64, ReadyToRun, ffmpeg beside the exe, and it refuses to finish if ffmpeg, LICENSE, PRIVACY.md or THIRD-PARTY-NOTICES.txt are missing, or if a test assembly leaked in. That last guard exists because the first publish was wrong in a way no test could see: PublishSingleFile + IncludeNativeLibrariesForSelfExtract bundled the libav*.dll family into the exe — a 9-file output with no ffmpeg folder and a 182 MB binary, so the locator would have found nothing at runtime. ExcludeFromSingleFile="true" on the content keeps the folder a folder. Diffing against a control publish without the single-file flags found it; guessing at item globs wasted two attempts first (recorded in MyMistakes.md). Measured: 127 MB exe + 129 MB ffmpeg = 257 MB depot. Tests: AssemblyIdentity, StorePackaging, BuildStamp, BundledFonts all pass; app builds with 0 warnings.
This commit is contained in:
+23
-18
@@ -1,35 +1,40 @@
|
||||
# HANDOFF — 2026-10-31 (Steam is the only channel; the site says so)
|
||||
# HANDOFF — 2026-11-01 (the exe is LlamaCasty.exe; the depot folder builds and verifies)
|
||||
|
||||
## State
|
||||
|
||||
- Branch `main`, level with `origin` through `57ef9e7`; this unit is local.
|
||||
- **Distribution is Steam-exclusive** (creator ruling 2026-10-31): a free app on Steam with the paid
|
||||
edition as a **Steam DLC**; the **$10/month** plan is sold off-Steam by Polar and *stated, never
|
||||
sold*, inside a Steam build. Winget, the direct zip, the Store and the certificate that served
|
||||
them are retired. `commercial.md` → Channels owns policy, `Distribution.md` the depot mechanics,
|
||||
`decisions.md` the cause of death.
|
||||
- **Entitlement is `steamDlcOwned || polarKeyValid`**, both resolving to one `OutputProfile`.
|
||||
`steam_api64.dll` ships beside the exe; the app must start without Steam and fall back to free.
|
||||
- **Site updated and deployed** (`a9d07ce`): "Coming soon to Steam" ×6, zero Microsoft references,
|
||||
privacy page says Steam bills the paid edition. The CTA gains a wishlist button only when the
|
||||
store page is public.
|
||||
- `www.llamacasty.com` resolves and 301s to the apex. Recipe in `MyMistakes.md`.
|
||||
- Branch `main`, level with `origin` through `8f79b20`; this unit (the artifact rename) is local.
|
||||
- **The shipped exe is `LlamaCasty.exe`.** `AssemblyName` renamed; four pack URIs fixed (the docs
|
||||
said three — `KeepBroadcastDialog.xaml:5` was the fourth); manifest, MSIX script and
|
||||
`StorePackagingTests` follow. Guarded by `ytLive.Tests/AssemblyIdentityTests.cs`.
|
||||
- **`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.
|
||||
- **Distribution is Steam-exclusive** (creator ruling 2026-10-31): free app + paid edition as a
|
||||
Steam **DLC**; the **$10/month** plan sold off-Steam by Polar and *stated, never sold*, in-app.
|
||||
`commercial.md` → Channels is policy; `Distribution.md` is depot mechanics.
|
||||
- **Entitlement is `steamDlcOwned || polarKeyValid`**; `steam_api64.dll` ships beside the exe and
|
||||
the app must start without Steam, falling back to free.
|
||||
- **Site is live with Steam** (`a9d07ce`). `www.llamacasty.com` 301s to the apex.
|
||||
|
||||
## Next action
|
||||
|
||||
1. **Steamworks onboarding** (creator is in it now): NDA → identity → company details → tax
|
||||
interview → payout bank → **$100 Steam Direct** → create the base app, note the App ID.
|
||||
2. Then the surge slice: artifact shape (rename + publish + `steam_api64.dll`) → OutputProfile gate
|
||||
+ TASK 53 geometry tests → entitlement seam → licence UI + a Steam-less launch test.
|
||||
1. **OutputProfile gate** — ≤921,600 px / ≤30 fps for the stream **and** the recorder, greyed tier
|
||||
entries, plus the TASK 53 geometry tests that pin every tier.
|
||||
2. Then the **entitlement seam** (`IEntitlement`, Steam DLC path behind a fake, Polar path) and the
|
||||
licence UI.
|
||||
3. Steamworks: App ID waiting on identity verification; then depot, store page (public 2 weeks
|
||||
before release) and the DLC app.
|
||||
|
||||
## 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`.
|
||||
- **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 are the way.
|
||||
- Pre-existing: the **full test suite hangs** (WASAPI teardown) — per-class runs only; and
|
||||
`ytLive.Tests` carries 3 xUnit analyzer warnings the app-only gate does not see.
|
||||
- Not every hex is a theme colour — `BorderColorPalette`/chat defaults are USER DATA; on-stream
|
||||
graphics come from `OutputPalette`. A red settings control is still a bug.
|
||||
|
||||
Reference in New Issue
Block a user