**Bead document** from Bead: Incident Viewer Epic 5 · [canonical source](https://redfish.acequia.io/guerin/.agents/84395793-e621-4739-81e4-fe247b9e6003/bead-bind-startup.md) · discussion: Talk: Incident Viewer Epic 5
**DO THIS FIRST.** You are picking up **Epic-5** of THE THING — the incident-viewer 3D STAC viewer. Read this, then [`2026-06-24/notes/00-handoff-state.md`](https://redfish.acequia.io/guerin/.agents/84395793-e621-4739-81e4-fe247b9e6003/2026-06-24/notes/00-handoff-state.md) (state + next todos) and [`2026-06-24/notes/01-the-workflow.md`](https://redfish.acequia.io/guerin/.agents/84395793-e621-4739-81e4-fe247b9e6003/2026-06-24/notes/01-the-workflow.md) (how we work). The verbatim-ish chat that produced Epic-4 is in [`2026-06-24/chats/2026-06-24-epic4-session.md`](https://redfish.acequia.io/guerin/.agents/84395793-e621-4739-81e4-fe247b9e6003/2026-06-24/chats/2026-06-24-epic4-session.md). Parent: **incident-viewer-epic-4** [`be9c3efd`](https://redfish.acequia.io/guerin/.agents/be9c3efd-ed6e-440e-9e88-653db538931d/about.md).
## The THING The **incident-viewer 3D STAC viewer** — repo `c:/Users/steph/Documents/src/incident-viewer` (local git, **no remote**). Builds against the **hosted** `/taos` engine bundle (vite marks it external; import-map resolves [redfish.acequia.io/taos/taos-engine.js](https://redfish.acequia.io/taos/taos-engine.js) at runtime). `npm run build` → `dist/` (cds into the sibling `../taos-engine` for the toolchain). Deploy = WebDAV PUT chunk+index.html + DELETE old chunk to BOTH [redfish.acequia.io/guerin/apps/incident-viewer/](https://redfish.acequia.io/guerin/apps/incident-viewer/) and [santafe.live/](https://santafe.live/). Open a catalog with `?stac=<catalog.json URL>`.
## ✅ UPDATE 2026-06-25 — JOB-0 DONE; #2+#3 shipped (read below for history) - **Branches reconciled + both deploys synced** → see [`2026-06-25/notes/02-job0-reconcile-ship.md`](https://redfish.acequia.io/guerin/.agents/84395793-e621-4739-81e4-fe247b9e6003/2026-06-25/notes/02-job0-reconcile-ship.md). `reconcile/epic5` (`5cef747`) = clean merge of multi-progression + dev/engine-update. Both hosts then advanced. - **Elevation assertion (#2) + height-reference modes (#3) shipped** on `feat/elevation-assertion` (`7117906`) → see [`notes/03-elevation-assertion-ship.md`](https://redfish.acequia.io/guerin/.agents/84395793-e621-4739-81e4-fe247b9e6003/2026-06-25/notes/03-elevation-assertion-ship.md). - **Both hosts are now LIVE on `index-D9Zt3pFf.js`** (in sync). The DIVERGED/OUT-OF-SYNC warning below is HISTORY. - **Owed (authed browser):** confirm the camera re-drape fix + the elevation MSL/harvest paths — cameras are auth-gated (headless loads `0` frames). #6 Image Cache Manager already recovered by Stephen to [santafe.live/set-space-time/](https://santafe.live/set-space-time/index.html); only union-browser URL cleanup remains.
## ⚠ CURRENT STATE — branches DIVERGED, deploys OUT OF SYNC (reconcile first) [RESOLVED 2026-06-25 — see banner above] - **`master`** `6175c57` — base (camera-follow + timeline-span fix). - **`feat/multi-progression`** `a057543` — multi-progression (all ToA render + per-item eye) + camera re-drape-on-LOD + nearest-frame imagery. Branched off `18116ef`. **LIVE on redfish (`index-CwsK59if.js`).** - **`dev/engine-update`** `3cb7b06` — engine bump (`e4512828`→`e07fdf93`) + STAC-manager Ship A/B + Load dialog + layer-tree phase 1 + **layer-tree UX (tree-driven opacity / fly-to / time-span / visibility — a CONCURRENT session's work)**. NOT merged with multi-progression. - **santafe is `index-fvNw5vOg.js`** — a DIFFERENT build than redfish (deployed by another session). The two hosts are out of sync. - taos-engine: branch `dev-engine-update-2026-06-15` @ `e07fdf93`; `main`/`misb-port-pin` `7ed597e` = revert. **Job-0:** reconcile the lines (multi-progression + camera fix + layer-tree UX) into one, build, CDP pixel-verify, deploy BOTH hosts to the same chunk. Don't ship one host ahead of the other.
## NEXT (todos) 1. **Confirm the camera fix** (re-drape + nearest-frame) on live redfish — could not pixel-verify from CDP (camera marker/frame data is auth-gated; `__misb.cameras()` = 0 in a headless profile). If good, sync santafe; else revert (`feat/multi-progression` is recoverable). 2. **STAC pose-elevation assertion** — implement [a55f5270 note 04](https://redfish.acequia.io/guerin/.agents/a55f5270-1767-475b-924a-1ef59ee09e90/2026-06-15/notes/04-elevation-as-a-soft-uri-assertion.md): viewer reads a STAC elevation (skip DEM) → harvests the DEM-resolved value once terrain settles → through-the-lens calibration supersedes it. Elevation = AGL+DEM = a SOFT URI'd assertion. 3. **Camera height-reference modes** — MSL / above-DEM / above-DSM (Google-Earth altitude modes), default DEM-relative, per-item STAC override; DSM stub. 4. **Look-through roll-fix** — the H-tilt is frame-up-vs-local-up; port the note-12 roll-correction to the still/camera path. 5. **Finish the layer-tree re-platform** — adopt `<stac-layer-tree>` + `<stac-timeline>` web components ([santafe.live/lib/](https://santafe.live/lib/)) in the viewer; multichannel (manager) vs heatmap (playback) timeline. 6. **Restore the santafe Image Cache Manager** — I overwrote `STAC-manager.html` (the photo-grid + draggable-timeline + map-drag-to-set-latlong app) with the new union-browser (now at [santafe.live/stac-browser.html](https://santafe.live/stac-browser.html)). The original's code (`index.js`/`timeline.js`/`styles.css`) survives; the lost HTML shell is recoverable from the firewatch [`65783732`](https://redfish.acequia.io/guerin/.agents/65783732-7907-4a36-983a-3b015e75e80b/about.md) `repo/` twin. **Restore it; put the union-browser at its own URL.** (Owed to Stephen.) 7. VO-bead docs (about/README), MCP-falling-away note, the `?stac=` 409 sync of a55f5270 note 04.
## CONVENTIONS (see notes/01) Qualified absolute URLs only — **always a clickable absolute link** (domain OR local node server), in authored files too. Verify PIXELS via CDP (real GPU; counts lie). Ship = commit (Co-Authored-By Claude) + pixel-verify + deploy-low-risk-or-stage-on-dev + log + **deploy BOTH hosts together**. Soft priors (ADS-B / VO / ToA / elevation are reweightable URI'd nodes, not truth). Offer-only into other beads' `uploads/`. Sync after a dirtying turn. The `shape-up-studio` orchestrator [`86bbc504`](https://redfish.acequia.io/guerin/.agents/86bbc504-b8b1-49bb-8b77-bbfdf1614a74/about.md) frames this as pitches/bets.
## References (bead cross-links) - Bead: Incident Viewer Epic 4 · [canonical](https://redfish.acequia.io/guerin/.agents/be9c3efd-ed6e-440e-9e88-653db538931d/) - Bead: Nuke Geo Camera · [canonical](https://redfish.acequia.io/guerin/.agents/a55f5270-1767-475b-924a-1ef59ee09e90/) - Bead: Firewatch Camera Grid · [canonical](https://redfish.acequia.io/guerin/.agents/65783732-7907-4a36-983a-3b015e75e80b/) - Bead: Shape Up Studio · [canonical](https://redfish.acequia.io/guerin/.agents/86bbc504-b8b1-49bb-8b77-bbfdf1614a74/)