# Backlog Small, near-term open tasks that don't warrant a full milestone. Milestones live in `docs/ROADMAP.md`; this file tracks the loose ends between them. Remove an item when it's done. ## Open - [ ] **pgvector spike — final coverage snapshot.** The feasibility spike has *passed* (embeddings readable, `assetId → asset.id` join clean, shape pinned: `smart_search.embedding`, 1152-dim, cosine `<=>`). The CLIP re-run with the stronger model is still in progress (coverage ~70% and climbing as of 2026-06-27). When it reaches ~100%, run `scripts/pgvector_spike.py` once (no flags) and commit the refreshed findings doc to record final coverage. See the "Definition of done" in `docs/superpowers/specs/2026-06-27-pgvector-embedding-spike-design.md`. - [ ] **M1 validation gate — run on a hard, GPS-poor sample.** M1 shipped, but the acceptance-bar run on a hard sample (not the easy last trip) is still pending before widening. See `docs/M1-validation-gate.md` and the M1 row in `docs/ROADMAP.md`. ## Later / dependent - [ ] **M1.5 — provision a least-privilege read-only Postgres role.** When M1.5 builds the pgvector reader, replace the spike's session-level read-only guard (using Immich's write-capable `postgres` user) with a dedicated `SELECT`-only role. Recipe is in the findings doc. Also: the pgvector reader belongs in `shared/photoflow/immich` (the only Immich client) and any SQLite access in `shared/photoflow/core` (the only SQLite owner) — not in app-level code.