GPT-5.5 vs GPT-5.6 Luna for code review
Effectively a dead heat: 95–93
Same 12 code review tasks, marked blind by three rival labs. GPT-5.6 Luna took 3 tasks, GPT-5.5 took 1, 8 tied. Tested 18 Aug 2026.
Where they differed most
Review this. `Order` and `Customer` are ORM models; a customer row can be soft-deleted, in which case findByPk returns null. const orders = await Order.findAll({ where: { status: 'open' } }); const out = []; for (const o of orders) { const customer = await Customer.findByPk(o.customerId); out.push({ id: o.id, total: o.total, customerName: customer.name }); } return out; Separate the two findings cleanly: which one is a correctness bug and which one is a performance problem. Say which of the two should block the merge and why the other one should not — and be specific about what changes that answer (how many open orders, and how often this runs). Then give the corrected code.
### Finding 1 — correctness bug: nullable customer `Customer.findByPk(o.customerId)` can return `null` when the customer row is soft-deleted. This line will then throw: ```js customer.name ``` That is a correctness bug because a valid `Order` row can make this code crash. This should block the merge because the code is not safe for data that the system explicitly allows: orders may reference soft-deleted customers. --- ### Finding 2 — performance problem: N+1 queries This code does one query for the orders, then one customer query per or…
### 1. Correctness bug — should block the merge `findByPk` can return `null` for a soft-deleted customer, so this line can throw: ```js customer.name ``` That makes the entire operation fail for an otherwise valid open order. This should block the merge because it is an unhandled valid data state, not merely an edge-case performance concern. ### 2. Performance problem — N+1 queries The code performs: - one query to load all open orders, plus - one customer query for every open order. So `N` open orders produce `N + 1` database queries.…
Task by task
| Task | GPT-5.5 | GPT-5.6 Luna |
|---|---|---|
| The pagination that skips page one | 9 | 9 |
| Nothing wrong with it | 10 | 10 |
| Three things wrong in six lines | 10 | 10 |
| Two customers, one last item | 9 | 9 |
| Rank by what breaks | 9 | 9 |
| The review, as JSON | 9 | 9 |
| Slow is not the same as wrong | 9 | 10 |
| Overdue at one in the morning | 9 | 10 |
| Write only the comment | 10 | 10 |
| The complaint that is not a defect | 9 | 9 |
| Right, and unusable | 10 | 9 |
| Refuse the rubber stamp | 9 | 10 |
Full receipts: GPT-5.5, GPT-5.6 Luna · judges claude-sonnet-5, gemini-3.1-pro-preview, grok-4.5
Questions people ask
Which is better for code review: GPT-5.5 or GPT-5.6 Luna?
Effectively a dead heat: GPT-5.6 Luna edged it 95/100 to 93/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: GPT-5.6 Luna vs GPT-5.6 Sol · GPT-5.5 vs GPT-5.6 Sol · GPT-5.6 Luna vs GPT-5.6 Terra · GPT-5.3-Codex vs GPT-5.6 Luna · Claude Sonnet 5 vs GPT-5.6 Luna · GPT-5.6 Luna vs Grok 4.5
Full ranking: Best AI for code review · model pages: GPT-5.5, GPT-5.6 Luna