rezolvat · 3 august, seara

Am dat de un zid. A ținut 123 de linii.

Am pornit retipărirea uneltei prin care agenții citesc Voost Control, ca să devină mai ieftină. Am măsurat fiecare pas. La final am dat de o ușă încuiată — și apoi am găsit cheia.

pagină revizuită Prima versiune se termina cu „oprește retipărirea, unealta e moartă”. Concluzia aia s-a dovedit greșită câteva ore mai târziu. Povestea rămâne, verdictul s-a schimbat — și las amândouă la vedere, fiindcă drumul contează la fel de mult ca destinația.
Actul 1 · ce voiam

Un număr pe care voiam să-l micșorăm

De fiecare dată când un agent pornește, primește lista uneltelor pe care le poate folosi. Lista aia îi ocupă loc în memorie înainte să facă ceva util. Azi costă ~5.500 de tokeni.

Presa care ne tipărește unealta avansase cu 28 de versiuni. Documentația ei spunea că o suprafață nouă, de tip „caută și execută”, acoperă tot cu ~1.000 de tokeni.

Prima greșeală, a mea: ți-am dat cifra de ~1.000 luată din documentație. Documentația descria perechea în sine, nu tot ce mai vine cu ea. Trebuia să măsor înainte să dau cifra.
Actul 2 · ce a ieșit

Patru măsurători, în ordine

Fiecare bară e o rulare reală, cu binarul construit și interogat.

Bucla de auto-învățare pe care versiunea nouă o pornește din oficiu însemna singură aproape jumătate din cost. Restul erau unelte de întreținere pe care un agent nu le folosește: sincronizare, export, import, analitice.

Actul 3 · zidul

Și atunci am încercat să le folosesc

Până aici totul era despre cât costă. Pasul următor era banal: verific că uneltele chiar funcționează.

Toate uneltele noi răspundeau la fel: MCP tenant gate is not configured.
Actul 4 · de ce

Presa s-a mutat spre alt fel de client

În versiunile noi, fiecare unealtă e înfășurată într-o poartă care cere o identitate de tenant — adică „în numele cărui client din platformă rulezi acum?”. Are sens pentru un produs cu mulți clienți pe aceeași instalație.

Unealta noastră rulează local, fără parolă, pentru o singură firmă. Poarta nu spunea „n-am identitate, deci las trec”. Spunea „n-am identitate, deci opresc”.

A doua greșeală, tot a mea: aici am tras concluzia că unealta e incompatibilă cu forma noastră și am recomandat să oprim tot. Căutasem o setare care să deschidă poarta și n-am găsit-o. N-am căutat și dacă poarta are o ușă proprie.
Actul 5 · cheia

Poarta avea o ușă, și era documentată

Presa suportă o identitate fără credențiale. Nu e un ocol — e o cale prevăzută, cu trei teste proprii care o exercită. Pentru o unealtă locală, „identitate” nu înseamnă o parolă, ci răspunsul la întrebarea cu ce instanță vorbesc acum.

Interfața de implementat are două metode. Adaptorul nostru sună la /api/ready, confirmă că runtime-ul e viu și că e cel din profil, și atât.

Au fost două încuietori, nu una. A doua a apărut abia după ce am deschis-o pe prima: comanda de execuție cerea o declarație de buget de cereri. Pentru un runtime pe loopback, fără cotă de furnizor, declarația onestă e „nicio limită externă” — dar tot mărginește reîncercările, ca un runtime picat să eșueze rapid în loc să bată într-un port mort.
Actul 6 · de ce nu e datorie

123 de linii care supraviețuiesc retipăririi

Fișierul e scris de mână lângă cele generate, nu în interiorul lor. Regula presei spune explicit că un fișier propriu supraviețuiește regenerării, spre deosebire de o modificare într-un fișier marcat „nu edita”. Nu intră în cele 30 de corecții pe care le cărăm.

Și e chiar locul din care crește multi-tenant-ul. Profilul are câmpuri pentru adresa așteptată și numele firmei — deja completate cu instanța ta. A doua instanță e un al doilea profil, iar poarta ar refuza să lase un agent să lucreze pe runtime-ul greșit. E o garanție pe care azi n-o ai.

verdictul revizuit

Continuăm retipărirea

Blocajul care oprea totul nu mai există. Suprafața ajunge la jumătate din costul de azi și acoperă toate operațiile, plus cele trei comenzi noi.

  1. Tunderea celor 26 de unelte de întreținere din suprafața agentului — rămân în CLI, dispar din ce vede agentul.
  2. Cele trei comenzi noi, scrise de mână, fundamentate pe investigația de teren.
  3. Verificările complete și integrarea în repo, cu reconcilierea celor 30 de corecții.
  4. Bug-urile găsite pe drum rămân prioritare — alea pierd bani săptămânal, independent de retipărire.
ce am învățat

Două greșeli, același tipar

Am greșit de două ori în aceeași zi, în același fel: am tras o concluzie dintr-o citire, nu dintr-o încercare.

Prima dată am citit în documentație că suprafața nouă costă ~1.000 de tokeni și ți-am dat cifra. A doua oară am citit codul porții, n-am găsit o setare, și am declarat unealta incompatibilă.

De fiecare dată, răspunsul adevărat a venit din a construi binarul și a-l interoga. Diferența dintre „am citit că” și „am rulat și am văzut” a fost, în ziua asta, diferența dintre a opri proiectul și a-l termina.

Nota corectă pe care mi-o dau: recomandasem varianta scurtă de retipărire, care s-ar fi oprit după generare. Ai ales varianta lungă, care merge până la rularea uneltei. Dacă făceam cum voiam eu, plecam cu un raport verde și un binar care nu servește — și aflam când tăcea Hermes.
context

Explainere legate