En diff viser, hvad en patch påstår at gøre. Den viser ikke, om fejlen faktisk er væk, om den nye gren i en if nogensinde køres, eller om opgraderingen af en afhængighed ødelægger importen ved en ren installation. Reviewere ved det, og derfor ender så mange gennemgange med „LGTM, forudsat at testene består“.
Med AI-skrevne patches bliver hullet større. En model producerer hurtigt troværdig kode, og troværdig er præcis den slags, der glider forbi en træt reviewer. Den billige løsning er at køre ændringen, før nogen godkender den – et sted, hvor den ikke kan skade noget.
Tjekket: base, head, tests
Det mest overbevisende bevis, en patch kan levere, er en genskabelse, der fejler på den gamle kode og består på den nye. En sandbox gør det til et script på 20 linjer. Det er en Firecracker-microVM med Python 3.12, Node.js 22, git og curl, startet på cirka et sekund:
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 er kodestumpen fra fejlrapporten. Afslutter den med en kode forskellig fra nul på base og med nul på head, retter patchen det, den påstår. Læg den linje plus testopsummeringen op som en kommentar på pull requesten, så starter reviewer med fakta.
Testsuiten kører som baggrundsopgave, fordi en enkelt synkron kommando stopper efter 55 sekunder. TTL på 30 minutter sætter loft over, hvor længe en kørsel, der hænger, kan koste penge.
Review-agenter, der kører kode
Samme idé virker for en AI-reviewer. Forbundet via MCP-serveren har en agent sandbox-værktøjer: opret en sandbox, kør en kommando, upload og download filer. I stedet for at skrive „det her kan ødelægge kompatibiliteten med Python 3.8“ checker den branchen ud, kører koden og citerer traceback – eller melder, at alt er i orden.
Giv sådan en agent et udgiftsloft og et skrivebeskyttet token, og beslut, hvilke værktøjer den må kalde uden at spørge. MCP-sikkerhedsforanstaltninger opstiller hvert værktøj efter risiko.
Hvilken tarif
| Repository | Tarif | Typisk omgang | Omtrentlig pris |
|---|---|---|---|
| Lille bibliotek, ren Python eller JS | small (0.5 vCPU, 1 GB) | 2 min | $0.0011 |
| Webapp med testsuite | standard (1 vCPU, 2 GB) | 5 min | $0.0055 |
| Native udvidelser, kompilerede afhængigheder | plus (2 vCPU, 4 GB) | 15 min | $0.033 |
Midlertidige sandboxe afregnes pr. sekund med mindst 60 sekunder. Vil en reviewer vende tilbage til det samme miljø over et par dage, så opret det i stedet som persistent: det beholder sin disk i op til 30 dage og afregnes pr. påbegyndt time, så en standard-sandbox holdt til en todages gennemgang koster omkring $3.17. Slet den, når pull requesten er merget.
Grænser, der er værd at kende
- To kommandoer ad gangen pr. konto. Rigeligt til gennemgange, der kører efter hinanden. Tjekker du snesevis af pull requests på én gang, stiller de sig i kø.
- Ingen indgående porte. Du kan ikke åbne appen i en browser. Start den indeni, og test den med
curl localhostfra en anden kommando. - Ingen Docker indeni. Tests, der starter containere, hører hjemme på en runner på en VPS.
- Udgående internet er åbent. Det er det, der får
pip installtil at virke. Læg ikke noget i sandboxen, som du ikke ville give til patchens forfatter.
Kom i gang
Nye konti får $1 i sandbox-tid, hvilket dækker mere end hundrede review-omgange på tariffen standard. Sandbox-siden viser tarifferne, SDK-referencen hver metode brugt ovenfor, og Python-SDK på 5 minutter opsætningen.
Relateret: isolerede CI-testkørsler til hele pipelinen og sandbox til AI-agenter til de agenter, der skriver koden i første omgang.
Kommentarer
Ingen kommentarer endnu. Vær den første.