−25%

op Windows bij jaarbetaling, tot 31/10. Naar de pakketten

EQVPS
Aan de slag

Sandbox voor code review en PR-controles: bewijs dat een patch werkt voordat u hem goedkeurt

Een diff vertelt wat een patch belooft. Een run vertelt of het klopt. Check een pull request uit in een wegwerp-microVM, reproduceer de bug ervoor en erna, draai de tests en review met bewijs — voor ongeveer een halve cent per ronde.

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

RepositoryTariefTypische rondeGeschatte kosten
Kleine bibliotheek, puur Python of JSsmall (0.5 vCPU, 1 GB)2 min$0.0011
Webapp met testsuitestandard (1 vCPU, 2 GB)5 min$0.0055
Native extensies, gecompileerde afhankelijkhedenplus (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 localhost vanuit 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.

Klaar om te implementeren? Betaal met crypto, geen KYC — live in ongeveer een minuut.

Nu implementeren →

FAQ

Hoe verschilt dit van CI draaien op de pull request?

CI beantwoordt of de bestaande tests slagen. Een reviewcontrole beantwoordt of de patch doet wat hij belooft: hij draait de reproductie uit het bugrapport op de oude en de nieuwe code, probeert het randgeval waar de reviewer zich zorgen over maakt en houdt een sandbox beschikbaar waarin de reviewer kan rondneuzen. Samen werken ze goed.

Kan een AI-review-agent dit gebruiken?

Ja, en daar betaalt het zich het meest uit. Via MCP krijgt de agent tools om een sandbox aan te maken, opdrachten uit te voeren en bestanden te lezen. In plaats van te gissen of een wijziging iets breekt, voert hij de code uit en citeert hij de uitvoer in zijn review.

Is het veilig om een pull request van een onbekende uit te checken?

Daar is de sandbox voor. De code draait in een aparte microVM met een eigen kernel, en er staat niets van u in behalve wat u erin zet. Geef geen token mee dat naar uw repository kan schrijven; voor privérepository's volstaat een alleen-lezen-token.

Kan ik de app uit de pull request in mijn browser openen?

Nee. Sandboxes hebben geen inkomende poorten, dus niets van buitenaf kan ermee verbinden. U kunt de app binnenin starten en met curl vanuit een andere opdracht testen, of previews op een VPS zetten als reviewers door een interface moeten klikken.

Wat kost een reviewronde?

Een typische ronde — clonen, installeren, twee keer reproduceren, tests draaien — duurt een paar minuten op het tarief standard en kost ongeveer $0.005. U betaalt per seconde met een minimum van 60 seconden, vanuit een prepaid tegoed.

Reacties

Nog geen reacties. Wees de eerste.

Laat een reactie achter

Reacties worden gemodereerd voordat ze verschijnen.