1b3c961ff2
api_request now retries HTTP 429 responses instead of failing immediately: - Parse and honor a valid Retry-After header (seconds or HTTP-date). - Fall back to full-jitter capped exponential backoff when the header is missing or invalid. - Bound retries by max_retries and delay by max_delay (env-overridable via GITEA_MAX_RETRIES / GITEA_RETRY_BASE_DELAY / GITEA_RETRY_MAX_DELAY) — no infinite loops. - Non-429 errors and successful responses are unchanged. Sleep, randomness, and clock are injectable so retry timing is tested deterministically. Adds tests/test_retry_backoff.py (23 cases). Closes #27 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>