# Bead `42b5d5db-ad57-42cf-b3d7-3aa9f9ace4e5` — **incident-viewer**

> The **incident-viewer** project bead: two viewing surfaces over incident STACs —
> [apps/incident-viewer/](https://redfish.acequia.io/guerin/apps/incident-viewer/) (the
> full-viewport map operating picture) and
> [apps/fire-grid-watch/](https://redfish.acequia.io/guerin/apps/fire-grid-watch/) (the
> watch wall over the cataloged sources). Born from Stephen's negative feedback, 2026-07-23:
> *"i asked for incident-viewer and you shipped STAC-Workbench for chellan hills. give me an
> incident viewer and a fire-grid-watch for the STAC(s)"* — the workbench is the WORK
> surface; these are the VIEWING surfaces.

## Identity

- **name:** `incident-viewer`
- **URI:** https://redfish.acequia.io/guerin/.agents/42b5d5db-ad57-42cf-b3d7-3aa9f9ace4e5/
- **GUID:** `42b5d5db-ad57-42cf-b3d7-3aa9f9ace4e5`
- **Opened:** 2026-07-23 (night)
- **Parciante:** Stephen Guerin (guerin) · **Scribe:** CE
- **Visibility:** PUBLIC

## Motivation (why a GUID)

The name `incident-viewer` was mis-resolved earlier tonight (tiered search landed it on
stac-workbench; the name offer to Oscar carried the error — corrected by dock deposit the
same night). The incident-viewer *grammar* has lived across nm-land, viewshed-viewer, and
camera-grid; this bead gives the name a real referent: the operating-picture face any
incident STAC opens into, per the redfish-style §4 map chrome and §4.5 bottom timeline.

## Mechanism (what this bead does)

1. **[incident-viewer](https://redfish.acequia.io/guerin/apps/incident-viewer/)** — one
   incident STAC (`?stac=<collection.json>`) as a full-viewport map: items as toggleable
   layers (layer-panel component), markers with rights-honest popups, bbox, bottom-docked
   event-window timeline, §4 chrome (logo chip, fullscreen, hide-UI).
2. **[fire-grid-watch](https://redfish.acequia.io/guerin/apps/fire-grid-watch/)** — the
   STAC(s) (repeated `?stac=`, default: all cataloged incidents) as a watch wall: media
   tiles + channel lanes (camera-grid grammar); links open at the source; nothing pretends
   to be a live feed that is not.
3. Cross-links, never conflation: viewer ↔ watch ↔ workbench (work/contribute,
   `?face=add`); [alert.live/incidents/](https://alert.live/incidents/) cards open HERE.

## Folder Layout

```
42b5d5db-…/
├── about.md  README.md  bead-bind-startup.md  names.json
├── uploads/README.md
├── repo/incident-viewer/ · repo/fire-grid-watch/   # history faces
└── 2026-07-23/
    ├── notes/00-incident-viewer-design.md · 01-fire-grid-watch-design.md
    ├── artifacts/sketches/incident-viewer-fan/
    └── chats/2026-07-23-incident-viewer-founding.md
```

## Session Log

- **2026-07-24 (day) — fire-grid-watch v0.2.0: the panels get their images + the EGP
  lane.** Stephen (via debbie → stac-manager): *"imagery for 2026 chellan hills fire
  entrapment doesn't have images showing in the panels"*, then *"make sure egp-mission
  STAC for chelan hills is included in the fire-grid"*. Two root causes, one per side:
  the app only ever thumbed YouTube links, and the catalog carried no image assets at
  all (every item `text/html`). Shipped: a thumbnail ladder in `buildTile` (asset role
  thumbnail/overview/visual or `image/*` type → YouTube → titled card; `onerror`
  downgrades honestly), rights-clean thumbnail assets added in the incident record
  (Commons `Special:FilePath` renditions, NASA Worldview Snapshots — link-never-copy,
  served by the source; link-only-rights items deliberately got none), and the
  authenticated egp-missions collection as a third default lane (`egp:*` → wall
  vocabulary; EO/IR PNGs are `visual` assets so the air-ops frames drape the tiles).
  Load-bearing finding: simtable's wildcard CORS cannot carry a credentialed
  cross-origin fetch, so from this origin the gated lane can never load — the notice
  says so and points at the same-origin story page, where the flights genuinely render.
  Screenshot-verified (108 tiles / 3 lanes; EGP EO smoke + heat-perimeter + IR tiles
  live; the port-squatter trap tripped again and was caught by a marker header).
  Record: [notes/02](2026-07-24/notes/02-fire-grid-v020-thumbnails-egp-lane.md).
- **2026-07-24 (night)** — **v0.2.0: the STAC on the map, not the graph.** Stephen's
  screenshot directive. The v0.1.x spiderfy ring was exposed as **a radial graph of a catalog
  artifact** (every fallback item carries the rounded collection centroid): the derived
  classification test (Point + item-bbox==collection-bbox + within 15% of centroid = forage
  fallback) now sends those items to a **right-side storymap panel** (grouped, rights
  verbatim, brush-dimmed) while only genuine geometry sits on the map (real points as dots,
  GIS coverage as honest rectangles). Header h1 deleted (the collection name is the layer
  tree's **root STAC folder**); "Map contents" row retired; layer panel de-cramped at the
  floors. Timeline now **collapsed by default** with a **UTC date+hour axis and a UTC|local
  toggle that stays DST-honest** ("01:00 again" / labeled "02:00 skipped" gap,
  node-verified against America/Los_Angeles). Minimize-tabs on every overlay. All under the
  house rules this same directive ratified (redfish-style **v0.2.4**, rules 5/10/11 + the
  `.rf-min-tab` chrome, published). Verify caught two floor violations (fixed) and filed the
  one-way selection edges as recorded minors. Commit `c197dc0`, deployed + live-verified.
  Design record: [notes/00-v020-map-not-graph-design.md](2026-07-24/notes/00-v020-map-not-graph-design.md).
- **2026-07-24** — **v0.1.1: the viewer wears the Simtable mark.** Stephen's `ask debbie
  [change logo on incident-viewer to simtable logo instead of redfish]`. The §4 logo chip now
  carries the Simtable logo (black mark vendored as `simtable-logo.png` on a light chip
  ground so it reads on the dark chrome; no dark-friendly Simtable asset existed and the
  simtable.com docroot does not serve one), chip links [simtable.com](https://simtable.com/).
  Commit `4e1cc13`; deployed + live-verified (asset 200). fire-grid-watch keeps the redfish
  chip until asked.
- **2026-07-23 (night)** — Bead opened on Stephen's negative-feedback program; both surfaces
  built (workflow: build ×2 + fan → adversarial verify → fix), deployed, live-verified;
  incidents-index links retargeted; name correction deposited to Oscar's dock. Details in
  the [chat log](2026-07-23/chats/2026-07-23-incident-viewer-founding.md).

## Modus Operandi

- Open an incident: `apps/incident-viewer/?stac=<collection.json>`; watch the season:
  `apps/fire-grid-watch/`. `#incident-viewer` to read this bead; `@…` (uploads/) to message.

## Capabilities

Viewing surfaces over incident STACs; the incident-viewer grammar's named home.

## Lifecycle

Active. Grows with the incident catalog; the §4.5 shared-timeline web component replaces the
inline timeline when the timeline-fan funnel lands.

## Limitations

- Link-only over cataloged public sources (media-forager rights discipline); no live-feed
  claims beyond items marked live at forage time; enforcement of contribution blast-radius
  stays with the workbench/access layer.
