Модель хранения
Mantis использует три уровня хранения:- Образ провайдера — принадлежит Crabbox и хранится в учётной записи облачного провайдера. Содержит возможности машины (Chrome/Chromium, ffmpeg, scrot, Node/corepack/pnpm, нативные инструменты сборки) и пустые каталоги кэша.
- Состояние прогретой аренды — принадлежит текущему сеансу оператора. Может содержать
профиль браузера с выполненным входом,
/var/cache/crabbox/pnpmи подготовленную рабочую копию исходного кода, пока аренда активна. - Артефакты Mantis — принадлежат запуску OpenClaw. Находятся в
.artifacts/qa-e2e/mantis/...; GitHub Actions загружает их, а приложение Mantis для GitHub добавляет встроенные доказательства в комментарий к PR.
node_modules или dist/ в образ провайдера.
Запуск через GitHub
Запустите рабочий процесс изmain:
candidate_ref ограничен, поскольку рабочий процесс использует реальные учётные данные: он
должен разрешаться в текущую цепочку предков main, тег выпуска или головной коммит открытого PR в
openclaw/openclaw.
Рабочий процесс создаёт:
- загруженный артефакт
mantis-slack-desktop-smoke-<run-id>-<attempt> - встроенный комментарий к PR от приложения Mantis для GitHub
slack-desktop-smoke.png,slack-desktop-smoke.mp4slack-desktop-smoke-preview.gif,slack-desktop-smoke-change.mp4mantis-slack-desktop-smoke-summary.json,mantis-slack-desktop-smoke-report.md- удалённые журналы:
slack-desktop-command.log,openclaw-gateway.log,chrome.log,ffmpeg.log
<!-- mantis-slack-desktop-smoke -->.
Локальный CLI
Проверка исходного кода с холодного запуска:--hydrate-mode prehydrated только в том случае, если повторно используемое удалённое рабочее пространство уже
содержит node_modules и собранный dist/; в противном случае Mantis безопасно завершает работу с ошибкой.
Проверка нативного интерфейса подтверждения Slack:
--approval-checkpoints несовместим с --gateway-setup. Он запускает
сценарии slack-approval-exec-native и slack-approval-plugin-native, включаемые явно,
если не передан явный --scenario контрольной точки подтверждения; другие
сценарии Slack отклоняются до запуска виртуальной машины. Средство запуска QA для Slack записывает
JSON-файл каждой контрольной точки из реального сообщения API Slack, которое оно наблюдало, после чего
удалённый наблюдатель отображает это сообщение в
approval-checkpoints/<scenario>-pending.png и
approval-checkpoints/<scenario>-resolved.png. Запуск завершается с ошибкой, если какой-либо
JSON контрольной точки, доказательство сообщения, JSON подтверждения получения или отображённый снимок экрана отсутствует
либо пуст.
В холодных арендах GitHub Actions отсутствуют файлы cookie Slack Web, поэтому при захвате браузера
может отображаться экран входа в Slack. Для доказательства через контрольные точки подтверждения следует полагаться на
отображённые изображения контрольных точек и артефакты QA Slack, а не на
slack-desktop-smoke.png. Используйте сохранённую прогретую аренду с профилем
Slack Web, в котором вход выполнен вручную, только когда сам снимок экрана браузера должен показывать
Slack Web.
Режимы подготовки
GitHub Actions всегда подготавливает рабочую копию кандидата перед запуском виртуальной машины. Его
хранилище pnpm кэшируется по ОС, версии Node и файлу блокировки. Запуск
source на виртуальной машине
также повторно использует /var/cache/crabbox/pnpm, если он присутствует.
Интерпретация времени выполнения
mantis-slack-desktop-smoke-report.md содержит длительность этапов:
crabbox.warmup— запуск облачного провайдера, готовность рабочего стола и браузера, SSH.crabbox.inspect— поиск метаданных аренды.credentials.prepare— получение аренды учётных данных Convex.crabbox.remote_run— синхронизация, запуск браузера, установка или сборка OpenClaw либо проверка подготовки, запуск Gateway, создание снимка экрана и запись видео.artifacts.copy— обратная синхронизация с виртуальной машины через rsync.
crabbox.remote_run может показывать accepted, когда Crabbox возвращает ненулевой
статус удалённого выполнения, но Mantis скопировал метаданные, подтверждающие, что либо настройка Gateway OpenClaw
завершилась, либо сама команда QA Slack успешно завершила работу. Считайте
accepted успешным результатом с пояснением, а не неудачным сценарием.
Если запуск выполняется медленно:
- Преобладает прогрев: предварительно соберите или продвиньте более подходящий образ провайдера Crabbox.
- В
sourceпреобладаетremote_run: используйте прогретую аренду, улучшите повторное использование хранилища pnpm или перенесите системные зависимости машины в образ провайдера. - В
prehydratedпреобладаетremote_run: удалённое рабочее пространство в действительности не было готово либо настройка Gateway, браузера или Slack выполняется медленно. - Преобладает копирование артефактов: проверьте размер видео и содержимое каталога артефактов.
Контрольный список доказательств
Хороший комментарий к PR содержит:- идентификатор сценария и SHA кандидата
- URL запуска GitHub Actions и URL артефакта
- встроенный снимок экрана контрольной точки подтверждения или снимок экрана Slack Web из прогретой аренды с выполненным входом
- встроенный анимированный предпросмотр, если доступен
- ссылки на полный и обрезанный MP4
- статус успеха или ошибки и сводку времени выполнения из отчёта
Обработка ошибок
Если рабочий процесс завершается с ошибкой до запуска виртуальной машины, сначала проверьте задание Actions. Типичные причины: недоверенныйcandidate_ref, отсутствующие секреты окружения или
ошибка установки либо сборки кандидата.
Если запуск на виртуальной машине завершается с ошибкой, но снимки экрана были скопированы обратно, проверьте:
crabbox vnc ...
из отчёта, а после завершения остановите аренду:
--lease-id. Не включайте этот профиль браузера в образ провайдера.