**Note** from Bead: Incident Viewer Taos Engine App · [canonical source](https://redfish.acequia.io/guerin/.agents/cbf8b027-e80c-4b9f-8eb3-91d40af072d5/2026-06-11/notes/07-ux-share-mix-roles-ics-editing.md) · session 2026-06-11 · discussion: Talk: Incident Viewer Taos Engine App
Stephen's framing (2026-06-12): space and time are the great query powers; STACs tie to roles; first template = ICS; incident-viewer grows editing (QR phone → browserdav imagery/location as STAC; phone-only Items flagged until the SW Acequia-CDN syncs). Synthesis below; informs incident-viewer affordances + the catalog manager.
## 1. Sharing a map view = minting a URI View state serializes to a citable URL: `?incident=&collections=&bbox=&t=&view=<camera-pose>&live=`. The share button mints it (+ QR for cross-device). A shared view is **a STAC query + a camera pose at a moment** — nothing is copied; the recipient's app re-runs the query against the same catalog. Saved views are the same object kept; per note 04, a saved view is also a **subscription** (the dual) when the incident is live. This extends the existing deep-link discipline (note 03) and matches Kaz's F1.2 "filter state shareable as URL."
## 2. Creating / mixing STACs = composing catalogs, not copying items STAC catalogs natively nest by **links** — so a "mix" is a new `catalog.json` whose children link into other catalogs' collections (Palisades fmv + Sandy cameras + my-phone contributions + SantaFeHistory photos). That's `bead-mount` semantics lifted to catalogs: union-read across mounted sources, one create-target for new Items. UX: - **Add catalog** (picker of known catalogs + paste-any-URL — resource-as-URI, foreign catalogs welcome). - Each mounted catalog = a group in the layers panel with a source/trust badge (note 04). - **Save composition** → a new catalog URI (a curation artifact, attributable, shareable). Creating a STAC is usually *authoring a composition*; raw-Item creation happens at the edges (phone capture, recorders, vendors).
## 3. Space + time are the query powers Every browse is `bbox ∩ datetime` (STAC-native). The **map extent and the timeline window ARE the query** — no separate search form for the common case; CQL2 `filter` (type, platform, role) refines. The timeline gains the date display + LIVE button (note 05); the map IS the bbox input (Kaz's F1.4 inset-map filter collapses into the main view). A *standing* query (region + window kept) = a connection = the dual again.
## 4. Roles via ICS (the first governance template) Per [acequia-as-group-ics-template](https://redfish.acequia.io/guerin/.agents/31bd5380-d743-420f-81a1-9258e7fbbf9a/2026-06-03/notes/acequia-as-group-ics-template.md): an **incident is an event-acequia** with ICS as its governance template (IC, Command Staff [PIO/Safety/Liaison], Section Chiefs; Type 5→1 scaling; training vs live vs reconstruction modes). Applied to STAC: - **Collections are role-scoped.** The SAME `incidents/stac/` URI renders per-caller (Plan-9 composition): public/anonymous → public collections; **PIO** → public-shareable imagery + approved products; **Ops/Plans** → tactical layers (FMV, IR/HS, perimeters); **IC** → everything + intake queues. Role-bindings carry the scope; the catalog needs no per-feature ACL code. - **Write scope too:** which collections a role may add Items to (citizen → their intake collection; Ops → tactical; nobody edits provenance). - Citizen/news/family acequias are the same machinery with different templates — ICS is *first*, not only.
## 5. Editing: QR phone → browserdav → STAC Item → CDN sync The ingestion ladder (extends pose-ux-ui's calibration ladder downward to capture): 1. **QR on the viewer** → phone opens a capture/contribute page bound to this incident + the contributor's role (the session-import pattern: a binding with ttl/scope). 2. Phone captures or picks gallery imagery; **browserDAV** (in-browser WebDAV client, ambient/cap-token auth) writes it as a **STAC Item + asset**: GPS + compass + EXIF give an automatic rung-1/2/3 pose (position, heading, time); content-addressed id (SHA-256 — santafe.live already does this). Lands in the contributor's **intake collection** per §4. 3. **Phone-only at first:** the Item exists on the phone's origin only. It carries `sync: pending` (flagged in UI on both phone and viewer — "1 item not yet replicated"). 4. **The service-worker Acequia-CDN replicates** — webdav-sync / CouchDB-style eventual consistency across the peer mesh (the distributed-origin + URI-participant-hosting pattern: heavy readers become hosts). Content-addressing makes replication conflict-free for assets; metadata merges by `lastUpdate`. Flag clears when replicated to ≥N origins; ETag/If-Match guards metadata races. 5. Later refinement: the Item's auto-pose is improvable in-viewer via pose-ux-ui (snapshot / campanile) — same Item, better geometry, edit recorded with provenance. **Sync-state is catalog data:** `sync: pending|replicated(n)|canonical` is a property the viewer can render (badge on the Item, hatched marker on the timeline) — and the recorder/CDN agents are background WORK-QUEUE processes per the devops frame.
## Affordance summary for incident-viewer (delta over notes 03/04/05) - Share button → mints view-URI + QR. · Add-catalog / save-composition (mix & match). · Role-aware layers panel (per-caller composition; ICS labels). · LIVE + date timeline (note 05). · **Contribute** affordance (QR → phone capture → intake collection) + sync-state badges. · Editing stays metadata-first (pose/time/tags); pixel editing stays out (Kaz's dataset-manager boundary).
## References (bead cross-links) - Bead: 31bd5380 · [canonical](https://redfish.acequia.io/guerin/.agents/31bd5380-d743-420f-81a1-9258e7fbbf9a/)