Dokümantasyon / İşletim
Bir iddianın kaynağı
ivralo why, bir sonucu okuyan herkesin aklına gelen soruyu cevaplar: bu sayı ya da bu cümle nereden çıktı. İddiayı, ivralo'nun kayıtlarından yola çıkarak dayandığı dosyaya, satıra ya da araç çıktısına kadar geri izler.
Sormak
Komuta bir çalıştırma ve bir iddia verin. Çalıştırmayı ivralo trace'teki gibi belirtirsiniz: last ya da id'sinin en az ilk sekiz karakteri. İddia, cevaptaki bir sayı ya da ifadedir.
ivralo why last "18%"
"18%" - traced to its sources
"18%" in the reply of run 5bbbbbbb · step 5 «Write the report»
← step 4 «Compute growth», which step 5 needs (declared) · run 4aaaaaaa
← "18.0" in the reply of run 4aaaaaaa · step 4 «Compute growth»
← "18.0" in the output of run_python (read_excel('sales.xlsx')) · Data Analyst · step 4 «Compute growth»
← sales.xlsx · version 20261002-101500-123456 in history - the one read
Yukarıdan aşağı okuyun: önce iddianın yazıldığı yer, ardından kaynağa kadar geçtiği her kayıtlı adım. Bir cümle de verebilirsiniz; içindeki her sayı ayrı ayrı izlenir.
Oturumda /why <claim> son cevabı izler ve aynı satırları basar. Yalnızca okuma yaptığı için bir tur sürerken de çalışır.
Bir join, model değil
Zincir, ivralo'nun zaten sakladığı kayıtlardan hesaplanır. Hiçbir modele sorulmaz, çünkü sayıyı yazan model kaynağını da uydurabilir. Join şunları okur:
- çalıştırmanın cevabını ve yazdığı dosyaları;
- her araç çağrısının argümanlarını ve çıktısını;
- her üzerine yazmadan önce saklanan sürüm geçmişini;
- bilgi aramasının döndürdüğü parçaları, bölüm, slayt ya da sayfa bilgileriyle;
- bir plan adımının
needsile belirttiği adımları; zincir 5. adımdan 4. adıma bu şekilde geçer; - iddia yan bir instance'ın raporundan geliyorsa, o instance'ın kendi çalıştırmasını.
Sayılar nasıl yazıldıklarına bakılmaksızın değerleriyle eşleşir: 18%, 18,0 ve 18.0 aynı sayıdır, 1,842 de iki türlü okunur. Yuvarlama ya da aritmetik yapılmaz. Çıktıda 17.96 varken cevapta %18 yazıyorsa, bu iddia o çıktıya bağlanmaz.
Gösterilen sürüm, okunan sürümdür. Geçmiş her üzerine yazmadan önce bir kopya alır; yani okumadan sonra alınan ilk kopya, okumanın gördüğü içeriktir. Sonrasında alınmış bir kopya yoksa zincirde "the working copy, no later version kept" yazar. Zincir bir dosyanın değişmediğini hiçbir zaman iddia etmez, çünkü geçmiş bunu kanıtlayamaz.
Kaydın bittiği yer
Zincir, kaydın bittiği yerde durur ve tahmin yürütmek yerine bunu açıkça söyler:
| Zincirin sonu | Anlamı |
|---|---|
computed in step 4 by run_python, inputs not recorded | Sayıyı kod üretti ama ivralo'nun izleyebileceği bir dosya belirtmedi |
written by the model; no recorded output holds "18%" | Bu değer yalnızca cevapta var. Hiçbir araç bu değeri döndürmedi. |
cannot be traced | İddia çalıştırmanın hiçbir yerinde bulunamadı |
step 3's run is not recorded | Zincirin ihtiyaç duyduğu bir adımın saklanmış çalıştırması yok |
Incident raporları kanıta kadar iner
Bir incident raporunda izleme araçlarda bitmez, bundle'ın kendisine kadar iner. Investigator'ın okuduğu özetteki her bilgi, geldiği kanıt satırını belirtir; kaydedilen her hipotez de dayandığı satırları belirtir. Böylece zincir bir dosyada ve bir satırda biter:
ivralo why -s <session> last "the claim, as it appears in the report"
incident/deploy.log · line 3 - the evidence line read_incident's digest cites
Satır, .ivralo/incidents/ altındaki incident'ın digest.json dosyasıyla karşılaştırılır; böylece yalnızca bundle'da o anda gerçekten bulunan bir satır gösterilir. Bu dosya yoksa zincir araçta biter.
Raporlar kaynaklarıyla gelir
Bir plan adımı Markdown ya da Word dosyası oluşturduğunda ivralo, dosyanın sonuna aynı kayıttan yazılmış bir Sources bölümü ekler: adımın okuduğu dosyalar ve hangi sürümlerinin okunduğu, parçalar ve konumları, dış bir aracın döndürdükleri ve adımın ihtiyaç duyduğu adımlar. Bu bölüm iddiaları değil, yalnızca kaynakları listeler. Adım ivralo'nun kaydettiği hiçbir şeyi okumadıysa "Sources not recorded" yazar. Dosyayı sonradan yeniden yazan bir adım bu bölümü de günceller. Kod, PDF, sunum ve çalışma kitaplarına bu bölüm eklenmez; onlar için ivralo why kullanılır.
Script'lerde
| Seçenek | Ne yapar |
|---|---|
--json | Zinciri stdout'a tek bir JSON nesnesi olarak basar |
--session, -s | Başka bir konuşmadaki çalıştırmayı okur |
Çıkış kodu, script'in sorduğu soruyu cevaplar:
| Çıkış | Anlamı |
|---|---|
0 | Her dal bir dosyaya, bir parçaya ya da bir aracın çıktısına ulaşıyor |
1 | Ulaşmıyor ya da iddia izlenemiyor |
2 | Çalıştırma okunamadı |
Zincir stdout'a, hatalar stderr'e yazılır; böylece pipeline yalnızca sonucu görür.