儲存模型
Mantis 使用三層儲存:- 提供者映像 - 由 Crabbox 擁有,儲存在雲端提供者帳戶中。 保存機器能力(Chrome/Chromium、ffmpeg、scrot、 Node/corepack/pnpm、原生建置工具)和空的快取目錄。
- 暖租約狀態 - 由目前的操作者工作階段擁有。可在租約存活期間保存
已登入的瀏覽器設定檔、
/var/cache/crabbox/pnpm,以及已準備好的原始碼 checkout。 - Mantis 成果物 - 由 OpenClaw 執行擁有。位於
.artifacts/qa-e2e/mantis/...;GitHub Actions 會上傳它們,而 Mantis GitHub App 會在 PR 上留言內嵌證據。
node_modules 或 dist/ 烘焙進提供者映像。
GitHub 派發
從main 執行工作流程:
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.mp4slack-desktop-smoke-preview.gif、slack-desktop-smoke-change.mp4mantis-slack-desktop-smoke-summary.json、mantis-slack-desktop-smoke-report.md- 遠端記錄:
slack-desktop-command.log、openclaw-gateway.log、chrome.log、ffmpeg.log
<!-- mantis-slack-desktop-smoke --> 標記原地更新。
本機命令列介面
冷原始碼證明:node_modules 和已建置的 dist/ 時,才使用
--hydrate-mode prehydrated;否則 Mantis 會關閉式失敗。
證明原生 Slack 核准 UI:
--approval-checkpoints 與 --gateway-setup 互斥。除非你傳入明確的
approval-checkpoint --scenario,否則它會執行選用的
slack-approval-exec-native 和 slack-approval-plugin-native 情境;其他
Slack 情境會在 VM 啟動前被拒絕。Slack QA 執行器會根據它觀察到的真實
Slack API 訊息寫入每個 checkpoint JSON 檔案,接著遠端 watcher 會將該訊息
轉譯為 approval-checkpoints/<scenario>-pending.png 和
approval-checkpoints/<scenario>-resolved.png。若任何 checkpoint JSON、訊息證據、
ack JSON 或已轉譯螢幕截圖遺失或為空,執行就會失敗。
冷 GitHub Actions 租約沒有 Slack Web Cookie,因此其瀏覽器擷取可能會停在
Slack 登入畫面。對於 approval-checkpoint 證明,請信任已轉譯的 checkpoint
圖片和 Slack QA 成果物,而不是 slack-desktop-smoke.png。只有在瀏覽器截圖
本身必須顯示 Slack Web 時,才使用保留且手動登入 Slack Web 設定檔的暖租約。
Hydrate 模式
| 模式 | 使用時機 | 遠端行為 | 取捨 |
|---|---|---|---|
source | 一般 PR 證明、冷機器、CI | 在 VM 內執行 pnpm install --frozen-lockfile --prefer-offline 和 pnpm build | 最慢、最強的原始碼 checkout 證明 |
prehydrated | 你刻意準備了重用租約 | 需要既有 node_modules 和 dist/;略過安裝/建置 | 快速,但只對操作者控制的暖租約有效 |
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。請將 accepted 視為帶有說明的通過,而不是失敗情境。
如果執行很慢:
- Warmup 佔主要時間:預先烘焙或提升更好的 Crabbox 提供者映像。
remote_run在source中佔主要時間:使用暖租約、改善 pnpm store 重用,或將機器前置需求移入提供者映像。remote_run在prehydrated中佔主要時間:遠端工作區實際上尚未就緒, 或閘道/瀏覽器/Slack 設定很慢。- 成果物複製佔主要時間:檢查影片大小和成果物目錄內容。
證據檢查清單
良好的 PR 留言會顯示:- 情境 ID 和候選 SHA
- GitHub Actions 執行 URL 和成果物 URL
- 內嵌 approval-checkpoint 螢幕截圖,或來自已登入暖租約的 Slack Web 螢幕截圖
- 可用時的內嵌動畫預覽
- 完整 MP4 和裁切後 MP4 連結
- 通過/失敗狀態和報告的時間摘要
失敗處理
如果工作流程在 VM 執行前失敗,請先檢查 Actions job。 常見原因:不受信任的candidate_ref、缺少環境秘密,或候選安裝/建置失敗。
如果 VM 執行失敗但螢幕截圖已複製回來,請檢查:
crabbox vnc ... 命令開啟 VNC,完成後停止租約:
--lease-id 重新執行。
不要將該瀏覽器設定檔烘焙進提供者映像。