Files
LlamaCasty/HANDOFF.md
T
gramps dbcb69278f fix(audio): a DEBUG build never shares the pipe name with Release
Creator was recording on the Release build and hit "Couldn't start the audio — another copy of
LlamaCasty is already using the audio pipe" when going live on Debug. The guard did its job (no
crash), but the collision should not have been possible: the pipe name only suffixed when
`YTLIVE_INSTANCE` was set, and a Debug launched straight from the IDE has no id — so it asked for
the same `ytllive_audio` the Release build was serving.

DEBUG now always suffixes: the claimed instance id when there is one, otherwise the process id. Any
number of dev builds can run beside the Release app, and each Debug process is distinct from every
other. Release is unchanged — it resolves to the plain name, and the whole mechanism disappears in
`#if DEBUG` as before.

`TryStartAudioPipe` now logs the resolved name (`Audio pipe: …`), so the next report of this kind is
one grep instead of a code hunt.

Tests: AudioPipeInstanceTests pins that an id-less DEBUG process never resolves to the bare name;
572 green, 0 warnings.
2026-11-06 12:30:48 -08:00

2.7 KiB

HANDOFF — 2026-11-06 (Starting art + site scenes)

State

  • main. TASK 21 (video layer + soundtrack), TASK 64 (green/blue screen) and TASK 32·4 (fragmented MP4) are complete; TASK 49 is retired (YouTube owns chat moderation — we just don't paint tombstones).
  • Starting art replaced twice today (f7e1b76, a6f15a4, fix 70e2c48): the corrected onboarding screen is Assets/starting-background.jpg; both earlier images are in Assets/archive/. Bundled art is hash-keyed into the layout DB on first seed, so StampDefaultBackgroundAsset compares the stored asset's hash with the resource and re-stamps on a mismatch — replacing a bundled background needs no version bump.
  • Left panel alert stack shipped: Steam licence indicator pinned at row 1, event rows LIFO, click → About or Logs with the event's lines painted. Detail: docs/ai/ui-surface.md.
  • Site: the Starting screen is now in the scenes section (scenes-shot), deployed 2026-11-06 12:05.
  • Tests: 575 green; FAST=1 ./scripts/verify.sh ≈ 62s. Background suite 45 green.

Next action

  • App queue starts at 33 (bandwidth step-down), then 34/35/37/40/50/55, Move transitions, 9·5.

  • Site: 15-second demo clip → compress, poster, hero with reduced-motion fallback. Creator is shooting it.

  • Site repo commits are local (llgit.llamachile.tube); deploy is ./deploy.sh, not a push.

  • Do not push the app absent a checkpoint request.

  • Steam is a wait, not a task: identity verification pending, tax review in Valve's queue (up to 30 business days). No app IDs, no store page, Release entitlement fails closed.

Landmines

  • The preview pane draws frame-source layers from a whitelist of DataTriggers. A layer type with no trigger is invisible in the preview while its decode looks healthy. Add the trigger with the layer type; pin it with MediaPreviewDisplayTests.
  • A bundled-art "version" heal cannot work: the constant and the embedded resource are compiled at different moments, so a bump can race the image it is meant to ship. Compare bytes (LayoutStore.AssetMatches). Also: AllBackgrounds() returns only the LIVE scene's rows.
  • Pack URIs for bundled assets must be assembly-qualified (/LlamaCasty;component/Assets/…): the unqualified form resolves against the entry assembly, which is the test host under dotnet test.
  • Media sessions are keyed by path + look (MainViewModel.MediaSessionKey); never acquire by raw path.
  • The audio pipe allows ONE server per name; DEBUG suffixes it (id, else pid), Release does not.
  • Integration tests constructing MainWindow must set a temporary LayoutPathOverride and clear it in finally.
  • Bundled FFmpeg stays outside the single-file exe (ExcludeFromSingleFile="true").