Mantis Slack desktop QA is the real-UI lane for Slack-class bugs that need a Linux desktop, VNC rescue, Slack Web, a real OpenClaw gateway, screenshots, videos, and a PR evidence comment. Use it when unit tests or the headless Slack live lane cannot prove the bug.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Storage model
Mantis uses three different storage layers:- Provider image: owned by Crabbox and stored in the cloud provider account. It contains machine capabilities such as Chrome/Chromium, ffmpeg, scrot, Node/corepack/pnpm, native build tools, and empty cache directories.
- Warm lease state: owned by the current operator session. It can contain a
logged-in browser profile,
/var/cache/crabbox/pnpm, and a prepared source checkout while the lease is alive. - Mantis artifacts: owned by the OpenClaw run. They live under
.artifacts/qa-e2e/mantis/..., then GitHub Actions uploads them and the Mantis GitHub App comments inline evidence on the PR.
node_modules, or dist/ into a prebaked provider image.
GitHub dispatch
Run the workflow frommain:
candidate_ref values are intentionally narrow because the workflow
uses live credentials: current main ancestry, release tags, or an open PR head
from openclaw/openclaw.
The workflow writes:
- uploaded artifact:
mantis-slack-desktop-smoke-<run-id>-<attempt>; - inline PR comment from the 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;- remote logs such as
slack-desktop-command.log,openclaw-gateway.log,chrome.log, andffmpeg.log.
<!-- mantis-slack-desktop-smoke --> marker.
Local CLI
Cold source proof:--hydrate-mode prehydrated only when the reused remote workspace already
has node_modules and a built dist/. Mantis fails closed if those are
missing.
Hydrate modes
| Mode | Use when | Remote behavior | Tradeoff |
|---|---|---|---|
source | Normal PR proof, cold machines, CI | Runs pnpm install --frozen-lockfile --prefer-offline and pnpm build inside the VM | Slowest, strongest source-checkout proof |
prehydrated | You intentionally prepared a reused lease | Requires existing node_modules and dist/; skips install/build | Fast, but only valid for operator-controlled warm leases |
/var/cache/crabbox/pnpm when present.
Timing interpretation
mantis-slack-desktop-smoke-report.md includes phase timings:
crabbox.warmup: cloud provider boot, desktop/browser readiness, and SSH.crabbox.inspect: lease metadata lookup.credentials.prepare: Convex credential lease acquisition.crabbox.remote_run: sync, browser launch, OpenClaw install/build or hydrate validation, gateway startup, screenshot, and video capture.artifacts.copy: rsync back from the VM.
crabbox.remote_run can be marked accepted when Crabbox returns a non-zero
remote status after Mantis has copied metadata proving that the OpenClaw gateway
is alive and the setup completed. Treat accepted as pass-with-explanation,
not a failed scenario.
If the run is slow:
- warmup dominates: prebake or promote a better Crabbox provider image;
- remote_run dominates in
source: use a warm lease, improve pnpm store reuse, or move machine prerequisites into the provider image; - remote_run dominates in
prehydrated: the remote workspace was not actually ready, or the gateway/browser/Slack setup is slow; - artifact copy dominates: inspect video size and artifact directory contents.
Evidence checklist
A good PR comment should show:- scenario id and candidate SHA;
- GitHub Actions run URL;
- artifact URL;
- inline screenshot;
- inline animated preview when available;
- full MP4 and trimmed MP4 links;
- pass/fail status;
- timing summary in the attached report.
Failure handling
If the workflow fails before the VM run, inspect the Actions job first. Typical causes are untrustedcandidate_ref, missing environment secrets, or candidate
install/build failure.
If the VM run fails but screenshots were copied back, inspect:
crabbox vnc ... command.
Stop the lease when done:
--lease-id. Do not bake that browser profile into a provider image.