Een diff laat zien wat een patch beweert te doen. Hij laat niet zien of de bug echt weg is, of de nieuwe tak van een if ooit wordt uitgevoerd, of dat de update van een afhankelijkheid de import breekt bij een schone installatie. Reviewers weten dat, en daarom eindigen zoveel reviews met „LGTM, mits de tests slagen”.
Bij door AI geschreven patches wordt die kloof groter. Een model produceert snel plausibele code, en plausibel is precies het soort dat langs een vermoeide reviewer glipt. De goedkope oplossing: de wijziging uitvoeren voordat iemand hem goedkeurt — op een plek waar hij niets kan beschadigen.
De controle: base, head, tests
Het overtuigendste bewijs dat een patch kan leveren, is een reproductie die faalt op de oude code en slaagt op de nieuwe. Een sandbox maakt daar een script van 20 regels van. Het is een Firecracker-microVM met Python 3.12, Node.js 22, git en curl, gestart in ongeveer een seconde:
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 is het fragment uit het bugrapport. Eindigt het op base met een exitcode ongelijk aan nul en op head met nul, dan lost de patch op wat hij belooft. Plaats die regel plus de testsamenvatting als reactie op de pull request, en de reviewer begint met feiten.
De testsuite draait als achtergrondtaak, omdat één synchrone opdracht na 55 seconden stopt. De TTL van 30 minuten begrenst hoelang een vastgelopen run kosten kan maken.
Review-agents die code uitvoeren
Hetzelfde idee werkt voor een AI-reviewer. Verbonden via de MCP-server heeft een agent sandboxtools: sandbox aanmaken, opdracht uitvoeren, bestanden uploaden en downloaden. In plaats van „dit kan de compatibiliteit met Python 3.8 breken” te schrijven, checkt hij de branch uit, voert hij de code uit en citeert hij de traceback — of meldt hij dat het in orde is.
Geef zo'n agent een bestedingslimiet en een alleen-lezen-token, en bepaal welke tools hij zonder te vragen mag aanroepen. MCP-beveiligingen zet elke tool op risico op een rij.
Welk tarief
| Repository | Tarief | Typische ronde | Geschatte kosten |
|---|---|---|---|
| Kleine bibliotheek, puur Python of JS | small (0.5 vCPU, 1 GB) | 2 min | $0.0011 |
| Webapp met testsuite | standard (1 vCPU, 2 GB) | 5 min | $0.0055 |
| Native extensies, gecompileerde afhankelijkheden | plus (2 vCPU, 4 GB) | 15 min | $0.033 |
Kortstondige sandboxes worden per seconde gefactureerd met een minimum van 60 seconden. Wil een reviewer een paar dagen terugkomen naar dezelfde omgeving, maak hem dan aan als persistent: hij houdt zijn schijf tot 30 dagen en wordt per begonnen uur gefactureerd, dus een standard-sandbox voor een review van twee dagen kost ongeveer $3.17. Verwijder hem wanneer de pull request is gemerged.
Limieten om te kennen
- Twee opdrachten tegelijk per account. Ruim genoeg voor reviews, die na elkaar lopen. Controleert u tientallen pull requests tegelijk, dan sluiten ze aan in de rij.
- Geen inkomende poorten. U kunt de app niet in een browser openen. Start hem binnenin en test hem met
curl localhostvanuit een tweede opdracht. - Geen Docker binnenin. Tests die containers opstarten, horen op een runner op een VPS.
- Uitgaand internet staat open. Daardoor werkt
pip install. Zet niets in de sandbox wat u niet aan de auteur van de patch zou geven.
Aan de slag
Nieuwe accounts krijgen $1 aan sandboxtijd, genoeg voor meer dan honderd reviewrondes op het tarief standard. De sandboxpagina toont de tarieven, de SDK-referentie elke hierboven gebruikte methode, en Python-SDK in 5 minuten de installatie.
Gerelateerd: geïsoleerde CI-testruns voor de hele pipeline, en sandbox voor AI-agents voor de agents die de code überhaupt schrijven.
Reacties
Nog geen reacties. Wees de eerste.