Get started
Runbook desktop Slack di Mantis
Mantis Slack desktop QA è la corsia con UI reale per i bug di classe Slack che richiedono un desktop Linux, recupero VNC, Slack Web, un vero Gateway OpenClaw, screenshot, video e un commento di evidenza sulla PR.
Usala quando gli unit test o la corsia live Slack headless non possono dimostrare il bug.
Modello di archiviazione
Mantis usa tre diversi livelli di archiviazione:
- Immagine del provider: di proprietà di Crabbox e archiviata nell'account del provider cloud. Contiene capacità della macchina come Chrome/Chromium, ffmpeg, scrot, Node/corepack/pnpm, strumenti di build nativi e directory di cache vuote.
- Stato del lease caldo: di proprietà della sessione dell'operatore corrente. Può contenere un
profilo browser con accesso effettuato,
/var/cache/crabbox/pnpme un checkout sorgente preparato mentre il lease è attivo. - Artefatti Mantis: di proprietà dell'esecuzione OpenClaw. Si trovano in
.artifacts/qa-e2e/mantis/..., poi GitHub Actions li carica e la Mantis GitHub App commenta le evidenze inline sulla PR.
Non inserire mai segreti, cookie del browser, stato di accesso Slack, checkout del repository,
node_modules o dist/ in un'immagine provider preconfezionata.
Dispatch GitHub
Esegui il workflow da main:
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=sourceI valori consentiti per candidate_ref sono intenzionalmente limitati perché il workflow
usa credenziali live: ascendenza dell'attuale main, tag di release o head di una PR aperta
da openclaw/openclaw.
Il workflow scrive:
- artefatto caricato:
mantis-slack-desktop-smoke-<run-id>-<attempt>; - commento inline sulla PR dalla Mantis GitHub App;
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;- log remoti come
slack-desktop-command.log,openclaw-gateway.log,chrome.logeffmpeg.log.
Il commento sulla PR viene aggiornato sul posto tramite il marker nascosto
<!-- mantis-slack-desktop-smoke -->.
CLI locale
Prova a freddo dai sorgenti:
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 sourceMantieni la VM per il recupero VNC:
pnpm openclaw qa mantis slack-desktop-smoke \ --provider aws \ --class standard \ --gateway-setup \ --scenario slack-canary \ --keep-leaseApri VNC:
crabbox vnc --provider aws --id <cbx_id> --openRiusa un lease caldo:
pnpm openclaw qa mantis slack-desktop-smoke \ --provider aws \ --lease-id <cbx_id-or-slug> \ --gateway-setup \ --scenario slack-canary \ --hydrate-mode sourceUsa --hydrate-mode prehydrated solo quando lo spazio di lavoro remoto riutilizzato ha già
node_modules e un dist/ compilato. Mantis fallisce in modo restrittivo se mancano.
Dimostra la UI di approvazione Slack nativa:
pnpm openclaw qa mantis slack-desktop-smoke \ --provider aws \ --class standard \ --approval-checkpoints \ --credential-source convex \ --credential-role maintainer \ --hydrate-mode sourceLa modalità checkpoint di approvazione è mutuamente esclusiva con --gateway-setup. Esegue
gli scenari opzionali slack-approval-exec-native e slack-approval-plugin-native
a meno che tu non passi flag --scenario espliciti per i checkpoint di approvazione; gli altri
scenari Slack vengono rifiutati prima dell'avvio della VM. Il runner QA Slack scrive
ogni file JSON di checkpoint dal messaggio reale dell'API Slack che ha osservato, poi il
watcher remoto rende quello snapshot del messaggio in
approval-checkpoints/<scenario>-pending.png e
approval-checkpoints/<scenario>-resolved.png. L'esecuzione fallisce se qualsiasi JSON
di checkpoint, evidenza del messaggio, JSON di ack o screenshot renderizzato manca o è vuoto.
I lease a freddo di GitHub Actions non hanno cookie Slack Web, quindi la loro acquisizione
browser può finire sulla schermata di accesso Slack. Per la prova dei checkpoint di approvazione, affidati alle
immagini dei checkpoint renderizzate e agli artefatti QA Slack invece che a
slack-desktop-smoke.png. Usa un lease caldo mantenuto con un profilo Slack Web
su cui è stato effettuato l'accesso manualmente solo quando lo screenshot del browser deve mostrare Slack Web.
Modalità di idratazione
| Modalità | Usala quando | Comportamento remoto | Compromesso |
|---|---|---|---|
source |
Prova normale di PR, macchine a freddo, CI | Esegue pnpm install --frozen-lockfile --prefer-offline e pnpm build dentro la VM |
Più lenta, prova più solida da checkout sorgente |
prehydrated |
Hai preparato intenzionalmente un lease riutilizzato | Richiede node_modules e dist/ esistenti; salta install/build |
Veloce, ma valida solo per lease caldi controllati dall'operatore |
GitHub Actions prepara sempre il checkout candidato prima dell'esecuzione nella VM. Il suo
store pnpm viene memorizzato in cache per sistema operativo, versione Node e lockfile. Anche l'esecuzione sorgente nella VM
usa /var/cache/crabbox/pnpm quando presente.
Interpretazione dei tempi
mantis-slack-desktop-smoke-report.md include i tempi delle fasi:
crabbox.warmup: avvio del provider cloud, prontezza di desktop/browser e SSH.crabbox.inspect: ricerca dei metadati del lease.credentials.prepare: acquisizione del lease delle credenziali Convex.crabbox.remote_run: sincronizzazione, avvio del browser, install/build OpenClaw o convalida dell'idratazione, avvio del Gateway, screenshot e acquisizione video.artifacts.copy: rsync di ritorno dalla VM.
crabbox.remote_run può essere contrassegnato come accepted quando Crabbox restituisce uno stato
remoto diverso da zero dopo che Mantis ha copiato metadati che dimostrano che la configurazione del Gateway
OpenClaw è stata completata oppure che il comando QA Slack stesso è uscito correttamente.
Tratta accepted come superato con spiegazione, non come scenario fallito.
Se l'esecuzione è lenta:
- domina warmup: preconfeziona o promuovi un'immagine provider Crabbox migliore;
- domina remote_run in
source: usa un lease caldo, migliora il riuso dello store pnpm o sposta i prerequisiti della macchina nell'immagine provider; - domina remote_run in
prehydrated: lo spazio di lavoro remoto non era effettivamente pronto, oppure la configurazione di Gateway/browser/Slack è lenta; - domina la copia degli artefatti: ispeziona la dimensione del video e il contenuto della directory artefatti.
Checklist delle evidenze
Un buon commento sulla PR dovrebbe mostrare:
- id scenario e SHA candidato;
- URL dell'esecuzione GitHub Actions;
- URL dell'artefatto;
- screenshot inline del checkpoint di approvazione, oppure uno screenshot Slack Web da un lease caldo con accesso effettuato;
- anteprima animata inline quando disponibile;
- link all'MP4 completo e all'MP4 ritagliato;
- stato superato/fallito;
- riepilogo dei tempi nel report allegato.
Non committare screenshot o video nel repository. Mantienili negli artefatti GitHub Actions o nel commento sulla PR.
Gestione degli errori
Se il workflow fallisce prima dell'esecuzione nella VM, ispeziona prima il job Actions. Le cause tipiche
sono candidate_ref non attendibile, segreti di ambiente mancanti o fallimento di install/build del candidato.
Se l'esecuzione nella VM fallisce ma gli screenshot sono stati copiati indietro, ispeziona:
cat mantis-slack-desktop-smoke-report.mdcat mantis-slack-desktop-smoke-summary.jsoncat slack-desktop-command.logcat openclaw-gateway.logcat chrome.logcat ffmpeg.logSe l'esecuzione ha mantenuto il lease, apri VNC con il comando crabbox vnc ... del report.
Arresta il lease al termine:
crabbox stop --provider aws <cbx_id-or-slug>Se l'accesso Slack è scaduto, riparalo in VNC su un lease mantenuto e riesegui con
--lease-id. Non incorporare quel profilo browser in un'immagine provider.