Claude Code hooks ile hedefli .NET doğrulaması
Claude Code'un PostToolUse hook'u, agent bir dosyayı düzenledikten sonra yalnızca ilgili xUnit testlerini çalıştırarak doğrulamayı prompt hatırlatmalarından lifecycle'a taşıyor. Nick Cosentino, .claude/settings.json yapılandırmasını, stdin'den gelen event JSON'unun nasıl okunduğunu ve exit kodlarının ne anlama geldiğini örnek bir Shipping solution üzerinden anlatıyor. Yazı, hook'un sınırlarını da açıkça çiziyor: düzenlemeyi geri alamaz, Bash ile yazılan dosyaları görmez ve CI'ın yerini tutmaz.
Kilit noktalar
- PostToolUse başarılı bir tool çağrısından sonra çalışır; bir işlemi önceden engellemek istiyorsan PreToolUse doğru event'tir.
- Proje seviyesindeki .claude/settings.json içinde Edit|Write matcher'ı, pwsh'i exec formunda args ile ve 120 saniyelik timeout ile başlatıyor.
- Command hook'lar JSON'u stdin'den alır; handler tool_input.file_path ve event'in cwd değerini okur, config'de uydurulmuş argümanları değil.
- PostToolUse'ta exit 2 stderr'i Claude'un context'ine taşır, exit 0 hookSpecificOutput/additionalContext döner; diğer exit kodları bloklamayan hook hatası sayılır.
- Matcher, Bash veya harici araçların yeniden yazdığı dosyaları hiç görmez; sıfır test seçen bir filter yine de exit 0 verir.
- Yazar handler'ı yalnızca sentetik payload'larla denedi; hook canlı bir Claude oturumuna hiç kaydedilmedi.
Claude Code'un PostToolUse hook'u, agent bir dosyayı düzenledikten hemen sonra dar kapsamlı bir kontrol çalıştırabilir; böylece doğrulama her prompt'a yazılan hatırlatmadan çıkıp lifecycle'ın parçası olur. Örnekte .claude/settings.json içine Edit|Write matcher'ı ekleniyor, pwsh exec formunda args ile başlatılıyor, script ${CLAUDE_PROJECT_DIR} üzerinden bulunuyor ve 120 saniyelik timeout veriliyor.
Handler, event JSON'unu stdin'den okuyup tool_input.file_path değerini alıyor ve dotnet test komutunu FullyQualifiedName filter'ıyla yalnızca iki isimli dosya değiştiğinde çalıştırıyor. Başarıda exit 0 ile additionalContext dönüyor, başarısızlıkta exit 2 stderr'i Claude'a gösteriyor; düzenleme yine geri alınamıyor. Bash'in yazdığı dosyalar matcher'ı tetiklemiyor, hiç test seçmeyen bir filter hiçbir şey kanıtlamıyor ve asıl kaynak CI olarak kalıyor.
Gerçek dünyada kullanımı
- Kargo veya fiyatlandırma kurallarını tutan tek bir sınıfın ve ona ait xUnit testlerinin, agent her düzenleme yaptığında otomatik çalışması gereken bir solution.
- Developer makinelerinde local build ve test çalıştırmayı yasaklayan, hook'u yalnızca tek kullanımlık doğrulama container'ında açan bir ekip.
- Prompt'ta 'testleri çalıştır' talimatı yerine gerçek bir kontrol isteyen, AGENTS.md benzeri talimatlarla deneme yapan bir ekip.
- Tam test koşusunu CI'da tutup hook çıktısını yalnızca hızlı geri bildirim olarak kullanan bir pipeline.
Neden önemli
Hedefli bir hook, tam test koşusunun dakikalarını saniyelere indirebilir; ancak exit kodlarının anlamı ve kapsam sınırları açıkça belirtilmezse sıfır exit kodu yanlışlıkla değişikliğin doğruluğunun kanıtı sanılır.
Benzer haberler
- Mevcut xUnit.Net testlerini Bobcat'e taşımakJeremy D. Miller (The Shade Tree Developer)5 sa önce
- Metalama 2027.0 ile metot çağrılarını build sırasında yönlendirmeMetalama / PostSharp Blog4 gün önce
- Bobcat ile çalıştırılabilir spesifikasyonlar nasıl yazılırJeremy D. Miller (The Shade Tree Developer)5 gün önce