Documentation Index
Fetch the complete documentation index at: https://harness.lokomotif.ai/llms.txt
Use this file to discover all available pages before exploring further.
Cuma deploy, Pazartesi destek kuyruğu
Cuma akşamı bir ajan “Notes API tamam, birim testler yeşil” raporu düştü. Kod review yüzeyden temizdi,pytest çıktısı son satıra kadar passed. Deploy edildi. Pazartesi sabahı destek kuyruğu doldu: kullanıcılar var olmayan bir notu güncellemeye çalışınca uygulama hata vermiyor, sessizce 200 OK dönüyor — ama veritabanında hiçbir şey değişmemiş. Mobil istemci “kayıt güncellendi” diye gösteriyor; sunucuda not yok. İlk hipotez “ön yüz bug’ı”; iki saat sonra log’lar gerçeği söylüyor: PUT /notes/{nid} endpoint’i olmayan bir nid için 404 dönmesi gerekirken 200 dönüyor.
Bu hata bir dikkatsizlik değil. Ders 09’da koyduğumuz tezin saha karşılığı: ajan kendi çıktısına bakıp tamamlanma yargısı verdiğinde sistematik olarak fazla pozitiftir. Yazmadığı edge-case testi geçmez de düşmez de — sessizce yoktur. Bu projede bug’ı kasten bırakıyoruz; sonra Düzenek Mühendisliği (Harness Engineering) sözleşmesinin onu 30 saniyede nasıl yakaladığını gösteriyoruz.
Bu projede ne öğreneceksin
- Yapan / denetleyen ayrımı neden bir nezaket değil, mimari zorunluluk. Executor kod yazar; verifier kod yazmaz, sadece dışarıdan ölçer ve raporlar.
- Üç katmanlı doğrulama kapısı (lint → unit → e2e) nasıl kurulur. Katman N başarısızken N+1’e geçilmez.
- Uçtan uca testin birim testlerin göremediği sınır hatalarını neden yakaladığı (Ders 10).
- ERROR / WHY / FIX formatı: ajan-okunur hata mesajı nasıl yazılır, bir sonraki turda neden hızlı kapanış üretir.
- Self-grading yanılgısı: aynı el hem yapan hem denetleyen olduğunda kalibrasyon yanlılığı nasıl geri döner.
Yapı
verifier.md— yeni rol sözleşmesi.scripts/three_layer_check.sh— sıralı kapı.tests/test_e2e.py— uçtan uca akış, içindetest_put_missing_id_returns_404.app.py::update_noteiçineif cur.rowcount == 0: raise HTTPException(404)(FIX).
Planted bug: PUT /notes/{nid} senaryosu
Starter’daki app.py içinde kasıtlı bir defekt vardır:
UPDATE cümlesi hiçbir satıra dokunmasa bile hata fırlatmaz; cur.rowcount 0 döner ama kontrol edilmez. FastAPI sessizce Note gövdesini 200 OK ile geri verir. Mobil istemci için bu “başarılı güncelleme”den ayırt edilemezdir.
Bu defektin birim test ile yakalanmaması bir kusur değil, birim testin mimari karakteridir. Executor kendi yazdığı happy-path testlerine baktığında “geçti” der; yazmadığı test_put_missing_id testi de tabii ki düşmez — sessizce yoktur. Tedavi tek bir test yazmak değil, tamamlanma yargısını başkasına bağlamaktır.
starter ile solution arasındaki fark
| Boyut | starter | solution |
|---|---|---|
| Rol sayısı | 1 (executor) | 2 (executor + verifier) |
| Kod yazma yetkisi | executor | yalnız executor |
| ”passing” imzası | executor | yalnız verifier |
| Doğrulama katmanı | pytest (tek) | lint → unit → e2e (sıralı) |
| E2E test | yok | tests/test_e2e.py (PUT-missing-id 404 dahil) |
| Hata mesaj formatı | pytest’in standart çıktısı | ERROR / WHY / FIX blokları |
| Tamamlanma yargısı | ”ben yazdım, ben onayladım” | dışsal: three_layer_check.sh çıkış kodu |
executor.md starter’da “kendi kendini değerlendir” doktrini yazar; solution’da aynı dosya “verifier’a hazır de, ‘tamamlandı’ deme” der. Tek satırlık bir değişiklik gibi durur — yapısal olarak başka bir sistemdir.
Adım adım
test_put_missing_id_returns_404 üzerinde durur — çünkü solution’ın app.py’sinde FIX zaten uygulanmıştır, test geçer. Defektin yakalandığı anı görmek için starter’ın app.py’sini geçici olarak solution klasörüne kopyalayın ve scripti tekrar koşturun:
exit 1 ile durur:
Beklenen sonuçlar
- Bug, yapısal olarak yakalandı. Daha akıllı ajan veya daha sıkı code review değil; sözleşme bağladı.
- 30 saniye toplam süre.
three_layer_check.shlokal koşumda saniyeler sürer; e2e adımı PUT-missing-id’yi ilk turda işaret eder. - Rapor ajan-okunur. ERROR / WHY / FIX bloğu doğrudan executor’a yapıştırılır; executor bir sonraki turda FIX satırını uygular, gerekçeyi yeniden türetmek zorunda kalmaz.
- Tamamlanma yargısı dışsallaştı.
PROGRESS.md’ye “done” yalnızverifier=passingsatırı düştüğünde işaretlenir. Executor “verifier’a hazır” yazabilir; “done” yazma yetkisi onda yoktur. - Self-grading yanılgısı somutlaştı. Aynı kod tabanı, iki rol modeli; arada tek fark verifier’ın bağımsız gözü. Bug ilk modelde 200 ile gizliydi, ikincide 30 saniyede ortaya çıktı.
Yerel çalıştırma
make verify exit 0 döndürmediği sürece kalem done işaretlenmez. Bu kural AGENTS.md içindeki Definition of Done bloğuyla zorlanır; tek bir ajanın iç sesi bu kapıyı atlatamaz.
İlgili dersler
- Ders 09 — Erken Zafer İlanı: Ajanların sistematik olarak fazla güvenli olduğunun teorik gerekçesi (Guo et al. 2017, Anthropic harness rehberi). Bu projedeki rol ayrımının niye karakter terbiyesi değil yapı kararı olduğu burada açıklanır.
- Ders 10 — Üç Katmanlı Doğrulama Kapısı: Birim testlerin bileşen sınırlarına mimari olarak kör olduğu, yalnız uçtan uca testin sistem düzeyi kusurların yokluğunu kanıtlayabildiği tezi. Bu projedeki
tests/test_e2e.pyo tezin saha uygulamasıdır.