„Toată lumea știe că depanarea e de două ori mai grea decât scrierea unui program de la bun început. Așa că, dacă ești cât de deștept poți fi când îl scrii, cum îl vei mai depana vreodată?”Brian W. Kernighan, P. J. Plauger · The Elements of Programming Style · 1974 · The Elements of Programming Style, ed. a 2-a (1978), cap. 2 «Expression»
Fiecare apel de model și de unealtă e un span cu părinte, cost și versiune de prompt.
Stiva de observabilitate: o urmă per rulare, cu un span per apel de model (model, tokeni la intrare și ieșire, latență, cost) și un span per apel de unealtă (argumente, mărimea rezultatului, eroare); convențiile semantice OpenTelemetry pentru GenAI standardizează numele atributelor; captura conținutului e condiționată (date personale, lecția 19); rejoci un singur pas cu promptul editat; panouri pe cost per sarcină, iterații per etapă, rulări blocate; eșantionezi traiectorii pentru revizuire umană săptămânal; versionezi prompturile ca pe cod și etichetezi urmele cu versiunea. Euristica de depanare: citești observația înaintea gândului — majoritatea eșecurilor „de raționament” sunt eșecuri de context (lecția 2).
Kernighan și Plauger au insistat că programele bune se scriu pentru cititor, nu pentru mașină. Aceeași regulă se aplică acum urmelor unui agent. O urmă bună nu e doar o înregistrare, e un text pe care îl poți citi și compara. Când o rulare eșuează, nu te uiți la ea singură, ci alături de o rulare reușită cu același prompt. Diferența dintre cele două span-uri arată exact unde s-a schimbat comportamentul: alt context trimis, altă unealtă chemată, alt răspuns. E ca atunci când frigiderul nu răcește și compari nota de plată de luna asta cu cea de luna trecută, ca să vezi ce a apărut în plus. Următoarea întrebare e ce faci cu diferența găsită: cum o transformi într-un test care rămâne.
Odată ce diferența e găsită, urmează pasul pe care Kernighan și Plauger îl cereau oricărui programator: rejuca cazul, nu-l ghici. La agenți, rejucarea înseamnă să iei exact span-ul care a eșuat, cu contextul lui real, și să-l rulezi din nou cu o singură modificare, de pildă promptul editat. Dacă rezultatul se repară, ai izolat cauza; dacă nu, cauza e mai departe în lanț. E ca atunci când becul nu aprinde și schimbi doar becul, nu tot circuitul casei, ca să știi cine e vinovat. Fiecare rejucare reușită devine apoi un test de regresie, păstrat lângă urmă care a generat-o. Dar o singură rulare reparată nu spune nimic despre restul traficului; întrebarea următoare e ce alegi să te uiți când nu le poți citi pe toate.
De ce contează Fără urmă, o rulare eșuată e o anecdotă; cu urmă, e un test de regresie.