İçeriğe geç
ivralo
Bölümler

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 needs ile 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 sonuAnlamı
computed in step 4 by run_python, inputs not recordedSayı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 recordedZincirin 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çenekNe yapar
--jsonZinciri stdout'a tek bir JSON nesnesi olarak basar
--session, -sBaşka bir konuşmadaki çalıştırmayı okur

Çıkış kodu, script'in sorduğu soruyu cevaplar:

ÇıkışAnlamı
0Her dal bir dosyaya, bir parçaya ya da bir aracın çıktısına ulaşıyor
1Ulaş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.