Skip to main content

Kod yazıldı, tamamlandı mı?

Düzenek Mühendisliği (Harness Engineering) dünyasında bu iki ifade aynı şey değildir. Bir ajan oturumu biter; raporlar: “F02 tamam.” Açarsın — endpoint cevap veriyor ama dönen JSON’da alan eksik, log’da silent error var, end-to-end senaryo geçmemiş. “Kod yazıldı” doğrudur; “davranış doğrulandı” değildir. features.json bu uçurumun üzerine konan tahtadır — özelliklerin makine tarafından okunan, durum geçişleri otomatik yürütülen veri yapısı. İnsan için not değil, sistem için primitif.

Ne işe yarar

features.json bir doküman değildir, bir primitiftir. Düzeneğin (harness) dört temel aparat komponenti onu okur:
  • Schedulernot_started listesinden bağımlılığı tamam olan ilk özelliği seçer, active yapar.
  • Verifier — aktif özelliğin verification komutunu çalıştırır, sıfır çıkış kodunda passing’e döndürür.
  • Handoff reporter — oturum sonunda durum dağılımını özetler ve bir sonraki oturuma devreder.
  • Progress trackerpassing oranını, geri basıncı, lead time’ı hesaplar.
Aparat dördü de aynı dosyayı okur. Liste insan için “ne yapıldı” notu olsaydı, dördü için ayrı türetmeler yapılırdı — uyumsuzluk kaçınılmaz olurdu. JSON olduğu için tek kaynak, dört tüketici. Anthropic’in Effective harnesses for long-running agents yazısı bunu somutlar: claude.ai klonu deneyinde “over 200 features” tek bir JSON dosyasında tutulmuş ve hepsi başta failing olarak işaretlenmiştir. Varsayılan kritiktir — ajan passing’e çevirmek için kanıt üretmek zorundadır; tersi geçerli değil. GitHub spec-kit aynı fikri sözle koyar: “specifications become executable, directly generating working implementations rather than just guiding them.”

Şablon — features.json

Beş alan zorunlu: id deterministik referans; behavior dışarıdan gözlenebilir tek cümle; verification çıkış kodu üreten komut; state dört değerden biri; depends_on topolojik sıra için. evidence passing olmadan boştur; passing’e geçince verifier doldurur.

Durum makinesi

Dört durum, üç geçiş: passing durumu geri alınamaz. Geri dönüyorsa özellik baştan yanlış kesilmiştir, kaldırılıp yeniden tanımlanır.

Konvansiyon

Üç değişmez:
  1. Pass-state gating — yalnızca verifier scripti passing yazar. Ajanın bu alana doğrudan yazma yetkisi yoktur; AGENTS.md bunu açıkça yasaklar. Anthropic’in kuralı: “Only mark features as ‘passing’ after careful testing.” Düzenek bunu mekanik kapıyla zorlar, kibarlıkla değil.
  2. WIP=1 invariantactive durumundaki özellik sayısı her an en fazla bir. Scheduler ikinciyi açmaz; ajan zorla açamaz. Geçmemiş active özellik varken not_started’tan yeni aktivasyon mekanik olarak yasaktır.
  3. depends_on grafiği döngüsüzdürfeatures.json bir DAG’dir. Döngü oluşursa scheduler hata verir; bağımlılığı passing olmayan özellik active’e geçemez.
200+ özellikli bir projede bu üçü olmadan liste rastgele bir TODO’ya iner. Üçü beraber, listenin primitif olduğunu garanti eder.

Özelleştirme

YAML alternatifi. JSON dışında YAML da olur; uzun davranış açıklamaları okunabilir. Verifier parse edebildiği sürece tek format yeter.
Birden çok doğrulama komutu. verification dizi olabilir; verifier sırayla çalıştırır, ilki sıfır-dışı verirse active kalır. Happy path + auth + edge case ayrı dosyalara dağılır. evidence alanları. Verifier en az commit (hash) ve log (yol) yazar. İstenirse screenshot, trace_id, verified_at eklenir. Boş evidence ile passing geçersiz sayılır.

Otomasyona bağlama

Verifier features.json üzerinde döner, active özelliğin komutunu çalıştırır, çıkış koduna göre state ve evidence yazar.
Progress tracker aynı dosyadan beslenir:
Çıktı:
İnsan için okunabilir, ajan için de.

İlgili dersler