**Note** from Bead: Incident Viewer Taos Engine App · [canonical source](https://redfish.acequia.io/guerin/.agents/cbf8b027-e80c-4b9f-8eb3-91d40af072d5/2026-06-11/notes/09-heat-strip-timeline-and-globe-heatmap.md) · session 2026-06-11 · discussion: Talk: Incident Viewer Taos Engine App
Stephen's corrections/directives, 2026-06-12, during the clip work:
## 1. "Clip selector was a poor design choice" → selection is BY TIME (SHIPPED, repo `2d80748`) The dropdown lasted one deploy. Replaced with the **master timeline**: spans all clips; a **thin heat strip** (3 px, amber) marks where frames exist — flat coverage from catalog ranges until a clip's telemetry prefetches, then a **per-pixel frame-density alpha ramp**. Clicking another clip's coverage **jumps to that clip at that instant** (telemetry cached → instant re-anchor); drag-scrub stays clip-local; pan/zoom clamp to the master span. At full zoom the three Palisades clips are 3–5 px slivers in 4.4 h — the honest picture of how sparse airborne coverage is. **Interim affordance:** *"later the clips will be on the items list"* (Stephen) — when Epic 2's items/layers panel lands, clips surface as catalog **Items** (select/inspect there), and the heat strip remains the timeline's coverage display, not the selector.
## 2. Date display (SHIPPED, same commit — closes the note-05 date directive) - **Thick bar at every UTC midnight** ("at 2400"), labeled bold **"Wed Jan 8"** (day + date). - **Year once** — on the first date label; shown again **whenever the year changes** across the window (multi-year zoom-out covered). Zoomed inside one day (no midnight visible): date+year once at the window's left edge. - Tick labels are HH:MM at minute-and-coarser steps, MM:SS when zoomed to seconds; `niceSec` extended to day scale.
## 3. Globe heat-map texture (FUTURE — verbatim capture) > "we can later include a heat map texture on the globe where events are. the density will be number of pixels covering that point and the color will range back from blue to red where red is the future based on timeline and blue is the past. varying the saturation down to 0 to the present" Unpacked: a terrain/globe overlay texture encoding **spatio-temporal coverage relative to the playhead**: - **Density** = number of image pixels covering that ground point (sum over products whose footprints contain it — FMV per-frame footprints, IR/HS overlays, camera view-sheds) → intensity. - **Hue** = time relative to NOW (the timeline position): **blue = past, red = future**, **saturation → 0 at the present** (so "now" reads as white/grey, deepening color with temporal distance either way). - The playhead drives it: scrubbing recolors the globe — coverage you've passed cools to blue, coverage ahead glows red. The timeline heat strip is the 1-D projection of this 3-D field; this is its 2-D ground-plane dual. - Implementation sketch (later): accumulate footprint polygons into a coverage texture (offscreen canvas / GPU pass binned per timestep, e.g. per-minute buckets), sampled by a terrain-draped material; recolor per-frame from (bucketTime − playheadTime). The per-frame FMV footprints come from the KLV tracks already cached; perimeter/imagery footprints from the STAC geometry (WP-F polygons). - Belongs with Epic 2/3 (viewer reads the full catalog; live cameras add view-sheds).
## Verification note (harness lesson) CDP `Input.dispatchMouseEvent` does **not** synthesize `pointerdown` in this harness — timeline-click tests must dispatch `PointerEvent` directly **with `setPointerCapture` stubbed** (synthetic pointerIds make it throw `NotFoundError`, aborting the handler). Add to the cdp-verify-webgpu lessons.