Appearance
Mantis Slack 桌面端 QA 是 OpenClaw 针对 Slack 类 bug 的真实 UI 测试通道,需要 Linux 桌面、VNC、Slack Web 和真实 OpenClaw 网关。支持 GitHub Actions 调度与本地 CLI 执行,提供三种存储模式(Provider 镜像、热租约、制品)和 source/prehydrated 两种 hydrate 模式。运行结果包含截图、视频、摘要 JSON 和报告 Markdown,并由 Mantis GitHub App 自动评论到 PR。
OpenClaw Mantis Slack 桌面端 QA 运行手册
Mantis Slack 桌面端 QA 是 Slack 类 bug 的真实 UI 测试通道,用于单元测试或无头 Slack 实时通道无法复现的缺陷。它需要 Linux 桌面、VNC 救援、Slack Web、真实 OpenClaw 网关、截图、视频以及 PR 证据评论。
存储模型
Mantis 使用三层存储:
- Provider 镜像:归 Crabbox 所有,存储在云提供商账户中。包含 Chrome/Chromium、ffmpeg、scrot、Node/corepack/pnpm、原生构建工具和空缓存目录。
- 热租约状态:归当前操作会话所有。租约存续期间可包含已登录的浏览器配置、
/var/cache/crabbox/pnpm以及准备好的源码签出。 - Mantis 制品:归 OpenClaw 运行所有。位于
.artifacts/qa-e2e/mantis/...,GitHub Actions 会上传它们,Mantis GitHub App 会以内联证据形式评论在 PR 上。
禁止将密钥、浏览器 Cookie、Slack 登录状态、仓库签出、node_modules 或 dist/ 放入预制的 Provider 镜像。
GitHub 调度
从 main 分支运行工作流:
bash
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 的祖先、发布标签,或来自 openclaw/openclaw 的开放 PR 头部。
工作流生成:
- 上传的制品:
mantis-slack-desktop-smoke-<run-id>-<attempt> - 来自 Mantis GitHub App 的内联 PR 评论
slack-desktop-smoke.pngslack-desktop-smoke.mp4slack-desktop-smoke-preview.gifslack-desktop-smoke-change.mp4mantis-slack-desktop-smoke-summary.jsonmantis-slack-desktop-smoke-report.md- 远程日志:
slack-desktop-command.log、openclaw-gateway.log、chrome.log、ffmpeg.log
PR 评论由隐藏的 <!-- mantis-slack-desktop-smoke --> 标记原地更新。
本地 CLI
冷源码验证:
bash
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保留 VM 以便 VNC 救援:
bash
pnpm openclaw qa mantis slack-desktop-smoke \
--provider aws \
--class standard \
--gateway-setup \
--scenario slack-canary \
--keep-lease打开 VNC:
bash
crabbox vnc --provider aws --id <cbx_id> --open重用热租约:
bash
pnpm openclaw qa mantis slack-desktop-smoke \
--provider aws \
--lease-id <cbx_id-or-slug> \
--gateway-setup \
--scenario slack-canary \
--hydrate-mode source仅当重用的远程工作区已包含 node_modules 和已构建的 dist/ 时,才使用 --hydrate-mode prehydrated。如果缺少这些,Mantis 会失败并关闭。
Hydrate 模式
| 模式 | 适用场景 | 远程行为 | 权衡 |
|---|---|---|---|
source | 普通 PR 验证、冷机器、CI | 在 VM 内运行 pnpm install --frozen-lockfile --prefer-offline 和 pnpm build | 最慢,但源码签出验证最强 |
prehydrated | 你特意准备好了可重用的租约 | 要求已有 node_modules 和 dist/;跳过 install/build | 快,但仅适用于操作者控制的热租约 |
GitHub Actions 总是在 VM 运行前准备好候选签出。其 pnpm 存储按操作系统、Node 版本和 lockfile 缓存。VM 源码运行时也可用 /var/cache/crabbox/pnpm(如果存在)。
时间解读
mantis-slack-desktop-smoke-report.md 包含各阶段耗时:
crabbox.warmup:云提供商启动、桌面/浏览器就绪和 SSH。crabbox.inspect:租约元数据查找。credentials.prepare:Convex 凭据租约获取。crabbox.remote_run:同步、浏览器启动、OpenClaw 安装/构建或 hydrate 验证、网关启动、截图和视频采集。artifacts.copy:从 VM rsync 回数据。
当 Crabbox 返回非零远程状态,且 Mantis 已复制元数据证明 OpenClaw 网关存活且设置完成时,crabbox.remote_run 可被标记为 accepted。将 accepted 视为通过但有说明,而非失败场景。
如果运行缓慢:
- warmup 占主导:预制或提升更好的 Crabbox Provider 镜像;
- remote_run 在
source中占主导:使用热租约、改善 pnpm 存储复用,或将机器先决条件移入 Provider 镜像; - remote_run 在
prehydrated中占主导:远程工作区并未真正就绪,或者网关/浏览器/Slack 设置缓慢; - 制品复制占主导:检查视频大小和制品目录内容。
证据清单
好的 PR 评论应展示:
- 场景 ID 和候选 SHA;
- GitHub Actions 运行 URL;
- 制品 URL;
- 内联截图;
- 内带动画预览(如有);
- 完整 MP4 和裁剪 MP4 链接;
- 通过/失败状态;
- 附加报告中的时间摘要。
不要将截图或视频提交到仓库。保留在 GitHub Actions 制品或 PR 评论中。
故障处理
如果工作流在 VM 运行前失败,先检查 Actions 任务。常见原因是不可信的 candidate_ref、缺少环境密钥或候选安装/构建失败。
如果 VM 运行失败但截图已复制回,检查:
bash
cat mantis-slack-desktop-smoke-report.md
cat mantis-slack-desktop-smoke-summary.json
cat slack-desktop-command.log
cat openclaw-gateway.log
cat chrome.log
cat ffmpeg.log如果运行保留了租约,用报告中的 crabbox vnc ... 命令打开 VNC。完成后停止租约:
bash
crabbox stop --provider aws <cbx_id-or-slug>如果 Slack 登录过期,在保留的租约上通过 VNC 修复,然后使用 --lease-id 重新运行。不要将该浏览器配置烘焙到 Provider 镜像中。
相关
常见问题
如何获取 Mantis Slack 桌面端测试的详细日志?
运行结束后,检查制品中的 mantis-slack-desktop-smoke-report.md、mantis-slack-desktop-smoke-summary.json,以及远程日志文件:slack-desktop-command.log、openclaw-gateway.log、chrome.log、ffmpeg.log。如果保留了租约,可通过 VNC 查看实时日志。
运行 Mantis 时如何保持 VM 不释放以便 VNC 救援?
本地 CLI 添加 --keep-lease 参数。GitHub Actions 将 keep_vm 设为 true(但需注意该 VM 会持续计费,直到手动停止)。
source 和 prehydrated 模式有什么区别,如何选择?
source模式:在 VM 内完整执行pnpm install和pnpm build,验证源码正确性,但速度最慢。适用于冷机器、CI 或首次跑 PR。prehydrated模式:跳过安装构建,前提是重用的工作区已包含node_modules和dist/。仅适用于操作者手动准备并重用的热租约,速度快但需要确认依赖已就绪。