Un diff arată ce pretinde un patch că face. Nu arată dacă bugul chiar a dispărut, dacă noua ramură a unui if rulează vreodată sau dacă actualizarea unei dependențe strică importul la o instalare curată. Reviewerii știu asta, de aceea atâtea review-uri se termină cu „LGTM, dacă trec testele”.
Golul se lărgește la patchurile scrise de AI. Un model produce repede cod plauzibil, iar plauzibilul e exact genul care scapă unui reviewer obosit. Soluția ieftină e să rulezi schimbarea înainte s-o aprobe cineva — undeva unde nu poate strica nimic.
Verificarea: base, head, teste
Cea mai convingătoare dovadă pe care o poate oferi un patch e o reproducere care pică pe codul vechi și trece pe cel nou. Un sandbox face din asta un script de 20 de rânduri. E o microVM Firecracker cu Python 3.12, Node.js 22, git și curl, pornită în aproximativ o secundă:
import os
from eqvps import Sandbox
REPO, BASE, HEAD = os.environ["REPO_URL"], os.environ["BASE_SHA"], os.environ["HEAD_SHA"]
def repro(sb, ref):
sb.exec(f"cd /root/app && git checkout -q {ref}", timeout=55)
return sb.exec("cd /root/app && python3 /root/repro.py", timeout=55).exit_code
with Sandbox.create(tariff="standard", ttl=1800) as sb:
sb.exec(f"git clone -q {REPO} /root/app", timeout=55)
sb.exec("cd /root/app && pip install -q -r requirements.txt", timeout=55)
sb.upload("/root/repro.py", open("repro.py").read())
before, after = repro(sb, BASE), repro(sb, HEAD)
tests = sb.exec("cd /root/app && python3 -m pytest -q", background=True).wait()
print(f"repro on base: {before}, on head: {after}; tests: {tests.state}, exit {tests.exit_code}")
repro.py e fragmentul din raportul de bug. Dacă iese cu cod diferit de zero pe base și cu zero pe head, patchul repară ce spune că repară. Postează rândul ăsta, plus rezumatul testelor, ca un comentariu pe pull request, iar reviewerul pornește de la fapte.
Suita de teste rulează ca sarcină de fundal, pentru că o singură comandă sincronă se oprește la 55 de secunde. TTL-ul de 30 de minute limitează cât te poate costa o rulare blocată.
Agenți de review care rulează cod
Aceeași idee merge pentru un reviewer AI. Conectat prin serverul MCP, un agent are unelte de sandbox: creează un sandbox, rulează o comandă, încarcă și descarcă fișiere. În loc să scrie „asta ar putea strica compatibilitatea cu Python 3.8”, ia branchul, rulează codul și citează tracebackul — sau raportează că e în regulă.
Dă-i unui astfel de agent un plafon de cheltuieli și un token doar de citire și decide ce unelte poate apela fără să întrebe. MCP guardrails listează fiecare unealtă după risc.
Ce tarif
| Repository | Tarif | Trecere obișnuită | Cost aproximativ |
|---|---|---|---|
| Bibliotecă mică, Python sau JS pur | small (0,5 vCPU, 1 GB) | 2 min | $0.0011 |
| Aplicație web cu suită de teste | standard (1 vCPU, 2 GB) | 5 min | $0.0055 |
| Extensii native, dependențe compilate | plus (2 vCPU, 4 GB) | 15 min | $0.033 |
Sandboxurile efemere se facturează la secundă, minimum 60 de secunde. Dacă un reviewer vrea să revină în același mediu timp de câteva zile, creează-l în schimb ca persistent: își păstrează discul până la 30 de zile și se facturează pe fiecare oră începută, așa că un sandbox standard ținut pentru un review de două zile costă în jur de $3.17. Șterge-l când pull requestul e îmbinat.
Limite bune de știut
- Două comenzi deodată per cont. Destul pentru review-uri, care rulează una după alta. Dacă verifici zeci de pull requesturi deodată, ele așteaptă la coadă.
- Fără porturi de intrare. Nu poți deschide aplicația în browser. Pornește-o înăuntru și testeaz-o cu
curl localhostdintr-o a doua comandă. - Fără Docker înăuntru. Testele care pornesc containere își au locul pe un runner VPS.
- Internetul spre exterior e deschis. Asta face ca
pip installsă meargă. Nu pune în sandbox nimic ce n-ai da autorului patchului.
Primii pași
Conturile noi primesc $1 de timp în sandbox, ceea ce acoperă peste o sută de treceri de review pe tariful standard. Pagina sandboxurilor are tarifele, referința SDK — fiecare metodă folosită mai sus, iar Python SDK în 5 minute — configurarea.
Legate: rulări de teste CI izolate pentru pipeline-ul complet și sandbox pentru agenți AI pentru agenții care scriu codul de la bun început.
Comentarii
Încă nu există comentarii. Fii primul.