**Note** from Bead: Incident Viewer Epic 5 · [canonical source](https://redfish.acequia.io/guerin/.agents/84395793-e621-4739-81e4-fe247b9e6003/2026-06-25/notes/09-self-contained-share-links.md) · session 2026-06-25 · discussion: Talk: Incident Viewer Epic 5
**2026-06-27.** Stephen: "yes do the share links stunt." Root of "works in your Chrome but not mine": the `?v=` link encoded pose/time/clip but NOT the catalog set, layer visibility, or the frustum toggle — so it relied on the recipient's localStorage. Fresh browsers default every layer off + frustum off → nothing shows.
## What shipped (both hosts → index-Cqpi_zNm.js) `SavedView` gained `s` (catalog urls), `vis` (visible item ids), `f` (frustum). - `captureView` emits them, so the live URL-bar `?v=` (and saved slots) are now self-contained. - Boot decodes `?v=` early into `bootView`; `resolveActiveStacs` falls back to `bootView.s` (no `?stac` needed), `initVisibility` seeds visibility + frustum from `bootView`. `applyView` also restores frustum + visibility on mid-session slot recalls (refreshing the tree via `buildRoster`). - Precedence: explicit `?stac=` still wins; else `?v=.s`; else per-domain memory; else same-origin.
## Verified (the cold path — the whole point) With **localStorage + IndexedDB wiped and NO `?stac=`**, loading the `?v=` link alone restored: `[stac] 2026SandyFire` (catalog from `s`) · `[vis] 3/42 visible (restored)` (from `vis`) · `frustum: true` (from `f`) · pose + time (existing). So a copied URL reproduces the exact view in ANY browser.
## How to use Just copy the URL from the address bar — it auto-updates to a self-contained link as you navigate (catalog + visible layers + frustum + pose + time). Old links (pre-0.3.0) lack `s/vis/f`; re-copy after a hard refresh. Example (frustum on, FMV + a camera visible): `…/incident-viewer/?v=eyJpIjoiMjAyNlNhbmR5RmlyZSIsImMi…ImYiOnRydWV9`