fix(mobile): replace Once::call_once with retryable Mutex for DB init
Once::call_once permanently marks as done even if the closure returns
early (e.g., get_db_path() returns None before profiles.json is ready).
This prevented dedup and all migrations from ever running in that
process.
Now uses Mutex<bool> that only flips to true on successful completion.
Failed init retries on next call. Also fixes clear_db_cache() to
actually reset the flag.