Wrap SyncManager.sync_user in a per-user asyncio.Lock (raising
SyncAlreadyRunning on overlap) and add sync_all_enabled() to fan out
across all enabled users with per-user failure isolation via
asyncio.gather(return_exceptions=True). The prior sync_user body is
renamed to _sync_user_locked with no logic changes.
Match the select()/scalars() convention already used throughout
app/db/repositories.py instead of the legacy Query API.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>