Modèle de stockage
Mantis utilise trois couches de stockage différentes :- Image du fournisseur : propriété de Crabbox et stockée dans le compte du fournisseur cloud. Elle contient des capacités machine comme Chrome/Chromium, ffmpeg, scrot, Node/corepack/pnpm, les outils de compilation natifs et des répertoires de cache vides.
- État de réservation chaude : propriété de la session opérateur actuelle. Il peut contenir un
profil de navigateur connecté,
/var/cache/crabbox/pnpmet un checkout source préparé tant que la réservation est active. - Artefacts Mantis : propriété de l’exécution OpenClaw. Ils résident sous
.artifacts/qa-e2e/mantis/..., puis GitHub Actions les téléverse et la Mantis GitHub App commente les preuves en ligne sur la PR.
node_modules ni dist/ dans une image fournisseur précuite.
Déclenchement GitHub
Exécutez le flux de travail depuismain :
candidate_ref sont volontairement limitées, car le flux de travail
utilise des identifiants live : ascendance actuelle de main, tags de publication ou tête d’une PR ouverte
depuis openclaw/openclaw.
Le flux de travail écrit :
- artefact téléversé :
mantis-slack-desktop-smoke-<run-id>-<attempt>; - commentaire de PR en ligne depuis la 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;- journaux distants comme
slack-desktop-command.log,openclaw-gateway.log,chrome.logetffmpeg.log.
<!-- mantis-slack-desktop-smoke -->.
CLI locale
Preuve source à froid :--hydrate-mode prehydrated uniquement lorsque l’espace de travail distant réutilisé
dispose déjà de node_modules et d’un dist/ compilé. Mantis échoue en mode fermé s’ils
sont absents.
Prouver l’interface d’approbation Slack native :
--gateway-setup. Il exécute
les scénarios optionnels slack-approval-exec-native et slack-approval-plugin-native,
sauf si vous passez des indicateurs --scenario explicites pour les points de contrôle d’approbation ; les autres
scénarios Slack sont rejetés avant le démarrage de la VM. Le lanceur Slack QA écrit
chaque fichier JSON de point de contrôle à partir du vrai message d’API Slack qu’il a observé, puis le
surveillant distant rend cet instantané de message dans
approval-checkpoints/<scenario>-pending.png et
approval-checkpoints/<scenario>-resolved.png. L’exécution échoue si un JSON de point de contrôle,
une preuve de message, un JSON d’accusé de réception ou une capture d’écran rendue est manquant ou vide.
Les réservations GitHub Actions à froid n’ont pas de cookies Slack Web, donc leur capture
de navigateur peut arriver sur la page de connexion Slack. Pour la preuve de point de contrôle d’approbation, fiez-vous aux
images de point de contrôle rendues et aux artefacts Slack QA plutôt qu’à
slack-desktop-smoke.png. Utilisez une réservation chaude conservée avec un profil Slack Web
connecté manuellement uniquement lorsque la capture d’écran du navigateur elle-même doit montrer Slack Web.
Modes d’hydratation
| Mode | À utiliser lorsque | Comportement distant | Compromis |
|---|---|---|---|
source | Preuve normale de PR, machines froides, CI | Exécute pnpm install --frozen-lockfile --prefer-offline et pnpm build dans la VM | Le plus lent, preuve de checkout source la plus robuste |
prehydrated | Vous avez préparé volontairement une réservation réutilisée | Nécessite des node_modules et un dist/ existants ; saute installation/compilation | Rapide, mais valide uniquement pour les réservations chaudes contrôlées par l’opérateur |
/var/cache/crabbox/pnpm lorsqu’il est présent.
Interprétation des durées
mantis-slack-desktop-smoke-report.md inclut les durées par phase :
crabbox.warmup: démarrage du fournisseur cloud, disponibilité du bureau/navigateur et SSH.crabbox.inspect: recherche des métadonnées de réservation.credentials.prepare: acquisition de la réservation d’identifiants Convex.crabbox.remote_run: synchronisation, lancement du navigateur, installation/compilation OpenClaw ou validation de l’hydratation, démarrage du Gateway, capture d’écran et capture vidéo.artifacts.copy: rsync de retour depuis la VM.
crabbox.remote_run peut être marqué accepted lorsque Crabbox renvoie un statut distant
non nul après que Mantis a copié les métadonnées prouvant que soit la configuration du Gateway OpenClaw
s’est terminée, soit la commande Slack QA elle-même s’est terminée avec succès.
Traitez accepted comme une réussite avec explication, pas comme un scénario échoué.
Si l’exécution est lente :
- warmup domine : précuisez ou promouvez une meilleure image fournisseur Crabbox ;
- remote_run domine en mode
source: utilisez une réservation chaude, améliorez la réutilisation du store pnpm ou déplacez les prérequis machine dans l’image fournisseur ; - remote_run domine en mode
prehydrated: l’espace de travail distant n’était pas réellement prêt, ou la configuration du Gateway/navigateur/Slack est lente ; - la copie d’artefacts domine : inspectez la taille des vidéos et le contenu du répertoire d’artefacts.
Liste de contrôle des preuves
Un bon commentaire de PR doit montrer :- l’id de scénario et le SHA candidat ;
- l’URL d’exécution GitHub Actions ;
- l’URL d’artefact ;
- une capture d’écran de point de contrôle d’approbation en ligne, ou une capture d’écran Slack Web depuis une réservation chaude connectée ;
- un aperçu animé en ligne lorsqu’il est disponible ;
- les liens MP4 complet et MP4 tronqué ;
- le statut réussite/échec ;
- le résumé des durées dans le rapport joint.
Gestion des échecs
Si le flux de travail échoue avant l’exécution dans la VM, inspectez d’abord le job Actions. Les causes typiques sont uncandidate_ref non approuvé, des secrets d’environnement manquants ou un échec
d’installation/compilation du candidat.
Si l’exécution dans la VM échoue mais que les captures d’écran ont été recopiées, inspectez :
crabbox vnc ... du rapport.
Arrêtez la réservation une fois terminé :
--lease-id. N’intégrez pas ce profil de navigateur dans une image fournisseur.