GPT-5.3-Codex 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.3-Codex took 2, 7 tied. Tested 27 Aug 2026.
Where they differed most
Review this. Context: `invoice.dueDate` is a string in the form '2026-08-18'; the service runs on a server set to Europe/London; the business rule is that an invoice becomes overdue only once the whole of the due DAY has passed; the field can be missing on draft invoices. function isOverdue(invoice) { const due = new Date(invoice.dueDate); const now = new Date(); return now > due; } There are three defects here and one of them only appears for part of the year. Name all three, say what each looks like from the finance team's side of the screen (what they see in the overdue list that they should not, or do not see that they should), and identify which one is seasonal and why. Then give the corrected function.
You’ve got **three distinct issues** in that function: 1. **Wrong business cutoff (start of due day vs end of due day)** - Current code marks overdue as soon as `now` passes the parsed due timestamp. - With a date-only due date, that timestamp is effectively at the **start** of the due date (or close to it), not after the day finishes. - **Finance sees:** invoices appear in overdue **during their due date**, when they should still be “not overdue” until the next day. 2. **UTC parsing of `YYYY-MM-DD` instead of Europe/London day sem…
There are three issues:
1. **A due date is interpreted as UTC midnight.**
`new Date('2026-08-18')` means `2026-08-18T00:00:00Z`, not local midnight in London.
- In winter, that is midnight in London.
- During British Summer Time, it is **01:00 London time**.
**Finance impact:** during BST, invoices due on 18 August can enter the overdue list from 01:00 on 18 August. They should not appear until 00:00 on 19 August.
2. **The comparison uses the start of the due day, rather than the end of it.**
Even ignoring the UTC issue,…Task by task
| Task | GPT-5.3-Codex | GPT-5.6 Luna |
|---|---|---|
| The pagination that skips page one | 8 | 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 | 10 | 9 |
| Slow is not the same as wrong | 9 | 10 |
| Overdue at one in the morning | 8 | 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 | 10 | 10 |
Full receipts: GPT-5.3-Codex, 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.3-Codex 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.3-Codex vs GPT-5.6 Sol · GPT-5.6 Luna vs GPT-5.6 Terra · GPT-5.5 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.3-Codex, GPT-5.6 Luna