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.
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.
Aggregate library statistics for dashboard-style callers.
Plain queries over an open rusqlite::Connection - shared source of truth
for videre report’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() below does not rely
on Drop/RAII for the success/failure bookkeeping - only the lock’s
release does, and even that is backstopped by the OS releasing flock on
any process death.