diff --git a/HANDOFF.md b/HANDOFF.md index 2816eaa..26536fc 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -1,4 +1,4 @@ -# HANDOFF — 2026-11-06 (Starting art + site scenes) +# HANDOFF — 2026-11-09 (TASK 33 policy; vertical checks passed) ## State @@ -11,7 +11,10 @@ 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. +- 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 diff --git a/docs/ai/frame-pipeline.md b/docs/ai/frame-pipeline.md index c2530f6..3362596 100644 --- a/docs/ai/frame-pipeline.md +++ b/docs/ai/frame-pipeline.md @@ -24,6 +24,18 @@ what makes a face judder while the file looks flawless. (The "webcam renders at used to sit in this map was WRONG: it came from a different session and counted every newly rendered layer, not webcam arrivals. Corrected 2026-10-05.) +**Vertical-tier take (2026-11-09).** `ty-20261109-1142-036-0005.mp4`, Release, 1080×1920 @ 30 fps, +300 s, webcam in its default bottom-right tile. Cropped the tile, downscaled to 160×88 grey and +diffed frame to frame: **29.8 distinct images/s overall, median 30-second 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 +`arrivals 29.9–30.1/s`. So the 25.6/s failure above does **not** reproduce in the vertical tier, and +the vertical take therefore does not block the cadence units. + +⚠️ Threshold matters. A naive `mean abs diff > 1.0` on a downscaled tile reports long "0.0/s" +stretches during low motion — that is the measurement failing, not the camera. Duplicates encode to +near-zero (<0.02); a still face with sensor noise sits around 0.3–0.7. Use ~0.05 and read the +histogram before believing a count. + **`Helpers/FrameCadence.cs`** — one pure counter, three feeds. `Add(timestamp)` on any shared monotonic clock; `Summarize()` → frames, rate (gaps ÷ span, NOT frames ÷ span — N frames span N-1 periods), gaps, hitches (default threshold 50ms ≈ 1.5× a 30fps period), longest and average gap;