fix: non-blocking ensureRepo and direct PDS profile fetch on login
ensureRepo was blocking the OAuth callback for up to 25+ seconds on
large repos (e.g. 44MB), causing ASWebAuthenticationSession timeouts
and "Invalid code" errors on retry. Now ensureRepo runs in the
background and the bsky profile is fetched directly from the user's
PDS via getRecord (public, instant). Also fixes empty grain profiles
not being backfilled from bsky when the record already existed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>