Bead: Catalog

**Bead** `90f902e0-2e45-4aa1-b998-918ca3688e94` · [canonical URI](https://redfish.acequia.io/guerin/.agents/90f902e0-2e45-4aa1-b998-918ca3688e94/) · discussion: Talk: Catalog This page is the wiki facet of a [bead](https://redfish.acequia.io/guerin/.agents/); the bead is the source of truth.

> Hatched 2026-06-10 from `#incident-cataloging` to give "the catalog" — the main point of this thread — a dedicated, buildable home, separate from the broader catalog/cataloging discussion.

## Identity - **name:** `catalog` - **URI:** https://redfish.acequia.io/guerin/.agents/90f902e0-2e45-4aa1-b998-918ca3688e94/ - **GUID:** `90f902e0-2e45-4aa1-b998-918ca3688e94` - **Opened:** 2026-06-10 - **Birth-parent:** [`c38c1239-bfd3-44dd-8d97-1a0aa39ac8da`](https://redfish.acequia.io/guerin/.agents/c38c1239-bfd3-44dd-8d97-1a0aa39ac8da/about.md) (`#incident-cataloging` — "the catalog and the cataloging"). This bead carries the **noun** (the catalog) as a concrete deliverable; `#incident-cataloging` keeps the broader verb/observe/devops threads.

## Motivation (the main point) The imagery (and every other layer) is held as **one canonical [STAC](https://stacspec.org) catalog** that **duck-types to the different viewers** — each viewer wants a different directory/file structure (MISB `viewer-3d` wants `incidents.json` + per-aircraft telemetry; `alertLive` wants `events/<id>/imageMeta`+`imagePoses`; `santafe.live` its own; `taos-misb` the same assets again). Rather than copy the assets into each viewer's expected shape, the **single STAC catalog is the source of truth, and each viewer sees its expected layout as a projection** of that catalog. That projection is the [agent-as-file duck-typing](https://redfish.acequia.io/guerin/.agents/874fce5b-9c8b-4b23-b2ed-429148c6c4b7/2026-04-23/notes/uri-bind-mount.md) / Plan-9 per-caller-namespace pattern applied to a catalog: same Items, many bound surfaces. **No duplication; the viewers don't move, the catalog adapts.**

## Decisions already made (in `#incident-cataloging`, carried here) - **Adopt STAC as the catalog noun.** Entry→Item, layer→Collection, grouping→Catalog, media→`assets[]`, time→`datetime`/interval, per-type→`stac_extensions`. Don't reinvent it; inherit pystac / stac-fastapi / titiler / the leaflet+QGIS plugins and the lingua franca. Crosswalk: [#incident-cataloging stac-as-catalog-substrate.md](https://redfish.acequia.io/guerin/.agents/c38c1239-bfd3-44dd-8d97-1a0aa39ac8da/2026-06-10/notes/stac-as-catalog-substrate.md). - **Cataloging is STAC's dual, not a layer on top.** `search ↦ subscribe/connect`, `GET ↦ observe`, read-edge `#` ↦ write-edge `@` — same Items, reverse the arrows ([catalog-cataloging-duality.md](https://redfish.acequia.io/guerin/.agents/c38c1239-bfd3-44dd-8d97-1a0aa39ac8da/2026-06-10/notes/catalog-cataloging-duality.md), converges with `href.on()`/SW-observe). - **One custom extension is ours to define:** an **FMV / 6-DOF pose-stream** extension (per-frame platform+look telemetry track as an asset) — the one place our domain exceeds vanilla STAC + the `view` extension.

## Deliverables (what this bead builds) 1. **STAC mapping of a real instance** — express Palisades/Sandy as `Catalog → Collection(layer) → Item(clip/perimeter)` with `{video, telemetry, thumbnail}` assets. Validate by round-tripping the existing `incidents.json` + alertLive `imageMeta` through it. 2. **The FMV pose-stream extension** — a small `stac_extensions` schema for the 6-DOF telemetry track. 3. **Per-viewer duck-typing adapters** — the canonical catalog projected to each viewer's directory/file structure (`viewer-3d`, `taos-misb`, `alertLive`, `santafe.live`) via namespace projection, not copies. 4. **The cataloging interface** — connect/compose/subscribe over the catalog (the verb / "where people make connections").

## Proving ground `#taos-engine` ([c66cbd1d](https://redfish.acequia.io/guerin/.agents/c66cbd1d-453c-41f8-8440-179502f25de4/about.md)) — its multi-aircraft + layers panel (step-4) should be **driven by this catalog** (load Collections/Items from STAC instead of a hand-written `incidents.json`). The Sandy fire over one space+time frame is the target instance.

## Folder Layout - `2026-06-10/{notes,skills,chats,artifacts}/` — standard session homes by kind. - `uploads/` — inbound dock.

## Session Log - **2026-06-10** — Hatched from `#incident-cataloging` as the dedicated home for the STAC-catalog-that-duck-types-across-viewers deliverable. Mission + the three carried decisions recorded; deliverables enumerated. Not yet started.

## Modus Operandi - `#catalog` to read this bead; `@catalog` (PUT into `uploads/`) to message it.

## Lifecycle - Active. Energized by the inbound reference from `#incident-cataloging` (its mission's "Children" list) and `#taos-engine` (consumes the catalog at step-4). Synced to canonical URI via `/bead-sync`.

## Limitations - Fresh seed. The STAC mapping is designed-on-paper (the crosswalk in `#incident-cataloging`) but not yet built or validated against a real instance.

## References (bead cross-links) - Bead: Incident Cataloging · [canonical](https://redfish.acequia.io/guerin/.agents/c38c1239-bfd3-44dd-8d97-1a0aa39ac8da/) - Bead: 874fce5b · [canonical](https://redfish.acequia.io/guerin/.agents/874fce5b-9c8b-4b23-b2ed-429148c6c4b7/) - Bead: Taos Engine · [canonical](https://redfish.acequia.io/guerin/.agents/c66cbd1d-453c-41f8-8440-179502f25de4/)

See all: Beads