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.
Saat 23:47, önceki vardiya kapanırken
Önceki vardiyanın ajanı son commit’inde şunu yazmış:OTel iskeleti ekledim ama bitiremedim.Sabah sen oturuyorsun. App ayakta, testler yeşil, beş aparat — repo, durum, çalışma zamanı geri bildirimi, öz-doğrulama ve onların hepsini taşıyan iskelet — yerinde. Ama düzeneğin gözleri kapalı: bir istek geldiğinde hangi handler kaç ms sürdü, hangi sorgu kaç satır döndü, hangi error context’inde patladı — hiçbir kayıt yok. Önceki vardiyanın yarısı kalmış girişimi düzeneği görünür kılma sözüyle başlamış; senin işin o sözü kapatmak ve müfredattaki tüm halkaları tek bir düzenekte birleştirmek. Bu, “Düzenek Mühendisliği (Harness Engineering)” müfredatının capstone’u. Yeni bir özellik eklemiyoruz; mevcut beş aparatın üstüne gözlemlenebilirlik ve temiz teslim disiplinini koyup düzeneği tamamlıyoruz.otel_setup.pyiçindetracer = Nonekaldı;app.pyonu import ediyor ama hiçbir handlerstart_as_current_spançağırmıyor — çağırsamAttributeErrorfırlatırdı. Yarın bitirilecek.
Bu projede ne öğreneceksin
- Önceki beş projenin çıktısını tek koşumda birleştirmek.
tracer = Nonegibi yarım girişimleri çalışan OTel kurulumuna çevirmek; GenAI semconv attribute’larıyla her span’i etiketlemek.Quality.mdile her modülün sağlığını kanıt tabanlı notlamak; sonraki vardiyaya “nereden başla” sorusunun cevabını bırakmak.- Sprint sözleşmesini gerçek bir özellik (FTS5 arama) için yazmak; generator ve verifier arasındaki müzakereyi kod yazımından önce kapatmak.
session_close.shile beş boyutun (build / test / progress / artifact / startup) hepsini her oturum sonunda doğrulamak.cleanup.shile idempotent anlık temizlik kurmak — iki kez koşturmak hiç koşturmamakla aynı veya daha güvenli.- Capstone hissi: müfredatın tüm halkalarının aynı çalışan kod tabanında nasıl buluştuğunu görmek.
Yapı
Capstone’da tüm aparatlar bir arada.solution/ ağacı muhtemelen müfredat boyunca gördüğün en dolu starter / solution çiftidir — çünkü beş aparatın hepsi artık aynı anda yerinde:
sprint-contracts/ (Ders 11’in birinci enstrümanı) ve scripts/session_close.sh + scripts/cleanup.sh (Ders 12’nin iki kademeli temizliği). Quality.md repo köküne çıktı — düzeneğin sağlık tablosu artık birinci sınıf bir dosya.
starter ile solution arasındaki fark
Starter, Proje 05’in solution’ını miras alır ve onun üstüne bilinçli olarak yarım bırakılmış bir OTel girişimi koyar. Capstone’un başlangıç noktası işte budur.Starter — projeler/06/starter/otel_setup.py
projeler/06/starter/app.py bu tracer’ı import eder ama hiçbir handler start_as_current_span çağırmaz. Çünkü çağırsa AttributeError: 'NoneType' object has no attribute 'start_as_current_span' fırlatır — düzenek hemen patlardı. Önceki vardiyanın ajanı “şimdilik bırakıyorum” diye notu PROGRESS.md’ye düştü ve oturum kapandı. Sonuç: app çalışıyor, testler geçiyor, ama düzeneğin gözleri yok.
Solution — projeler/06/solution/otel_setup.py
TracerProvider ve ConsoleSpanExporter kurulur — harici bir collector kurmadan span’ler stdout’a akar; (2) provider idempotent — modül iki kez import edilirse ikinci set_tracer_provider atlanır; (3) set_genai_attrs helper’ı GenAI semconv attribute’larını (gen_ai.system, gen_ai.operation.name) tek bir yerde yönetir. Spec hâlâ Development statüsünde; isim değişirse tek bir noktadan güncellersin.
projeler/06/solution/app.py artık her endpoint’i bir span ile sarmalar; üstüne bir HTTP middleware’i tüm istekleri parent span olarak yakalar:
Quality.md— Beş modül (app,db,scripts,tests,docs) × beş boyut (Doğrulama, Ajan-okunabilirlik, Test kararlılığı, Mimari sınır, Konvansiyon). En düşük puanlı modüldocsC aldı; “önce buraya gir” oku ile işaretli. Sonraki vardiya rastgele başlamaz; kanıtla başlar.sprint-contracts/notes-search-improvements.md— Generator ve verifier arasında, henüz tek satır kod yazılmadan müzakere edilmiş sözleşme. Üç başlık: kapsam (FTS5, üç yeni test), doğrulama standartları (make test,make verify,three_layer_check.shyeşil;search_notesspan’ı belli attribute’ları taşır), dışlananlar (stemming yok, çok dilli tokenization yok). Kabul edildiğindefeatures.jsonveQuality.mdgüncellenir.scripts/session_close.sh— Beş boyutun hepsini tek tek doğrular:make setup→ build,make test→ test,PROGRESS.mdbugün dokunulmuş mu → progress,debug-*.logaranır → artifact,uvicorn --port 8799ayağa kalkıp 401 dönüyor mu → startup. Bir tek FAIL varsa oturum kapanmaz. Yarım teslim yok; commit ya da rollback.scripts/cleanup.sh— Anlık, idempotent temizlik:/tmp/debug-*.logsilinir,notes.dbvenotes.db-journalsilinir,.envşablona döner,__pycache__ve.pytest_cachetemizlenir, sonundapytest -qile kanıt üretilir. İki kez koşturmak hiç koşturmamakla aynı veya daha güvenli.
Beş aparat + gözlemlenebilirlik + temiz teslim — nasıl birleşiyor
Capstone’un asıl dersi tek tek aparat değil; birlikte çalışma. Bir oturum boyunca akış şöyle örülür:- Aparat 1 — Repo (AGENTS.md, kurallar): “Bir oturum commit ile ya rollback ile biter” kuralı yazılı. Ajan açılışta okur, davranışı buna göre seçer.
- Aparat 2 — Durum (PROGRESS, DECISIONS, features): Önceki vardiyanın “tracer = None bıraktım” notu PROGRESS.md’de; capstone vardiyası buradan okur ve işe yarım bırakıldığı yerden devam eder.
- Aparat 3 — Çalışma zamanı geri bildirimi (Makefile, three_layer_check): Kod yazılırken
make checkyeşil — type / lint / test üç katman. - Aparat 4 — Öz-doğrulama (executor + verifier): Sprint sözleşmesi
sprint-contracts/altında; verifier, kod yazılmadan kabul kriterlerini ve dışlananları imzalar. “Erken zafer” kapatılır. - Aparat 5 — Gözlemlenebilirlik (otel_setup + GenAI semconv span’ler): Her HTTP isteği parent span, her handler child span, her span standart attribute kümesi taşır. Hata anında trace’i okumak gerçek bir seçenek.
- Temiz teslim (cleanup + session_close + Quality): Oturum kapanmadan beş boyut yeşilllenir; en düşük puanlı modül
Quality.md’de işaretlenir. Sonraki vardiya sıfırdan keşfe değil, kanıttan başlar.
Adım adım
OTel'in kırık olduğunu kendi gözünle gör
otel_setup.py aç — sadece tracer = None. app.py aç — from otel_setup import tracer var ama hiçbir handler kullanmıyor. App çalışıyor, ama çağrılar iz bırakmıyor: uvicorn app:app ile ayağa kaldır, birkaç istek at, konsola hiçbir span düşmez.Solution'a geç ve karşılaştır
set_genai_attrs helper’ı eklenmiş, ve her handler bir span ile sarılmış.App'i çalıştır ve trace'leri konsoldan oku
gen_ai.system=notes-api, gen_ai.operation.name=search_notes, search.q, search.result_count taşır. HTTP middleware’i de parent span olarak http.method, http.target, http.status_code yakalar.Sprint sözleşmesini ve Quality.md'yi oku
docs modülünü C ile işaretlemiş — sonraki vardiya nereden başlayacağını sezgiyle değil, tablodan okur.Beklenen sonuçlar
make checkyeşil — lint, type, test üç katman.- App çalışırken her HTTP isteği konsolda GenAI semconv attribute’larıyla bir trace ağacı bırakır (parent: HTTP, child: handler).
Quality.mden düşük puanlı modülü işaretli; sonraki vardiya buradan başlar.sprint-contracts/notes-search-improvements.mdbir sonraki özelliğin kapsamını, doğrulamasını ve dışlananlarını yazılı tutar../scripts/cleanup.shiki kez koşturulduğunda iki kez de yeşil — idempotent../scripts/session_close.shbeş boyutu sırayla doğrular; bir tane bile FAIL varsa oturum kapanmaz.git status --porcelainboş — çalışma dizini temiz, commit ya rollback ile bitti.
Yerel çalıştırma
make verify ve ./three_layer_check.sh de mevcut; sırasıyla e2e davranışı ve üç katman kontrolünü tekrarlar. Yapı tanıdık çünkü Proje 05’ten miras; tek yeni boyut gözler ve temiz çıkış.
İlgili dersler
- Ders 11 — Düzeneğin Gözleri — runtime ve süreç olmak üzere iki paralel katman; sprint sözleşmesi, evaluator rubriği, OpenTelemetry GenAI semconv ile standardize trace.
- Ders 12 — Temiz Teslim — entropi varsayılan; beş boyutlu temiz state, iki kademeli (anlık + periyodik) temizlik, Quality Document, oturum çıkış kontrol listesi.