Classifications table: one row per unique content hash (photo/screenshot/
document/meme/unknown), keyed to embeddings.hash. Zero-shot classification
reuses embeddings videre embed already computed. See
docs/superpowers/specs/2026-07-29-screenshot-document-classification-design.md.
The fix-dates target transform, shared by [videre fix-dates](the command
that applies it) and videre status (which reports how many rows would
change without applying anything).
Forward geocoding: place name (e.g. “Berlin, Germany”) -> (lat, lon), via
the free public Nominatim (OpenStreetMap) API, with a local cache so a
repeated query never repeats the network call. See
docs/superpowers/specs/2026-08-01-location-clustering-design.md.
Library-scoped advisory locks: how videre processes coordinate around one
library, keyed by the library’s own state directory instead of a
process-global home.
Small key-value state for library-scoped bookkeeping that is neither a
pipeline run nor a setting: one row per key, integer values, table
created on first use. Used today for the face recluster watermark; kept
generic so the next piece of watch state does not grow its own table.
Aggregate library statistics for dashboard-style callers.
Plain queries over an open rusqlite::Connection, shared source of truth
for the gallery’s stats tile, videre stats, and any other embedder.
See docs/superpowers/specs/2026-07-31-dashboard-stats-backend-design.md
(Pass A) for what is and isn’t in scope.
GPS coordinate clustering: groups nearby (lat, lon) points by
haversine distance into named location clusters, persisted to
location_clusters + file_hashes.location_cluster_id. See
docs/superpowers/specs/2026-08-01-location-clustering-design.md.
Per-command pipeline run history and liveness, surfaced by videre stats
and other dashboard-style callers.
See docs/superpowers/specs/2026-07-31-dashboard-stats-pass-b-design.md
for the full design, and in particular why track_in() below does not rely
on Drop/RAII for the success/failure bookkeeping: the library-scoped command
lock’s release does, backstopped by the OS releasing flock on any process
death.
The shared status model: one producer for everything that reports
pipeline state, so the CLI, stats, and the MCP tools cannot drift
into telling different stories about the same library (the duplication
this closes was flagged as DEBT:8).
Free-form tags, stored many-to-many by content hash so they follow a photo
across duplicates and moves, exactly like marks. A tag is one opaque string;
a /-separated path is stored verbatim with no hierarchy semantics (that is a
deferred follow-up). Mirrors the shape of videre_core::marks.
Collects the non-face owned labels for one photo hash (image dimensions,
resolved location name, zero-shot category) that a sidecar export needs.
Faces are gathered separately via face_db::labeled_faces_by_hash. Returns
plain data; the binary assembles the XMP model, because that type is
binary-only.