Модель зберігання
Mantis використовує три різні рівні зберігання:- Образ провайдера: належить Crabbox і зберігається в обліковому записі хмарного провайдера. Він містить можливості машини, як-от Chrome/Chromium, ffmpeg, scrot, Node/corepack/pnpm, нативні інструменти збірки та порожні каталоги кешу.
- Стан теплої оренди: належить поточній операторській сесії. Він може містити
профіль браузера з виконаним входом,
/var/cache/crabbox/pnpmі підготовлений checkout джерельного коду, доки оренда активна. - Артефакти Mantis: належать запуску OpenClaw. Вони розміщуються в
.artifacts/qa-e2e/mantis/..., після чого GitHub Actions завантажує їх, а Mantis GitHub App коментує вбудовані докази в PR.
node_modules або dist/ у заздалегідь зібраний образ провайдера.
Запуск через GitHub
Запустіть workflow зmain:
candidate_ref навмисно вузькі, бо workflow
використовує живі облікові дані: поточне походження main, release tags або head відкритого PR
з openclaw/openclaw.
Workflow записує:
- завантажений артефакт:
mantis-slack-desktop-smoke-<run-id>-<attempt>; - вбудований коментар PR від Mantis GitHub App;
slack-desktop-smoke.png;slack-desktop-smoke.mp4;slack-desktop-smoke-preview.gif;slack-desktop-smoke-change.mp4;mantis-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 --> marker.
Локальний CLI
Холодний доказ із джерельного коду:--hydrate-mode prehydrated лише тоді, коли повторно використаний віддалений workspace уже
має node_modules і зібраний dist/. Mantis закривається з помилкою, якщо їх
бракує.
Доведіть нативний інтерфейс затвердження Slack:
--gateway-setup. Він запускає
opt-in сценарії slack-approval-exec-native і slack-approval-plugin-native,
якщо ви не передасте явні прапорці контрольних точок затвердження --scenario; інші
сценарії Slack відхиляються до запуску VM. Slack QA runner записує
кожен JSON-файл контрольної точки зі справжнього повідомлення Slack API, яке він спостерігав, після чого
віддалений watcher рендерить цей знімок повідомлення в
approval-checkpoints/<scenario>-pending.png і
approval-checkpoints/<scenario>-resolved.png. Запуск завершується помилкою, якщо будь-який JSON контрольної точки,
доказ повідомлення, ack JSON або відрендерений знімок екрана відсутній чи порожній.
Холодні оренди GitHub Actions не мають cookies Slack Web, тому їхній браузерний
захват може потрапити на вхід у Slack. Для доказу контрольної точки затвердження довіряйте
відрендереним зображенням контрольних точок і артефактам Slack QA, а не
slack-desktop-smoke.png. Використовуйте збережену теплу оренду з вручну авторизованим профілем Slack
Web лише тоді, коли сам знімок екрана браузера має показувати Slack Web.
Режими гідратації
| Режим | Коли використовувати | Поведінка на віддаленій машині | Компроміс |
|---|---|---|---|
source | Звичайний доказ PR, холодні машини, CI | Запускає pnpm install --frozen-lockfile --prefer-offline і pnpm build усередині VM | Найповільніший, найсильніший доказ checkout джерельного коду |
prehydrated | Ви навмисно підготували повторно використану оренду | Потребує наявних node_modules і dist/; пропускає install/build | Швидко, але чинно лише для контрольованих оператором теплих оренд |
/var/cache/crabbox/pnpm, коли він наявний.
Інтерпретація таймінгів
mantis-slack-desktop-smoke-report.md містить таймінги фаз:
crabbox.warmup: завантаження хмарного провайдера, готовність desktop/browser і SSH.crabbox.inspect: пошук метаданих оренди.credentials.prepare: отримання оренди облікових даних Convex.crabbox.remote_run: синхронізація, запуск браузера, install/build OpenClaw або перевірка гідратації, запуск Gateway, знімок екрана та захоплення відео.artifacts.copy: rsync назад із VM.
crabbox.remote_run може бути позначено як accepted, коли Crabbox повертає ненульовий
віддалений статус після того, як Mantis скопіював метадані, які доводять, що або налаштування OpenClaw
Gateway завершилося, або сама команда Slack QA успішно завершилася.
Сприймайте accepted як успішне проходження із поясненням, а не як невдалий сценарій.
Якщо запуск повільний:
- домінує warmup: заздалегідь зберіть або просуньте кращий образ провайдера Crabbox;
- remote_run домінує в
source: використайте теплу оренду, покращте повторне використання сховища pnpm або перенесіть машинні передумови в образ провайдера; - remote_run домінує в
prehydrated: віддалений workspace насправді не був готовий або налаштування Gateway/browser/Slack повільне; - домінує копіювання артефактів: перевірте розмір відео та вміст каталогу артефактів.
Контрольний список доказів
Добрий коментар PR має показувати:- id сценарію та SHA кандидата;
- URL запуску GitHub Actions;
- URL артефакту;
- вбудований знімок екрана контрольної точки затвердження або знімок Slack Web з теплої оренди з виконаним входом;
- вбудований анімований preview, коли доступний;
- посилання на повний MP4 і обрізаний MP4;
- статус pass/fail;
- підсумок таймінгів у прикріпленому звіті.
Обробка збоїв
Якщо workflow завершується помилкою до запуску VM, спершу перевірте job Actions. Типові причини — недовіренийcandidate_ref, відсутні секрети середовища або помилка
install/build кандидата.
Якщо запуск VM завершується помилкою, але знімки екрана було скопійовано назад, перевірте:
crabbox vnc ... зі звіту.
Зупиніть оренду після завершення:
--lease-id. Не запікайте цей профіль браузера в образ провайдера.