Note 06 — D1 bound; the stac/ URI as an agent-bead; alertLive projection plan (Incident Viewer Taos Engine App)

**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/06-stac-binding-ducktype-alertlive-plan.md) · session 2026-06-11 · discussion: Talk: Incident Viewer Taos Engine App

## D1 RESOLVED: `https://simtable.acequia.io/incidents/stac/` Stephen, 2026-06-12. The built catalog (149 Items, geometry-enriched) synced from this bead's `artifacts/stac/` to the canonical URI. The bead copy remains the workshop original; the bound copy is the served release. The tree is relative-linked, so it's location-independent — same files both places.

## DevOps of that URI: what it becomes when an agent-bead serves it (ducktyping) Stephen's prompt: *"consider the devops of what that uri would become if an agent-bead was serving it. eg ducktyping."* Per [bead-duck-typing](https://redfish.acequia.io/guerin/.agents/d9dfa5e4-3c92-4216-bd53-13b520c59a5e/2026-06-11/notes/bead-duck-typing-file-folder-agent.md), the URI keeps one identity and grows **faces**, negotiated at interaction time: | Face | Verb | Today (static) | Agent-served (later) | |---|---|---|---| | **file** | `GET catalog.json` | the static JSON | same — static is the degenerate agent; cached release | | **folder** | `PROPFIND` / listing | the tree | same, possibly per-caller composed | | **agent** | `OPTIONS` / capabilities | n/a | advertises `/search`, `/stream`, transactions | | **search (primal)** | `GET/POST …/search?bbox=&datetime=&filter=` | n/a (client walks the tree) | STAC API over an index (Orama/DuckDB-WASM over the same Items — engine choices already surveyed in beads 43685e36 / 45761f53) | | **observe (dual)** | `GET …/stream` (SSE) | n/a | subscribe to catalog changes — the [catalog-cataloging duality](https://redfish.acequia.io/guerin/.agents/c38c1239-bfd3-44dd-8d97-1a0aa39ac8da/2026-06-10/notes/catalog-cataloging-duality.md) operationalized; needs the PubSub-URI substrate (#9e1d87f5 gap) | | **ingest (write)** | `POST` Item / `PUT` into an intake collection | n/a | transactions, role-gated (see note 07) | **DevOps shape:** the static tree is the **release artifact** (immutable, regenerable from `build-stac.mjs` — the manifest of a reproducible computation); the agent face is a **binding over it**, not a replacement. Promotion = the devops pointer discipline: the serving agent reads a `channels/`-style pointer naming which release tree it serves; a rebuild publishes a new tree + flips the pointer. Per-caller composition makes the SAME URI render role-scoped subsets (note 07). The agent-bead itself would be a hatched bead (like #agents-dashboard) whose URI *is* `incidents/stac/` via binding — agent-at-URI, serving file/folder faces from the release and agent faces from its index.

## Plan: Sandy + Palisades ducktyped into santafe.alert.live Source structure (bead `#incident-cataloging` c38c1239, artifact `santafe-alert-live-events-structure.md` + the WP-E precedent): alertLive event = `events/<eventId>/` with `event.json` (type `alertLive`, name) + subfolders `imageMeta/`, `imagePoses/`, `thumbnails/`, … — "typed leaves with a Pose + off-host media URL." Media stays off-event (referenced by `imageMeta.url`) — perfect for projection: **assets never move, only metadata is projected.** Steps (queued as AL-1..4): 1. **AL-1 Crosswalk** — STAC Item → `imageMeta` + `imagePoses` pair: cameras (Point + `view:azimuth`) → pose lat/lng+heading; IR/HS imagery (bbox) → centroid pose + footprint; FMV → either N keyframe entries (pose sampled from KLV) or one entry at the start pose — decide with Stephen; perimeters likely skipped (alertLive is imagery-centric) or as overlay leaves if the schema allows. Honor the documented schema drift (`imagePose` vs `imagePoses`, `lastUpdate`/`lastupdate`, 2-DOF vs 6-DOF) — the projector absorbs dialect. 2. **AL-2 Projector script** — `project-alertlive.mjs` (dep-free, sibling of `project-incidents-json.mjs`): STAC tree → `projections/alertlive/events/<2025Palisades>/…` + `<2026SandyFire>/…`. 3. **AL-3 Verify + OFFER** — validate against the live reference event (`events/buooas8cqaalu53n5u5rc12f`, the Santa Fe History Talk); then PUT to `santafe-alert-live.acequia.io/events/` (token exists: `.credentials/santafe-alert-live-token.txt`) on Stephen's go. 4. **AL-4 (later)** — the agent face serves the projection live (content-negotiation per consumer), replacing the generated-static step the same way the /search face replaces tree-walking. This is #catalog deliverable 3 (per-viewer duck-typing adapters), second instance after viewer-3d.

## References (bead cross-links) - Bead: Agentify Bead · [canonical](https://redfish.acequia.io/guerin/.agents/d9dfa5e4-3c92-4216-bd53-13b520c59a5e/) - Bead: Incident Cataloging · [canonical](https://redfish.acequia.io/guerin/.agents/c38c1239-bfd3-44dd-8d97-1a0aa39ac8da/)