Get started
Руководство по работе с Mantis в настольном приложении Slack
Mantis Slack desktop QA — это сценарий тестирования через реальный интерфейс для ошибок класса Slack, требующих рабочего стола Linux, аварийного доступа по VNC, Slack Web, реального Gateway OpenClaw, снимков экрана, видеозаписей и комментария с доказательствами в PR. Используйте его, когда модульные тесты или безголовый сценарий живого тестирования Slack не позволяют подтвердить ошибку.
Модель хранения
Mantis использует три уровня хранения:
- Образ провайдера — принадлежит Crabbox и хранится в учётной записи облачного провайдера. Содержит возможности машины (Chrome/Chromium, ffmpeg, scrot, Node/corepack/pnpm, нативные инструменты сборки) и пустые каталоги кэша.
- Состояние прогретой аренды — принадлежит текущему сеансу оператора. Может содержать
профиль браузера с выполненным входом,
/var/cache/crabbox/pnpmи подготовленную рабочую копию исходного кода, пока аренда активна. - Артефакты Mantis — принадлежат запуску OpenClaw. Находятся в
.artifacts/qa-e2e/mantis/...; GitHub Actions загружает их, а приложение Mantis для GitHub добавляет встроенные доказательства в комментарий к PR.
Никогда не включайте секреты, файлы cookie браузера, состояние входа в Slack, рабочие копии репозитория,
node_modules или dist/ в образ провайдера.
Запуск через GitHub
Запустите рабочий процесс из main:
gh workflow run mantis-slack-desktop-smoke.yml \ --ref main \ -f candidate_ref=<trusted-ref-or-sha> \ -f pr_number=<pr-number> \ -f scenario_id=slack-canary \ -f crabbox_provider=aws \ -f keep_vm=false \ -f hydrate_mode=sourcecandidate_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
Комментарий к PR обновляется на месте с помощью скрытого маркера <!-- mantis-slack-desktop-smoke -->.
Локальный CLI
Проверка исходного кода с холодного запуска:
pnpm openclaw qa mantis slack-desktop-smoke \ --provider aws \ --class standard \ --gateway-setup \ --credential-source convex \ --credential-role maintainer \ --provider-mode live-frontier \ --model openai/gpt-5.4 \ --alt-model openai/gpt-5.4 \ --scenario slack-canary \ --hydrate-mode sourceСохранение виртуальной машины для аварийного доступа по VNC:
pnpm openclaw qa mantis slack-desktop-smoke \ --provider aws \ --class standard \ --gateway-setup \ --scenario slack-canary \ --keep-leaseОткрытие VNC:
crabbox vnc --provider aws --id <cbx_id> --openПовторное использование прогретой аренды:
pnpm openclaw qa mantis slack-desktop-smoke \ --provider aws \ --lease-id <cbx_id-or-slug> \ --gateway-setup \ --scenario slack-canary \ --hydrate-mode sourceИспользуйте --hydrate-mode prehydrated только в том случае, если повторно используемое удалённое рабочее пространство уже
содержит node_modules и собранный dist/; в противном случае Mantis безопасно завершает работу с ошибкой.
Проверка нативного интерфейса подтверждения Slack:
pnpm openclaw qa mantis slack-desktop-smoke \ --provider aws \ --class standard \ --approval-checkpoints \ --credential-source convex \ --credential-role maintainer \ --hydrate-mode source--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.
Режимы подготовки
| Режим | Когда использовать | Поведение на удалённой машине | Компромисс |
|---|---|---|---|
source |
Обычная проверка PR, холодные машины, CI | Запускает pnpm install --frozen-lockfile --prefer-offline и pnpm build внутри виртуальной машины |
Самый медленный режим, наиболее надёжная проверка рабочей копии исходного кода |
prehydrated |
Повторно используемая аренда намеренно подготовлена | Требует существующие node_modules и dist/; пропускает установку и сборку |
Быстро, но допустимо только для контролируемых оператором прогретых аренд |
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
- статус успеха или ошибки и сводку времени выполнения из отчёта
Не добавляйте снимки экрана или видеозаписи в репозиторий. Храните их в артефактах GitHub Actions или в комментарии к PR.
Обработка ошибок
Если рабочий процесс завершается с ошибкой до запуска виртуальной машины, сначала проверьте задание Actions.
Типичные причины: недоверенный candidate_ref, отсутствующие секреты окружения или
ошибка установки либо сборки кандидата.
Если запуск на виртуальной машине завершается с ошибкой, но снимки экрана были скопированы обратно, проверьте:
cat mantis-slack-desktop-smoke-report.mdcat mantis-slack-desktop-smoke-summary.jsoncat slack-desktop-command.logcat openclaw-gateway.logcat chrome.logcat ffmpeg.logЕсли запуск сохранил аренду, откройте VNC с помощью команды crabbox vnc ...
из отчёта, а после завершения остановите аренду:
crabbox stop --provider aws <cbx_id-or-slug>Если срок действия входа в Slack истёк, восстановите его через VNC в сохранённой аренде и повторите запуск с
--lease-id. Не включайте этот профиль браузера в образ провайдера.