f06a2ff397
Reproducibly confirmed (3/3 vs 3/3 direct comparison inside the API container) that chatgpt.com's Cloudflare WAF returns 403 for the "tessera/1.0" User-Agent regardless of Accept header, and 200 for a real Chrome UA string. Parameterized fetchWithRedirectGuard's User-Agent (defaulting to the existing "tessera/1.0") and override it only for fetchIconBytes -- the HTML-discovery path (discoverFavoriteIconUrl) keeps its original User-Agent unchanged, per the no-regression constraint on that flow. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>