- Log status code and response body when Discord /oauth2/token fails - Helps identify why ExchangeCodeAsync returns null in production Bump version → 2.8.1 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- DiscordAuthServiceTests: authorize URL, token exchange, profile fetch - PlatformIdentityTests: Telegram fallback, Discord identity, avatar URL Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>