




















@@ -0,0 +1,202 @@
1+---
2+summary: "Operator runbook for Mantis Slack desktop QA: GitHub dispatch, local CLI, warm VNC leases, hydrate modes, timing interpretation, artifacts, and failure handling."
3+read_when:
4+ - Running Mantis Slack desktop QA from GitHub or locally
5+ - Debugging slow Mantis Slack desktop runs
6+ - Choosing source, prehydrated, or warm-lease mode
7+ - Posting screenshot and video evidence to a PR
8+title: "Mantis Slack Desktop Runbook"
9+---
10+11+Mantis Slack desktop QA is the real-UI lane for Slack-class bugs that need a
12+Linux desktop, VNC rescue, Slack Web, a real OpenClaw gateway, screenshots,
13+videos, and a PR evidence comment.
14+15+Use it when unit tests or the headless Slack live lane cannot prove the bug.
16+17+## Storage Model
18+19+Mantis uses three different storage layers:
20+21+- Provider image: owned by Crabbox and stored in the cloud provider account.
22+ It contains machine capabilities such as Chrome/Chromium, ffmpeg, scrot,
23+ Node/corepack/pnpm, native build tools, and empty cache directories.
24+- Warm lease state: owned by the current operator session. It can contain a
25+ logged-in browser profile, `/var/cache/crabbox/pnpm`, and a prepared source
26+ checkout while the lease is alive.
27+- Mantis artifacts: owned by the OpenClaw run. They live under
28+`.artifacts/qa-e2e/mantis/...`, then GitHub Actions uploads them and the
29+ Mantis GitHub App comments inline evidence on the PR.
30+31+Never put secrets, browser cookies, Slack login state, repository checkouts,
32+`node_modules`, or `dist/` into a prebaked provider image.
33+34+## GitHub Dispatch
35+36+Run the workflow from `main`:
37+38+```bash
39+gh workflow run mantis-slack-desktop-smoke.yml \
40+ --ref main \
41+ -f candidate_ref=<trusted-ref-or-sha> \
42+ -f pr_number=<pr-number> \
43+ -f scenario_id=slack-canary \
44+ -f crabbox_provider=aws \
45+ -f keep_vm=false \
46+ -f hydrate_mode=source
47+```
48+49+Allowed `candidate_ref` values are intentionally narrow because the workflow
50+uses live credentials: current `main` ancestry, release tags, or an open PR head
51+from `openclaw/openclaw`.
52+53+The workflow writes:
54+55+- uploaded artifact: `mantis-slack-desktop-smoke-<run-id>-<attempt>`;
56+- inline PR comment from the Mantis GitHub App;
57+- `slack-desktop-smoke.png`;
58+- `slack-desktop-smoke.mp4`;
59+- `slack-desktop-smoke-preview.gif`;
60+- `slack-desktop-smoke-change.mp4`;
61+- `mantis-slack-desktop-smoke-summary.json`;
62+- `mantis-slack-desktop-smoke-report.md`;
63+- remote logs such as `slack-desktop-command.log`, `openclaw-gateway.log`,
64+`chrome.log`, and `ffmpeg.log`.
65+66+The PR comment is updated in place by the hidden
67+`<!-- mantis-slack-desktop-smoke -->` marker.
68+69+## Local CLI
70+71+Cold source proof:
72+73+```bash
74+pnpm openclaw qa mantis slack-desktop-smoke \
75+ --provider aws \
76+ --class standard \
77+ --gateway-setup \
78+ --credential-source convex \
79+ --credential-role maintainer \
80+ --provider-mode live-frontier \
81+ --model openai/gpt-5.4 \
82+ --alt-model openai/gpt-5.4 \
83+ --scenario slack-canary \
84+ --hydrate-mode source
85+```
86+87+Keep the VM for VNC rescue:
88+89+```bash
90+pnpm openclaw qa mantis slack-desktop-smoke \
91+ --provider aws \
92+ --class standard \
93+ --gateway-setup \
94+ --scenario slack-canary \
95+ --keep-lease
96+```
97+98+Open VNC:
99+100+```bash
101+crabbox vnc --provider aws --id <cbx_id> --open
102+```
103+104+Reuse a warm lease:
105+106+```bash
107+pnpm openclaw qa mantis slack-desktop-smoke \
108+ --provider aws \
109+ --lease-id <cbx_id-or-slug> \
110+ --gateway-setup \
111+ --scenario slack-canary \
112+ --hydrate-mode source
113+```
114+115+Use `--hydrate-mode prehydrated` only when the reused remote workspace already
116+has `node_modules` and a built `dist/`. Mantis fails closed if those are
117+missing.
118+119+## Hydrate Modes
120+121+| Mode | Use when | Remote behavior | Tradeoff |
122+| ------------- | ----------------------------------------- | ------------------------------------------------------------------------------------- | -------------------------------------------------------- |
123+| `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 |
124+| `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 |
125+126+GitHub Actions always prepares the candidate checkout before the VM run. Its
127+pnpm store is cached by OS, Node version, and lockfile. The VM source run also
128+uses `/var/cache/crabbox/pnpm` when present.
129+130+## Timing Interpretation
131+132+`mantis-slack-desktop-smoke-report.md` includes phase timings:
133+134+- `crabbox.warmup`: cloud provider boot, desktop/browser readiness, and SSH.
135+- `crabbox.inspect`: lease metadata lookup.
136+- `credentials.prepare`: Convex credential lease acquisition.
137+- `crabbox.remote_run`: sync, browser launch, OpenClaw install/build or
138+ hydrate validation, gateway startup, screenshot, and video capture.
139+- `artifacts.copy`: rsync back from the VM.
140+141+`crabbox.remote_run` can be marked `accepted` when Crabbox returns a non-zero
142+remote status after Mantis has copied metadata proving that the OpenClaw gateway
143+is alive and the setup completed. Treat `accepted` as pass-with-explanation,
144+not a failed scenario.
145+146+If the run is slow:
147+148+- warmup dominates: prebake or promote a better Crabbox provider image;
149+- remote_run dominates in `source`: use a warm lease, improve pnpm store reuse,
150+ or move machine prerequisites into the provider image;
151+- remote_run dominates in `prehydrated`: the remote workspace was not actually
152+ ready, or the gateway/browser/Slack setup is slow;
153+- artifact copy dominates: inspect video size and artifact directory contents.
154+155+## Evidence Checklist
156+157+A good PR comment should show:
158+159+- scenario id and candidate SHA;
160+- GitHub Actions run URL;
161+- artifact URL;
162+- inline screenshot;
163+- inline animated preview when available;
164+- full MP4 and trimmed MP4 links;
165+- pass/fail status;
166+- timing summary in the attached report.
167+168+Do not commit screenshots or videos into the repository. Keep them in GitHub
169+Actions artifacts or the PR comment.
170+171+## Failure Handling
172+173+If the workflow fails before the VM run, inspect the Actions job first. Typical
174+causes are untrusted `candidate_ref`, missing environment secrets, or candidate
175+install/build failure.
176+177+If the VM run fails but screenshots were copied back, inspect:
178+179+```bash
180+cat mantis-slack-desktop-smoke-report.md
181+cat mantis-slack-desktop-smoke-summary.json
182+cat slack-desktop-command.log
183+cat openclaw-gateway.log
184+cat chrome.log
185+cat ffmpeg.log
186+```
187+188+If the run kept the lease, open VNC with the report's `crabbox vnc ...` command.
189+Stop the lease when done:
190+191+```bash
192+crabbox stop --provider aws <cbx_id-or-slug>
193+```
194+195+If Slack login expired, repair it in VNC on a kept lease and rerun with
196+`--lease-id`. Do not bake that browser profile into a provider image.
197+198+Related docs:
199+200+- [QA overview](qa-e2e-automation.md)
201+- [Slack channel](../channels/slack.md)
202+- [Testing](../help/testing.md)
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。