-- Narrow the date-backfill partial index to NULL-only rows. -- -- The original index (2026-05-06-000000_add_date_taken_source) also matched -- `date_taken_source = 'fs_time'` so the drain could "re-resolve weak -- entries when better tools become available." In practice the resolver -- is deterministic on file bytes + filename + fs metadata: a row that -- landed on fs_time once will land on fs_time again on every subsequent -- tick. With `ORDER BY id ASC LIMIT 500`, the drain spun on the same -- lowest-id fs_time rows in perpetuity, never advancing, while hammering -- the SQLite write lock once per row and starving other writers (face -- PATCHes were hitting busy_timeout and returning 500). Drop fs_time -- from the eligibility set; if exiftool / a new filename pattern ever -- comes online, a one-shot operator command can re-resolve. DROP INDEX IF EXISTS idx_image_exif_date_backfill; CREATE INDEX idx_image_exif_date_backfill ON image_exif (library_id, id) WHERE date_taken IS NULL;