Code Review dengan Claude Code: Verifikasi Kode Golang vs Spesifikasi
Cara menggunakan Claude Code untuk code review yang berfokus pada verifikasi kode Golang terhadap spesifikasi. Teknik SDD untuk memastikan implementasi sesuai spec.
Code Review dengan AI: Verifikasi Kode vs Spesifikasi
Code review dengan Claude Code membuka dimensi baru yang jarang tersentuh review tradisional. Review biasa berfokus pada kualitas kode: apakah ada bug? apakah sudah idiomatic? apakah arsitekturnya benar? Semua pertanyaan yang valid.
Di SDD, ada dimensi tambahan yang kritis: apakah kode ini mengimplementasikan apa yang spec katakan? Ini pertanyaan yang berbeda — kode bisa qualitatively bagus tapi tetap salah karena tidak sesuai spec. Di artikel ini, kita bahas bagaimana Claude Code menjadi review partner yang membantu memverifikasi kode terhadap spec, sebelum dan sesudah review manusia.
14.1 Dua Dimensi Code Review di SDD
Code review di SDD punya dua dimensi yang berbeda tapi sama pentingnya:
Dimensi 1: Code Quality Review (sama seperti code review biasa)
- Go idioms dan best practices
- Error handling
- Performance considerations
- Security vulnerabilities
- Maintainability dan readability
Dimensi 2: Spec Compliance Review (tambahan di SDD)
- Apakah semua AC ter-implement?
- Apakah semua EC ter-handle?
- Apakah response format sesuai spec?
- Apakah error codes sesuai spec?
- Apakah NFR consideration ter-implement?
AI sangat efektif untuk Dimensi 2 — kemampuan cross-reference kode dengan dokumen spec adalah sesuatu yang manusia sering lakukan kurang teliti karena sifatnya yang tedious dan memakan waktu.
14.2 Prompt untuk Spec Compliance Review
Efektivitas review sangat ditentukan oleh prompt-nya. Prompt berikut memberi Claude spec dan implementasi sekaligus, lalu meminta output berupa tabel compliance yang terstruktur.
1Lakukan spec compliance review untuk implementasi cancel order.
2
3SPEC (specs/order/cancel-order.md v1.3):
4@specs/order/cancel-order.md
5
6IMPLEMENTASI:
7File 1: internal/usecase/order/cancel_order.go
8@internal/usecase/order/cancel_order.go
9
10File 2: internal/repository/postgres/order_repository.go
11@internal/repository/postgres/order_repository.go
12
13File 3: internal/delivery/http/handler/order_handler.go
14@internal/delivery/http/handler/order_handler.go
15
16Review checklist:
171. Untuk setiap AC (AC1-AC10): apakah ter-implement? Di mana?
182. Untuk setiap EC (EC1-EC4): apakah ter-handle? Bagaimana?
193. Apakah response format sesuai spec (HTTP status, error_code, message)?
204. Apakah error mapping dari usecase ke handler sudah lengkap?
215. Apakah ada AC/EC yang missing?
22
23Output: tabel compliance dengan status ✅/❌/⚠️Kunci prompt ini: spec dan kode di-paste langsung, bukan dijelaskan dari memori — sehingga AI mereferensikan teks sebenarnya, dan output-nya berupa tabel yang bisa langsung ditindaklanjuti.
14.3 Contoh Output Spec Compliance Review
Dari prompt di atas, Claude akan menghasilkan laporan terstruktur. Contoh output berikut memetakan tiap AC dan EC ke lokasi implementasinya beserta status.
1## Spec Compliance Review — Cancel Order
2## Spec: specs/order/cancel-order.md v1.3
3## Reviewed: 2025-07-01
4
5| Item | Status | Location | Notes |
6|------|--------|----------|-------|
7| AC1: DELETE /api/v1/orders/:id dengan path param | ✅ | handler.go:45 | Path param :id parsed correctly |
8| AC2: ownership check | ✅ | repo.go:89 | GetByIDAndUserID returns nil for non-owner |
9| AC3: PENDING status check | ✅ | entity.go:34 | CanBeCancelled() checks StatusPending |
10| AC4: 15-min window | ✅ | entity.go:35 | time.Since(CreatedAt) <= 15*time.Minute — batas INKLUSIF: order berumur tepat 15 menit 00 detik masih bisa dibatalkan |
11| AC5: atomic stock restore | ✅ | repo.go:103 | Within same pgx transaction |
12| AC6: 204 response | ✅ | handler.go:89 | c.NoContent(http.StatusNoContent) |
13| AC7: not found → ErrOrderNotFound | ✅ | usecase.go:45 | Correct sentinel error |
14| AC8: not owner → same error | ✅ | repo.go:89 | Returns nil, nil for security |
15| AC9: non-PENDING → 409 | ✅ | handler.go:73 | OrderNotCancellableError → 409 |
16| AC10: window expired → 409 | ✅ | handler.go:79 | CancelWindowExpiredError → 409 |
17| EC1: concurrent cancel | ✅ | repo.go:98 | SELECT FOR UPDATE in transaction |
18| EC2: Kafka failure | ✅ | usecase.go:65 | Best effort + slog.WarnContext |
19| EC3: DB timeout | ⚠️ | - | No explicit timeout handling. Consider context with timeout |
20| EC4: stock restore rollback | ✅ | repo.go:~110 | defer tx.Rollback, order tetap PENDING |
21
22## Issues Found
23
24### ⚠️ EC3: Database Timeout Not Handled
25**Location:** usecase.Execute → repo.CancelWithStockRestore
26**Issue:** No explicit timeout set on the context for DB operations.
27**Risk:** Long-running DB locks (during concurrent cancel EC1) could block indefinitely.
28**Recommendation:** Add context deadline:
29 cancelCtx, cancel := context.WithTimeout(ctx, 3*time.Second)
30 defer cancel()
31 err := uc.repo.CancelWithStockRestore(cancelCtx, input.OrderID)
32
33### ✅ Overall Compliance Score: 13/14 items covered, 3/4 ECs fully handled
34
35## Notes
36- Error codes in handler match spec exactly (ORDER_NOT_FOUND, ORDER_NOT_CANCELLABLE, CANCEL_WINDOW_EXPIRED)
37- Security consideration maintained: same error for "not found" and "not owner"
38- Logging implemented per NFR-O3 (INFO on success, WARNING on Kafka failure)Perhatikan bahwa output ini bukan sekadar “lulus/gagal” — setiap item punya lokasi baris dan catatan, sehingga temuan seperti EC3 langsung bisa diverifikasi dan ditindaklanjuti tanpa menebak.
14.4 Code Quality Review dengan Konteks Spec
Selain spec compliance, AI juga bisa mereview kualitas kode dengan mempertimbangkan constraint dari spec. Prompt berikut menyuntikkan NFR ke dalam review sehingga feedback-nya nyambung ke target yang sebenarnya.
1Review kode CancelOrderUseCase.Execute dari sudut pandang senior Go engineer.
2
3Context dari spec:
4- NFR-P2: p95 latency < 500ms (jadi perhatian ke performance)
5- NFR-S4: Audit log untuk semua operasi yang mengubah data order
6- NFR-O3: Log INFO setiap state change
7
8Review checklist:
91. Apakah error handling sudah idiomatic Go?
102. Apakah ada potential panic atau nil dereference?
113. Apakah ada goroutine atau resource leak?
124. Apakah logging sudah sesuai NFR-S4 dan NFR-O3?
135. Apakah ada cara untuk membuat kode lebih readable?
146. Apakah ada performance concern untuk NFR-P2?
15
16Berikan feedback spesifik dengan saran perbaikan yang actionable.Dengan menyertakan NFR sebagai konteks, review tidak berhenti di “kode ini rapi” tapi masuk ke pertanyaan konkret seperti “apakah logging ini cukup untuk audit trail NFR-S4?”.
14.5 Review Pola: Diff-based Review
Untuk review setelah perubahan, berikan konteks diff-nya. Contoh berikut memperlihatkan before/after sebuah perbaikan error handling agar AI bisa menilai dampak perubahannya.
1// BEFORE
2func (uc *CancelOrderUseCase) Execute(ctx context.Context, input CancelOrderInput) error {
3 order, err := uc.repo.GetByIDAndUserID(ctx, input.OrderID, input.UserID)
4 if err != nil || order == nil {
5 return ErrOrderNotFound
6 }
7 // ...
8}
9
10// AFTER
11func (uc *CancelOrderUseCase) Execute(ctx context.Context, input CancelOrderInput) error {
12 order, err := uc.repo.GetByIDAndUserID(ctx, input.OrderID, input.UserID)
13 if err != nil {
14 return fmt.Errorf("get order: %w", err)
15 }
16 if order == nil {
17 return ErrOrderNotFound
18 }
19 // ...
20}Perubahan di atas memisahkan error DB dari kasus “not found” — dulu error DB diam-diam disamarkan menjadi ErrOrderNotFound. Setelah menyajikan diff, minta AI menilai apakah perubahan ini benar dan masih konsisten dengan AC7/AC8.
1Review perubahan ini:
21. Apakah perubahan sudah benar? (sekarang error dari DB tidak di-silently ignore)
32. Apakah ada side effect yang perlu diperhatikan?
43. Apakah ini sesuai dengan spec AC7/AC8?Diff-based review membuat AI fokus pada delta perubahan, bukan seluruh file — jauh lebih akurat untuk menilai apakah sebuah perbaikan aman dan sesuai spec.
14.6 Automated Spec Compliance dalam CI
Sebagian pengecekan compliance bisa diotomasi tanpa AI, sebagai gerbang cepat di CI. Script berikut memverifikasi hal-hal deterministik seperti keberadaan status code dan error code yang diwajibkan spec.
1#!/bin/bash
2# scripts/check-spec-compliance.sh
3
4SPEC_FILE="specs/order/cancel-order.md"
5IMPL_DIR="internal"
6
7echo "=== Spec Compliance Check: Cancel Order ==="
8
9# Check AC6: 204 No Content response
10if ! grep -r "StatusNoContent" "$IMPL_DIR/delivery/http/handler/"; then
11 echo "❌ AC6: StatusNoContent (204) not found in handler"
12 exit 1
13fi
14
15# Check EC2: Kafka failure handled
16if ! grep -r "WarnContext\|Warn(" "$IMPL_DIR/usecase/order/cancel_order.go"; then
17 echo "⚠️ EC2: No warning log found for Kafka failure"
18fi
19
20# Check error codes match spec
21EXPECTED_CODES=("ORDER_NOT_FOUND" "ORDER_NOT_CANCELLABLE" "CANCEL_WINDOW_EXPIRED")
22for code in "${EXPECTED_CODES[@]}"; do
23 if ! grep -r "\"$code\"" "$IMPL_DIR/delivery/http/handler/"; then
24 echo "❌ Error code $code not found in handler"
25 exit 1
26 fi
27done
28
29echo "✅ Basic spec compliance check passed"Script seperti ini menangkap pelanggaran yang paling kasar dengan cepat dan murah, menyisakan AI review untuk hal-hal yang butuh pemahaman kontekstual — dua lapis yang saling melengkapi.
14.7 Review Kode yang Dihasilkan AI oleh Manusia
Setelah AI review, manusia tetap perlu review — tapi fokusnya berbeda. Pembagian peran ini penting agar keduanya tidak saling menduplikasi:
AI review catches:
- Spec compliance gaps
- Missing error codes
- Wrong HTTP status codes
- Inconsistent patterns
Human review adds:
- Business context yang tidak ada di spec
- Performance intuition dari production experience
- Security blind spots yang subtle
- “Apakah ini yang kita benar-benar mau?”
Alur yang optimal menempatkan AI review di depan sebagai penyaring, lalu human review di belakang untuk keputusan yang butuh judgment. Flow berikut merangkum urutannya.
11. Developer selesai implementasi
22. AI spec compliance review → tangani issues yang ditemukan
33. Developer self-review dengan checklist
44. PR ke team → human code review
55. AI lakukan final check sebelum merge jika ada concernsDengan urutan ini, waktu reviewer manusia tidak habis untuk hal mekanis (yang sudah ditangkap AI) dan bisa dialokasikan untuk keputusan bisnis dan arsitektur yang benar-benar butuh mereka.
14.8 Review untuk Breaking Changes
Ketika ada perubahan yang berpotensi breaking, AI bisa memetakan dampaknya sebelum kamu mengeksekusi. Prompt berikut meminta AI mengidentifikasi semua tempat yang terpengaruh sebuah rename.
1Saya mau rename field OrderID menjadi ID di CancelOrderInput struct.
2
3Sebelum melakukan perubahan:
41. Apakah ini breaking change untuk caller yang ada?
52. File mana yang menggunakan CancelOrderInput?
63. Apakah ini sesuai dengan naming convention di spec atau CLAUDE.md?
74. Apakah ada test yang perlu diupdate?
8
9Berikan daftar semua tempat yang perlu diupdate jika perubahan dilakukan.Meminta peta dampak lebih dulu mengubah perubahan berisiko menjadi terencana — kamu tahu persis file dan test mana yang harus ikut berubah sebelum menyentuh satu baris pun.
14.9 Review Keamanan dengan Perspektif Spec
Review keamanan paling tajam ketika dikaitkan langsung dengan NFR security di spec. Prompt berikut mengarahkan AI memeriksa implementasi terhadap requirement autentikasi, rate limit, dan audit log yang spesifik.
1Review implementasi cancel order dari perspektif security:
2
3Spec security requirements yang harus dipenuhi:
4- NFR-S1: Hanya authenticated user (JWT Bearer)
5- NFR-S3: Rate limit 5 cancel per user per jam
6- NFR-S12: Audit log untuk semua operasi yang mengubah data order
7
8Pertanyaan review:
91. Apakah mungkin user tanpa autentikasi mencapai usecase layer?
102. Apakah audit log sudah ada dan cukup?
113. Apakah ada information leakage (misal: exposing order existence ke unauthorized user)?
124. Apakah rate limiting sudah di-test?
135. Apakah ada SQL injection vulnerability?
14
15Files:
16@internal/usecase/order/cancel_order.goDengan requirement security yang eksplisit, review menghasilkan temuan yang bisa diaudit terhadap spec — bukan sekadar “sepertinya aman”, melainkan “NFR-S3 belum ada test”.
14.10 Peer Review dengan AI sebagai “Third Reviewer”
Di tim kecil yang reviewer-nya terbatas, AI bisa berperan sebagai “third reviewer” yang memberi perspektif tambahan. Prompt berikut memposisikan AI untuk mencari hal yang mungkin terlewat reviewer manusia.
1Ini PR yang akan di-merge:
2
3PR Title: feat(order): implement cancel order endpoint
4Branch: feature/cancel-order
5
6Perubahan:
7[paste diff atau list file changes]
8
9Sebagai third reviewer:
101. Apakah ada hal yang human reviewer mungkin terlewat?
112. Apakah ada security atau performance concern yang subtle?
123. Apakah konsisten dengan pola di codebase existing?
134. Apakah ada test yang seharusnya ada tapi tidak ada?
14
15Context: spec di specs/order/cancel-order.md, conventions di CLAUDE.mdPeran “third reviewer” ini paling berguna sebagai jaring pengaman tambahan, bukan pengganti — ia menangkap blind spot tanpa membebani reviewer manusia dengan pekerjaan mekanis.
14.11 Review untuk Database Migrations
Migration adalah salah satu area paling berisiko karena dampaknya ke production langsung. Prompt berikut meminta AI mereview keamanan sebuah migration index sebelum dijalankan.
1Review migration ini:
2
3CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_orders_user_id_status
4ON orders(user_id, status) WHERE deleted_at IS NULL;
5
61. Apakah migration ini aman untuk dijalankan di production tanpa downtime?
72. Apakah index design-nya sudah optimal untuk query GetByIDAndUserID?
83. Apakah ada potential issue dengan CONCURRENTLY di PostgreSQL version kita?
94. Apakah conditional `WHERE deleted_at IS NULL` sudah benar?
105. Apakah ada index yang sudah ada yang overlap?
11
12Context: PostgreSQL 15, tabel orders punya ~5 juta rowsDengan konteks ukuran tabel dan versi PostgreSQL, AI bisa menilai hal-hal spesifik seperti keamanan CONCURRENTLY — pertanyaan yang jawabannya sangat bergantung pada versi dan skala data.
14.12 Review untuk Performance Implications
Untuk operasi yang menyentuh tabel besar, review performa harus berbasis query dan data nyata. Prompt berikut menyertakan SQL, ukuran tabel, dan target NFR agar analisis AI menapak di realita.
1Review implementasi CancelWithStockRestore dari perspektif performance:
2
3Query yang digunakan:
4SELECT id FROM orders WHERE id = $1 FOR UPDATE;
5UPDATE orders SET status = 'CANCELLED', updated_at = NOW() WHERE id = $1;
6UPDATE products p SET stock = p.stock + oi.quantity
7FROM order_items oi WHERE oi.order_id = $1 AND oi.product_id = p.id;
8
9Context:
10- orders: 5 juta rows, indexed pada (id)
11- order_items: 20 juta rows, indexed pada (order_id, product_id)
12- products: 500.000 rows, indexed pada (id)
13- Target NFR-P2: p95 < 500ms
14
151. Apakah semua query menggunakan index yang tepat?
162. Apakah ada N+1 query yang tersembunyi?
173. Apakah lock contention dari SELECT FOR UPDATE bisa menjadi bottleneck?
184. Estimasi waktu query di normal load?Menyertakan skala data nyata membuat AI menilai lock contention dan penggunaan index secara relevan — bukan saran generik, melainkan analisis yang terikat ke target p95 < 500ms.
14.13 Review Consistency Antar Feature
Kode yang benar tapi inkonsisten antar feature tetap menambah beban maintenance. Prompt berikut membandingkan dua usecase untuk menemukan gaya yang tidak seragam.
1Bandingkan implementasi cancel order dengan create order dari sisi consistency:
2
3Create Order (internal/usecase/order/create_order.go):
4@internal/usecase/order/cancel_order.go
5
6Cancel Order (internal/usecase/order/cancel_order.go):
7@internal/usecase/order/cancel_order.go
8
9Identifikasi inconsistency dalam:
101. Error handling style (wrapping, sentinel errors)
112. Logging pattern (level, structured fields)
123. Naming conventions (input struct, error types)
134. Dependency injection pattern
14
15Tujuan: keduanya harus feel seperti ditulis oleh orang yang sama.
16Berikan daftar inconsistency dan saran untuk menyeragamkan.Tujuan review konsistensi adalah agar codebase terasa ditulis oleh satu tangan — semakin seragam pola-nya, semakin rendah biaya kognitif developer berikutnya yang membacanya.
14.14 Pre-Merge Checklist dengan AI
Checklist pre-merge menstandarkan definition of done di setiap PR. Template berikut menggabungkan spec compliance, code quality, database, security, dokumentasi, dan AI review dalam satu daftar.
1## Pre-Merge Checklist — Cancel Order PR
2
3### Spec Compliance
4- [ ] Semua AC (AC1-AC10) ter-implement
5- [ ] Semua EC (EC1-EC4) ter-handle
6- [ ] Response format sesuai spec (HTTP status codes, error_code, message)
7- [ ] NFR considerations ter-implement (metrics, logging)
8
9### Code Quality
10- [ ] go build ./... berhasil
11- [ ] go test -race ./... berhasil
12- [ ] go vet ./... berhasil
13- [ ] golangci-lint run ./... berhasil
14- [ ] Coverage >= 85% untuk usecase layer
15
16### Database
17- [ ] Migration sudah dibuat jika ada schema change
18- [ ] Migration sudah di-test di local
19- [ ] Migration aman untuk production (CONCURRENTLY jika ada index)
20
21### Security
22- [ ] Tidak ada sensitive data di log
23- [ ] SQL queries menggunakan parameterized queries
24- [ ] Authentication check ada di middleware (tidak di usecase)
25
26### Documentation
27- [ ] Komentar di kode menjelaskan "why" bukan "what"
28- [ ] Spec-to-code tracing ada di comments penting
29
30### AI Review
31- [ ] Spec compliance review sudah dilakukan
32- [ ] Code quality review sudah dilakukan
33- [ ] Semua issues dari AI review sudah ditangani atau di-acknowledgeChecklist ini mengubah “definition of done” dari kesepakatan lisan menjadi daftar yang terlihat di setiap PR — setiap kotak yang tercentang adalah bukti, bukan asumsi.
14.15 Merespons Review Feedback
Feedback dari AI tidak selalu harus diterima mentah — ada beberapa respons yang sehat. Tiga contoh berikut menunjukkan cara accept, defer, dan disagree secara profesional.
1Accept dan Fix:
2Terima kasih atas catatan EC3. Kamu benar bahwa DB timeout tidak di-handle.
3Saya akan tambahkan context.WithTimeout sesuai saran.
4Pertanyaan: timeout 3 detik sudah sesuai dengan NFR-M4 di spec?
5NFR-M4 bilang "downstream service call timeout: 2 detik." Apakah 3 detik terlalu lama?
6
7Acknowledge dan Defer:
8Catatan tentang audit log (NFR-S12) valid. Ini memang belum di-implement
9karena dalam scope awal tidak termasuk. Akan saya buat ticket untuk implement
10di sprint berikutnya. Apakah ini acceptable untuk merge dengan ticket yang ada?
11
12Disagree dengan Justification:
13Regarding EC3 timeout: saya tidak akan tambahkan context.WithTimeout di usecase layer.
14Alasannya: context deadline sudah di-set di HTTP middleware (30 detik timeout),
15dan context propagation akan handle cancellation jika client disconnect.
16Menambahkan timeout tambahan di usecase bisa menyebabkan partial state yang sulit di-debug.Yang penting: setiap respons — bahkan menolak — disertai alasan dan referensi spec, sehingga keputusan tercatat dan bisa ditelusuri kembali oleh siapa pun di masa depan.
14.16 Review untuk Interface Changes
Perubahan interface berdampak ke semua implementor dan caller-nya. Contoh berikut menyajikan before/after interface repository, lalu meminta AI memetakan dampaknya.
1// BEFORE
2type Repository interface {
3 GetByID(ctx context.Context, id uuid.UUID) (*Order, error)
4}
5
6// AFTER
7type Repository interface {
8 GetByID(ctx context.Context, id uuid.UUID) (*Order, error)
9 GetByIDAndUserID(ctx context.Context, orderID, userID uuid.UUID) (*Order, error)
10 CancelWithStockRestore(ctx context.Context, orderID uuid.UUID) error
11}Setelah menyajikan diff interface, minta AI menjawab pertanyaan dampak seperti berikut.
11. Apakah ini breaking change?
22. File mana yang implement interface ini yang perlu diupdate?
33. Apakah ada test yang akan break?
44. Apakah perlu deprecation period untuk method lama?
5
6Jalankan: grep -r "Repository" internal/ untuk temukan semua user.Menambah method ke interface memaksa semua implementor menyesuaikan diri — memetakan implementor dan mock yang terpengaruh lebih dulu mencegah build yang tiba-tiba merah di seluruh package.
14.17 Review Pattern: Red, Yellow, Green
Tidak semua temuan review setara bobotnya. Kategorisasi berikut membagi feedback menjadi tiga level agar prioritas jelas sebelum merge.
1🔴 RED — Harus di-fix sebelum merge:
2- Spec AC yang tidak ter-implement
3- Security vulnerability
4- Data corruption risk
5- Test yang cover kasus berbahaya tapi di-skip
6
7🟡 YELLOW — Perlu diskusi, mungkin OK:
8- Pattern yang inconsistent dengan codebase existing
9- Performance yang di bawah NFR target tapi masih acceptable
10- Missing audit log yang dalam scope "nice to have"
11
12🟢 GREEN — Suggestion, optional:
13- Refactoring untuk readability
14- Alternative approach yang tidak lebih baik, hanya berbeda
15- Komentar yang bisa ditambahkan untuk clarityDengan klasifikasi ini, diskusi review tidak berputar di prioritas: RED memblokir merge, YELLOW dibahas, GREEN opsional — semua orang tahu mana yang wajib ditangani sekarang.
14.18 Tips & Gotchas
💡 Tip 1: Review spec dan kode bersamaan, bukan bergantian — AI spec compliance review paling efektif ketika spec dan kode diberikan sekaligus dalam satu prompt. Jangan describe spec dari memori — paste content-nya langsung.
💡 Tip 2: Request feedback yang actionable — “Review kode ini” terlalu umum. “Identifikasi spec compliance gap dan berikan saran perbaikan yang spesifik” jauh lebih efektif.
💡 Tip 3: Verifikasi AI review findings — AI bisa salah dalam review. Ketika AI bilang “AC X tidak ter-implement,” cek sendiri apakah benar. AI kadang tidak melihat indirect implementation.
💡 Tip 4: Gunakan AI review sebagai sanity check, bukan sebagai oracle — AI review adalah layer pertama, bukan pengganti human review. Human judgment tetap penting untuk business logic dan architectural decisions.
⚠️ Gotcha 1: AI review bisa false positive — AI mungkin bilang sesuatu tidak ter-implement padahal sudah ada. Selalu verify dengan cek manual.
⚠️ Gotcha 2: Context window yang terlalu besar mengurangi kualitas review — jika paste terlalu banyak kode sekaligus, kualitas review menurun. Review per-file atau per-feature lebih efektif.
⚠️ Gotcha 3: AI tidak bisa review runtime behavior — AI bisa review kode, tapi tidak bisa verify behavior saat runtime. Load test dan integration test tetap diperlukan.
⚠️ Gotcha 4: Review tanpa spec reference tidak efektif — “Review kode ini” tanpa spec reference akan menghasilkan review code quality saja, bukan spec compliance. Selalu include spec dalam review prompt.
14.19 Membangun Review Culture dengan AI
Di level tim, AI-assisted review bisa dijadikan bagian dari culture lewat PR template yang terstruktur. Contoh deskripsi PR berikut memuat rantai traceability dari spec sampai handling issue.
1## Cancel Order Implementation
2
3**Spec:** specs/order/cancel-order.md v1.3
4**Plan:** [link ke implementation plan]
5
6### Spec Compliance Self-Review
7AI spec compliance review dilakukan. 13/14 item covered (10 AC + 4 EC).
8
9**Known gap:** EC3 (DB timeout) tidak di-handle eksplisit.
10Justification: Context dari HTTP middleware (30s timeout) sudah cover ini.
11Tracking: [jika perlu ticket]
12
13### Changes
14- internal/usecase/order/cancel_order.go (new)
15- internal/domain/order/entity.go (add CanBeCancelled)
16- internal/repository/postgres/order_repository.go (add 2 methods)
17- internal/delivery/http/handler/order_handler.go (add CancelOrder)Dengan template seperti ini, setiap PR membawa rantai traceability lengkap: spec → implementasi → review → keputusan — sehingga reviewer dan audit di masa depan tidak perlu merekonstruksi konteks dari nol.
14.20 Ringkasan
Code review di SDD punya dua dimensi: code quality (seperti review biasa) dan spec compliance (spesifik SDD). AI sangat efektif untuk spec compliance review karena kemampuannya cross-reference secara sistematis.
Workflow yang efektif: Implementasi selesai → AI spec compliance review → tangani issues → self-review dengan checklist → PR → human review → AI final check jika ada concerns.
Prompt yang efektif: Sertakan spec dan kode sekaligus, minta output yang terstruktur (tabel ✅/❌/⚠️), dan minta saran yang actionable.
Batasan AI review: Bisa salah (false positive/negative), tidak bisa review runtime behavior, kualitas menurun untuk konteks yang terlalu besar. Human review tetap essential.
Review culture di tim: Integrate AI review ke PR template, jadikan spec compliance sebagai bagian standar dari definition of done.
Di artikel berikutnya, kita bahas refactoring dengan Claude Code — bagaimana melakukan refactoring yang aman, terstruktur, dengan safety net yang kuat dari spec dan test.