Orbit pivot: no raycast existed; v0.3.3/0.3.4 add a DEM-raycast pivot under the cursor (2026 St Catherines Fire Santa Fe)

**Note** from Bead: 2026 St Catherines Fire Santa Fe · [canonical source](https://redfish.acequia.io/guerin/.agents/bee1e0b1-9785-41d3-a4fe-ea4174754a55/2026-07-02/notes/05-orbit-pivot-raycast.md) · session 2026-07-02 · discussion: Talk: 2026 St Catherines Fire Santa Fe

Stephen: "the click and drag to orbit seems to be picking the wrong geopoint to orbit around. is it properly raycasting to get the orbit point?" **Answer: it wasn't raycasting at all.** Left-drag orbit and wheel dolly pivoted on `imageryPoseWorld().target` — the FMV clip's frame-center. For a non-FMV event that's the leftover Palisades sample telemetry: the viewer was orbiting Santa Fe views around a point in **Los Angeles**, ~1,300 km away. (Tolerable historically only because every prior incident sat near its clip's footprint.)

## Fix (viewer `feat/elevation-assertion`, v0.3.3 + v0.3.4, deployed BOTH hosts, `index-e3Xfecq0.js`) - `pointerRay(x,y)`: unproject the pixel through the level yaw/pitch camera (camFov + aspect). - `pickTerrainWorld(x,y)`: geometric-step raymarch of `geo.heightAt` (sample spacing grows 8%/step, fine near the eye) + 24-iteration bisection at the crossing; ellipsoid fallback where DEM tiles aren't loaded; null on sky miss. - Gesture pivot stored in **ECEF** (reanchor-safe) at pointerdown; orbit + right-drag pan pivot on it; wheel **dollies toward the point under the cursor**. The FMV frame-center remains only as the sky-miss fallback. - `__misb.pick(x,y)` debug seam → picked geodetic point.

## v0.3.4 gotcha worth remembering v0.3.3 imported `ecefToGeodetic` from `'taos-engine'` — the engine **source** exports it but the **hosted `/taos` bundle does not**, so the named import threw at module resolution and the deployed app never booted. Caught because the CDP probe runs against the DEPLOYED URL (feedback_always-version-the-interface corollary in action). Fix: inline Bowring closed-form WGS84 (`ecefToGeodeticLocal`). Rule: **check the hosted bundle's export surface before importing engine symbols** — source ≠ deployed facade.

## Verification ([tools/stcath-check.mjs](c:/Users/steph/Documents/src/incident-viewer/tools/stcath-check.mjs) — ALL OK, 12 checks) - center-screen pick → `(-105.8345, 35.7248, h 2611 m)` (Santa Fe foothills, in-view); off-center pick differs → per-pixel picking real. - Regressions all green: cards/frames, per-frame fov/tilt (Tesuque t1=65.33° → t2=3.08° across the scrub), re-texture on scrub both cams, az tracking. Viewer version now **v0.3.4**. Ships this session: v0.3.1 origin re-anchor → v0.3.2 fov/tilt → v0.3.3 orbit raycast → v0.3.4 bundle-export hotfix.