Get started
Guia operacional do Mantis para o Slack Desktop
O QA de desktop do Slack no Mantis é a trilha de interface real para bugs da classe do Slack que precisam de um desktop Linux, recuperação por VNC, Slack Web, um Gateway real do OpenClaw, capturas de tela, vídeos e um comentário de evidências no PR. Use-o quando testes unitários ou a trilha live sem interface gráfica do Slack não puderem comprovar o bug.
Modelo de armazenamento
O Mantis usa três camadas de armazenamento:
- Imagem do provedor - gerenciada pelo Crabbox, armazenada na conta do provedor de nuvem. Contém recursos da máquina (Chrome/Chromium, ffmpeg, scrot, Node/corepack/pnpm, ferramentas de compilação nativas) e diretórios de cache vazios.
- Estado da concessão aquecida - gerenciado pela sessão atual do operador. Pode conter um
perfil de navegador autenticado,
/var/cache/crabbox/pnpme um checkout do código-fonte preparado enquanto a concessão estiver ativa. - Artefatos do Mantis - gerenciados pela execução do OpenClaw. Ficam em
.artifacts/qa-e2e/mantis/...; o GitHub Actions os envia, e o aplicativo do Mantis para GitHub publica as evidências em linha no PR.
Nunca incorpore segredos, cookies do navegador, estado de login do Slack, checkouts do repositório,
node_modules ou dist/ em uma imagem do provedor.
Disparo pelo GitHub
Execute o fluxo de trabalho 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=sourcecandidate_ref é restrito porque o fluxo de trabalho usa credenciais reais: ele
deve ser resolvido para um ancestral da main atual, uma tag de versão ou o HEAD de um PR aberto em
openclaw/openclaw.
O fluxo de trabalho produz:
- o artefato enviado
mantis-slack-desktop-smoke-<run-id>-<attempt> - um comentário em linha no PR pelo aplicativo do Mantis para GitHub
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- logs remotos:
slack-desktop-command.log,openclaw-gateway.log,chrome.log,ffmpeg.log
O comentário do PR é atualizado no mesmo local por meio do marcador oculto <!-- mantis-slack-desktop-smoke -->.
CLI local
Comprovação a frio a partir do código-fonte:
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 sourceMantenha a VM para recuperação por VNC:
pnpm openclaw qa mantis slack-desktop-smoke \ --provider aws \ --class standard \ --gateway-setup \ --scenario slack-canary \ --keep-leaseAbra o VNC:
crabbox vnc --provider aws --id <cbx_id> --openReutilize uma concessão aquecida:
pnpm openclaw qa mantis slack-desktop-smoke \ --provider aws \ --lease-id <cbx_id-or-slug> \ --gateway-setup \ --scenario slack-canary \ --hydrate-mode sourceUse --hydrate-mode prehydrated somente quando o espaço de trabalho remoto reutilizado já
tiver node_modules e um dist/ compilado; caso contrário, o Mantis falha de forma segura.
Comprove a interface nativa de aprovação do Slack:
pnpm openclaw qa mantis slack-desktop-smoke \ --provider aws \ --class standard \ --approval-checkpoints \ --credential-source convex \ --credential-role maintainer \ --hydrate-mode source--approval-checkpoints é mutuamente exclusivo com --gateway-setup. Ele executa
os cenários opcionais slack-approval-exec-native e slack-approval-plugin-native,
a menos que você forneça um --scenario explícito de ponto de verificação de aprovação; outros
cenários do Slack são rejeitados antes da inicialização da VM. O executor de QA do Slack grava
cada arquivo JSON de ponto de verificação a partir da mensagem real da API do Slack observada e, em seguida,
o observador remoto renderiza essa mensagem em
approval-checkpoints/<scenario>-pending.png e
approval-checkpoints/<scenario>-resolved.png. A execução falha se qualquer
JSON de ponto de verificação, evidência de mensagem, JSON de confirmação ou captura de tela renderizada estiver ausente
ou vazio.
As concessões a frio do GitHub Actions não têm cookies do Slack Web, portanto a captura do navegador
pode terminar na tela de login do Slack. Para a comprovação dos pontos de verificação de aprovação, confie nas
imagens renderizadas dos pontos de verificação e nos artefatos de QA do Slack, em vez de
slack-desktop-smoke.png. Use uma concessão aquecida mantida, com um perfil do Slack Web
autenticado manualmente, somente quando a própria captura de tela do navegador precisar mostrar o
Slack Web.
Modos de hidratação
| Modo | Use quando | Comportamento remoto | Compensação |
|---|---|---|---|
source |
Comprovação normal de PR, máquinas frias, CI | Executa pnpm install --frozen-lockfile --prefer-offline e pnpm build dentro da VM |
Mais lento, comprovação mais robusta do checkout do código-fonte |
prehydrated |
Você preparou intencionalmente uma concessão reutilizada | Exige node_modules e dist/ existentes; ignora instalação/compilação |
Rápido, mas válido apenas para concessões aquecidas controladas pelo operador |
O GitHub Actions sempre prepara o checkout candidato antes da execução da VM. O armazenamento do
pnpm é armazenado em cache por sistema operacional, versão do Node e arquivo de lock. A execução source da VM
também reutiliza /var/cache/crabbox/pnpm quando presente.
Interpretação dos tempos
mantis-slack-desktop-smoke-report.md inclui os tempos das fases:
crabbox.warmup- inicialização do provedor de nuvem, prontidão do desktop/navegador e SSH.crabbox.inspect- consulta dos metadados da concessão.credentials.prepare- aquisição da concessão de credenciais do Convex.crabbox.remote_run- sincronização, inicialização do navegador, instalação/compilação do OpenClaw ou validação da hidratação, inicialização do Gateway, captura de tela e gravação de vídeo.artifacts.copy- rsync de volta a partir da VM.
crabbox.remote_run pode exibir accepted quando o Crabbox retorna um status remoto
diferente de zero, mas o Mantis copiou metadados que comprovam que a configuração do Gateway do OpenClaw
foi concluída ou que o próprio comando de QA do Slack foi encerrado com êxito. Considere
accepted como aprovação com explicação, não como cenário com falha.
Se uma execução estiver lenta:
- O aquecimento predomina: pré-incorpore ou promova uma imagem melhor do provedor do Crabbox.
remote_runpredomina emsource: use uma concessão aquecida, melhore a reutilização do armazenamento do pnpm ou mova os pré-requisitos da máquina para a imagem do provedor.remote_runpredomina emprehydrated: o espaço de trabalho remoto não estava realmente pronto, ou a configuração do Gateway/navegador/Slack está lenta.- A cópia de artefatos predomina: inspecione o tamanho do vídeo e o conteúdo do diretório de artefatos.
Lista de verificação de evidências
Um bom comentário de PR mostra:
- ID do cenário e SHA candidato
- URL da execução do GitHub Actions e URL do artefato
- captura de tela em linha do ponto de verificação de aprovação ou uma captura de tela do Slack Web de uma concessão aquecida autenticada
- prévia animada em linha, quando disponível
- links para o MP4 completo e o MP4 recortado
- status de aprovação/falha e o resumo de tempos do relatório
Não faça commit de capturas de tela ou vídeos no repositório. Mantenha-os nos artefatos do GitHub Actions ou no comentário do PR.
Tratamento de falhas
Se o fluxo de trabalho falhar antes da execução da VM, inspecione primeiro o job do Actions.
Causas comuns: candidate_ref não confiável, segredos de ambiente ausentes ou falha na
instalação/compilação do candidato.
Se a execução da VM falhar, mas as capturas de tela tiverem sido copiadas de volta, inspecione:
cat mantis-slack-desktop-smoke-report.mdcat mantis-slack-desktop-smoke-summary.jsoncat slack-desktop-command.logcat openclaw-gateway.logcat chrome.logcat ffmpeg.logSe a execução manteve a concessão, abra o VNC com o comando crabbox vnc ...
do relatório e interrompa a concessão quando terminar:
crabbox stop --provider aws <cbx_id-or-slug>Se o login do Slack tiver expirado, corrija-o no VNC em uma concessão mantida e execute novamente com
--lease-id. Não incorpore esse perfil de navegador em uma imagem do provedor.