Get started

Manual de operações do Mantis Slack para desktop

QA de desktop Slack do Mantis é a lane de interface real para bugs da classe Slack que precisam de um desktop Linux, resgate por VNC, Slack Web, um Gateway OpenClaw real, capturas de tela, vídeos e um comentário de evidência no PR.

Use-a quando testes unitários ou a lane live sem interface do Slack não conseguirem comprovar o bug.

Modelo de armazenamento

O Mantis usa três camadas de armazenamento diferentes:

  • Imagem do provedor: de propriedade do Crabbox e armazenada na conta do provedor de nuvem. Ela contém capacidades da máquina, como Chrome/Chromium, ffmpeg, scrot, Node/corepack/pnpm, ferramentas nativas de build e diretórios de cache vazios.
  • Estado de lease aquecido: de propriedade da sessão atual do operador. Ele pode conter um perfil de navegador autenticado, /var/cache/crabbox/pnpm e um checkout de origem preparado enquanto o lease estiver ativo.
  • Artefatos do Mantis: de propriedade da execução do OpenClaw. Eles ficam em .artifacts/qa-e2e/mantis/..., depois o GitHub Actions faz upload deles e o GitHub App do Mantis comenta evidências inline no PR.

Nunca coloque segredos, cookies do navegador, estado de login do Slack, checkouts de repositório, node_modules ou dist/ em uma imagem de provedor pré-preparada.

Dispatch do GitHub

Execute o workflow a partir de 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

Os valores permitidos de candidate_ref são intencionalmente restritos porque o workflow usa credenciais live: ancestralidade atual de main, tags de release ou o head de um PR aberto de openclaw/openclaw.

O workflow grava:

  • artefato enviado: mantis-slack-desktop-smoke-<run-id>-<attempt>;
  • comentário inline no PR pelo GitHub App do Mantis;
  • 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;
  • logs remotos como slack-desktop-command.log, openclaw-gateway.log, chrome.log e ffmpeg.log.

O comentário do PR é atualizado no mesmo local pelo marcador oculto <!-- mantis-slack-desktop-smoke -->.

CLI local

Prova fria a partir da origem:

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

Mantenha a VM para resgate por VNC:

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

Abra o VNC:

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

Reutilize um lease aquecido:

pnpm openclaw qa mantis slack-desktop-smoke \
  --provider aws \
  --lease-id <cbx_id-or-slug> \
  --gateway-setup \
  --scenario slack-canary \
  --hydrate-mode source

Use --hydrate-mode prehydrated somente quando o workspace remoto reutilizado já tiver node_modules e um dist/ criado. O Mantis falha fechado se eles estiverem ausentes.

Modos de hidratação

Modo Use quando Comportamento remoto Tradeoff
source Prova normal de PR, máquinas frias, CI Executa pnpm install --frozen-lockfile --prefer-offline e pnpm build dentro da VM Mais lento, prova mais forte de checkout de origem
prehydrated Você preparou intencionalmente um lease reutilizado Exige node_modules e dist/ existentes; pula install/build Rápido, mas válido apenas para leases aquecidos controlados pelo operador

O GitHub Actions sempre prepara o checkout candidato antes da execução na VM. O store do pnpm é armazenado em cache por sistema operacional, versão do Node e lockfile. A execução de origem na VM também usa /var/cache/crabbox/pnpm quando presente.

Interpretação de tempo

mantis-slack-desktop-smoke-report.md inclui tempos por fase:

  • crabbox.warmup: boot do provedor de nuvem, prontidão do desktop/navegador e SSH.
  • crabbox.inspect: consulta de metadados do lease.
  • credentials.prepare: aquisição de lease de credenciais do Convex.
  • crabbox.remote_run: sync, inicialização do navegador, instalação/build do OpenClaw ou validação de hidratação, inicialização do Gateway, captura de tela e captura de vídeo.
  • artifacts.copy: rsync de volta a partir da VM.

crabbox.remote_run pode ser marcado como accepted quando o Crabbox retorna um status remoto diferente de zero depois que o Mantis copiou metadados comprovando que o Gateway OpenClaw está ativo e que a configuração foi concluída. Trate accepted como aprovação com explicação, não como um cenário com falha.

Se a execução estiver lenta:

  • warmup domina: pré-prepare ou promova uma imagem de provedor Crabbox melhor;
  • remote_run domina em source: use um lease aquecido, melhore a reutilização do store do pnpm ou mova pré-requisitos da máquina para a imagem do provedor;
  • remote_run domina em prehydrated: o workspace remoto não estava realmente pronto, ou a configuração do Gateway/navegador/Slack está lenta;
  • cópia de artefatos domina: inspecione o tamanho do vídeo e o conteúdo do diretório de artefatos.

Checklist de evidências

Um bom comentário de PR deve mostrar:

  • id do cenário e SHA candidato;
  • URL da execução do GitHub Actions;
  • URL do artefato;
  • captura de tela inline;
  • prévia animada inline quando disponível;
  • links para o MP4 completo e o MP4 recortado;
  • status de aprovação/falha;
  • resumo de tempos no relatório anexado.

Não faça commit de capturas de tela ou vídeos no repositório. Mantenha-os em artefatos do GitHub Actions ou no comentário do PR.

Tratamento de falhas

Se o workflow falhar antes da execução na VM, inspecione primeiro o job do Actions. Causas típicas são candidate_ref não confiável, segredos de ambiente ausentes ou falha de install/build do candidato.

Se a execução na VM falhar, mas as capturas de tela tiverem sido copiadas de volta, inspecione:

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 a execução manteve o lease, abra o VNC com o comando crabbox vnc ... do relatório. Pare o lease quando terminar:

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

Se o login do Slack expirou, repare-o no VNC em um lease mantido e execute novamente com --lease-id. Não incorpore esse perfil de navegador em uma imagem de provedor.

Relacionados