fix: non-blocking full sync — don't hold mutex during turso fetches
full sync was holding the local db mutex for the entire 3+ minute
duration, blocking all search queries. now fetches each batch from
turso without the lock, then briefly locks to write to local sqlite.
search can use the (progressively filling) local db during sync
instead of being blocked for minutes.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>