Un diff mostra cosa una patch dichiara di fare. Non mostra se il bug è davvero sparito, se il nuovo ramo di un if viene mai eseguito o se l'aggiornamento di una dipendenza rompe l'import su un'installazione pulita. I revisori lo sanno, ed è per questo che tante review finiscono con «LGTM, a patto che i test passino».
Con le patch scritte dall'IA il divario si allarga. Un modello produce velocemente codice plausibile, e il plausibile è proprio quello che sfugge a un revisore stanco. La soluzione economica è eseguire la modifica prima che qualcuno la approvi, in un posto dove non può danneggiare nulla.
Il controllo: base, head, test
La prova più convincente che una patch possa offrire è una riproduzione che fallisce sul codice vecchio e passa su quello nuovo. Una sandbox la trasforma in uno script di 20 righe. È una microVM Firecracker con Python 3.12, Node.js 22, git e curl, avviata in circa un secondo:
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 è lo snippet dal bug report. Se esce con un codice diverso da zero su base e con zero su head, la patch corregge ciò che dichiara di correggere. Pubblica quella riga, insieme al riepilogo dei test, come commento sulla pull request, e il revisore parte dai fatti.
La suite di test gira come attività in background perché un singolo comando sincrono si ferma a 55 secondi. Il TTL di 30 minuti limita quanto può costare un'esecuzione bloccata.
Agenti di review che eseguono il codice
La stessa idea funziona per un revisore IA. Collegato tramite il server MCP, un agente ha a disposizione gli strumenti delle sandbox: creare una sandbox, eseguire un comando, caricare e scaricare file. Invece di scrivere «questo potrebbe rompere la compatibilità con Python 3.8», scarica il branch, esegue il codice e cita il traceback, oppure riferisce che va tutto bene.
Dai a un agente del genere un tetto di spesa e un token di sola lettura, e decidi quali strumenti può chiamare senza chiedere. Le protezioni MCP elencano ogni strumento per livello di rischio.
Quale tariffa
| Repository | Tariffa | Passaggio tipico | Costo indicativo |
|---|---|---|---|
| Piccola libreria, Python o JS puro | small (0.5 vCPU, 1 GB) | 2 min | $0.0011 |
| Web app con suite di test | standard (1 vCPU, 2 GB) | 5 min | $0.0055 |
| Estensioni native, dipendenze compilate | plus (2 vCPU, 4 GB) | 15 min | $0.033 |
Le sandbox effimere sono fatturate al secondo con un minimo di 60 secondi. Se un revisore vuole tornare allo stesso ambiente per un paio di giorni, crealo invece come persistent: conserva il disco fino a 30 giorni ed è fatturato per ora iniziata, quindi una sandbox standard tenuta per una review di due giorni costa circa $3.17. Eliminala quando la pull request viene unita.
Limiti da conoscere
- Due comandi alla volta per account. Più che sufficienti per le review, che si susseguono una dopo l'altra. Se controlli decine di pull request contemporaneamente, finiscono in coda.
- Nessuna porta in ingresso. Non puoi aprire l'app in un browser. Avviala all'interno e testala con
curl localhostda un secondo comando. - Niente Docker all'interno. I test che avviano container vanno su un runner su VPS.
- L'uscita verso internet è aperta. È ciò che fa funzionare
pip install. Non mettere nella sandbox nulla che non daresti all'autore della patch.
Per iniziare
I nuovi account ricevono $1 di tempo sandbox, che copre più di cento passaggi di review sulla tariffa standard. La pagina delle sandbox riporta le tariffe, il riferimento dell'SDK ogni metodo usato sopra, e l'SDK Python in 5 minuti la configurazione.
Correlati: test CI isolati per l'intera pipeline e sandbox per agenti IA per gli agenti che il codice lo scrivono.
Commenti
Ancora nessun commento. Sii il primo.