6e1a895e7e
The OAuth-return effect ran on mount before AppShell finished booting, so completeOAuthLogin no-oped (sdk.auth undefined → null) and fell back to identify, never retrying. Gate it on useAppShell().ready so it runs once auth is up, and strip ?code= from the URL on success.