Objectifs
- Reproduire un bug depuis une issue ou une PR GitHub avec la même forme de transport que celle que les utilisateurs voient.
- Capturer un artefact avant sur la référence de base avant d’appliquer le correctif.
- Capturer un artefact après sur la référence candidate après avoir appliqué le correctif.
- Utiliser un oracle déterministe chaque fois que possible, comme une lecture de réaction Discord REST ou une vérification de transcript de canal.
- Capturer des captures d’écran lorsque le bug a une surface d’interface visible.
- Exécuter localement depuis une CLI contrôlée par agent et à distance depuis GitHub.
- Préserver suffisamment d’état machine pour un secours VNC lorsque la connexion, l’automatisation du navigateur ou l’authentification fournisseur se bloque.
- Publier un état concis dans un canal Discord opérateur lorsque l’exécution est bloquée, nécessite une aide VNC manuelle ou se termine.
Non-objectifs
- Mantis ne remplace pas les tests unitaires. Une exécution Mantis doit généralement devenir un test de régression plus petit une fois le correctif compris.
- Mantis n’est pas la porte CI rapide normale. Il est plus lent, utilise des identifiants réels et est réservé aux bugs où l’environnement réel compte.
- Mantis ne doit pas nécessiter d’humain pour un fonctionnement normal. Le VNC manuel est un chemin de secours, pas le chemin attendu.
- Mantis ne stocke pas de secrets bruts dans les artefacts, journaux, captures d’écran, rapports Markdown ou commentaires de PR.
Propriété
Mantis vit dans la pile QA d’OpenClaw.- OpenClaw possède le runtime de scénario, les adaptateurs de transport, le schéma de preuves et la
CLI locale sous
pnpm openclaw qa mantis. - QA Lab possède les composants du harnais de transport réel, les assistants de capture navigateur et les écrivains d’artefacts.
- Crabbox possède les machines Linux préchauffées lorsqu’une VM distante est nécessaire.
- GitHub Actions possède le point d’entrée du workflow distant et la rétention des artefacts.
- ClawSweeper possède le routage des commentaires GitHub : analyse des commandes mainteneur, déclenchement du workflow et publication du commentaire final de PR.
- Les agents OpenClaw pilotent Mantis via Codex lorsqu’un scénario nécessite une configuration agentique, du débogage ou un signalement d’état bloqué.
Forme de commande
La première commande locale vérifie le bot Discord, la guilde, le canal, l’envoi de message, l’envoi de réaction et le chemin d’artefact :--allow-failures, puis écrit baseline/, candidate/, comparison.json,
et mantis-report.md. Pour le premier scénario Discord, une vérification réussie
signifie que l’état de base est fail et que l’état candidat est pass.
La seconde sonde Discord avant/après cible les pièces jointes de fils :
message.thread-reply d’OpenClaw avec un filePath local au dépôt,
puis interroge le fil pour trouver la réponse du SUT et le nom de fichier de la pièce jointe. La
capture d’écran de base montre la réponse sans pièce jointe ; la capture d’écran candidate
montre la pièce jointe mantis-thread-report.md attendue.
La première primitive VM/navigateur est le smoke desktop :
--provider, --crabbox-bin ou
OPENCLAW_MANTIS_CRABBOX_PROVIDER lors de l’exécution contre une autre flotte Crabbox.
Indicateurs utiles pour le smoke desktop :
--lease-id <cbx_...>ouOPENCLAW_MANTIS_CRABBOX_LEASE_IDréutilise un desktop préchauffé.--browser-url <url>change la page ouverte dans le navigateur visible.--html-file <path>rend un artefact HTML local au dépôt dans le navigateur visible. Mantis l’utilise pour capturer la timeline générée des réactions d’état Discord via un vrai desktop Crabbox.--browser-profile-dir <remote-path>réutilise un user-data-dir Chrome distant afin qu’un desktop Mantis persistant puisse rester connecté entre les exécutions. Utilisez-le pour le profil de visionneuse Discord Web de longue durée.--browser-profile-archive-env <name>restaure une archive user-data-dir Chrome.tgzen base64 depuis la variable d’environnement nommée avant de lancer le navigateur. Utilisez-le pour les témoins connectés comme Discord Web. La variable d’environnement par défaut estOPENCLAW_MANTIS_BROWSER_PROFILE_TGZ_B64.--video-duration <seconds>contrôle la durée de capture MP4. Utilisez une durée plus longue pour les applications web connectées lentes qui ont besoin de temps pour se stabiliser.--keep-leaseouOPENCLAW_MANTIS_KEEP_VM=1garde ouverte une location nouvellement créée et réussie pour inspection VNC. Les exécutions échouées gardent la location par défaut lorsqu’une location a été créée afin qu’un opérateur puisse se reconnecter.--class,--idle-timeoutet--ttlrèglent la taille de la machine et la durée de vie de la location.
thread-reply du SUT et vérifie la pièce jointe via Discord
REST. Lorsque OPENCLAW_QA_DISCORD_CAPTURE_UI_METADATA=1 est défini, le scénario écrit aussi
un artefact d’URL Discord Web. Lorsque OPENCLAW_QA_DISCORD_KEEP_THREADS=1 est
défini, il laisse ce fil disponible assez longtemps pour qu’un navigateur connecté puisse l’ouvrir
et l’enregistrer.
Le workflow GitHub ouvre l’URL du fil candidat dans Discord Web, capture une
capture d’écran, enregistre un MP4 et génère un aperçu GIF tronqué au mouvement lorsque l’outillage
média Crabbox est disponible. Préférez un chemin de profil visionneuse persistant configuré
via MANTIS_DISCORD_VIEWER_CHROME_PROFILE_DIR, parce que les archives de profil Chrome complètes
peuvent dépasser la limite de taille des secrets GitHub. Pour les petits profils ou les profils d’amorçage,
le workflow peut aussi restaurer une archive .tgz en base64 depuis
MANTIS_DISCORD_VIEWER_CHROME_PROFILE_TGZ_B64. Si aucune source de profil n’est
configurée, le workflow publie tout de même les captures d’écran déterministes des pièces jointes
de base/candidate et journalise un avis indiquant que le témoin Discord Web connecté
a été ignoré.
La première primitive complète de transport desktop est le smoke desktop Slack :
pnpm openclaw qa slack dans cette VM, ouvre Slack Web dans le navigateur
VNC, capture le desktop visible et copie à la fois les artefacts QA Slack et
la capture d’écran VNC dans le répertoire de sortie local. C’est la première forme Mantis
où le Gateway OpenClaw SUT et le navigateur vivent tous deux dans la même
VM desktop Linux.
Avec --gateway-setup, la commande prépare un home OpenClaw jetable persistant
à $HOME/.openclaw-mantis/slack-openclaw, patche la configuration Slack Socket Mode
pour le canal sélectionné, démarre openclaw gateway run sur le port
38973 et garde Chrome actif dans la session VNC. C’est le mode « laissez-moi un
desktop Linux avec Slack et une claw en cours d’exécution » ; la voie QA Slack bot à bot
reste la valeur par défaut lorsque --gateway-setup est omis.
Entrées requises pour --credential-source env :
OPENCLAW_QA_SLACK_CHANNEL_IDOPENCLAW_QA_SLACK_DRIVER_BOT_TOKENOPENCLAW_QA_SLACK_SUT_BOT_TOKENOPENCLAW_QA_SLACK_SUT_APP_TOKENOPENCLAW_LIVE_OPENAI_KEYpour la voie modèle distante. Si seulOPENAI_API_KEYest défini localement, Mantis le mappe versOPENCLAW_LIVE_OPENAI_KEYavant d’invoquer Crabbox afin que le transfert d’environnementOPENCLAW_*de Crabbox puisse l’emporter dans la VM.
--gateway-setup --credential-source convex, Mantis loue les identifiants Slack SUT
depuis le pool partagé avant de créer la VM et transfère l’id de canal loué,
le jeton d’application Socket Mode et le jeton de bot comme environnement runtime OPENCLAW_MANTIS_SLACK_*
dans le desktop. Cela garde les workflows GitHub légers : ils n’ont besoin que
du secret de courtier Convex, pas des jetons bruts de bot ou d’application Slack.
Indicateurs utiles pour le desktop Slack :
--lease-id <cbx_...>relance sur une machine où un opérateur s’est déjà connecté à Slack Web via VNC.--gateway-setupdémarre un Gateway Slack OpenClaw persistant dans la VM au lieu d’exécuter seulement la voie QA bot à bot.--keep-leasegarde la VM Gateway ouverte pour inspection VNC après réussite ;--no-keep-leasel’arrête après la collecte des artefacts.--slack-url <url>ouvre une URL Slack Web spécifique. Sans cela, Mantis dérivehttps://app.slack.com/client/<team>/<channel>depuis Slackauth.testlorsque le jeton de bot SUT est disponible.--slack-channel-id <id>contrôle la liste d’autorisation des canaux Slack utilisée par la configuration Gateway.OPENCLAW_MANTIS_SLACK_BROWSER_PROFILE_DIRcontrôle le profil Chrome persistant dans la VM. La valeur par défaut est$HOME/.config/openclaw-mantis/slack-chrome-profile, afin qu’une connexion Slack Web manuelle survive aux réexécutions sur la même location.--credential-source convex --credential-role ciutilise le pool d’identifiants partagé au lieu de jetons Slack d’environnement directs.--provider-mode,--model,--alt-modelet--fastsont transmis à la voie live Slack.
slack-desktop-smoke.png n’est une preuve de Slack Web
que lorsque la location utilise un profil de navigateur chaud déjà connecté.
Le workflow de smoke GitHub est Mantis Discord Smoke. Le workflow GitHub avant et après
pour le premier vrai scénario est Mantis Discord Status Reactions. Il
accepte :
baseline_ref: la référence censée reproduire le comportement uniquement en file d’attente.candidate_ref: la référence censée afficherqueued -> thinking -> done.
discord-status-reactions-tool-only contre chaque worktree et
téléverse baseline/, candidate/, comparison.json et mantis-report.md comme
artefacts Actions. Il rend aussi le HTML de timeline de chaque voie dans un navigateur desktop
Crabbox et publie ces captures d’écran VNC à côté des PNG de timeline déterministes
dans le commentaire de PR. Le même commentaire de PR intègre des aperçus GIF légers
tronqués au mouvement générés par crabbox media preview, lie les clips MP4
tronqués au mouvement correspondants et conserve les fichiers MP4 desktop complets pour une inspection
approfondie. Les captures d’écran restent en ligne pour une revue rapide. Le workflow construit la
CLI Crabbox depuis la branche main de
openclaw/crabbox afin de pouvoir utiliser les indicateurs actuels de location desktop/navigateur
avant la prochaine publication du binaire Crabbox.
Mantis Scenario est le point d’entrée manuel générique. Il prend un scenario_id,
un candidate_ref, un baseline_ref facultatif et un pr_number facultatif, puis
déclenche le workflow détenu par le scénario. Le wrapper est volontairement léger :
les workflows de scénario restent responsables de leur configuration de transport, de leurs identifiants, de leur classe de VM,
de l’oracle attendu et du manifeste d’artefacts.
Mantis Slack Desktop Smoke est le premier workflow VM Slack. Il extrait la ref de
candidat approuvée dans un worktree séparé, loue un bureau Linux Crabbox,
exécute pnpm openclaw qa mantis slack-desktop-smoke --gateway-setup sur ce
candidat, ouvre Slack Web dans le navigateur VNC, enregistre le bureau, génère un
aperçu rogné sur le mouvement avec crabbox media preview, téléverse le répertoire complet
des artefacts et publie facultativement le commentaire de preuve intégré sur la PR cible.
Il utilise AWS par défaut pour la location du bureau et expose une entrée manuelle de fournisseur afin que
les opérateurs puissent basculer vers Hetzner lorsque la capacité AWS est lente ou indisponible. Utilisez
cette voie lorsque vous voulez « un bureau Linux avec Slack et un agent OpenClaw en cours d’exécution » au lieu
d’un simple transcript Slack de bot à bot.
Mantis Telegram Live encapsule la voie d’assurance qualité Telegram live existante dans le même pipeline de
preuve de PR. Il extrait la ref de candidat approuvée dans un worktree séparé,
exécute pnpm openclaw qa telegram --credential-source convex --credential-role ci, écrit un manifeste mantis-evidence.json à partir du
récapitulatif d’assurance qualité Telegram, de qa-evidence.json et des artefacts de rapport, rend le
HTML de preuve expurgé via un navigateur de bureau Crabbox, génère un
GIF rogné sur le mouvement avec crabbox media preview et publie le commentaire de preuve
intégré sur la PR lorsqu’un numéro de PR est disponible. Cette voie est une preuve visuelle
d’assurance qualité plutôt qu’une preuve Telegram Web avec connexion : l’API Telegram Bot fournit des
preuves stables de messages live, mais l’état de connexion Telegram Web n’est pas requis pour l’automatisation Mantis
normale.
Mantis Telegram Desktop Proof est le wrapper agentique natif Telegram Desktop
avant/après. Un mainteneur peut le déclencher depuis un commentaire de PR avec
@openclaw-mantis telegram desktop proof, depuis l’interface Actions avec des
instructions libres, ou via le répartiteur générique Mantis Scenario. Le workflow
transmet à Codex la PR, la ref de référence, la ref de candidat et les instructions du mainteneur.
L’agent lit la PR, décide quel comportement visible dans Telegram prouve le
changement, exécute la voie de preuve Crabbox Telegram Desktop avec utilisateur réel pour la référence et le
candidat, itère jusqu’à ce que les GIFs natifs soient utiles, écrit les artefacts
motionPreview appariés dans mantis-evidence.json, téléverse le paquet et
publie un tableau de preuve de PR en 2 colonnes lorsqu’un numéro de PR est disponible.
Pour la configuration Telegram desktop avec intervention humaine, utilisez le générateur de scénario :
openclaw gateway run
sur le port 38974, publie un message de disponibilité du bot pilote dans le groupe privé
loué, puis capture une capture d’écran et un MP4 depuis le bureau VNC visible. Un jeton de
bot ne connecte jamais Telegram Desktop ; il configure uniquement OpenClaw. Le visualiseur de bureau
est une session utilisateur Telegram distincte restaurée depuis
--telegram-profile-archive-env <name> ou créée manuellement via VNC et maintenue
active avec --keep-lease.
Indicateurs utiles du générateur Telegram desktop :
--lease-id <cbx_...>relance sur une VM où un opérateur s’est déjà connecté à Telegram Desktop.--telegram-profile-archive-env <name>lit une archive de profil Telegram Desktop.tgzen base64 depuis cette variable d’environnement et la restaure avant le lancement.--telegram-profile-dir <remote-path>contrôle le répertoire distant du profil Telegram Desktop. La valeur par défaut est$HOME/.local/share/TelegramDesktop.--no-gateway-setupinstalle et ouvre Telegram Desktop sans configurer OpenClaw.--credential-source convex --credential-role ciutilise le courtier d’identifiants partagé au lieu de jetons Telegram directs dans l’environnement.
mantis-evidence.json à côté de son rapport.
Ce schéma est le transfert entre le code de scénario et les commentaires GitHub :
path des artefacts sont relatives au répertoire du manifeste. Les valeurs
targetPath sont des chemins relatifs sous le préfixe d’artefacts Mantis R2/S3 configuré. Le
publisher rejette les traversées de chemin et ignore les entrées marquées "required": false
lorsque les aperçus ou vidéos facultatifs ne sont pas disponibles.
Types d’artefacts pris en charge :
timeline: capture d’écran de scénario déterministe, généralement avant/après.desktopScreenshot: capture d’écran du bureau VNC/navigateur.motionPreview: GIF animé intégré généré à partir de l’enregistrement du bureau.motionClip: MP4 rogné sur le mouvement qui retire l’introduction et la fin statiques.fullVideo: enregistrement MP4 complet pour une inspection approfondie.metadata: annexe JSON/journal.report: rapport Markdown.
scripts/mantis/publish-pr-evidence.mjs. Les workflows
l’appellent avec le manifeste, la PR cible, la racine cible des artefacts, le marqueur de commentaire,
l’URL d’artefact Actions, l’URL d’exécution et la source de la demande. Il téléverse les artefacts déclarés
vers le bucket Mantis R2/S3 configuré, construit un commentaire de PR centré d’abord sur le
récapitulatif avec images/aperçus intégrés et vidéos liées, puis met à jour le commentaire marqueur
existant ou en crée un. Les workflows publient vers openclaw-crabbox-artifacts
avec des URL publiques sous https://artifacts.openclaw.ai. Ils fournissent directement les valeurs de bucket,
de région et d’URL publique. Le publisher réutilisable exige :
MANTIS_ARTIFACT_R2_ACCESS_KEY_IDMANTIS_ARTIFACT_R2_SECRET_ACCESS_KEYMANTIS_ARTIFACT_R2_BUCKETMANTIS_ARTIFACT_R2_ENDPOINTMANTIS_ARTIFACT_R2_REGIONMANTIS_ARTIFACT_R2_PUBLIC_BASE_URL
telegram-status-command. Les mainteneurs peuvent remplacer candidate=...,
provider=aws|hetzner et lease=<cbx_...> lorsqu’ils ont besoin d’une ref spécifique ou d’un
bureau Crabbox préchauffé.
Exemples de commandes ClawSweeper :
Cycle de vie de l’exécution
- Acquérir les identifiants.
- Allouer ou réutiliser une VM.
- Préparer le profil de bureau/navigateur lorsque le scénario nécessite une preuve UI.
- Préparer un checkout propre pour la ref de référence.
- Installer les dépendances et construire uniquement ce dont le scénario a besoin.
- Démarrer un Gateway OpenClaw enfant avec un répertoire d’état isolé.
- Configurer le transport live, le fournisseur, le modèle et le profil de navigateur.
- Exécuter le scénario et capturer la preuve de référence.
- Arrêter le gateway et conserver les journaux.
- Préparer la ref de candidat dans la même VM.
- Exécuter le même scénario et capturer la preuve du candidat.
- Comparer les résultats de l’oracle et les preuves visuelles.
- Écrire le Markdown, le JSON, les journaux, les captures d’écran et les artefacts de trace facultatifs.
- Téléverser les artefacts GitHub Actions.
- Publier un message de statut concis sur la PR ou Discord.
- Bug reproduit : la référence a échoué de la manière attendue.
- Échec du harness : la configuration de l’environnement, les identifiants, l’API Discord, le navigateur ou le fournisseur ont échoué avant que l’oracle du bug ait du sens.
MVP Discord
Le premier scénario doit cibler les réactions de statut Discord dans les salons de guilde où le mode de livraison de réponse source estmessage_tool_only.
Pourquoi c’est une bonne base initiale pour Mantis :
- C’est visible dans Discord sous forme de réactions sur le message déclencheur.
- Il dispose d’un oracle REST solide via l’état des réactions du message Discord.
- Il exerce un vrai Gateway OpenClaw, l’authentification de bot Discord, la répartition des messages, le mode de livraison de réponse source, l’état des réactions de statut et le cycle de vie du tour du modèle.
- Il est assez étroit pour garder la première implémentation honnête.
messages.statusReactions.enabled est explicitement
vrai.
La première tranche exécutable est le scénario d’assurance qualité live Discord avec opt-in :
visibleReplies: "message_tool", ackReaction: "👀" et des réactions de statut explicites. L’oracle
interroge le vrai message déclencheur Discord et attend la séquence observée
👀 -> 🤔 -> 👍. Les artefacts incluent discord-qa-reaction-timelines.json,
discord-status-reactions-tool-only-timeline.html et
discord-status-reactions-tool-only-timeline.png.
Éléments d’assurance qualité existants
Mantis doit s’appuyer sur la pile d’assurance qualité privée existante au lieu de partir de zéro :pnpm openclaw qa discordexécute déjà une voie Discord live avec des bots pilote et SUT.- Le runner de transport live écrit déjà les rapports, les preuves d’assurance qualité et les
artefacts propres au transport sous
.artifacts/qa-e2e/. - Les locations d’identifiants Convex fournissent déjà un accès exclusif aux identifiants de transport live partagés.
- Le service de contrôle de navigateur prend déjà en charge les captures d’écran, les instantanés, les profils gérés headless et les profils CDP distants.
- QA Lab dispose déjà d’une interface de débogage et d’un bus pour les tests structurés comme des transports.
Modèle de preuve
Chaque exécution écrit un répertoire d’artefacts stable :mantis-summary.json doit être la source de vérité lisible par machine. Le
rapport Markdown est destiné aux commentaires de PR et à la revue humaine.
Le résumé doit inclure :
- les refs et les SHA testés
- le transport et l’id du scénario
- le fournisseur de machine et l’id de machine ou l’id de bail
- la source des identifiants sans valeurs secrètes
- le résultat de la baseline
- le résultat du candidat
- si le bug a été reproduit sur la baseline
- si le candidat l’a corrigé
- les chemins des artefacts
- les problèmes de configuration ou de nettoyage assainis
Navigateur et VNC
La voie navigateur comporte deux modes :- Automatisation sans interface : valeur par défaut pour la CI. Chrome s’exécute avec CDP activé, et Playwright ou le contrôle navigateur OpenClaw capture les captures d’écran.
- Secours VNC : activé sur la même VM lorsque la connexion, la MFA, l’anti-automatisation de Discord ou le débogage visuel nécessite un humain.
- l’id d’exécution
- l’id du scénario
- le fournisseur de machine
- le répertoire d’artefacts
- les instructions de connexion VNC ou noVNC si disponibles
- un court texte décrivant le blocage
Machines
Mantis doit privilégier AWS via Crabbox pour la première implémentation distante. Crabbox nous fournit des machines préchauffées, le suivi des baux, l’hydratation, les journaux, les résultats et le nettoyage. Si la capacité AWS est trop lente ou indisponible, ajoutez un fournisseur Hetzner derrière la même interface de machine. Exigences minimales de VM :- Linux avec une installation Chrome ou Chromium compatible bureau
- accès CDP pour l’automatisation du navigateur
- VNC ou noVNC pour le secours
- Node 22 et pnpm
- checkout OpenClaw et cache des dépendances
- cache du navigateur Chromium Playwright lorsque Playwright est utilisé
- suffisamment de CPU et de mémoire pour un Gateway OpenClaw, un navigateur et une exécution de modèle
- accès sortant à Discord, GitHub, aux fournisseurs de modèles et au courtier d’identifiants
Secrets
Les secrets résident dans les secrets d’organisation ou de dépôt GitHub pour les exécutions distantes, et dans un fichier secret local contrôlé par l’opérateur pour les exécutions locales. Noms de secrets recommandés :OPENCLAW_QA_DISCORD_MANTIS_BOT_TOKENOPENCLAW_QA_DISCORD_DRIVER_BOT_TOKENOPENCLAW_QA_DISCORD_SUT_BOT_TOKENOPENCLAW_QA_DISCORD_GUILD_IDOPENCLAW_QA_DISCORD_CHANNEL_IDOPENCLAW_QA_DISCORD_NOTIFY_CHANNEL_IDOPENCLAW_QA_REDACT_PUBLIC_METADATA=1pour les téléversements d’artefacts GitHub publicsOPENCLAW_QA_CONVEX_SITE_URLOPENCLAW_QA_CONVEX_SECRET_CIOPENCLAW_QA_MANTIS_CRABBOX_COORDINATOROPENCLAW_QA_MANTIS_CRABBOX_COORDINATOR_TOKEN
CRABBOX_COORDINATOR et
CRABBOX_COORDINATOR_TOKEN attendues par la CLI Crabbox. Les noms de secrets
GitHub CRABBOX_* simples restent acceptés comme solution de repli de
compatibilité.
Le runner Mantis ne doit jamais imprimer :
- les jetons de bots Discord
- les clés d’API des fournisseurs
- les cookies de navigateur
- le contenu des profils d’authentification
- les mots de passe VNC
- les charges utiles brutes d’identifiants
OPENCLAW_QA_REDACT_PUBLIC_METADATA=1 pour cette
raison.
Si un jeton est accidentellement collé dans une issue, une PR, une discussion ou
un journal, faites-le tourner après avoir stocké le nouveau secret.
Artefacts GitHub et commentaires de PR
Les workflows Mantis doivent téléverser le bundle complet de preuves comme artefact Actions à courte durée de vie. Lorsque le workflow est exécuté pour un rapport de bug ou une PR de correction, il doit aussi publier les médias intégrés rédigés dans le compartiment Mantis R2/S3 configuré et faire un upsert d’un commentaire sur ce bug ou cette PR de correction avec des captures d’écran avant/après intégrées. Ne publiez pas la preuve principale uniquement sur une PR générique d’automatisation QA. Les journaux bruts, les messages observés et les autres preuves volumineuses restent dans l’artefact Actions. Les workflows de production doivent publier ces commentaires avec la GitHub App Mantis, pas avecgithub-actions[bot]. Stockez l’id de l’application et la clé
privée comme secrets GitHub Actions MANTIS_GITHUB_APP_ID et
MANTIS_GITHUB_APP_PRIVATE_KEY. Le workflow utilise un marqueur masqué comme
clé d’upsert, met à jour ce commentaire lorsque le jeton peut le modifier, et
crée un nouveau commentaire appartenant à Mantis lorsqu’un ancien marqueur
appartenant à un bot ne peut pas être modifié.
Le commentaire de PR doit être court et visuel :
Notes de déploiement privé
Un déploiement privé peut déjà disposer d’une application Discord Mantis. Réutilisez cette application au lieu d’en créer une autre lorsqu’elle possède les bonnes permissions de bot et peut faire l’objet d’une rotation en toute sécurité. Définissez le canal initial de notification de l’opérateur via des secrets ou la configuration de déploiement. Il peut d’abord pointer vers un canal mainteneur ou opérations existant, puis passer à un canal Mantis dédié une fois celui-ci créé. Ne mettez pas d’ids de guild, d’ids de canal, de jetons de bot, de cookies de navigateur ni de mots de passe VNC dans ce document. Stockez-les dans les secrets GitHub, le courtier d’identifiants ou le magasin secret local de l’opérateur.Ajouter un scénario
Un scénario Mantis doit déclarer :- l’id et le titre
- le transport
- les identifiants requis
- la politique de ref de baseline
- la politique de ref candidate
- le correctif de configuration OpenClaw
- les étapes de configuration
- le stimulus
- l’oracle de baseline attendu
- l’oracle candidat attendu
- les cibles de capture visuelle
- le budget de délai d’expiration
- les étapes de nettoyage
- l’état des réactions Discord pour les bugs de réactions
- les références de messages Discord pour les bugs de fils
- le ts de fil Slack et l’état de l’API de réactions pour les bugs Slack
- les ids et en-têtes de messages e-mail pour les bugs e-mail
- les captures d’écran de navigateur lorsque l’UI est le seul observable fiable
Extension des fournisseurs
Après Discord, le même runner peut ajouter :- Slack : réactions, fils, mentions d’application, modales, téléversements de fichiers.
- E-mail : authentification Gmail et fils de messages avec
goglorsque les connecteurs ne suffisent pas. - WhatsApp : connexion par QR, réidentification, livraison des messages, médias, réactions.
- Telegram : filtrage des mentions de groupe, commandes, réactions lorsqu’elles sont disponibles.
- Matrix : salons chiffrés, relations de fil ou de réponse, reprise après redémarrage.
Questions ouvertes
- Quel bot Discord doit être le pilote, et lequel doit être le SUT, lorsque le bot Mantis existant est réutilisé ?
- La connexion du navigateur observateur doit-elle utiliser un compte Discord humain, un compte de test ou uniquement des preuves REST lisibles par bot pour la première phase ?
- Combien de temps GitHub doit-il conserver les artefacts Mantis pour les PR ?
- Quand ClawSweeper doit-il recommander automatiquement Mantis au lieu d’attendre une commande de mainteneur ?
- Les captures d’écran doivent-elles être rédigées ou recadrées avant le téléversement pour les PR publiques ?