/ultrareview consumes free quota when failing due to server-side rate limit

Resolved 💬 1 comment Opened May 5, 2026 by ozmenun Closed May 5, 2026

Description

When /ultrareview fails with a server-side error explicitly marked as "not your usage limit" (i.e., Anthropic-side throttling), the failed attempt is still counted against the user's free quota (Free ultrareview X of 3).

This seems unintentional — a failure that the user has no control over should not consume the user's quota.

Steps to reproduce

  1. Run /ultrareview <PR#> against a public PR
  2. The cloud review process initializes, runs Setup ✓ Find ✓ Verify ✓, then fails at the Deduplicate step with: API Error: Server is temporarily limiting requests (not your usage limit) — Rate limited
  3. The tracking session shows "Review failed" at the top
  4. The user retries with the same /ultrareview <PR#> command
  5. Counter now shows Free ultrareview 2 of 3 instead of 1 of 3 — the failed attempt was counted

Expected behavior

Failed reviews caused by server-side rate limits or infrastructure errors should not be counted against the user's free quota. The counter should remain at 1 of 3 until a review actually completes (Setup → Find → Verify → Deduplicate all green).

Actual behavior

The failed attempt counts as 1 of 3 free reviews used, leaving the user with fewer attempts than expected. In our case, after one server-side failure we had 2 of 3 used — meaning a single Anthropic-side rate-limit cost us 33% of our monthly free quota for nothing.

Environment

  • Claude Code v2.1.115 on macOS (Darwin 25.4.0)
  • Repository: standard Next.js / TypeScript app, public GitHub repo
  • Date: 2026-05-05 ~10:45–11:15 Europe/Istanbul

Tracking URLs

Suggested fix

  • Detect server-side errors (rate-limit, 5xx, infrastructure failures) before incrementing the quota counter
  • OR provide a manual "report failed run" mechanism so users can reclaim quota for failures outside their control
  • OR refund quota automatically when a review fails after the Setup/Find phase (the user has no way to influence success at that point)

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗