bead-bind-startup — incident-viewer-epic-4 (Incident Viewer Epic 4)

**Bead document** from Bead: Incident Viewer Epic 4 · [canonical source](https://redfish.acequia.io/guerin/.agents/be9c3efd-ed6e-440e-9e88-653db538931d/bead-bind-startup.md) · discussion: Talk: Incident Viewer Epic 4

> **➡ HANDED OFF to Epic-5 (2026-06-24):** the current resume contract is > [incident-viewer-epic-5 `84395793`](https://redfish.acequia.io/guerin/.agents/84395793-e621-4739-81e4-fe247b9e6003/bead-bind-startup.md). > Start there — it carries the diverged-branch state, next todos, the workflow, and the chat reference. > This Epic-4 bead remains the record of camera-follow → timeline-fix → STAC manager → multi-progression. **DO THIS FIRST:** you are picking up Epic-4 of the **incident-viewer 3D STAC viewer**. Read this file, then [`about.md`](about.md) and [`2026-06-14/notes/00-epic-4-charter.md`](2026-06-14/notes/00-epic-4-charter.md).

## Identity + mounts - **Write target:** this bead `be9c3efd-ed6e-440e-9e88-653db538931d` (arc notes/log/chat). - **Source of truth:** the viewer repo `c:/Users/steph/Documents/src/incident-viewer` (local git, no remote; builds against sibling `../taos-engine` via `npm run build` → `dist/`). Code is NOT in this bead. - **Mounts (read):** `cbf8b027` (viewer home / prior ships) · `31f69717` (AIR7 telemetry collab, local-only) · `c66cbd1d` (taos-orama) · `65783732` (firewatch camera-wall sibling).

## De-novo resume prompt > Mount #incident-viewer-epic-4 (write target) + #incident-viewer (`cbf8b027`) + #stac-camera-telemetry > (`31f69717`) + #taos-engine (`c66cbd1d`). Read this bead's `bead-bind-startup.md` then > `2026-06-14/notes/00-epic-4-charter.md`. THE THING = the incident-viewer 3D STAC viewer > (`Documents/src/incident-viewer`, local git no remote; `npm run build` → dist; deploy = WebDAV PUT > chunk+index.html + DELETE old chunk to BOTH `redfish.acequia.io/guerin/apps/incident-viewer/` AND > `santafe.live/`). Maps token-free (AWS Terrarium DEM + Esri imagery); NO service worker. CDP-verify > PIXELS (`tools/cdp-shot.mjs`/`ev.mjs`, serve dist :8123, `?cb=$RANDOM`, real-GPU Chrome on :9222 via > `tools/cdp-chrome.sh ensure`). Query the engine via taos-orama (`c66cbd1d/2026-06-14/skills/taos-orama`). > Every ship = commit (Co-Authored-By Claude) + deploy BOTH + CDP pixel verify + a `log.md` line.

## CURRENT STATE (2026-06-15) — read [`notes/03-overnight-handoff.md`](2026-06-14/notes/03-overnight-handoff.md) FIRST - **LIVE hosts** (master `6175c57`, chunk `index-FIMkfe9B.js`): camera-follow (`T`) + timeline-span fix. Both deployed+verified. - **dev/engine-update branch** (NOT deployed): taos-engine bumped `7ed597e`→`e4512828` (regression PASS) + **STAC manager** Ship A (`e7dfd92`: no Palisades default, union, IndexedDB, per-domain memory) + Ship B (`18116ef`: Load dialog — URL/drag-drop/local-file, history remove+re-add). Revert anchors: viewer `master`, engine `main`/`misb-port-pin`. Deploy = your call (handoff §"To go live"). - Ship 1 (camera-follow) closed `31f69717`'s GO; reply filed.

## NEXT (agreed sequence — design-sensitive, left for review) 1. **Re-platform the items panel onto Charlestown `/lib/layer-tree.js`** (vendor it): folder tree + inline opacity + properties panel + popout; the multi-STAC union is the tree data; fold the Load dialog in. 2. **Camera-pose inspector + roll-fix** — gear caret showing intrinsics+extrinsics; the look-through tilt is the frame-up-vs-local-up roll (port the note-12 roll-correction to the still/camera path). 3. **Singleton-by-URI** refinement (display-twice, independent view props, shared model) — note 01 §Deferred. 4. Carry-overs: `deploy.sh`; alertwest CORS proxy.

## CONVENTIONS Qualified URLs only; animate in ECEF; **verify PIXELS via CDP**; ship discipline above; chat log incrementally; `/bead-sync` after a dirtying turn. Windows: `python3` = Windows Python (no MSYS `/tmp`); console cp1252 (keep prints ASCII).

## References (bead cross-links) - Bead: Incident Viewer Epic 5 · [canonical](https://redfish.acequia.io/guerin/.agents/84395793-e621-4739-81e4-fe247b9e6003/)