Skip to main content
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/pnpm e 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=source
I 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.log e ffmpeg.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 source
Mantieni la VM per il recupero VNC:
pnpm openclaw qa mantis slack-desktop-smoke \
  --provider aws \
  --class standard \
  --gateway-setup \
  --scenario slack-canary \
  --keep-lease
Apri VNC:
crabbox vnc --provider aws --id <cbx_id> --open
Riusa 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 source
Usa --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 source
La 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 quandoComportamento remotoCompromesso
sourceProva normale di PR, macchine a freddo, CIEsegue pnpm install --frozen-lockfile --prefer-offline e pnpm build dentro la VMPiù lenta, prova più solida da checkout sorgente
prehydratedHai preparato intenzionalmente un lease riutilizzatoRichiede node_modules e dist/ esistenti; salta install/buildVeloce, 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.md
cat mantis-slack-desktop-smoke-summary.json
cat slack-desktop-command.log
cat openclaw-gateway.log
cat chrome.log
cat ffmpeg.log
Se 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.

Correlati