Claude Code PR-reviewworkflow om leesbaarheid, correctheid en randgevallen vooraf te controleren en vervolgens een checklist voor reviewers en vragen op te stellen.

PR-reviews duren zelden eeuwig omdat de code "moeilijk" is. Ze duren lang omdat de reviewer intentie, risico en impact uit een diff moet reconstrueren die veranderingen toont, niet het hele verhaal.
Een kleine aanpassing kan verborgen afhankelijkheden raken: hernoem een veld en een rapport breekt, verander een standaardwaarde en het gedrag verschuift, pas een condition aan en foutafhandeling verandert. Reviewtijd groeit wanneer de reviewer rond moet klikken voor context, de app lokaal moet draaien en follow-upvragen moet stellen alleen om te begrijpen wat de PR zou moeten doen.
Er is ook een menselijk patroonprobleem. Mensen scannen diffs op voorspelbare manieren: we focussen op de "hoofd"-verandering en missen de saaie regels waar bugs zich verstoppen (grenscontroles, null-handling, logging, opruimwerk). We hebben ook de neiging te lezen wat we verwachten te zien, dus copy-paste fouten en omgekeerde condities kunnen doorheen glippen.
Een goede pre-review is geen definitief oordeel. Het is een snelle, gestructureerde tweede blik die aangeeft waar een mens moet vertragen. Het beste resultaat is:
Wat het niet moet doen: de PR "goedkeuren", eisen verzinnen, of runtime-gedrag raden zonder bewijs. Als de diff niet genoeg context bevat (verwachte inputs, beperkingen, caller-contracts), moet de pre-review dat aangeven en precies opsommen wat ontbreekt.
AI-hulp is het sterkst bij middelgrote PR's die businesslogica of refactors raken waar betekenis verloren kan gaan. Het is zwakker wanneer het juiste antwoord afhangt van diepe organisatie-specifieke kennis (legacy-gedrag, productie-performance eigenaardigheden, interne beveiligingsregels).
Voorbeeld: een PR die "alleen pagination bijwerkt" verbergt vaak off-by-one pagina's, lege resultaten en niet-overeenkomende sortering tussen API en UI. Een pre-review moet die vragen naar boven halen voordat een mens 30 minuten verspilt om ze opnieuw te ontdekken.
Behandel Claude als een snelle, kieskeurige eerste-ronde reviewer, niet als de persoon die beslist of de PR wordt uitgerold. Het doel is problemen vroeg te signaleren: verwarrende code, verborgen gedragsveranderingen, ontbrekende tests en randgevallen die je vergeet als je te dicht bij de wijziging staat.
Geef het wat een redelijke menselijke reviewer zou nodig hebben:
Als de PR een bekend risicogebied raakt, vermeld dat dan meteen (auth, billing, migrations, concurrency).
Vraag vervolgens om uitvoer waar je concrete acties op kunt ondernemen. Een sterke opdracht ziet er zo uit:
Houd de mens aan de knoppen door onduidelijkheid te forceren. Vraag Claude bevindingen te labelen als "zeker uit diff" versus "moet bevestigd worden", en laat de exacte regels citeren die elk bezwaar veroorzaakten.
Claude is maar zo goed als wat je toont. Als je een gigantische diff plakt zonder doel of beperkingen, krijg je algemene adviezen en mis je de echte risico's.
Begin met een concreet doel en succescriteria. Bijvoorbeeld: "Deze PR voegt rate limiting toe aan de login-endpoint om misbruik te verminderen. Het mag de response-vorm niet veranderen. Het moet gemiddelde latency onder 50 ms houden."
Voeg daarna alleen toe wat ertoe doet. Als 20 bestanden zijn gewijzigd maar slechts 3 de logica bevatten, richt je dan op die 3. Voeg omliggende context toe wanneer een snippet misleidend zou zijn, zoals functiesignatures, belangrijke types of config die het gedrag verandert.
Wees tenslotte expliciet over testverwachtingen. Als je unit-tests voor randgevallen wilt, een integratietest voor een kritisch pad, of een handmatige UI-check, zeg het. Als tests opzettelijk ontbreken, vermeld waarom.
Een eenvoudig "contextpakje" dat goed werkt:
Een goede Claude Code PR-review werkt als een korte lus: geef net genoeg context, krijg gestructureerde notities terug, en zet die om in acties. Het vervangt geen mensen. Het vangt makkelijke missers voordat een teamgenoot veel tijd besteedt aan lezen.
Gebruik iedere keer dezelfde passes zodat de resultaten voorspelbaar blijven:
Na ontvangst van de notities, zet ze om in een korte merge-gate:
Merge-checklist (houd het kort):
Sluit af door te vragen om 3 tot 5 vragen die duidelijkheid afdwingen, zoals "Wat gebeurt er als de API een lege lijst teruggeeft?" of "Is dit veilig bij gelijktijdige requests?"
Claude is het meest behulpzaam wanneer je het een vaste lens geeft. Zonder rubric neigt het ernaar te commenten op wat als eerste opvalt (vaak stijl-nits) en kan het het ene risicovolle grensgeval missen.
Een praktische rubric:
Wanneer je prompt, vraag om één korte alinea per categorie en verzoek "hoogste risico eerst." Die volgorde houdt mensen gefocust.
Gebruik een herbruikbare basisprompt zodat resultaten er consistent uitzien over PR's. Plak de PR-omschrijving en daarna de diff. Als gedrag gebruikersgericht is, voeg de verwachte werking in 1 tot 2 zinnen toe.
You are doing a pre-review of a pull request.
Context
- Repo/service: <name>
- Goal of change: <1-2 sentences>
- Constraints: <perf, security, backward compatibility, etc>
Input
- PR description:
<...>
- Diff (unified diff):
<...>
Output format
1) Summary (max 4 bullets)
2) Readability notes (nits + suggested rewrites)
3) Correctness risks (what could break, and why)
4) Edge cases to test (specific scenarios)
5) Reviewer checklist (5-10 checkboxes)
6) Questions to ask the author before merge (3-7)
Rules
- Cite evidence by quoting the relevant diff lines and naming file + function/class.
- If unsure, say what info you need.
Voor high-risk veranderingen (auth, betalingen, permissies, migraties), voeg expliciet falen- en rollback-denken toe:
Extra focus for this review:
- Security/privacy risks, permission bypass, data leaks
- Money/credits/accounting correctness (double-charge, idempotency)
- Migration safety (locks, backfill, down path, runtime compatibility)
- Monitoring/alerts and rollback plan
Return a “stop-ship” section listing issues that should block merge.
Voor refactors maak je "geen gedragsverandering" een harde regel:
This PR is a refactor. Assume behavior must be identical.
- Flag any behavior change, even if minor.
- List invariants that must remain true.
- Point to the exact diff hunks that could change behavior.
- Suggest a minimal test plan to confirm equivalence.
Als je een snelle scan wilt, voeg dan een limiet toe zoals "Antwoord in minder dan 200 woorden." Als je diepgang wilt, vraag om "tot 10 bevindingen met redenering."
Claude's notities worden pas nuttig als je ze omzet in een korte checklist die een mens kan afvinken. Herhaal de diff niet. Leg risico's en beslissingen vast.
Splits items in twee bakken zodat de thread geen voorkeur-discussies wordt:
Moet gefixt worden (merge blokkeren)
Mooi om te hebben (follow-ups)
Vang ook rollout-readiness: veiligste deploy-volgorde, waar je op moet letten na release en hoe je de wijziging ongedaan maakt.
Een pre-review helpt alleen als het eindigt met een kleine set vragen die duidelijkheid afdwingen.
Als je dit niet in duidelijke woorden kunt beantwoorden, pauzeer de merge en versmald de scope of voeg bewijs toe.
De meeste fouten zijn procesproblemen, geen modelproblemen.
Als een PR een nieuwe checkout-endpoint toevoegt, plak dan niet de hele service. Plak de handler, validatie, DB-write en eventuele schema-wijzigingen. Zeg dan: "Doel: dubbele charges voorkomen. Niet-doel: naamgeving refactor." Je krijgt minder opmerkingen, en de opmerkingen die je krijgt zijn makkelijker te verifiëren.
Een klein, realistisch PR: voeg een "display name" veld toe aan een instellingen-scherm. Het raakt validatie (server) en UI-tekst (client). Het is klein genoeg om te overzien, maar bevat toch plekken waar bugs zich verstoppen.
Hier zijn de soort diff-snippets die je zou plakken (plus 2 tot 3 zinnen context zoals verwacht gedrag en gerelateerde tickets):
- if len(name) == 0 { return error("name required") }
+ if len(displayName) < 3 { return error("display name too short") }
+ if len(displayName) > 30 { return error("display name too long") }
- <TextInput label="Name" value={name} />
+ <TextInput label="Display name" value={displayName} helperText="Shown on your profile" />
Voorbeeldbevindingen die je terug wilt krijgen:
len(displayName) maar lijken leeg. Trim vóór validatie.Zet dat om in een checklist:
Een Claude Code PR-review werkt het best als het eindigt met een paar snelle checks:
Om te zien of het werkt, track twee simpele metrics gedurende 2 tot 4 weken: reviewtijd (open tot eerste betekenisvolle review, en open tot merge) en rework (follow-up commits na review, of hoeveel comments veranderingen vereisten).
Standaardisatie verslaat perfecte prompts. Kies één template, eis een kort contextblok (wat veranderde, waarom, hoe te testen) en stem af wat "done" betekent.
Als je team features bouwt via chat-gestuurde ontwikkeling, kun je dezelfde workflow toepassen binnen Koder.ai: genereer wijzigingen, exporteer de source code en voeg vervolgens de pre-review checklist toe aan de PR zodat de menselijke review gefocust blijft op de risicovolle delen.