Claude Sonnet 5 vs Grok 4.5 for code review

The verdict

Effectively a dead heat: 8988

Same 12 code review tasks, marked blind by three rival labs. Claude Sonnet 5 took 4 tasks, Grok 4.5 took 4, 4 tied. Tested 18 Aug 2026.

Where they differed most

The task — The pagination that skips page one

Review this function. Context you can rely on: `page` is 1-based — the public API docs promise that page=1 returns the first page; `items` is always an array and may be empty; `perPage` is taken straight from a query string. function pageOf(items, page, perPage) { const start = page * perPage; const rows = items.slice(start, start + perPage); const lastPage = Math.ceil(items.length / perPage); return { rows, total: items.length, lastPage, hasNext: page <= lastPage }; } List the real defects, most damaging first, and for each one say what a user of the API would actually SEE — not what the code does, what they notice. Then give the corrected function. Do not list style preferences as defects.

## Defects, most damaging first

**1. `start = page * perPage` — page=1 doesn't return the first page**
Since `page` is documented as 1-based, `page=1` should map to `start=0`. Instead `start = 1 * perPage`, which skips the entire first page.

**What the user sees:** They call the API with `page=1` (per the docs, "the first page") and get back the *second* page of data. The first `perPage` items are never retrievable through the API at all — no combination of page numbers ever returns them. This silently corrupts every paginated response and vi…
## Defects (most damaging first)

1. **`page` is 1-based, but the slice start is computed as 0-based** (`start = page * perPage`).  
   **User sees:** `page=1` is not the first page. The first `perPage` items are skipped; they get page 2’s data (or an empty page if there isn’t enough data). The page the docs promise is unreachable at `page=1`.

2. **`perPage` is a string (query string), so `start + perPage` concatenates instead of adding.**  
   Example: `start === 10`, `perPage === "10"` → end index `"1010"`.  
   **User sees:** Each page retu…

Task by task

TaskClaude Sonnet 5Grok 4.5
The pagination that skips page one68
Nothing wrong with it88
Three things wrong in six lines89
Two customers, one last item910
Rank by what breaks108
The review, as JSON98
Slow is not the same as wrong109
Overdue at one in the morning99
Write only the comment1010
The complaint that is not a defect89
Right, and unusable108
Refuse the rubber stamp1010

Full receipts: Claude Sonnet 5, Grok 4.5 · judges gemini-3.1-pro-preview, gpt-5.6-terra, grok-4.5

Questions people ask

Which is better for code review: Claude Sonnet 5 or Grok 4.5?

Effectively a dead heat: Claude Sonnet 5 edged it 89/100 to 88/100 on our code review suite — too close to matter, so pick on price or the product you already use.

How was this tested?

Both models answered the identical published code review tasks. Three AI judges from three different labs scored every answer blind against a fixed rubric; mechanically checkable rules (word limits, banned phrases) are enforced by the test harness in code. The raw outputs and judge verdicts are downloadable.

More code review head-to-heads: Claude Sonnet 5 vs GPT-5.6 Sol · GPT-5.6 Sol vs Grok 4.5 · Claude Sonnet 5 vs GPT-5.5 · GPT-5.5 vs Grok 4.5 · Claude Sonnet 5 vs GLM 5.2 · Claude Sonnet 5 vs Kimi K3

Full ranking: Best AI for code review · model pages: Claude Sonnet 5, Grok 4.5