Creator ruling 2026-11-09: finish the queue before the new features, gold pass always last. **Retired (platform's surface, not ours):** - 34 scheduled streams — YouTube owns scheduling *and* the reminder that makes it worth anything. - 50 publish recording — Studio owns upload (resumable, quota-aware, explains rejections), and an in-app uploader would widen the OAuth consent to whole-channel video management for one convenience. The app adds "Show in folder" instead. **New tasks:** 65 replay clips (the creator-side buffer YouTube does not give you), 66 timed ticker messages, 67 per-event alert videos, 68 edit-while-live + first-run On-Air. **TASK 65 spec** is the interesting one: 15 s is a clip (10/15/20, default 15); the ring holds encrypted *encoded* fragments in RAM — raw 1080p frames would be ~7.4 GB for 15 s — so there is no steady disk write and no crash debris; F10 saves; the replay layer plays once then hides in Live and loops the last 1–3 elsewhere; silent by default; three kept; the layer is excluded from its own clip (hall of mirrors). **TASK 14 gains Branch 3:** mic input gain ahead of the gate (table boom mics fall under it), webcam blank hotkey, opacity/geometry parity with a collapsed Geometry disclosure, Show-in-folder. **Decisions recorded:** the replay-buffer reversal (it was retired in 2022-era reasoning as "different product"; the case for it won), the platform-surface rule, and voice triggering deferred — always- listening in a streaming app hears the game, so the content is its own false-positive source. Queue refactored to 56 lines by archiving completed rows and the superseded surge plan; HANDOFF at 40.
41 lines
2.9 KiB
Markdown
41 lines
2.9 KiB
Markdown
# HANDOFF — 2026-11-09 (TASK 33 done; queue re-ordered for 1.0)
|
||
|
||
## 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**: `Assets/starting-background.jpg` is the corrected onboarding screen; bundled art is
|
||
hash-keyed into the layout DB, so `StampDefaultBackgroundAsset` compares bytes and re-stamps.
|
||
- 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: demo video (silent loop) is the hero; Starting screen is in the scenes section.
|
||
- **TASK 33 complete** (`0fa3006`): cause-classified step-down — shed our capture cost, then fps →
|
||
resolution for the machine; bitrate only for the upload; one-way with recovery behind a flag.
|
||
- **Creator hands cleared 2026-11-09**: vertical camera check 1–6 pass; vertical cadence 29.8/s.
|
||
- Tests: 588 green; `FAST=1 ./scripts/verify.sh` ≈ 4 min.
|
||
|
||
## Next action
|
||
|
||
- **Queue re-ordered (creator ruling):** 35 → 37 → 40 → 55 → Move → 9·5 → 14 slices → 65 (clips) →
|
||
66 → 67 → 68 → 36. TASK 34 (scheduling) and 50 (publishing) are **retired** — platform's surface.
|
||
- **New:** 65 replay clips, 66 timed ticker, 67 per-event alert videos, 68 edit-while-live.
|
||
- 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"`).
|