Get started
Runbook für Mantis Slack Desktop
Mantis Slack Desktop-QA ist der Real-UI-Pfad für Fehler der Slack-Klasse, die einen Linux-Desktop, VNC-Wiederherstellung, Slack Web, ein echtes OpenClaw-Gateway, Screenshots, Videos und einen PR-Nachweiskommentar benötigen. Verwenden Sie ihn, wenn Unit-Tests oder der headless Slack-Live-Pfad den Fehler nicht nachweisen können.
Speichermodell
Mantis verwendet drei Speicherebenen:
- Provider-Image – gehört Crabbox und wird im Cloud-Provider-Konto gespeichert. Enthält Maschinenfunktionen (Chrome/Chromium, ffmpeg, scrot, Node/corepack/pnpm, native Build-Werkzeuge) und leere Cache-Verzeichnisse.
- Zustand der warmen Lease – gehört zur aktuellen Operator-Sitzung. Kann ein
angemeldetes Browserprofil,
/var/cache/crabbox/pnpmund einen vorbereiteten Quellcode-Checkout enthalten, solange die Lease aktiv ist. - Mantis-Artefakte – gehören zum OpenClaw-Lauf. Sie befinden sich unter
.artifacts/qa-e2e/mantis/...; GitHub Actions lädt sie hoch, und die Mantis GitHub App kommentiert Inline-Nachweise im PR.
Betten Sie niemals Secrets, Browser-Cookies, den Slack-Anmeldestatus, Repository-Checkouts,
node_modules oder dist/ in ein Provider-Image ein.
GitHub-Auslösung
Führen Sie den Workflow von main aus:
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 ist eingeschränkt, da der Workflow Live-Anmeldedaten verwendet: Er
muss auf die Abstammung des aktuellen main, ein Release-Tag oder den Head eines offenen PRs in
openclaw/openclaw aufgelöst werden.
Der Workflow erzeugt:
- das hochgeladene Artefakt
mantis-slack-desktop-smoke-<run-id>-<attempt> - einen Inline-PR-Kommentar von der Mantis GitHub App
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- Remote-Protokolle:
slack-desktop-command.log,openclaw-gateway.log,chrome.log,ffmpeg.log
Der PR-Kommentar wird mithilfe der ausgeblendeten Markierung <!-- mantis-slack-desktop-smoke --> direkt aktualisiert.
Lokale CLI
Nachweis mit kaltem Quellcode:
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 sourceBehalten Sie die VM für die VNC-Wiederherstellung:
pnpm openclaw qa mantis slack-desktop-smoke \ --provider aws \ --class standard \ --gateway-setup \ --scenario slack-canary \ --keep-leaseÖffnen Sie VNC:
crabbox vnc --provider aws --id <cbx_id> --openVerwenden Sie eine warme Lease erneut:
pnpm openclaw qa mantis slack-desktop-smoke \ --provider aws \ --lease-id <cbx_id-or-slug> \ --gateway-setup \ --scenario slack-canary \ --hydrate-mode sourceVerwenden Sie --hydrate-mode prehydrated nur, wenn der wiederverwendete Remote-Arbeitsbereich bereits
über node_modules und ein gebautes dist/ verfügt; andernfalls verweigert Mantis die Ausführung.
Weisen Sie die native Slack-Genehmigungsoberfläche nach:
pnpm openclaw qa mantis slack-desktop-smoke \ --provider aws \ --class standard \ --approval-checkpoints \ --credential-source convex \ --credential-role maintainer \ --hydrate-mode source--approval-checkpoints und --gateway-setup schließen sich gegenseitig aus. Die Option führt
die explizit aktivierten Szenarien slack-approval-exec-native und slack-approval-plugin-native
aus, sofern Sie nicht mit --scenario ausdrücklich ein Genehmigungs-Checkpoint-Szenario übergeben;
andere Slack-Szenarien werden vor dem Start der VM abgelehnt. Der Slack-QA-Runner schreibt
jede Checkpoint-JSON-Datei aus der tatsächlich beobachteten Slack-API-Nachricht; anschließend
rendert der Remote-Watcher diese Nachricht als
approval-checkpoints/<scenario>-pending.png und
approval-checkpoints/<scenario>-resolved.png. Der Lauf schlägt fehl, wenn eine
Checkpoint-JSON-Datei, ein Nachrichtennachweis, eine Bestätigungs-JSON-Datei oder ein gerenderter Screenshot fehlt
oder leer ist.
Kalte GitHub-Actions-Leases besitzen keine Slack-Web-Cookies, sodass ihre Browseraufnahme
auf dem Slack-Anmeldebildschirm landen kann. Verlassen Sie sich für den Nachweis von Genehmigungs-Checkpoints auf die
gerenderten Checkpoint-Bilder und Slack-QA-Artefakte statt auf
slack-desktop-smoke.png. Verwenden Sie eine beibehaltene warme Lease mit einem manuell
angemeldeten Slack-Web-Profil nur dann, wenn der Browser-Screenshot selbst
Slack Web zeigen muss.
Hydratisierungsmodi
| Modus | Verwenden, wenn | Remote-Verhalten | Abwägung |
|---|---|---|---|
source |
Normaler PR-Nachweis, kalte Maschinen, CI | Führt pnpm install --frozen-lockfile --prefer-offline und pnpm build in der VM aus |
Am langsamsten, stärkster Nachweis anhand des Quellcode-Checkouts |
prehydrated |
Sie absichtlich eine wiederverwendete Lease vorbereitet haben | Erfordert vorhandene node_modules und dist/; überspringt Installation/Build |
Schnell, aber nur für vom Operator kontrollierte warme Leases gültig |
GitHub Actions bereitet den Kandidaten-Checkout immer vor dem VM-Lauf vor. Sein
pnpm-Store wird nach Betriebssystem, Node-Version und Lockfile zwischengespeichert. Der source-Lauf der VM
verwendet außerdem /var/cache/crabbox/pnpm erneut, sofern vorhanden.
Interpretation der Zeitmessungen
mantis-slack-desktop-smoke-report.md enthält Zeitmessungen für die Phasen:
crabbox.warmup– Start des Cloud-Providers, Desktop-/Browserbereitschaft, SSH.crabbox.inspect– Abfrage der Lease-Metadaten.credentials.prepare– Abruf der Convex-Anmeldedaten-Lease.crabbox.remote_run– Synchronisierung, Browserstart, OpenClaw-Installation/-Build oder Hydratisierungsvalidierung, Gateway-Start, Screenshot- und Videoaufnahme.artifacts.copy– Rücksynchronisierung aus der VM per rsync.
crabbox.remote_run kann accepted anzeigen, wenn Crabbox einen von null verschiedenen
Remote-Status zurückgibt, Mantis jedoch kopierte Metadaten vorweisen kann, die belegen, dass entweder die Einrichtung des
OpenClaw-Gateways abgeschlossen wurde oder der Slack-QA-Befehl selbst erfolgreich beendet wurde. Behandeln Sie
accepted als bestanden mit Erläuterung, nicht als fehlgeschlagenes Szenario.
Wenn ein Lauf langsam ist:
- Warmup dominiert: Erstellen Sie ein besseres Crabbox-Provider-Image vorab oder stufen Sie es hoch.
remote_rundominiert beisource: Verwenden Sie eine warme Lease, verbessern Sie die Wiederverwendung des pnpm-Stores oder verlagern Sie Maschinenvoraussetzungen in das Provider-Image.remote_rundominiert beiprehydrated: Der Remote-Arbeitsbereich war nicht tatsächlich bereit, oder die Einrichtung von Gateway, Browser oder Slack ist langsam.- Das Kopieren der Artefakte dominiert: Prüfen Sie die Videogröße und den Inhalt des Artefaktverzeichnisses.
Nachweis-Checkliste
Ein guter PR-Kommentar zeigt:
- Szenario-ID und Kandidaten-SHA
- URL des GitHub-Actions-Laufs und Artefakt-URL
- einen Inline-Screenshot des Genehmigungs-Checkpoints oder einen Slack-Web-Screenshot aus einer angemeldeten warmen Lease
- eine animierte Inline-Vorschau, sofern verfügbar
- Links zum vollständigen und zum gekürzten MP4
- Bestehens-/Fehlerstatus und die Zeitübersicht des Berichts
Committen Sie keine Screenshots oder Videos in das Repository. Bewahren Sie sie in GitHub-Actions-Artefakten oder im PR-Kommentar auf.
Fehlerbehandlung
Wenn der Workflow vor dem VM-Lauf fehlschlägt, prüfen Sie zuerst den Actions-Job.
Typische Ursachen: nicht vertrauenswürdiger candidate_ref, fehlende Umgebungs-Secrets oder ein
Fehler bei Installation/Build des Kandidaten.
Wenn der VM-Lauf fehlschlägt, aber Screenshots zurückkopiert wurden, prüfen Sie:
cat mantis-slack-desktop-smoke-report.mdcat mantis-slack-desktop-smoke-summary.jsoncat slack-desktop-command.logcat openclaw-gateway.logcat chrome.logcat ffmpeg.logWenn der Lauf die Lease beibehalten hat, öffnen Sie VNC mit dem Befehl crabbox vnc ...
aus dem Bericht und stoppen Sie anschließend die Lease:
crabbox stop --provider aws <cbx_id-or-slug>Wenn die Slack-Anmeldung abgelaufen ist, reparieren Sie sie über VNC auf einer beibehaltenen Lease und führen Sie den Lauf mit
--lease-id erneut aus. Betten Sie dieses Browserprofil nicht in ein Provider-Image ein.