−25%

no Windows com pagamento anual, até 31/10. Ver planos

EQVPS
Começar

Sandbox para revisão de código e verificação de PRs: prove que um patch funciona antes de aprovar

Ler um diff diz o que um patch afirma. Executá-lo diz se é verdade. Faça checkout de um pull request numa microVM descartável, reproduza o bug antes e depois, rode os testes e revise com evidências — por cerca de meio centavo por passada.

Um diff mostra o que um patch afirma fazer. Não mostra se o bug realmente sumiu, se o novo ramo de um if chega a ser executado ou se a atualização de uma dependência quebra o import numa instalação limpa. Os revisores sabem disso, e é por isso que tantas revisões terminam com "LGTM, desde que os testes passem".

Com patches escritos por IA, a lacuna aumenta. Um modelo produz código plausível rapidamente, e plausível é exatamente o tipo que passa despercebido por um revisor cansado. A solução barata é executar a mudança antes que alguém a aprove — num lugar onde ela não possa estragar nada.

A verificação: base, head, testes

A evidência mais convincente que um patch pode oferecer é uma reprodução que falha no código antigo e passa no novo. Uma sandbox transforma isso num script de 20 linhas. É uma microVM Firecracker com Python 3.12, Node.js 22, git e curl, iniciada em cerca de um segundo:

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 é o trecho do relatório de bug. Se ele sai com código diferente de zero em base e com zero em head, o patch corrige o que diz corrigir. Publique essa linha, junto com o resumo dos testes, como comentário no pull request, e o revisor começa a partir de fatos.

A suíte de testes roda como tarefa em segundo plano, porque um único comando síncrono para aos 55 segundos. O TTL de 30 minutos limita quanto uma execução travada pode cobrar.

Agentes de revisão que executam código

A mesma ideia funciona para um revisor com IA. Conectado pelo servidor MCP, um agente tem ferramentas de sandbox: criar uma sandbox, executar um comando, enviar e baixar arquivos. Em vez de escrever "isso pode quebrar a compatibilidade com Python 3.8", ele faz checkout do branch, executa o código e cita o traceback — ou informa que está tudo certo.

Dê a esse agente um limite de gastos e um token somente leitura, e decida quais ferramentas ele pode chamar sem perguntar. As proteções do MCP listam cada ferramenta por nível de risco.

Qual plano

RepositórioPlanoPassada típicaCusto aprox.
Biblioteca pequena, Python ou JS purosmall (0.5 vCPU, 1 GB)2 min$0.0011
App web com suíte de testesstandard (1 vCPU, 2 GB)5 min$0.0055
Extensões nativas, dependências compiladasplus (2 vCPU, 4 GB)15 min$0.033

Sandboxes efêmeras são cobradas por segundo, com mínimo de 60 segundos. Se um revisor quiser voltar ao mesmo ambiente ao longo de alguns dias, crie-o como persistent: ele mantém o disco por até 30 dias e é cobrado por hora iniciada, então uma sandbox standard mantida para uma revisão de dois dias custa cerca de $3.17. Apague-a quando o pull request for mesclado.

Limites que vale conhecer

  • Dois comandos por vez por conta. Mais que suficiente para revisões, que acontecem uma após a outra. Se você verificar dezenas de pull requests de uma vez, eles entram na fila.
  • Sem portas de entrada. Não dá para abrir o app num navegador. Inicie-o lá dentro e teste com curl localhost a partir de um segundo comando.
  • Sem Docker dentro. Testes que sobem contêineres ficam num runner em VPS.
  • A internet de saída está aberta. É isso que faz o pip install funcionar. Não coloque na sandbox nada que você não entregaria ao autor do patch.

Para começar

Contas novas recebem $1 de tempo de sandbox, o que cobre mais de cem passadas de revisão no plano standard. A página de sandboxes traz os planos, a referência do SDK cada método usado acima, e SDK de Python em 5 minutos a configuração.

Relacionado: testes de CI isolados para o pipeline completo, e sandbox para agentes de IA para os agentes que escrevem o código em primeiro lugar.

Pronto para implantar? Pague com cripto, sem KYC — online em cerca de um minuto.

Implantar agora →

FAQ

Qual a diferença em relação a rodar CI no pull request?

O CI responde se os testes existentes passam. Uma verificação de revisão responde se o patch faz o que diz: roda a reprodução do relatório de bug no código antigo e no novo, testa o caso extremo que preocupa o revisor e mantém uma sandbox disponível para o revisor investigar. Os dois funcionam bem juntos.

Um agente de revisão com IA pode usar isso?

Sim, e é aí que compensa mais. Via MCP, o agente recebe ferramentas para criar uma sandbox, executar comandos e ler arquivos. Em vez de adivinhar se uma mudança quebra algo, ele executa o código e cita a saída na revisão.

É seguro fazer checkout de um pull request de um desconhecido?

É para isso que serve a sandbox. O código roda numa microVM separada com kernel próprio, e não há nada seu lá dentro além do que você colocar. Não passe um token com permissão de escrita no seu repositório; para repositórios privados, um token somente leitura basta.

Posso abrir o app do pull request no meu navegador?

Não. As sandboxes não têm portas de entrada, então nada externo consegue se conectar a elas. Você pode iniciar o app lá dentro e testá-lo com curl a partir de outro comando, ou publicar previews num VPS se os revisores precisarem clicar por uma interface.

Quanto custa uma passada de revisão?

Uma passada típica — clonar, instalar, reproduzir duas vezes, rodar os testes — leva alguns minutos no plano standard e custa cerca de $0.005. Você paga por segundo, com mínimo de 60 segundos, a partir de um saldo pré-pago.

Comentários

Nenhum comentário ainda. Seja o primeiro.

Deixe um comentário

Os comentários são moderados antes de aparecerem.