GLM 5.2 vs GPT-5.6 Luna for code review

The verdict

GPT-5.6 Luna wins, 9587

Same 12 code review tasks, marked blind by three rival labs. GPT-5.6 Luna took 8 tasks, GLM 5.2 took 1, 3 tied. Tested 18 Aug 2026.

Where they differed most

The task — Overdue at one in the morning

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.

## Three defects

### 1. Missing `dueDate` is not handled
`invoice.dueDate` can be missing on drafts. If it comes through as `null`, `new Date(null)` evaluates to the Unix epoch (1 Jan 1970), not an Invalid Date. `now > 1970` is always true.

**What finance sees:** draft invoices (no due date yet) show up in the overdue list. They shouldn't be there at all — they're not even issued.

### 2. Start-of-day is used instead of end-of-day
`new Date('2026-08-18')` resolves to *midnight* at the start of the 18th. The business rule says the invoice is o…
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

TaskGLM 5.2GPT-5.6 Luna
The pagination that skips page one89
Nothing wrong with it810
Three things wrong in six lines910
Two customers, one last item99
Rank by what breaks89
The review, as JSON89
Slow is not the same as wrong1010
Overdue at one in the morning710
Write only the comment1010
The complaint that is not a defect89
Right, and unusable109
Refuse the rubber stamp910

Full receipts: GLM 5.2, GPT-5.6 Luna · judges claude-sonnet-5, gemini-3.1-pro-preview, gpt-5.6-terra

Questions people ask

Which is better for code review: GLM 5.2 or GPT-5.6 Luna?

GPT-5.6 Luna — it scored 95/100 against 87/100 on our 12-task code review suite, winning 8 tasks to 1 with 3 tied. Every answer was marked blind by three judges from three rival AI labs.

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 · GLM 5.2 vs GPT-5.6 Sol · GPT-5.6 Luna vs GPT-5.6 Terra · GPT-5.3-Codex vs GPT-5.6 Luna · GPT-5.5 vs GPT-5.6 Luna · Claude Sonnet 5 vs GPT-5.6 Luna

Full ranking: Best AI for code review · model pages: GLM 5.2, GPT-5.6 Luna