06 — Checklist Review Kode Hasil AI¶
Gunakan checklist ini sebelum merge/deploy kode apa pun yang dihasilkan AI. Simpan halaman ini — inilah dokumen yang paling sering dipakai sehari-hari.
Cara Memakai Checklist Ini¶
- Tidak semua item berlaku untuk semua perubahan. Perubahan CSS tidak butuh cek transaction. Gunakan bagian yang relevan.
- Skala kedalaman review dengan risiko:
| Tingkat Risiko | Contoh | Kedalaman Review |
|---|---|---|
| 🟢 Rendah | Perubahan tampilan, copy text, styling | Baca sekilas + tes visual |
| 🟡 Sedang | Fitur CRUD baru, endpoint baru | Checklist penuh bagian terkait |
| 🔴 Tinggi | Auth, pembayaran, data pribadi, hak akses, migration destruktif | Checklist penuh + AI review + human review kedua |
- Urutan yang efisien: Umum → Security → bagian teknis terkait.
✅ Umum (selalu)¶
- [ ] Saya paham apa yang dilakukan kode ini. Kalau tidak → minta AI menjelaskan baris per baris dulu. Tidak paham = tidak merge.
- [ ] Kode sudah dites dengan edge case, bukan hanya happy path: input kosong, nilai 0/negatif, string sangat panjang, karakter aneh/emoji, data duplikat, request ganda.
- [ ] Perubahan tidak merusak fitur lain (jalankan test suite bila ada).
- [ ] Kode mengikuti konvensi/struktur project yang sudah ada (penamaan, folder, pola).
- [ ] Tidak ada kode mati/komentar sampah/console.log & dd() sisa debugging.
- [ ] Package baru yang disarankan AI benar-benar ada di registry resmi dan reputable (cek umur, unduhan, repo) — anti-slopsquatting.
✅ Security (hampir selalu)¶
- [ ] Tidak ada secret (API key, password, token) hardcoded di kode, config, atau contoh.
- [ ] Tidak ada secret asli yang pernah saya tempel ke prompt AI.
- [ ] Endpoint sensitif punya cek autentikasi DAN otorisasi — kepemilikan data / role dicek di backend (anti-IDOR).
- [ ] Query pakai parameterized/prepared statement — tidak ada input user yang di-concat ke SQL/perintah shell.
- [ ] Output data user di-escape; setiap
innerHTML/dangerouslySetInnerHTML/{!! !!}/v-htmldipertanyakan. - [ ] Password di-hash dengan bcrypt/argon2 (bukan MD5/SHA1/plain text).
- [ ] Validasi input ada di sisi server (bukan hanya frontend).
- [ ] Error response ke user generik — tidak membocorkan stack trace, query, atau path server.
- [ ] Ada rate limiting di endpoint login/publik.
- [ ] Upload file (bila ada): whitelist tipe, verifikasi konten, batas ukuran, rename acak, simpan di lokasi non-eksekusi.
✅ API¶
- [ ] Method HTTP sesuai fungsinya —
GETtidak mengubah data. - [ ] Status code benar per kondisi:
201create,422validasi,404tidak ditemukan,403tak berhak — bukan200untuk semuanya. - [ ] Tidak ada data sensitif di query string/URL.
- [ ] Format response konsisten dengan endpoint lain (penamaan field, struktur error, format tanggal ISO 8601 UTC).
- [ ] Endpoint list punya pagination (tidak mengembalikan seluruh tabel).
- [ ] Operasi non-idempotent yang kritis (pembayaran!) punya perlindungan duplikasi (idempotency key / pengecekan ganda).
✅ Database¶
- [ ] Tidak ada
UPDATE/DELETEtanpaWHERE. (Cek dua kali. Serius.) - [ ] Operasi multi-tabel yang saling bergantung dibungkus transaction.
- [ ] Operasi stok/saldo/kuota aman dari race condition (atomic update / locking).
- [ ] Tidak ada N+1 query — relasi di-load dengan eager loading.
- [ ] Perubahan skema lewat migration baru (bukan edit migration lama, bukan manual di GUI), dan punya rollback.
- [ ] Tipe data tepat: uang bukan float; tanggal UTC; kolom penting punya constraint (NOT NULL, UNIQUE, FK).
- [ ] Kolom yang sering di-query sudah dipertimbangkan untuk index.
- [ ] Data historis transaksi disalin, bukan direferensikan (mis.
price_at_time).
✅ Docker / Infrastruktur¶
- [ ] Tidak ada secret di Dockerfile / docker-compose.yml — semua lewat env variable.
- [ ]
.envada di.gitignoredan.dockerignore;.env.exampletidak berisi nilai asli. - [ ] Data penting (database, upload) ada di volume, bukan di dalam container.
- [ ] Versi image spesifik (
postgres:16), bukan:latest. - [ ] Ada healthcheck untuk database &
depends_onmenunggu kondisi sehat. - [ ] Urutan layer Dockerfile benar (dependency di-install sebelum copy semua kode).
- [ ] Container tidak berjalan sebagai root bila memungkinkan.
Workflow Review yang Disarankan¶
1. BACA sendiri → 2. AI SELF-REVIEW → 3. TES edge case → 4. (risiko 🔴) HUMAN kedua → 5. Merge
Jangan balik urutannya — AI review duluan membuat Anda malas membaca sendiri, padahal langkah 1 adalah tempat Anda belajar dan tempat intuisi terbentuk.
Template Prompt Review¶
Review umum:
"Review kode berikut sebagai senior engineer yang skeptis. Cek terhadap daftar ini: [tempel bagian checklist yang relevan]. Format temuan: [severity: critical/high/medium/low] — [file:baris] — [masalah] — [cara perbaikan]. Kalau tidak ada temuan di suatu kategori, nyatakan eksplisit 'tidak ada temuan' — jangan mengarang temuan."
Review keamanan khusus:
"Review kode ini sebagai security engineer. Fokus: injection, XSS, IDOR/authorization, CSRF, secret hardcoded, validasi input, race condition pada operasi uang/stok. Berikan bukti (potongan kode) untuk setiap temuan."
Penjelasan (saat tidak paham):
"Jelaskan kode ini baris per baris untuk orang non-backend. Untuk setiap blok: apa fungsinya, kenapa ditulis begitu, dan apa yang terjadi kalau dihapus."
⚠️ Catatan: AI reviewer bisa melewatkan hal yang AI penulis juga lewatkan (bias yang sama), dan kadang "menemukan" masalah yang tidak ada. AI review melengkapi, tidak menggantikan, mata manusia.