Creator's Release take `ty-20261109-1142-036-0005.mp4` (1080×1920 @ 30, 300 s) measured by cropping the webcam tile and diffing frames: 29.8 distinct images/s overall, median 30 s window 30.0/s, worst 24/s, one 4-frame repeat run in 9026 frames. The app's own lines agree (`webcam 28.4–30.0/s` against camera `arrivals 29.9–30.1/s`). - The 25.6/s failure recorded on the 2026-10-05 16:9 take does **not** reproduce in the vertical tier, so the vertical take no longer blocks the cadence units. - Recorded the measurement trap in `frame-pipeline.md`: a threshold of 1.0 on a downscaled tile reports long "0.0/s" stretches during low motion — duplicates sit below 0.02, a still face at 0.3–0.7. Read the histogram before believing a count. - Vertical-tier camera check reported 1–6 pass; both creator-hands items in TASKS.md are closed. (The mic being off for the first 2:42 does not affect video cadence.)
44 lines
3.0 KiB
Markdown
44 lines
3.0 KiB
Markdown
# HANDOFF — 2026-11-09 (TASK 33 policy; vertical checks passed)
|
||
|
||
## 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: demo video (silent loop) is the hero; Starting screen is in the scenes section.
|
||
- **TASK 33**: policy + planner done (`bc62bd8`, `555ff5c`); remaining — VM subscribe, encoder
|
||
restart, toast, capture-cost shed. **Creator hands cleared 2026-11-09**: vertical camera check 1–6
|
||
pass, vertical cadence 29.8 distinct/s (no defect).
|
||
- 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"`).
|