Spatial + timeline roadmap (camera-grid): what's built, what's next (2026-06-21) (Time Line Web Component)

**Note** from Bead: Time Line Web Component · [canonical source](https://redfish.acequia.io/guerin/.agents/ade9cea6-f50e-4922-8266-4bdd14ed9c73/2026-06-21/notes/07-spatial-roadmap-triangulation-geopoints-channels.md) · session 2026-06-21 · discussion: Talk: Time Line Web Component

Stephen issued a burst of direction during the `?stac=` session. This note records it so it isn't lost between turns. **Built this session** is committed in `repo/camera-grid/`; **Next** is captured here as the agreed direction (not yet ratified designs — sketch-led when UI).

## Built this session (committed) - **Red UV→heading ray** in grid view + inspector, object-fit-accurate projection (`891f50f`). - **paint→mask** rename (one annotation type for hand-painted + frame-diff masks) (`f080e64`). - **Panorama deferred** (`PANO_ENABLED=false`) → its own timeline-responsive **view tab** later, overlaying the current narrow camera view as a **fov-window** on the wide sweep (`984a35a`). - **`?stac=col1,col2`** loads STAC collections: camera items → the wall (frustums/inspect/projection all work); adsb items → heading-glyph map layer (`984a35a`). - **Timeline collapse⇄expand**: expanded = per-camera channels, collapsed = aggregate density **heatmap**; the **inspected camera is highlighted amber** so you see where it sits in the whole timeline; timeline stays scrubbable in individual mode (`62419d6`). - **Green FOV-centerline** per frustum, always on, projected ~26 km so centerlines visibly cross (proto-triangulation); distinct from the red ray (`ef21717`).

## Next (agreed direction) ### A. Map lines — the triangulation ladder 1. **Green centerlines (done)** show general intersection of where cameras are looking. 2. **Multi-point colored triangulation (next).** Place **multiple colored points in each image**; each point's bearing draws a **same-colored line** on the map; lines of the *same color* across cameras **intersect** at the feature. This is the manual/visual form of the space-carve in [note 06](06-plume-pipeline-flow-and-fork.md) — the back-projection / ray-crossing seam note 05 flagged. Generalizes the single red ray to N colored rays per camera. 3. **Full-screen grid mode** to support it: expand to a full-screen camera grid where the user **selects all or some cameras** to include; colored points placed across the selected set triangulate together. (Couples to the inspect-mode reflow in note 05 and the timeline channel selection below.) ### B. UV → geopoint via terrain intersection (a *derived* STAC layer) - Mousing a UV will **estimate a lat/long** by intersecting the camera ray with a terrain surface: **DEM** or **Google Photorealistic 3D Tiles (GP3T)** — not just the flat-bearing ray we draw now. (taos-engine already has GP3T via Cesium ion, per `b6fcda63`; the incident-viewer has DEM picking.) - The derived **geopoints become STAC Items** in a **derived layer**. Crucially, per feedback_every-constraint-is-soft: **their coordinates are not fixed** — they **change as camera calibrations improve or context changes** (level-mount now → panosphere φ–θ later, `9943ac1c`). The derived layer stores provenance (which frame, which pose/calibration version) so re-derivation is cheap. This is the "estimate = current min of a collective error surface" stance applied to imagery. ### C. Timeline as channels (expanded on note 06 / the build) - Collapsed = heatmap (done) "like incident-viewer"; expanded = all channels (done). - **Annotation channels**: annotations become their own timeline lanes in different modes — a user flags something of interest and it appears as a channel event. - **The "stitcher" workflow** (this is the social/role seam — lives in [social-foraging `d2798c01`](https://redfish.acequia.io/guerin/.agents/d2798c01-dce5-412a-8be7-b85806f72214/)): a flag/annotation → a **calibration task** routed to **stitchers** (people who ensure a camera is calibrated) → so that frame is calibrated and the annotation earns **real geospatial coordinates**. Annotation (note 03/05) → stitcher task → calibration (`9943ac1c`) → geopoint (B) is one pipeline. ### D. Panorama view tab (deferred from inspect) - A separate tab that **scrubs with the timeline** and overlays the **current narrow camera view as a fov-window** on the wide panoramic sweep (where this 4–15° frame sits in the ~180° pano).

## Relationships - Triangulation (A) + terrain geopoints (B) are the manual + automated forms of the same reconstruction seam as the plume space-carve ([note 06](06-plume-pipeline-flow-and-fork.md)). - The derived-geopoint STAC layer (B) is consumed by the **derivative-STAC-by-relevance** flow in [social-foraging](https://redfish.acequia.io/guerin/.agents/d2798c01-dce5-412a-8be7-b85806f72214/) and tagged by [scene-description](https://redfish.acequia.io/guerin/.agents/bb0dd4b5-09a3-4d98-ac0f-eadc3ad52949/). - All of it rides the camera model `uvToAzEl` (level-mount) that sharpens when the panosphere calibration lands.

## References (bead cross-links) - Bead: Social Foraging · [canonical](https://redfish.acequia.io/guerin/.agents/d2798c01-dce5-412a-8be7-b85806f72214/) - Bead: Scene Description · [canonical](https://redfish.acequia.io/guerin/.agents/bb0dd4b5-09a3-4d98-ac0f-eadc3ad52949/)