Skip to content

Mantis Slack desktop runbook

Mantis Slack 桌面版 QA 是針對需要 Linux 桌面、VNC 救援、Slack Web、真正的 OpenClaw 閘道、螢幕截圖、影片以及 PR 證據註解的 Slack 級別錯誤的真實 UI 通道。

當單元測試或無頭 Slack 即時通道無法證明該錯誤時,請使用此通道。

Mantis 使用三種不同的儲存層:

  • 提供者映像檔:由 Crabbox 擁有並儲存在雲端提供者帳戶中。 它包含機器功能,例如 Chrome/Chromium、ffmpeg、scrot、 Node/corepack/pnpm、原生建置工具以及空的快取目錄。
  • Warm lease 狀態:由目前操作員 session 擁有。在租約存續期間,它可以包含已登入的瀏覽器設定檔、/var/cache/crabbox/pnpm,以及準備好的來源 checkout。
  • Mantis 產出成果:由 OpenClaw 執行擁有。它們位於 .artifacts/qa-e2e/mantis/... 下,接著 GitHub Actions 會將其上傳,且 Mantis GitHub App 會在 PR 上評論內嵌證據。

切勿將機密、瀏覽器 Cookie、Slack 登入狀態、儲存庫 checkout、node_modulesdist/ 放入預先建置的提供者映像檔中。

main 執行工作流程:

Terminal window
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 head。

工作流程會寫入:

  • 已上傳的產出成果:mantis-slack-desktop-smoke-<run-id>-<attempt>
  • 來自 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 --> 標記就地更新。

冷來源驗證:

Terminal window
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 救援:

Terminal window
pnpm openclaw qa mantis slack-desktop-smoke \
--provider aws \
--class standard \
--gateway-setup \
--scenario slack-canary \
--keep-lease

開啟 VNC:

Terminal window
crabbox vnc --provider aws --id <cbx_id> --open

重用溫熱租用:

Terminal window
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 將會以封閉式失敗結束。

驗證原生 Slack 核准 UI:

Terminal window
pnpm openclaw qa mantis slack-desktop-smoke \
--provider aws \
--class standard \
--approval-checkpoints \
--credential-source convex \
--credential-role maintainer \
--hydrate-mode source

Approval checkpoint 模式與 --gateway-setup 互斥。除非您傳遞明確的 approval checkpoint --scenario 標誌,否則它會執行 opt-in 的 slack-approval-exec-nativeslack-approval-plugin-native 情境;其他的 Slack 情境會在 VM 啟動前被拒絕。Slack QA runner 會根據觀察到的真實 Slack API 訊息寫入每個 checkpoint JSON 檔案,然後遠端監看器會將該訊息快照渲染為 approval-checkpoints/<scenario>-pending.pngapproval-checkpoints/<scenario>-resolved.png。如果缺少任何 checkpoint JSON、訊息證據、ack JSON 或渲染後的螢幕截圖,或是這些檔案為空,則執行會失敗。

Cold GitHub Actions 租用沒有 Slack Web cookies,因此它們的瀏覽器擷取可能會停留在 Slack 登入頁面。對於 approval checkpoint 證明,請信任渲染後的 checkpoint 影像和 Slack QA 成果,而不是 slack-desktop-smoke.png。只有在瀏覽器螢幕截圖本身必須顯示 Slack Web 時,才使用保留的溫租用 (warm lease) 搭配手動登入的 Slack Web 設定檔。

模式使用時機遠端行為權衡
source一般 PR 證明、冷機器、CI在 VM 內執行 pnpm install --frozen-lockfile --prefer-offlinepnpm build最慢,最強的 source-checkout 證明
prehydrated您刻意準備了可重複使用的租用需要現有的 node_modulesdist/;跳過安裝/建構快速,但僅適用於操作員控制的溫租用

GitHub Actions 總是在 VM 執行前準備候選的 checkout。其 pnpm store 會依 OS、Node 版本和 lockfile 進行快取。VM source 執行也會在存在時使用 /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.remote_run 可以被標記為 accepted,前提是 Crabbox 在 Mantis 複製了證明 OpenClaw 網關設定已完成或 Slack QA 指令本身已成功退出的元數據後,返回非零的 遠端狀態。 將 accepted 視為帶解釋的通過,而非失敗的場景。

如果運行速度較慢:

  • warmup 佔主導:預先烘焙或升級更好的 Crabbox provider 映像檔;
  • remote_run 在 source 中佔主導:使用 warm lease,改善 pnpm store 的重複使用, 或將機器前置需求移入 provider 映像檔中;
  • remote_run 在 prehydrated 中佔主導:遠端工作空間實際上並未 準備就緒,或是 gateway/browser/Slack 設定緩慢;
  • artifact copy 佔主導:檢查影片大小和 artifact 目錄內容。

一個好的 PR 評論應該顯示:

  • scenario id 和 candidate SHA;
  • GitHub Actions run URL;
  • artifact URL;
  • inline approval checkpoint 截圖,或是來自已登入 warm lease 的 Slack Web 截圖;
  • inline 動畫預覽(如果可用);
  • 完整 MP4 和裁剪後的 MP4 連結;
  • pass/fail 狀態;
  • 附加報告中的時間摘要。

請勿將截圖或影片提交到儲存庫中。請將它們保留在 GitHub Actions artifacts 或 PR 評論中。

如果 workflow 在 VM 執行之前失敗,請先檢查 Actions job。典型 原因是不受信任的 candidate_ref、遺失環境 secrets,或是 candidate 安裝/建置失敗。

如果 VM 執行失敗但截圖已被複製回來,請檢查:

Terminal window
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

如果執行保留了 lease,請使用報告中的 crabbox vnc ... 指令開啟 VNC。 完成後停止 lease:

Terminal window
crabbox stop --provider aws <cbx_id-or-slug>

如果 Slack 登入過期,請在保留的 lease 上透過 VNC 修復並使用 --lease-id 重新執行。請勿將該瀏覽器設定檔烘焙到 provider 映像檔中。