Her repoda kimsenin yazıya dökmediği çeşitli bilgiler vardır. Üç yıldır her pull request’i inceleyen kişinin kafasında durur ve o kişi gittiğinde onunla gider.
Murat Kirazkaya6 dk okumamodel değil, bağlam üzerine
Şekil 01Bir YZ inceleyiciye bant verilir. Bir insan inceleyici bandı da alır, alanı da zaten kafasında taşır.
01 · tekrar
Bu yorumu daha önce yazdın
Altı ay arayla üç pull request, üç ayrı katkıcı. Her seferinde aynı yorum, her seferinde biraz farklı cümlelerle. Kural gerçek ve herkes onu biliyor. Sadece hiçbir yerde bir makinenin okuyabileceği biçimde yazılı değil.
MKmuratreviewed #218Mar 3
We keep amounts as integer minor units. amount * 0.029 turns a Money into a float, and the rounding is already gone by the time it reaches the ledger. Use mulRate.
MKmuratreviewed #264Jun 11
Same thing as #218. This multiplies a Money by a float. mulRate(amount, 29, 1000) does it in one rounding step.
MKmuratreviewed #301Sep 2
Float math on money again, third time this quarter. mulRate.
co-maintainer bunu CODEBASE.md’ye şöyle not aldı
Money is an integer count of minor units, defined in src/money.ts. Never multiply or divide a Money by a float. Rate math goes through mulRate(amount, numerator, denominator), which rounds once, at the end.
Şekil 02Alttaki cümleyi kimse yazmadı. co-maintainer reponun inceleme geçmişini okudu ve onu reponun kendi sözcükleriyle yazdı. Yorumlar ve kılavuz metni, aracın gerçekte ürettiği gibi İngilizce.
02 · boşluk
Diff’in söylemedikleri
Bir inceleyici yamayı okurken bu kod tabanının dört yılını da kafasında taşır. Bunun ne kadar değerli olduğu şurada görünüyor.
Şekil 03Değişen satır yamanın içinde. Yanlış olmasının sebebi ise kimsenin dokunmadığı bir dosyada.
Tipler derlenir, çünkü markalı bir number hâlâ bir number’dır. Ücret kesirli çıkar, ledger.post() tam sayı bekler ve iade, düzgün bölünmeyen ilk tutarda hata verir.
Kaçan bir bulgu çoğunlukla eksik bir girdidir, zayıf bir model değil.
03 · okuma
Repoyu bir kez oku, her incelemede değil
Her incelemede modele bütün repoyu vermek mümkün ama saçma. Repo onun yerine bir kez, incelemenin dışında okunur. Çıkan kılavuzlar da her yamaya götürecek kadar küçüktür.
probe
Hiçbir şeye mal olmayan kısımla başla
Repoyu GitHub API üzerinden okur ve çalıştırmanız gereken init satırını, limitler doldurulmuş halde yazdırır. Hiçbir model çağrılmaz, hiçbir şey yazılmaz.
init · çıkarım
Ucuz bir model repoyu kanıta çevirir
Ağaç, dosyalar, pull request’ler, diff’leri, üzerlerindeki tartışmalar, commit geçmişi. Her gözlem, onu üreten dosyaya ya da pull request’e bağlı kalır, çünkü kaynağı izlenemeyen bir kural, bir inceleme aracının kural uydurmaya başlama biçimidir.
init · sentez
Akıl yürüten bir model kanıtı üç kılavuza çevirir
Buraya nasıl katkı yapılır, kod gerçekte nasıl yazılır ve buradaki inceleyiciler tarihsel olarak hangi sebeplerle pull request’leri durdurmuş. Klonun içine değil config dizininize yazılırlar, bu yüzden yeni bir checkout onları kaybetmez.
remake
Sonra bir diff’in maliyetine canlı tut
Yeniden çeker, önbelleğin değişmedi dediği her kanıtı yeniden kullanır ve yalnızca yeni commit’lerin dokunduğu kılavuzları baştan yazar. init bir kereliktir. Bu ise döngüdür.
zsh · ~/src/payments-apirepo başına bir kez
$co-maintainer probe northwind/payments-api --auth=gh repository northwind/payments-api default branch main pull requests 312 sampled over 14 months commits 4,180 on main recommended co-maintainer init northwind/payments-api --include-codebase \ --include-pull-requests --include-pull-request-changes \ --include-commit-history --max-pr-months=12 --max-commits=500 no model was called, nothing was written$co-maintainer init northwind/payments-api --auth=gh --ai=openrouter extract 1,284 files, 312 pull requests low model synth SKILL.md CODEBASE.md PR_REVIEW_GUIDE.md high model written ~/.config/co-maintainer/repos/northwind/payments-api done in 6m 12s
Şekil 04İki komut, biri bedava. Çıktı, biçimini korumak için kısaltıldı.
Bunun bir kez yapılmasının sebebi:
Şekil 05Ölçekli çizildi. Küçük kare, repo önceden okunmuşken bir incelemenin maliyetidir.
04 · ürün
Ürün kılavuzlardır
Modeller kiralıktır. Bu çeyrek en iyisi hangisiyse gelecek çeyrek en iyisi o olmayacak. Sahip olduğunuz kısım bağlamdır.
SKILL.md14.2 KB
## Shipping
Pull requests run CI via .github/workflows/ci.yml, which defines a test job and a contract job that replays recorded provider webhooks.
Run npm run verify-pack before tagging a release.
## Tests
A new provider adapter is expected to ship with a webhook replay fixture under test/fixtures/providers/.
buraya nasıl katkı yapılır
CODEBASE.md9.8 KB
## Money
Money is an integer count of minor units, defined in src/money.ts. Never multiply or divide a Money by a float. Rate math goes through mulRate(amount, numerator, denominator).
ledger.post() asserts an integer amount, so a float that reaches it throws rather than rounding quietly.
## Code layout
Each provider adapter lives in src/providers/ and exports only charge, refund and webhook.
kod gerçekte nasıl yazılır
PR_REVIEW_GUIDE.md6.1 KB
## What reviewers here ask for
Float arithmetic on an amount is the most frequently raised issue in this repository's history (#218, #264, #301).
Three adapters have been blocked for shipping without a replay test. Treat a missing fixture as blocking, not as a nit.
## Tone
Reviewers here state the consequence, then the fix, in that order.
buradaki inceleyiciler PR’ları neyle durdurur
Şekil 06Elle yazılmadı, üretildi. Vurgulanan satır Şekil 02’deki satır, sağdaki kartta geçen numaralar da geldiği pull request’ler. Kılavuzlar aracın yazdığı haliyle, İngilizce.
Yüksek sesle okuyun, iki yıldır bu repoya merge eden kişi gibi konuşurlar. Başlık buradan geliyor. Ekibinizden daha iyi bir inceleyici olmaya çalışmıyor, zaten sahip olduğunuz inceleyicinin ucuz bir taklidi olmaya çalışıyor. Gece 2’de bile uyanık, sıkıcı pull request’lerde de.
05 · inceleme
Diff’e ne yazar
Bir pull request açılır. Kılavuzlar zaten diskte, bu yüzden inceleyici hiç görmediği bir yamadan değil, okumuş olduğu bir repodan başlar.
Review/ co-maintainerreading guides and diff…2 findings, 1 blocking24sDetails
co-maintainerbot reviewed just now
Reviewed against SKILL.md, CODEBASE.md and PR_REVIEW_GUIDE.md for this repository, with codegraph enabled.
1 blocking1 non blocking9,312 tokens24.7s$0.0041
src/billing/refund.ts+3−0
3939exportfunctionrefundFee(amount: Money) {
40const fee = amount * 0.029;
41return { fee, net: amount - fee };
4042}
P1 · blocking
refundFee() returns a fractional amount. ledger.post() asserts an integer count of minor units, so every refund whose fee does not divide evenly throws in production instead of rounding. CODEBASE.md puts rate math through mulRate for exactly this reason.
src/billing/refund.ts:41 · 3 call sites reach this
Suggested change
41const fee = amount * 0.029;
41const fee = mulRate(amount, 29, 1000);
Commit suggestionAdd to batch
Şekil 07Yeşil tik ilginç kısım değil. İlginç olan, yamanın hiç dokunmadığı bir dosyadaki bir doğrulamayı adıyla anan yorum. Bot yorumu aracın ürettiği haliyle, İngilizce.
Kılavuzlar olmadan burada iki dürüst seçenek var. Hiçbir şey söylememek, çünkü yüzdelik ücret yazılması normal bir şey. Ya da kayan noktayla ilgili belirsiz bir şey söylemek, ki herkes bunu kaydırıp geçmeyi öğrendi.
Bulgular taşınır. Düzeltmeyi gönderin, yeniden çalıştırın, bulgu iki kez açılmak yerine kapanır.
Engelleyici bir bulgu sıfırdan farklı kodla çıkar. CI’ın ihtiyacı olan tek şey bu.
stdout’ta --json, log’lar stderr’de. Bulgular, sayılar, token’lar, süre, codegraph durumu, tek bir belgede.
Codegraph isteğe bağlı. Varsayılan olarak açık, ikili dosya sizin haberiniz olmadan değil, istek üzerine kurulur.
06 · üç kapı
Aynı kılavuzlar, üç giriş
İnsanların gerçekten istediği yalnızca üç cevap var: çalışma ağacımdaki dağınıklık, şuradaki pull request ve birincisi, ama her dizüstünü init için ödeme yapmaya zorlamadan.
reviewyerel inceleme
review owner/repo 312pull request incelemesi
review --remoteuzak inceleme
ne okur
Klonunuzdaki staged, unstaged ve untracked dosyalar
Pull request ve yaması gh ile, checkout gerekmez
Birinci sütundaki yerel diff’in aynısı
kılavuzlar nerede
Diskiniz, kendi init’iniz
Diskiniz, kendi init’iniz
Sunucu, ekip için bir kez kurulur
model nerede çalışır
Makineniz, anahtarınız
Makineniz, anahtarınız
Sunucu, kendi anahtarıyla
ne gerekir
Bir klon ve bir init
gh ve bir init
Bir host ve bir token
ne zaman kullanılır
Pull request’i açmadan önce
Başkasının işini incelerken
Yeni bir ekipte ilk haftanız
Şekil 08Pull request incelemesi ve uzak inceleme birleşmez. Biri numara alır, diğeri diff.
07 · uzak inceleme
Bilgisayarında hiç init çalıştırmadan shared contexti kullan
Biri pazartesi günü ekibe katılır ve repoyu klonlar. Yerel inceleme kılavuz ister, kılavuz init ister, init ise dakikalar ve para ister. Bunu dizüstü başına bir kez ödemek, bir aracın üçüncü haftasında ölme biçimidir.
dizüstünüz
$co-maintainer review --remote
·main’e karşı git diff, 2 dosya
·codegraph burada, klonunuzda çalışır
·kılavuz yok, sağlayıcı anahtarı yok, init yok
bu makineden çıkmaz klon · kimlik bilgileriniz · stage etmediğiniz her şey
diff
araç çağrısı
araç sonucu
bulgular
co-maintainer serve
·northwind/payments-api kılavuzları
·sunucuyu kuran kişi tarafından bir kez oluşturuldu
·model burada, ekibin anahtarıyla çalışır
·iş kuyruğu, token başına eşzamanlılık
hiç görmez çalışma ağacınız · geçmişiniz · diff dışındaki her şey
1 · el sıkışmatoken cmr_…, şema ve gövde limitleri üzerinde anlaşılır
2 · göndermediff yukarı çıkar, yalnızca diff
3 · kuyruksunucu modeli kendi kılavuzlarıyla çalıştırır
4 · araç köprüsüdizüstünüzden codegraph çalıştırmasını ister ve bekler
5 · senkronbulgular yerel çalıştırmayla aynı biçimde geri gelir
Şekil 09Araç köprüsü, üzerinde durmaya değer kısım. Model sunucuda, incelemesi gereken kod ise sizin makinenizde.
Sıkıcı güvenlik kısımları. Token’lar diskte hash’lenir ve birini devre dışı bırakmak, onunla süren her incelemeyi iptal eder. CLI, bir host’a ilk kez diff yüklediğinde tek seferlik bir bildirim yazdırır, böylece kimse bunu altı ay sonra kaynağı okuyarak öğrenmez.
08 · sunucu
Sıkıcı yarıyı otomatikleştirmek istediğinde
co-maintainer serve tek bir süreç ve tek bir app.db. GitHub App webhook’unu, bir job worker’ı, panoyu ve son bölümdeki uzak inceleme API’sini barındırır.
localhost:5000
Şekil 10Önemli olan Knowledge sütunu. main kılavuzların ilerisine geçtiğinde Needs update yazar ve oradan bir tık uzaklıkta remake var.
Bir repo ekleyin, init izleyebileceğiniz bir iş olarak çalışır. Otomatik incelemeyi açın, bir pull request’in açılması bir inceleme başlatmaya yeter. Yukarıdaki repo 8 gündür bağlı. init, remake ve tüm incelemeler dahil toplam maliyeti $1.20 oldu.
09 · kanıt
Peki bunlar gerçekten işe yarıyor mu?
Kendi repolarımdan birinde otuz pull request. On dördü bilerek eklenmiş, elle doğrulanmış bir hata taşıyor. On altısı temiz kontrol, ki çoğu inceleme benchmark’ı bu kısmı atlar ve precision’ı ölçülebilir kılan da bu kısımdır.
recall0.85714 hatanın 12’si bulundu
precision0.353temiz koda da takılıyor. Saklamadığımız yarı bu
PR başına maliyet$0.0045tüm koşu için $0.134
PR başına süre28.9sortalama 8.5K token
repo_wide1.000codegraph gerekir, dosyalar arası akıl yürütme
convention1.000CODEBASE.md gerekir
history1.000PR_REVIEW_GUIDE.md gerekir
diff_local0.800hiçbir şey gerekmez, hepsi yamada
file_local0.500aynı dosyanın geri kalanı gerekir
Şekil 11bench core v3, GroophyLifefor/heap-analysis, 14 Eyl 2026. Hatanın ne tür bağlama ihtiyaç duyduğuna göre recall.
Diff dışında bir şeye ihtiyaç duyan her hata yakalandı. İki kaçırma, gereken her şeyin zaten yamada durduğu eksenlerde, ki bu komik ve biraz da alçaltıcı: bağlam mekanizması çalışıyor, hâlâ kaçan şey sıradan yakın mesafe okuma.
Otuz pull request, tekrar koşu yok, yani varyans ölçülmedi. Temiz pull request başına yaklaşık bir gereksiz bulgu üretiyor ve bir ekibin inceleme botunu tutup tutmayacağını ya da susturup susturmayacağını belirleyen sayı bu.
10 · mesele
Context optimizasyonu verim kaybı değildir
Soru hiçbir zaman hangi modelin en iyi incelediği değildi. Modeller birkaç ayda bir değişir ve cevap onlarla birlikte eskir. Soru, modelin başlarken elinde ne tuttuğudur. Daha fazla context vermek daha doğru tahmin etmesini sağlamaz.