# Open Code Review: Kod İncelemesini Ajanın Keyfine Bırakmamak

> Alibaba'nın Open Code Review'ı hangi dosyanın hangi kuralla inceleneceğine kodla, hükme modelle karar veriyor. Kapsama güçlü, yakalama oranı bilerek düşük; PHPStan'ın yerine değil yanına.

- Yazar: [Halit Yeşil](https://halityesil.com/hakkimda/)
- Yayın tarihi: 2026-10-08
- Dil: Türkçe
- Kaynak adres: https://halityesil.com/open-code-review-ai-kod-inceleme/
- İngilizce sürümü: https://halityesil.com/en/open-code-review-ai-code-review-cli.md
- Kategori: Yapay Zeka / AI
- Etiketler: açık kaynak, AI Ajanları, Alibaba, CI/CD, kod inceleme, Open Code Review, php, statik analiz
- Lisans: https://creativecommons.org/licenses/by-nc/4.0/
- Atıf: Halit Yeşil. “Open Code Review: Kod İncelemesini Ajanın Keyfine Bırakmamak”. halityesil.com, 2026-10-08. https://halityesil.com/open-code-review-ai-kod-inceleme/

---

Havalimanında gümrükten geçen herkes bilir: hangi bavulun açılacağına memurun o anki keyfi karar vermez. Önce bant taraması ve bir liste karar verir, memur ancak ondan sonra bavulun içine bakar. Listesi olmayan memurun iki hâli vardır. Ya her bavulu açar ve kuyruk kilitlenir, ya da üçüncü bavulda yorulur ve gerisini el sallayarak geçirir.

Yapay zeka kod inceleme araçlarının çoğu bugün o listesiz memur gibi çalışıyor. Bu haftanın radarında bu sorunu tersinden çözmeye çalışan bir proje var: Alibaba'nın Open Code Review'ı, kısa adıyla OCR (optik karakter tanımayla karıştırmayın, bu da kod okuyor ama başka türlü). Neyi iyi yaptığına, nerede yarı yolda bıraktığına ve çerçevesiz bir PHP projesine nasıl oturduğuna bakalım.

## Open Code Review nedir?

**Tek cümleyle:** Git diff'inizi okuyup hangi dosyanın hangi kuralla inceleneceğini kodla belirleyen, asıl hükmü ise sizin yapılandırdığınız dil modeline verdiren, satır numaralı yorum üreten açık kaynak bir komut satırı aracı (CLI).

[README'ye göre](https://github.com/alibaba/open-code-review) araç Alibaba Group'un iç kod inceleme asistanı olarak başlamış, iki yıl boyunca on binlerce geliştiriciye hizmet ettikten sonra açık kaynağa çıkarılmış. Go ile yazılmış, Apache-2.0 lisanslı. npm'deki ilk sürüm 21 Mayıs 2026; 6 Ekim 2026 itibarıyla son sürüm 1.12.12 ve depoda yaklaşık 43,8 bin yıldız var. [gittrend.io'nun Eylül 2026 listesinde](https://gittrend.io/monthly/2026-09) ay boyunca 21,2 bin yıldız toplayıp en hızlı yükselen 13. depo olmuş.

Bu yazı için aracı kendi ortamımda çalıştırmadım; komutlar ve davranışlar deponun README'sinden, doküman kaynaklarından ve npm kaydından.

## Fikir: listeyi kod tutar, hükmü model verir

Projenin teşhisi dürüst: genel amaçlı bir ajana (README'deki örnek Claude Code) skill ile kod inceletince büyük değişikliklerde bazı dosyalar hiç okunmuyor, yorumun gösterdiği satır kayıyor, prompttaki küçük bir oynama kaliteyi sallıyor. Süreç baştan sona dille yönetiliyor, hiçbir adımda sert kısıt yok.

OCR işi ikiye bölüyor:

- **Kodla yapılan kısım (liste):** hangi dosyanın inceleneceği, birbiriyle ilgili dosyaların aynı pakette toplanması (her paket ayrı bağlamda çalışan bir alt ajan), dosyaya göre kural seçimi, yorumun doğru satıra oturtulması.
- **Modelle yapılan kısım (memur):** dosyayı okumak, kod tabanında arama yapmak, hükmü vermek.

[Filtre altı kapıdan oluşuyor](https://github.com/alibaba/open-code-review/blob/main/pages/src/content/docs/en/review-rules.md): ikili dosya, gizli dosya yolları (`.ssh`, `id_rsa`, `.env` ve türevleri; `.env.example` hariç), sizin `exclude` listeniz, sizin `include` listeniz, desteklenen uzantılar ve yerleşik hariç tutma kalıpları. Elenen her dosyanın gerekçesini de yazıyor.

**Gizli Hazine:** `ocr review --preview` bu filtreyi tek token harcamadan çalıştırıyor. Modele ne gideceğini faturayı görmeden önce görüyorsunuz.

## PHP projesinde kurulum ve ilk kural dosyası

Asıl şart Git 2.41 veya üstü. Gerisi npm:

```bash
npm install -g @alibaba-group/open-code-review
export OCR_NO_UPDATE=1                           # npm sürümünün sessiz otomatik güncellemesini kapatır

cd proje
ocr rules check src/Siparis/SiparisServisi.php   # bu dosyaya hangi kural uygulanacak?
ocr review --preview                             # model çağrılmadan: hangi dosya giriyor, hangisi neden elendi
ocr review --from main --to ozellik-dali         # dalın main'den ayrıldığı yerden itibaren incele
```

Kurallar üç katmanda duruyor: `--rule` bayrağı, depodaki `.opencodereview/rule.json` ve kullanıcı dizinindeki `~/.opencodereview/rule.json`. Hiçbiri eşleşmezse binary'ye gömülü sistem kuralları devreye giriyor. PHP için hazır bir `php.md` kuralı (`.php` ve `.phtml`) ile `composer.json` için ayrı bir kural geliyor.

Çerçevesiz PHP + MariaDB + Vue bir projede başlayacağım dosya bu (dizin düzeni örnek):

```json
{
  "exclude": ["public/build/**", "storage/**"],
  "rules": [
    {
      "path": "src/**/*.php",
      "rule": "Veritabanına giden her sorgu PDO hazır ifadesiyle (prepare + execute) kurulmalı; değişkeni SQL metnine birleştiren satırı işaretle. Veriyi değiştiren uç noktada yetki kontrolü yoksa işaretle.",
      "merge_system_rule": true
    },
    {
      "path": "database/migrations/**/*.sql",
      "rule": "MariaDB göçü: büyük tabloda uzun kilit tutacak ALTER, geri dönüşü olmayan DROP ve varsayılan değeri olmayan NOT NULL sütunu işaretle."
    },
    {
      "path": "resources/js/**/*.vue",
      "rule": "v-html ile kullanıcıdan gelen veri basılıyorsa XSS olarak işaretle."
    }
  ]
}
```

**Teknik Detay:** `merge_system_rule: true` satırı olmadan `src/**/*.php` kuralınız yerleşik PHP kuralını ezer, yanına eklenmez. Sıra da önemli, çünkü her dosya için yalnızca ilk eşleşen kural uygulanıyor.

[Vibe Coder #4.1](https://halityesil.com/vibe-coder-4-1-mega-prompting/)'de şartname dosyalarının "zorlayıcı yapılandırma değil, bağlam" olduğunu yazmıştım. Buradaki fark tam o noktada: hangi dosyaya hangi kuralın gideceğine model karar vermiyor, eşleştirmeyi kod yapıyor. Model kuralı yanlış yorumlayabilir ama hiç görmeme ihtimali kalmıyor.

API anahtarınız yoksa ya da kodu üçüncü bir uç noktaya göndermek istemiyorsanız iki yol var. Birincisi **delegation mode** (görev devri): `ocr delegate preview --format json` ve `ocr delegate rule` yalnızca dosya listesini ve kuralları üretiyor, OCR tarafında hiçbir model çağrılmıyor; incelemeyi zaten kullandığınız ajan yapıyor. Depoda Claude Code, Codex, Cursor, Kimi Code ve OpenCode için hazır eklentiler var. İkincisi lokal model: Ollama'yı `custom_providers` altında OpenAI uyumlu bir uç nokta olarak tanımlıyorsunuz (dokümandaki örnek model `qwen3:32b`). [Vibe Coder #3.3](https://halityesil.com/vibe-coder-3-3-lokal-llm/)'te anlattığım bağlam penceresi tuzağı burada da geçerli.

## Ne zaman işe yarar, ne zaman yaramaz?

**Gerçek:** Büyük bir PR'da "her dosyaya bakıldı mı?" sorusunun cevabını istiyorsanız asıl değeri bu. Görev devri talimatı bile her dosyanın "incelendi" ya da gerekçesiyle "atlandı" olarak işaretlenmesini ve kapsama oranının raporlanmasını şart koşuyor.

**Acı Gerçek 1, kaçırır:** Projenin kendi benchmark'ına göre (50 açık kaynak depo, 200 gerçek PR, 10 dil, 80'den fazla kıdemli mühendisin işaretlediği 1.505 sorun) OCR aynı modelle Claude Code'dan daha yüksek isabet (precision) ve F1 alıyor, token tüketimi yaklaşık dokuzda bir. Ama README açıkça yazıyor: yakalama oranı (recall) daha düşük ve bu bilinçli bir tercih. Az ama doğru konuşuyor. Tek kapınız bu olursa bazı kaçaklar geçer. Rakamlar projenin kendi ölçümü ve 10 dilin içinde PHP olup olmadığını doğrulayamadım.

**Acı Gerçek 2, sır temizlemez:** `.env` dosyası hiç gönderilmiyor, ama koda gömülmüş bir şifre diff'te duruyorsa modele gidiyor. [SSS sayfası](https://github.com/alibaba/open-code-review/blob/main/pages/src/content/docs/en/faq.md) bunu açıkça söylüyor: yerleşik maskeleme yok, yol haritasında.

**Acı Gerçek 3, kendini günceller:** npm ile kurulan sürüm varsayılan olarak çalıştırıldıkça arka planda kayıt defterine bakıyor (iki kontrol arasında 18 dakika bekliyor) ve yeni sürüm bulunca kendini yükseltiyor. Güvenlik politikası da yalnızca son sürümü destekliyor. CI'da sürümü sabitleyip `OCR_NO_UPDATE` koymazsanız dünkü inceleme ile bugünkü inceleme farklı ikililerle yapılmış olabilir.

**Dikkat:** `.vue` ve `.sql` dosyaları inceleniyor ama kendilerine ait yerleşik kural yok, genel `default.md`'ye düşüyorlar. MariaDB göçleriniz ve Vue bileşenleriniz için kuralı siz yazacaksınız. Bir de şu: Java'nın `*Test.java` dosyaları varsayılan olarak hariç, PHPUnit'in `*Test.php` dosyaları için öyle bir kalıp yok. Testleriniz de incelemeye giriyor; isterseniz `exclude`'a siz ekleyin.

## Bakım durumu ve emeğin sahibi

| Konu | Durum (6 Ekim 2026) |
| --- | --- |
| Lisans | Apache-2.0, telif "2026 Alibaba" |
| Son sürüm | 1.12.12 (npm, 5 Ekim 2026) |
| İlk npm sürümü | 21 Mayıs 2026; o günden beri 125 sürüm |
| Yıldız | yaklaşık 43,8 bin |
| Açık issue / PR | 115 / 161 |
| Güvenlik | Yayımlanmış danışma kaydı yok; [SECURITY.md](https://github.com/alibaba/open-code-review/blob/main/.github/SECURITY.md) ilk yanıt için 3, ilk değerlendirme için 7 iş günü, kritik ve yüksek açıklarda 14 gün içinde düzeltme hedefi veriyor; sürüm dosyaları Sigstore ile imzalı |
| Telemetri | Varsayılan olarak kapalı |
| OpenSSF Best Practices | Gold rozeti |

Proje [Alibaba Group](https://github.com/alibaba) ekibinden geliyor. Benchmark verisi de Hugging Face'te Alibaba-Aone hesabı altında [AACR-Bench](https://huggingface.co/datasets/Alibaba-Aone/aacr-bench) adıyla açık. Araç ücretsiz; maliyet, bağladığınız modelin faturası.

## Alternatiflerle kısa karşılaştırma

| Araç | Yaklaşım | Lisans | Ne için |
| --- | --- | --- | --- |
| Open Code Review | Kodla dosya seçimi + LLM ajanı, CLI | Apache-2.0 | Büyük diff'te eksiksiz kapsama, CI'da satır yorumu |
| [PR-Agent](https://github.com/The-PR-Agent/pr-agent) | LLM tabanlı PR yorumcusu; Qodo'nun topluluğa bıraktığı proje | MIT | PR ekranında özet ve yorum |
| Genel ajan + skill (Claude Code, Codex, Cursor) | Tamamen dil güdümlü | Codex CLI Apache-2.0; Claude Code ve Cursor kapalı kaynak | Küçük değişiklikte hızlı ikinci göz |
| PHPStan / Psalm | Deterministik statik analiz, model yok | MIT | Tip hatası, ölü kod; her commit'te |

Net önerim: PHPStan'ı ya da Psalm'ı bırakmayın. Ucuzdur ve hiç uydurmaz. OCR onların yerine değil yanına gelir; tip sisteminin göremediği mantık hatası, eksik yetki kontrolü, string birleştirilmiş SQL için.

## Sahada: benim günlük işimde nereye oturur?

Kendi blog platformum çerçevesiz PHP ve PHPStan seviye 8 ile çalışıyor; o katman yerinde kalıyor. OCR'ı ekleyecek olsam yeri ajanın açtığı dal ile main arasındaki kapı olurdu: birleştirmeden önce `ocr review --from main --to <dal>`. Ajanla çalışırken asıl soru çoğu zaman yanlış yazılmış kod değil, ajanın sormadan dokunduğu dosyadır. "Hangi dosyalar incelendi, hangileri neden atlandı" listesi tam o soruya cevap veriyor.

[PHP'de Kod Nasıl Yazılmaz](https://halityesil.com/phpde-kod-nasil-yazilmaz-baslica-hatalar-ve-ipuclari/) yazısındaki 50 hatanın birkaçı, en başta da string birleştirilmiş SQL, kural dosyasına birer satır olarak gidebilir.

Gümrükte güven memurun zekasından gelmez, hiçbir bavulun listeden kaçmamasından gelir. Model zeki olabilir. Kapsamayı ona bırakmayın.
