Skip to content

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_modulesdist/ 放入预制的 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=source

candidate_ref 允许的值范围很窄(因工作流使用实时凭据):当前 main 的祖先、发布标签,或来自 openclaw/openclaw 的开放 PR 头部。

工作流生成:

  • 上传的制品:mantis-slack-desktop-smoke-&lt;run-id&gt;-&lt;attempt&gt;
  • 来自 Mantis GitHub App 的内联 PR 评论
  • 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.logopenclaw-gateway.logchrome.logffmpeg.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-offlinepnpm build最慢,但源码签出验证最强
prehydrated你特意准备好了可重用的租约要求已有 node_modulesdist/;跳过 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.mdmantis-slack-desktop-smoke-summary.json,以及远程日志文件:slack-desktop-command.logopenclaw-gateway.logchrome.logffmpeg.log。如果保留了租约,可通过 VNC 查看实时日志。

运行 Mantis 时如何保持 VM 不释放以便 VNC 救援?

本地 CLI 添加 --keep-lease 参数。GitHub Actions 将 keep_vm 设为 true(但需注意该 VM 会持续计费,直到手动停止)。

source 和 prehydrated 模式有什么区别,如何选择?

  • source 模式:在 VM 内完整执行 pnpm installpnpm build,验证源码正确性,但速度最慢。适用于冷机器、CI 或首次跑 PR。
  • prehydrated 模式:跳过安装构建,前提是重用的工作区已包含 node_modulesdist/。仅适用于操作者手动准备并重用的热租约,速度快但需要确认依赖已就绪。