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.
Senaryo — 12 dosya, 800 satır, 0% e2e
Notes API repoları üzerinde tek cümlelik görev verildi: “kullanıcı favorilerini ve etiket sistemini ekle, bir de markdown render”. İki saat sonra ajan oturumu bitti, repoya bakıldı:- 12 değiştirilmiş dosya — modeller, üç route, bir middleware, frontend stub, README değişikliği
- ~800 satır kod
- Uçtan uca geçen senaryo: 0/3 — favoriler kayıt etmiyor, etiket endpoint’i 404, markdown render fonksiyonu çağrılmıyor
- “Yapıldı” diye işaretlenmiş özellik sayısı: 3
- Doğrulanmış özellik sayısı: 0
features.md adında serbest formda bir prozaydı; bunu okuyan ajanın bir öncelik haritası çıkarması da, bittiğini iddia ettiği işin gerçekten bittiğini kanıtlaması da imkânsızdı. Aşırıya kaçma ile yarım bırakma, Ders 07’de söylediğimiz simbiyozla, aynı oturumda yan yana durdu.
Bu projede features.md serbest formunu features.json yapılandırılmış primitifine çeviriyoruz; scripts/verify.sh ile WIP=1 kuralını mekanik olarak zorlayan bir doğrulama scripti kuruyoruz; ve AGENTS.md içine ajanın değiştiremeyeceği bir Feature Liste Kuralları bloğu yerleştiriyoruz.
Bu projede ne öğreneceksin
- Düzenek Mühendisliği (Harness Engineering) içinde özellik listesinin neden primitif olduğunu — bir doküman değil, scheduler/verifier/handoff reporter/progress tracker’ın okuduğu veri yapısı olduğunu.
not_started,active,blocked,passingdört durumlu makineyifeatures.jsonüzerinde çalıştırmayı.jqile features dosyasını sorgulamayı: aktif feature’ı bulmak, durum dağılımı çıkarmak, geri basınç (backpressure) hesaplamak.verify.shile pass-state kapısını ajandan alıp düzeneğe vermeyi: durumpassing’e ancak doğrulama komutu sıfır çıkış koduyla biterse geçer.- WIP=1 invariant’ını mekanik bir kilitle uygulamayı: iki feature aynı anda
activeise scriptexit 3ile reddeder. AGENTS.mdiçine konacak Feature Liste Kuralları bloğunu — ajanın bu kuralları değiştirme yetkisi olmadan okuyup uyguladığı sözleşmeyi.
Yapı
starter ile solution arasındaki fark
projeler/04/starter/features.md — proza, yumuşak, ölçülemez:
- Durum belirsiz. “Galiba”, “devam ediyor?”, “belirsiz” — bir makinenin okuyup karar veremeyeceği kelimeler. Doğrulama komutu yok; “tamam” denmesi
passinganlamına gelmiyor. - WIP yok. Aynı satırda dört iş “üzerinde” gözüküyor; ajan oturumu açtığında hangisinin aktif olduğunu seçmek zorunda — her seferinde farklı seçer.
- Kanıt yok. “Testler yeşil” iddiası kim tarafından ne zaman doğrulandı? Hangi commit? Hangi log?
projeler/04/solution/features.json aynı bilgiyi state machine olarak verir — strict, ölçülebilir, jq-driven:
behavior, verification, state, evidence), bağımlılık grafiği (depends_on). F01 ve F02 doğrulanmış (kanıtı commit hash ile), F03 ve F04 henüz başlanmamış, F05 blocked — kütüphane seçimi DECISIONS.md’ye yazılana kadar açılmaz. Aktif feature şu anda yok; sıradaki ajan oturumu hangisini active yapacağını rastgele değil, scheduler tarafından söylenerek seçer.
Adım adım
1) Repoyu al
2) starter’a bak — şüpheli durum
make test çalıştırdığında hangi feature’ın testleri yeşil olmalı? Yanıt yok — çünkü dosyada state alanı yok, verification komutu yok, evidence referansı yok. Bu repoya gelen yeni ajan, oturumun ilk 15 dakikasını teşhise harcar.
3) solution’a geç
4) Durum dağılımını çıkar (progress tracker rolü)
active’e alınabilir.
5) Aktif feature’ı sorgula
6) verify.sh çalıştır — boş durum
7) F03’ü active yap, verify.sh tekrar çalıştır
F03 aktif, doğrulama komutu (pytest tests/test_tags.py -q) çalışır. Tag endpoint’i henüz yazılmadığı için test başarısız olur; verify.sh sıfır-dışı kodla çıkar, state active kalır. Pass-state kapısı kapalı: ajan kendi başına passing yazamaz.
8) WIP=1 ihlalini dene — exit 3 reddi
F02 zaten passing. Onu da active yapalım — yani iki feature aynı anda aktif olsun:
exit 3 ile reddeder. WIP=1 invariant’ı mekanik bir kilitle korunur — ajanın “iki şeyi paralel yapayım” demesi mümkün değil; düzenek izin vermiyor.
Beklenen sonuçlar
Bu proje sonunda elinde olması gerekenler:features.jsonprimitifi — beş feature, dört alanlık zorunluluk, durum makinesi (not_started/active/blocked/passing), bağımlılık grafiği.scripts/verify.sh—jq-driven; WIP=1 invariant’ınıexit 3ile zorlar; aktif feature’ınverificationkomutunu çalıştırır; sıfır kod ->statepassing+evidence(commit hash + UTC zaman damgası) yazar; sıfır-dışı kod ->activekalır.AGENTS.mdiçinde Feature Liste Kuralları bloğu — ajan kuralları değiştiremez, sadece uygular: features kaynak dosyasıfeatures.json’dir, WIP=1, pass-state kapısı script’e aittir, VCR sub 1.0 iken yeniactiveyok.- Geri bildirim halkası — kod yazılır,
make verifyçalıştırılır, sonuç dosyaya geri yazılır; ajan bir sonraki oturumdafeatures.jsondurum dağılımını okuyarak nereden devam edeceğini bilir.
Yerel çalıştırma
make verify scripts/verify.sh’i sarar; CI’da da aynı komut çağrılır.
İlgili dersler
- Ders 07 — WIP=1 Disiplini — Aşırıya kaçma ile yarım bırakmanın simbiyozu; Little’s Law (L = λ × W); VCR; geri basınç.
- Ders 08 — Özellik Listesi Bir Primitiftir — Özelliğin üçlüsü (behavior, verification, state); dört durumlu makine; listeyi okuyan dört komponent (scheduler, verifier, handoff reporter, progress tracker); granülerlik.
Sıradaki proje
Proje 05 — Yapan ve Denetleyen —features.json artık WIP=1 kuralını mekanik olarak uyguluyor; bir sonraki adım, “tamamlandı” yargısını executor’dan bağımsız bir verifier rolüne dışsallaştırmak. Doğrulama halkasını kurduktan sonra, halkayı kimin kapatacağına karar veren rol ayrımını ekliyorsunuz.