Дифф показывает, что патч обещает сделать. Он не показывает, действительно ли бага больше нет, выполняется ли когда-нибудь новая ветка if и не ломает ли обновление зависимости импорт на чистой установке. Ревьюеры это знают, поэтому столько ревью заканчиваются словами «LGTM, если тесты пройдут».
С патчами от ИИ этот разрыв растёт. Модель быстро выдаёт правдоподобный код, а правдоподобный — именно тот, что проскальзывает мимо уставшего ревьюера. Дешёвое решение — запускать изменение до того, как кто-то его одобрит, там, где оно ничему не навредит.
Проверка: base, head, тесты
Самое убедительное доказательство, которое может предъявить патч, — воспроизведение, которое падает на старом коде и проходит на новом. Песочница превращает это в скрипт на 20 строк. Это микро-VM Firecracker с Python 3.12, Node.js 22, git и curl, которая стартует примерно за секунду:
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 — это сниппет из баг-репорта. Если он завершается с ненулевым кодом на base и с нулём на head, патч исправляет то, что заявляет. Опубликуйте эту строку и сводку тестов комментарием к пул-реквесту, и ревьюер начнёт с фактов.
Набор тестов работает фоновой задачей, потому что одна синхронная команда останавливается на 55 секундах. TTL в 30 минут ограничивает, сколько может стоить зависший прогон.
Ревью-агенты, которые запускают код
Та же идея работает для ИИ-ревьюера. Подключённый через MCP-сервер, агент получает инструменты песочниц: создать песочницу, выполнить команду, загрузить и скачать файлы. Вместо «это может сломать совместимость с Python 3.8» он выкачивает ветку, запускает код и цитирует traceback — или сообщает, что всё в порядке.
Дайте такому агенту лимит трат и токен только на чтение и решите, какие инструменты он может вызывать без спроса. В разделе защита MCP все инструменты разложены по уровню риска.
Какой тариф
| Репозиторий | Тариф | Типичный проход | Примерная стоимость |
|---|---|---|---|
| Маленькая библиотека, чистый Python или JS | small (0.5 vCPU, 1 GB) | 2 мин | $0.0011 |
| Веб-приложение с набором тестов | standard (1 vCPU, 2 GB) | 5 мин | $0.0055 |
| Нативные расширения, компилируемые зависимости | plus (2 vCPU, 4 GB) | 15 мин | $0.033 |
Временные песочницы оплачиваются посекундно с минимумом 60 секунд. Если ревьюер хочет возвращаться к одной и той же среде пару дней, создайте её как persistent: она хранит диск до 30 дней и оплачивается за каждый начатый час, так что песочница standard на двухдневное ревью стоит около $3.17. Удалите её, когда пул-реквест смержен.
Лимиты, которые стоит знать
- Две команды одновременно на аккаунт. Для ревью, которые идут одно за другим, этого достаточно. Если проверять десятки пул-реквестов разом, они встанут в очередь.
- Нет входящих портов. Открыть приложение в браузере не получится. Запустите его внутри и проверьте через
curl localhostиз второй команды. - Нет Docker внутри. Тесты, которые поднимают контейнеры, место на раннере на VPS.
- Исходящий интернет открыт. Именно благодаря этому работает
pip install. Не кладите в песочницу ничего, что не отдали бы автору патча.
С чего начать
Новые аккаунты получают $1 времени песочниц — этого хватит больше чем на сотню проходов ревью на тарифе standard. На странице песочниц — тарифы, в справочнике SDK — все методы из примера, а Python SDK за 5 минут покажет настройку.
По теме: изолированные прогоны тестов в CI для всего пайплайна и песочница для ИИ-агентов для агентов, которые пишут этот код.
Комментарии
Пока нет комментариев. Будьте первым.