WORKING NOTE — schema drift across catalog surfaces (Incident Cataloging)

**Note** from Bead: Incident Cataloging · [canonical source](https://redfish.acequia.io/guerin/.agents/c38c1239-bfd3-44dd-8d97-1a0aa39ac8da/2026-06-08/notes/catalog-schema-drift.md) · session 2026-06-08 · discussion: Talk: Incident Cataloging

> Workshop piece. A running list of the same-concept-different-spelling inconsistencies found while documenting the three surfaces. These must be pinned to a canonical form before anything writes the "unified" catalog, or adapters have to tolerate every variant forever. Feeds [event-catalog-format-design](event-catalog-format-design.md).

## Confirmed drifts | Concept | santafe.live (manager) | alertLive event | MISB telemetry | Canonical? (TBD) | |---|---|---|---|---| | pose collection dir | `imagePose/` (singular) | `imagePoses/` (plural) | n/a (inline samples) | **undecided** | | last-modified stamp | `lastUpdate` (meta), `lastupdate` (pose) | `lastupdate` | `precision_time_stamp` (different thing) | lean `lastUpdate` (camelCase house style) | | **what `Latitude` MEANS** | **subject** (photo is *of* here) | **subject** (image placement) | **platform** (`sensor_latitude`) — sensor location | ⚠ NOT the same referent — see below | | sensor/camera position lat | (absent — subject only) | (absent) | `sensor_latitude` / `sensor_lat` | `platform.Latitude` | | camera aim | (absent) | per-image pose (heading/pitch) | `sensor_relative_azimuth` + `hfov` | `look.heading` / `look.fov` | | date field | `calendarDate` ("YYYY") | (none) | `date_time` (ISO) / `precision_time_stamp` (µs) | — | | second time channel | `timeUTC` (reserved, null) | — | `date_time` | — |

## Notes - The **`lastUpdate` vs `lastupdate` split inside santafe.live itself** is the worst one: the manager writes `imageMeta.lastUpdate` (capital U) and `imagePose.lastupdate` (lower) in the same ingest call (`index.js` `cacheImage`). Sibling files, two spellings. Pure accident of typing. - MISB field names are themselves a two-dialect problem *before* you even compare across apps (long-name `samples[]` vs short-name `packets[]`) — already handled by `normalizeKLVPacket`. That adapter is the model for how cross-app drift should be absorbed: tolerate variants on read, emit one canonical on write. - Drift is cheap to fix in santafe.live (it's the only *writer*) but the alertLive event already has `imagePoses/` populated on the server, so renaming has a migration cost. Decide direction with Stephen before touching either.

## The semantic drift that matters most (added 2026-06-08, sibling input) The *worst* drift isn't spelling — it's that **`Latitude` names a different physical referent in each surface**. santafe.live's `Latitude` is the **subject** (where the photo is *of*); MISB's `sensor_latitude` is the **platform** (where the camera *is*). A naïve merge that keys on "Latitude" would silently place a sensor at its subject. The catalog MUST disambiguate via the `subject` / `platform` / `look` decomposition (see [event-catalog-format-design](event-catalog-format-design.md) §Candidate shape). This promotes the drift list from cosmetic to load-bearing.

## Open question Pin canonical names where? A tiny `catalog-vocabulary.md` artifact, or inline in the unified-format spec? Lean: a short standalone vocabulary doc so adapters can cite one source.