−25%

en Windows con pago anual, hasta el 31/10. Ver planes

EQVPS
Empezar

Sandbox para revisión de código y comprobaciones de PR: demuestra que un parche funciona antes de aprobarlo

Leer un diff te dice lo que un parche afirma. Ejecutarlo te dice si es verdad. Descarga un pull request en una microVM desechable, reproduce el bug antes y después, ejecuta los tests y revisa con pruebas, por medio céntimo aproximadamente por pasada.

Un diff muestra lo que un parche afirma hacer. No muestra si el bug ha desaparecido de verdad, si la nueva rama de un if llega a ejecutarse alguna vez o si la actualización de una dependencia rompe el import en una instalación limpia. Los revisores lo saben, y por eso tantas revisiones terminan con «LGTM, suponiendo que pasen los tests».

Con los parches escritos por IA la brecha se agranda. Un modelo produce código plausible muy rápido, y lo plausible es justo lo que se le escapa a un revisor cansado. La solución barata es ejecutar el cambio antes de que nadie lo apruebe, en un sitio donde no pueda dañar nada.

La comprobación: base, head, tests

La prueba más convincente que puede ofrecer un parche es una reproducción que falla en el código antiguo y pasa en el nuevo. Una sandbox lo convierte en un script de 20 líneas. Es una microVM Firecracker con Python 3.12, Node.js 22, git y curl, que arranca en un segundo aproximadamente:

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 es el fragmento del informe de bug. Si sale con un código distinto de cero en base y con cero en head, el parche arregla lo que dice arreglar. Publica esa línea y el resumen de los tests como comentario en el pull request, y el revisor empieza con hechos.

La suite de tests se ejecuta como tarea en segundo plano porque un solo comando síncrono se detiene a los 55 segundos. El TTL de 30 minutos limita cuánto puede facturar una ejecución atascada.

Agentes de revisión que ejecutan código

La misma idea funciona para un revisor con IA. Conectado mediante el servidor MCP, un agente tiene herramientas de sandbox: crear una sandbox, ejecutar un comando, subir y descargar archivos. En lugar de escribir «esto podría romper la compatibilidad con Python 3.8», descarga la rama, ejecuta el código y cita el traceback, o informa de que todo está bien.

Dale a ese agente un límite de gasto y un token de solo lectura, y decide qué herramientas puede llamar sin preguntar. Las salvaguardas de MCP clasifican cada herramienta por nivel de riesgo.

Qué tarifa

RepositorioTarifaPasada típicaCoste aprox.
Biblioteca pequeña, Python o JS purosmall (0.5 vCPU, 1 GB)2 min$0.0011
Aplicación web con suite de testsstandard (1 vCPU, 2 GB)5 min$0.0055
Extensiones nativas, dependencias compiladasplus (2 vCPU, 4 GB)15 min$0.033

Las sandboxes efímeras se facturan por segundo con un mínimo de 60 segundos. Si un revisor quiere volver al mismo entorno durante un par de días, créalo como persistent: conserva su disco hasta 30 días y se factura por hora iniciada, así que una sandbox standard mantenida para una revisión de dos días cuesta unos $3.17. Bórrala cuando se fusione el pull request.

Límites que conviene conocer

  • Dos comandos a la vez por cuenta. De sobra para revisiones, que van una tras otra. Si compruebas decenas de pull requests a la vez, harán cola.
  • Sin puertos de entrada. No puedes abrir la aplicación en un navegador. Arráncala dentro y pruébala con curl localhost desde un segundo comando.
  • Sin Docker dentro. Los tests que levantan contenedores van en un runner en un VPS.
  • La salida a internet está abierta. Es lo que hace funcionar pip install. No metas en la sandbox nada que no le darías al autor del parche.

Para empezar

Las cuentas nuevas reciben $1 de tiempo de sandbox, suficiente para más de cien pasadas de revisión en la tarifa standard. La página de sandboxes tiene las tarifas, la referencia del SDK cada método usado arriba, y el SDK de Python en 5 minutos la configuración.

Relacionado: tests de CI aislados para todo el pipeline, y sandbox para agentes de IA para los agentes que escriben el código en primer lugar.

¿Listo para desplegar? Paga en cripto, sin KYC — en línea en aproximadamente un minuto.

Desplegar →

Preguntas frecuentes

¿En qué se diferencia de ejecutar CI en el pull request?

La CI responde si pasan los tests existentes. Una comprobación de revisión responde si el parche hace lo que dice: ejecuta la reproducción del informe de bug en el código antiguo y en el nuevo, prueba el caso límite que preocupa al revisor y mantiene una sandbox disponible para que el revisor investigue. Funcionan bien juntas.

¿Puede usarlo un agente de revisión con IA?

Sí, y ahí es donde más rinde. Por MCP el agente obtiene herramientas para crear una sandbox, ejecutar comandos y leer archivos. En lugar de adivinar si un cambio rompe algo, ejecuta el código y cita la salida en su revisión.

¿Es seguro descargar un pull request de un desconocido?

Para eso está la sandbox. El código se ejecuta en una microVM separada con su propio kernel, y dentro no hay nada tuyo salvo lo que pongas. No pases un token con permiso de escritura en tu repositorio; para repositorios privados basta un token de solo lectura.

¿Puedo abrir la aplicación del pull request en mi navegador?

No. Las sandboxes no tienen puertos de entrada, así que nada externo puede conectarse a ellas. Puedes arrancar la aplicación dentro y probarla con curl desde otro comando, o desplegar previsualizaciones en un VPS si los revisores necesitan navegar por una interfaz.

¿Cuánto cuesta una pasada de revisión?

Una pasada típica —clonar, instalar, reproducir dos veces, ejecutar tests— lleva unos minutos en la tarifa standard y cuesta unos $0.005. Pagas por segundo con un mínimo de 60 segundos, desde un saldo prepago.

Comentarios

Aún no hay comentarios. Sé el primero.

Deja un comentario

Los comentarios se moderan antes de aparecer.