• erio's avatar
    feat(antigravity): add 403 forbidden status detection, classification and display · 6344fa2a
    erio authored
    Backend:
    - Detect and classify 403 responses into three types:
      validation (account needs Google verification),
      violation (terms of service / banned),
      forbidden (generic 403)
    - Extract verification/appeal URLs from 403 response body
      (structured JSON parsing with regex fallback)
    - Add needs_verify, is_banned, needs_reauth, error_code fields
      to UsageInfo (omitempty for zero impact on other platforms)
    - Handle 403 in request path: classify and permanently set account error
    - Save validation_url in error_message for degraded path recovery
    - Enrich usage with account error on both success and degraded paths
    - Add singleflight dedup for usage requests with independent context
    - Differentiate cache TTL: success/403 → 3min, errors → 1min
    - Return degraded UsageInfo instead of HTTP 500 on quota fetch errors
    
    Frontend:
    - Display forbidden status badges with color coding (red for banned,
      amber for needs verification, gray for generic)
    - Show clickable verification/appeal URL links
    - Display needs_reauth and degraded error states in usage cell
    - Add Antigravity tier label badge next to platform type
    
    Tests:
    - Comprehensive unit tests for classifyForbiddenType (7 cases)
    - Unit tests for extractValidationURL (8 cases including unicode escapes)
    - Integration test for FetchQuota forbidden path
    6344fa2a
TablePageLayout.vue 2.98 KB