# Diff'i dışarı sızdırmadan yerel kod incelemesi

> Diff'i makineden çıkarmadan bir modele denetleten, sağlayıcıdan bağımsız Go CLI; CommitBrief ürününe dönüştü.

- Şu an ne yapıyor: Diff hiç makineden çıkmadan yerel kod incelemesi yapıyor; `Provider` arayüzü sayesinde Anthropic, OpenAI, Gemini ve Ollama aynı sözleşmeyle takılıyor. İmzalı binary'ler yayında — diff'ini bir bulut sağlayıcısına vermek istemeyen herkes kurabilir.
- Tür: Açık kaynak
- Durum: Ürün oldu
- Odak: AI destekli geliştirme
- Başlangıç: 2026-01-01
- Labs’tan çıkış: 2026-04-07
- Teknolojiler: Go, Cobra, go-git, Anthropic Claude, OpenAI, Google Gemini, Ollama
- Etiketler: #ai, #cli, #kod-inceleme
- Kaynak kodu: https://github.com/CommitBrief/commitbrief
- Web sitesi: https://commitbrief.com
- Bu iş ürüne dönüştü: CommitBrief (https://www.muhammetsafak.com.tr/portfolyo/commitbrief/)
- Kaynak: https://www.muhammetsafak.com.tr/labs/commitbrief-lab/
- Dil: tr-TR
- Yazar: Muhammet Şafak

---
Diff'i bir modele okutmak için onu makineden çıkarman gerekmiyor. Tek dış çağrı
seçtiğin sağlayıcıya gidiyor — ve asıl iş o sağlayıcıyı takılabilir kılmakta.

## Terminalden çıkmayan inceleme

Sorun şuydu: bir kod değişikliği başka bir insana (ya da gelecekteki bana)
gitmeden önce, terminalden çıkmadan yapılandırılmış bir "ikinci göz" incelemesi
alınabilsin. Diff makineden çıkmasın, inceleme çıktısı da öyle.

## Tek komutun kapsamı

Kapsam tek bir komuta sığdı: staged diff, tek commit, çalışma ağacı ya da
PR tarzı üç noktalı aralık. Proje kuralları `COMMITBRIEF.md` ile
özelleştirilebiliyor, çıktı renkli kart / markdown / katı JSON şeması olarak
alınabiliyor.

## Sağlayıcıyı takılabilir kılmak

Bir LLM aracının en kısa ömürlü parçası, bağlandığı sağlayıcıdır. İki karar bu
kabulden çıktı.

**`Provider`, `database/sql` kalıbında bir kayıt sistemi.** Sağlayıcıyı doğrudan
çağırmak en kısa yol olurdu; ikinci sağlayıcıda o yolun bedeli ödeniyor. Kayıt
sistemiyle yeni bir sağlayıcı eklemek tek bir paket ve tek bir blank import
demek. Anthropic, OpenAI, Gemini ve Ollama API tabanlı; `claude-cli` ile
`gemini-cli` ise kullanıcının mevcut aboneliğini yeniden kullanan subprocess
tabanlı sağlayıcılar — ikisi de aynı arayüzü uyguluyor.

**Git tek yoldan okunmuyor.** `go-git` saf Go, kurulum gerektirmiyor;
commit tabanlı işlemlerin tamamını, `status` ve `diff`'i de karşılıyor. Kapsamı
çalışma ağacının kenarlarında bitiyor: `add` yalnız bayraksız hâliyle
destekleniyor, çoklu worktree ve index v1/v3 hiç desteklenmiyor. Saf çözüm için
binary'ye hiç düşmemek gerekirdi ve o zaman bu kenar durumların hepsi aracın kör
noktası olurdu. Hibrit yol seçildi: önce `go-git`, kapsamı aşan yerde `git`
binary'si, ikisi de aynı `Repo` arayüzünün arkasında.

## Aynı diff'i iki kez ödememek

Üçüncü karar maliyet tarafında. Bir LLM çağrısı ücretli ve geliştirici aynı
diff'i gün içinde birkaç kez inceletiyor — commit'ten önce, düzeltmeden sonra,
PR açarken.

Önbellek anahtarı yalnız diff olsaydı yanlış cevap dönerdi: aynı diff farklı
sağlayıcıda, farklı modelde ya da farklı dilde başka bir inceleme demek.
Anahtar bu yüzden beş parçadan oluşuyor — diff, sistem prompt'u, sağlayıcı,
model ve dil — ve SHA256 ile özetleniyor. Aynı beşli tekrar geldiğinde çağrı
tek disk okumasına iniyor, her çağrının sonunda kazancı `Saved: $X` satırı
olarak yazılıyor.

Aynı disiplin gönderilen içerikte de var: üç katmanlı bir filtre modele neyin
gideceğini daraltıyor — yerleşik varsayılanlar, `.commitbriefignore` ve
`COMMITBRIEF.md` içindeki semantik filtre. Diff makineden çıkmıyor derken
kastedilen şey buydu; çıkan şeyin de ne olduğu seçilebiliyor.

## İmzalı binary'lere giden yol

Labs aşaması kapandı: CommitBrief artık kendi alan adı, imzalı binary'leri ve
sürüm sözleşmesi olan bir ürün. Ayrıntısı portfolyoda.
