**Note** from Bead: Incident Viewer Epic 5 · [canonical source](https://redfish.acequia.io/guerin/.agents/84395793-e621-4739-81e4-fe247b9e6003/2026-06-25/notes/05-frustum-whiskers-build.md) · session 2026-06-25 · discussion: Talk: Incident Viewer Epic 5
**2026-06-25.** Stephen picked from [Debbie's dock](https://redfish.acequia.io/guerin/.agents/84395793-e621-4739-81e4-fe247b9e6003/2026-06-25/sketches/frustum-alternatives.html) and I built it. Live on BOTH hosts → `index-C17Yhuap.js`. Branch `feat/elevation-assertion` `a5989d7`.
## Stephen's decisions - **Geometry: B — corner rays only** (whiskers). No rectangle, no axis/footprint. *"we'll let the image give the sense of the rect when not projected and when projected we can see what we need. don't add extra fluff."* - **Rendering model: follow active P-mode** (terrain-drape is the P-on half — *"1 and 4 aren't competing, 1 is half the condition of 4"*). - **Off by default**, and *"turn off the frustum lines when 'i' image is toggled off."*
## What shipped - **Root cause of "yellow box in the way":** the camera MARKERS (green octahedra + flat azimuth wedge) were only decluttered for camera look-through (`camLock`), NOT for FMV sensor-lock — so they floated in front of an FMV look-through. Fixed: hidden during **ANY** look-through (`camLock || sensorLock`). - **Whiskers** (`buildWhiskersMesh`): 4 thin cyan rays from the camera apex (eye) to the 4 image corners — open, no filled face, so they never occlude the look-through (apex = your eye ⇒ rays sit at the screen edges). Built on the CamCard (reuses `buildCamCard`'s corner math); ride the card, so billboard when P off, projected source when P on. - **Off by default.** `'F'` toggles (`__misb.frustum()`); hidden when the image (`'i'`) is off. The flat azimuth wedge is retained but only drawn when the frustum is on — corner rays are the primary viz.
## Verify - Build clean → `index-C17Yhuap.js`; tsc zero NEW errors. App loads, frustum toggles (`__misb.frustum(false)`→false, `(true)`→true), no render regression [`tools/_e5-frust-load.png`]. - **Owed (authed browser):** the whiskers themselves only render for real cameras (auth-gated; headless loads 0 frames). Confirm: press `F` over a camera → cyan corner rays, no occlusion at camera-center; `i` off → rays vanish; look through an FMV → no camera glyphs floating.
## Known refinements (live-tuning, deferred) - **P-on terrain footprint:** the whiskers currently ride the billboard corners; landing the corner rays on the actual terrain footprint when P is on is a refinement (needs a 4-corner terrain raycast). - **FMV's own frustum (#5):** FMV draws no frustum mesh today, so "show frustum or not" for FMV is a NEW add (the sensor footprint) — deferred. The whiskers above are for the still/AlertWildfire cameras. - **Per-camera vs global toggle:** `'F'` is global for now; a per-camera toggle (Debbie's roster-eye sibling) can come later. - Ray styling currently fixed cyan @ 1.5 m width — tune live if needed.