Claude Code PR review: pra-tinjau diff lebih cepat dan lebih aman
Alur kerja Claude Code PR review untuk memeriksa keterbacaan, kebenaran, dan kasus tepi pada diff sebelum review, lalu menghasilkan daftar periksa reviewer dan pertanyaan yang perlu diajukan.

Mengapa waktu tinjauan PR membengkak
Tinjauan PR jarang memakan waktu lama karena kodenya “sulit”. Mereka sering lama karena reviewer harus merekonstruksi intent, risiko, dan dampak dari sebuah diff yang hanya menunjukkan perubahan, bukan keseluruhan cerita.
Sebuah edit kecil bisa mengenai dependensi tersembunyi: ganti nama field dan laporan rusak, ubah default dan perilaku bergeser, ubah kondisi dan penanganan error berubah. Waktu review bertambah ketika reviewer harus mengklik ke sana-sini untuk konteks, menjalankan aplikasi secara lokal, dan mengajukan pertanyaan lanjutan hanya untuk memahami apa yang seharusnya dilakukan PR.
Ada juga masalah pola manusia. Orang cenderung membaca diff dengan cara yang bisa diprediksi: kita fokus pada perubahan “utama” dan melewatkan baris membosankan tempat bug bersembunyi (pemeriksaan batas, penanganan null, logging, pembersihan). Kita juga cenderung membaca apa yang kita harapkan, sehingga kesalahan copy-paste dan kondisi terbalik bisa lolos.
Pra-tinjauan yang baik bukanlah sebuah vonis. Ini adalah mata kedua yang cepat dan terstruktur yang menunjukkan tempat di mana manusia harus memperlambat. Hasil terbaik adalah:
- ringkasan dalam bahasa biasa tentang apa yang berubah
- poin risiko spesifik (file, fungsi, asumsi)
- catatan keterbacaan (penamaan, alur kontrol membingungkan)
- kekhawatiran tentang kebenaran (logika, penanganan error, konsistensi data)
- kasus tepi yang layak diuji (input, waktu, izin, keadaan kosong)
Yang seharusnya tidak dilakukan: “mengesahkan” PR, mengarang persyaratan, atau menebak perilaku runtime tanpa bukti. Jika diff tidak menyertakan konteks yang cukup (input yang diharapkan, batasan, kontrak pemanggil), pra-tinjauan harus menyatakannya dan mencantumkan dengan tepat apa yang hilang.
Bantuan AI paling kuat pada PR berskala sedang yang menyentuh logika bisnis atau refactor di mana makna bisa hilang. AI kurang efektif ketika jawaban yang benar bergantung pada pengetahuan spesifik organisasi yang mendalam (perilaku legacy, keanehan performa produksi, aturan keamanan internal).
Contoh: PR yang “hanya memperbarui pagination” sering menyembunyikan halaman off-by-one, hasil kosong, dan ketidaksesuaian sorting antara API dan UI. Pra-tinjauan harus mengangkat pertanyaan-pertanyaan itu sebelum seorang manusia membuang 30 menit untuk menemukannya kembali.
Apa yang harus diminta ke Claude untuk pra-tinjauan
Perlakukan Claude seperti reviewer awal yang cepat dan cerewet, bukan orang yang memutuskan apakah PR boleh dikirim. Tujuannya adalah mengungkap masalah lebih awal: kode yang membingungkan, perubahan perilaku tersembunyi, tes yang hilang, dan kasus tepi yang sering terlupakan saat Anda dekat dengan perubahan.
Berikan apa yang seorang reviewer manusia yang adil perlukan:
- tujuan PR (1–3 kalimat)
- apa yang tidak boleh rusak (bentuk API, kompatibilitas ke belakang, batasan performa, aturan keamanan)
- batasan atau tradeoff khusus (deadline, rollout bertahap)
- potongan diff yang relevan, dengan cukup kode di sekitarnya untuk memahami intent
Jika PR menyentuh area berisiko tinggi yang diketahui, sebutkan di awal (auth, billing, migrasi, konkurensi).
Kemudian minta keluaran yang bisa Anda tindaklanjuti. Permintaan yang kuat terlihat seperti:
- Ringkas apa yang berubah dalam bahasa biasa.
- Tandai masalah keterbacaan (penamaan, struktur, kejutan, pola yang tidak konsisten).
- Identifikasi risiko kebenaran (penanganan null, jalur error, off-by-one, ketidakcocokan bentuk data).
- Daftar kasus tepi dan mode kegagalan (timeout, retry, input kosong, pembaruan parsial).
- Sarankan tes yang hilang dan apa yang dibuktikan oleh tiap tes.
- Buat daftar periksa singkat reviewer dan 5–10 “pertanyaan untuk diajukan” sebelum merge.
Jaga manusia tetap memegang kendali dengan memaksa kejelasan pada ketidakpastian. Minta Claude memberi label temuan sebagai “pasti dari diff” vs “butuh konfirmasi,” dan mengutip baris tepat yang memicu tiap kekhawatiran.
Persiapkan diff dan konteks sebelum mem-prompt
Claude hanya sebaik apa yang Anda tunjukkan padanya. Jika Anda menempelkan diff besar tanpa tujuan atau batasan, Anda akan mendapat saran generik dan melewatkan risiko nyata.
Mulai dengan tujuan konkret dan kriteria keberhasilan. Contoh: “PR ini menambahkan rate limiting ke endpoint login untuk mengurangi penyalahgunaan. Ini tidak boleh mengubah bentuk respons. Harus menjaga latency rata-rata di bawah 50 ms.”
Selanjutnya, sertakan hanya yang penting. Jika 20 file berubah tetapi hanya 3 yang berisi logika, fokus pada ketiga file itu. Sertakan konteks sekitar saat potongan akan menyesatkan, seperti tanda tangan fungsi, tipe kunci, atau konfigurasi yang mengubah perilaku.
Terakhir, jelaskan ekspektasi pengujian. Jika Anda ingin unit test untuk kasus tepi, integration test untuk jalur kritis, atau pemeriksaan manual UI, sebutkan. Jika tes sengaja tidak disertakan, jelaskan alasannya.
Paket konteks sederhana yang bekerja dengan baik:
- Tujuan PR: apa yang berubah, apa yang dilihat pengguna, apa yang membaik
- Potongan diff relevan: file kunci saja, dengan cukup kode di sekitarnya
- Batasan keras: batas performa, kompatibilitas, aturan keamanan/privasi
- Ekspektasi tes: apa yang harus dicakup, apa yang ditambahkan, cara menjalankannya
- Item yang “tidak boleh berubah”: kontrak API publik, skema database, perilaku UX, format logging/auditing
Langkah demi langkah: alur pra-tinjauan yang bisa diulang
Claude Code PR review bekerja sebagai loop singkat: berikan konteks yang cukup, dapatkan catatan terstruktur, lalu ubah menjadi tindakan. Ini tidak menggantikan manusia. Ini menangkap kelalaian mudah sebelum rekan menghabiskan waktu lama membaca.
Alur 5-langkah
Gunakan lintasan yang sama setiap kali agar hasil tetap dapat diprediksi:
- Jelaskan perubahan dalam bahasa biasa. Minta Claude merangkum apa yang PR lakukan, file mana yang berubah, dan kemungkinan alasan perubahan. Jika ia tidak bisa menjelaskannya dengan sederhana, kemungkinan PR perlu deskripsi yang lebih jelas atau ruang lingkup yang lebih kecil.
- Periksa kebenaran terlebih dulu. Cari kesalahan logika, asumsi yang rusak, dan perubahan perilaku diam-diam (default, penanganan error, permissions, zona waktu, off-by-one).
- Pindai kasus yang hilang. Pikirkan seperti pengguna dan seperti produksi: input kosong, null, retry, kegagalan parsial, konkurensi, kompatibilitas balik.
- Tinjau keterbacaan dan pemeliharaan. Identifikasi nama yang membingungkan, fungsi panjang, logika terduplikasi, komentar yang tidak jelas, dan refactor kecil yang mengurangi waktu review di masa depan.
- Susun komentar review dengan petunjuk. Kelompokkan komentar per file dan sertakan nama fungsi atau kutipan snippet agar manusia bisa menemukan tempatnya dengan cepat.
Setelah mendapatkan catatan, ubah menjadi pintu merge singkat:
Daftar cek merge (singkat):
- Tes menutup perilaku baru dan setidaknya satu kasus tepi
- Error ditangani secara konsisten (dan dilog jika perlu)
- Tidak ada perubahan yang memecah tanpa jalur migrasi yang jelas
- Penamaan dan struktur cocok dengan kode sekitar
- Bagian berisiko memiliki rencana rollback
Akhiri dengan meminta 3–5 pertanyaan yang memaksa kejelasan, seperti “Apa yang terjadi jika API mengembalikan daftar kosong?” atau “Apakah ini aman di bawah permintaan concurrent?”
Gunakan rubrik sederhana (keterbacaan, kebenaran, kasus tepi)
Claude paling membantu ketika Anda memberinya lensa tetap. Tanpa rubrik, ia cenderung mengomentari apa pun yang pertama kali muncul (seringnya nit gaya) dan bisa melewatkan satu kasus batas yang berisiko.
Rubrik praktis:
- Keterbacaan: nama jelas, alur sederhana, fungsi kecil, komentar yang menjelaskan mengapa, tidak ada kode mati atau output debug tersisa.
- Kebenaran: invariant kunci ditegakkan, error ditangani konsisten, nilai null/kosong aman, batas benar (off-by-one, pembulatan).
- Kasus tepi: input kosong/besar, field opsional yang hilang, zona waktu dan daylight savings, retry yang berisiko double-write, race konkurensi.
- Keamanan dan privasi: pengecekan auth di tempat yang tepat, tidak ada rahasia di kode/log, log tidak membocorkan token atau payload sensitif.
- Kompatibilitas dan keamanan rollout: klien lama dan data tersimpan tidak akan rusak, migrasi aman, rencana rollback ada.
Saat mem-prompt, minta satu paragraf singkat per kategori dan minta “isu berisiko tertinggi dulu.” Urutan itu menjaga fokus manusia.
Template prompt yang menghasilkan catatan review berguna
Gunakan prompt dasar yang dapat dipakai ulang agar hasil tampak sama antar PR. Tempel deskripsi PR, lalu diff. Jika perilaku bersifat user-facing, tambahkan perilaku yang diharapkan dalam 1–2 kalimat.
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.
Untuk perubahan berisiko tinggi (auth, pembayaran, permissions, migrasi), tambahkan pemikiran kegagalan dan rollback yang eksplisit:
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.
Untuk refactor, jadikan “tidak ada perubahan perilaku” aturan keras:
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.
Jika Anda ingin skim cepat, tambahkan batas seperti “Answer in under 200 words.” Jika ingin kedalaman, minta “up to 10 findings with reasoning.”
Ubah keluaran menjadi daftar periksa reviewer
Catatan Claude menjadi berguna saat Anda mengubahnya menjadi daftar periksa singkat yang bisa ditutup oleh manusia. Jangan ulangi diff. Tangkap risiko dan keputusan.
Bagi item menjadi dua keranjang agar thread tidak berubah menjadi debat preferensi:
Harus diperbaiki (blok merge)
- Kebenaran: hasil yang diharapkan ditulis dalam satu kalimat dan cocok dengan tiket
- Kasus tepi: input null/kosong dan jalur error ditangani (atau ditolak) dengan jelas
- Keamanan data: penulisan dan migrasi aman untuk data dan kode lama
- Tes: setidaknya satu tes menutup perilaku utama dan satu menutup kegagalan paling berisiko
- Observabilitas: log/metric cukup untuk debugging cepat (request id, user id, job id)
Bagus untuk dimiliki (tindak lanjut)
- Keterbacaan: ubah nama identifier paling membingungkan atau tambahkan komentar singkat “mengapa”
- Konsistensi: cocokkan pola yang ada untuk error, penamaan, dan tata letak file
- Performa: catat perubahan pada hot-path dan apakah itu penting pada skala saat ini
- Docs: perbarui dokumentasi inline jika opsi/flag baru ditambahkan
Juga tangkap kesiapan rollout: urutan deploy paling aman, apa yang dipantau setelah rilis, dan bagaimana cara membatalkan perubahan.
Pertanyaan yang harus diajukan sebelum merge
Pra-tinjauan hanya membantu jika berakhir dengan sejumlah kecil pertanyaan yang memaksa kejelasan.
Perilaku dan kebenaran
- Perubahan perilaku apa yang terlihat oleh pengguna, dan apa yang harus tetap sama?
- Jika ini “tidak mengubah perilaku,” bukti apa yang menunjukkan output identik?
- Kegagalan produksi yang paling mungkin apa, dan di mana akan terlihat (UI, API, data)?
- Asumsi apa yang dibuat kode tentang input, urutan, waktu, atau panggilan jaringan?
- Apakah ada error yang ditelan atau diubah menjadi default diam?
Kasus tepi, tes, dan operasi
- Input terburuk nyata apa (kosong, besar, cacat, duplikat), dan apa yang seharusnya terjadi?
- Alur umum mana yang bisa memicu ini dua kali (retry, double-click, background job), dan apakah itu aman?
- Tes mana yang membuktikan perilaku utama, dan tes mana yang menutup kasus tepi paling berisiko?
- Jika tes hilang, apakah sulit ditulis, atau kode sulit untuk diuji?
- Apa yang ops perlukan: log/metrics/alert yang berguna, default config, dan langkah rollback?
Jika Anda tidak bisa menjawab ini dengan kata-kata sederhana, hentikan merge dan perjelas scope atau tambahkan bukti.
Perangkap umum (dan cara menghindarinya)
Kegagalan kebanyakan adalah masalah proses, bukan masalah model.
- Menempelkan diff besar tanpa fokus. Minta review pada 1–3 area berisiko dan tempel hanya hunk terkait plus tanda tangan yang bergantung padanya.
- Melewatkan intent dan perilaku yang diharapkan. Tanpa tujuan, review melenceng. Tambahkan dua baris: apa yang berubah, dan apa yang tidak boleh berubah.
- Mempercayai tebakan percaya diri. Minta kutipan kembali dari diff. Jika tidak bisa mengutip bukti, anggap itu hipotesis yang harus diuji.
- Membiarkan diskusi bergeser ke gaya. Minta “Harus diperbaiki” vs “Bagus untuk dimiliki,” dan batasi catatan gaya.
- Mengabaikan standar tim. Jika tim Anda punya konvensi (early returns, tipe error, format logging), sertakan itu.
Jika sebuah PR menambahkan endpoint checkout baru, jangan tempel seluruh service. Tempel handler, validasi, penulisan DB, dan perubahan skema apa pun. Lalu nyatakan: “Tujuan: cegah double charge. Bukan tujuan: refactor penamaan.” Anda akan mendapat lebih sedikit komentar, dan yang ada lebih mudah diverifikasi.
Contoh realistis: pra-tinjau PR kecil
PR kecil yang terasa nyata: tambahkan field “display name” ke layar settings. Menyentuh validasi (server) dan teks UI (client). Cukup kecil untuk dipahami, tapi masih penuh tempat di mana bug bisa bersembunyi.
Berikut jenis potongan diff yang akan Anda tempel (plus 2–3 kalimat konteks seperti perilaku yang diharapkan dan tiket terkait):
- 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" />
Contoh temuan yang ingin Anda terima:
- Keterbacaan: “displayName” vs “name” tercampur di beberapa file. Pilih satu istilah agar perubahan berikutnya tidak perlu menerjemahkan di kepala.
- Kebenaran: server memvalidasi panjang, tapi client tidak. Pengguna bisa mengetik 1–2 karakter dan hanya melihat error setelah submit.
- Kasus tepi: string yang hanya berisi spasi lolos
len(displayName)tetapi tetap terlihat kosong. Trim sebelum validasi.
Ubah itu menjadi daftar periksa:
- Penamaan konsisten di API, field database, dan label UI.
- Pemeriksaan sisi-klien cocok dengan aturan server (min/max, required).
- Input di-trim (dan perilaku Unicode/emoji dapat diterima).
- Pesan error jelas dan selaras antara server dan UI.
Pemeriksaan cepat, pengukuran, dan langkah berikutnya
Tinjauan Claude Code PR paling efektif saat diakhiri dengan beberapa pemeriksaan cepat:
- Perilaku: apa yang berubah untuk pengguna, dan apa yang tidak boleh berubah
- Tes: apa yang tercover, apa yang hilang, apa yang rawan flake
- Log dan error: kegagalan jelas dan pesan dapat digunakan
- Performa: loop baru, N+1 queries, payload besar, panggilan jaringan ekstra
- Keamanan: validasi, pengecekan auth, rahasia, default yang berisiko
Untuk melihat apakah ini efektif, lacak dua metrik sederhana selama 2–4 minggu: waktu review (dari dibuka hingga review bermakna pertama, dan dari dibuka hingga merge) dan rework (commit tindak lanjut setelah review, atau berapa banyak komentar yang membutuhkan perubahan kode).
Standarisasi mengalahkan prompt sempurna. Pilih satu template, wajibkan blok konteks singkat (apa yang berubah, kenapa, bagaimana menguji), dan sepakati apa arti “selesai”.
Jika tim Anda membangun fitur lewat pengembangan berbasis chat, Anda bisa menerapkan alur yang sama di dalam Koder.ai: hasilkan perubahan, ekspor source code, lalu lampirkan checklist pra-tinjauan ke PR sehingga tinjauan manusia tetap fokus pada bagian yang paling berisiko.
Pertanyaan umum
Apa yang harus saya berikan kepada Claude sebelum meminta pra-peninjauan PR?
Berikan Claude tujuan PR, batasan yang tidak boleh dilanggar, bagian diff yang relevan, dan ekspektasi pengujian. Sertakan cukup kode di sekitarnya untuk menunjukkan maksudnya, seperti signature fungsi, tipe, atau konfigurasi yang memengaruhi perilaku.
Apa yang harus diperiksa Claude dalam pra-peninjauan?
Minta Claude merangkum perubahan, menandai risiko ketepatan, menemukan masalah keterbacaan, mencantumkan kasus tepi, menyarankan pengujian, dan menyusun daftar periksa singkat untuk peninjau. Minta ia membedakan bukti dari pertanyaan yang perlu dikonfirmasi.
Bisakah Claude menyetujui pull request untuk saya?
Tidak. Claude dapat menyoroti risiko dengan cepat, tetapi peninjau manusia tetap menentukan apakah perubahan tersebut memenuhi persyaratan produk, konvensi tim, dan kebutuhan produksi.
PR mana yang paling diuntungkan dari pra-peninjauan Claude?
Perubahan berukuran sedang yang memengaruhi logika bisnis, API, atau refaktor biasanya paling diuntungkan. Perubahan format kecil hanya memerlukan sedikit peninjauan, sedangkan perubahan yang terkait perilaku lama tanpa dokumentasi membutuhkan lebih banyak konteks manusia.
Bagaimana jika diff tidak memberi Claude konteks yang cukup?
Berikan persyaratan yang tepat, kontrak pemanggil, atau kode di sekitarnya yang menjelaskan perilaku tersebut. Jika informasi itu tidak tersedia, minta Claude menandai temuannya sebagai perlu dikonfirmasi, alih-alih menganggapnya sebagai cacat.
Bagaimana cara mengurangi alarm palsu dari Claude?
Minta rujukan file dan fungsi yang tepat, serta kutipan baris dari diff untuk setiap kekhawatiran. Perlakukan setiap klaim tanpa bukti sebagai ide pengujian atau pertanyaan untuk penulis.
Kasus tepi apa yang sebaiknya saya minta Claude temukan?
Mulailah dengan logika, jalur kesalahan, izin, penulisan data, dan kompatibilitas. Lalu tanyakan tentang input kosong, nilai null, percobaan ulang, permintaan duplikat, zona waktu, batas paginasi, dan kegagalan sebagian.
Bagaimana sebaiknya saya meninjau refaktor tanpa perubahan perilaku yang dimaksudkan?
Nyatakan invarian yang harus tetap benar, lalu minta Claude menandai setiap hunk yang diubah dan dapat mengubah perilaku. Minta rencana pengujian minimal yang membandingkan hasil lama dan baru untuk input yang representatif.
Apa yang termasuk dalam daftar periksa penggabungan PR?
Buat tetap singkat dan berfokus pada tindakan. Sertakan cakupan perilaku utama, satu kasus kegagalan berisiko tinggi, penanganan kesalahan yang konsisten, keamanan kompatibilitas atau migrasi, serta rencana rollback untuk perubahan berisiko.
Bagaimana saya tahu apakah pra-peninjauan AI menghemat waktu?
Lacak waktu dari pembukaan hingga peninjauan bermakna pertama dan hingga penggabungan, lalu lacak commit tindak lanjut atau komentar peninjauan yang memerlukan perubahan kode. Bandingkan angka tersebut selama dua hingga empat minggu setelah menerapkan satu prompt dan format konteks yang dapat digunakan berulang kali.