7279cdd216
CI / test (pull_request) Successful in 28s
CI / review (anthropic--claude-4.6-sonnet, sonnet, SONNET_REVIEW_TOKEN) (pull_request) Successful in 30s
CI / review (gpt-5, security, SECURITY_REVIEW.md, SECURITY_REVIEW_TOKEN) (pull_request) Successful in 1m27s
CI / review (gpt-5, gpt, GPT_REVIEW_TOKEN) (pull_request) Successful in 1m33s
Addresses transient HTTP 500 errors from Gitea API during pattern fetches. Changes: - Add retry with exponential backoff (1s, 2s) to doGet(), max 3 attempts - Add IsServerError() helper to detect 5xx responses - No retry on 4xx errors (client errors should propagate immediately) - Respects context cancellation during backoff waits - Logs retries at WARN level for observability All existing tests pass. New tests: - TestIsServerError: validates 5xx detection across edge cases - TestDoGet_RetriesOn500: verifies recovery after transient errors - TestDoGet_FailsAfterMaxRetries: verifies proper failure after exhaustion - TestDoGet_NoRetryOn4xx: ensures client errors don't retry - TestDoGet_RespectsContextCancellation: validates cancellation during backoff Closes #68