Skip to main content
Mantis Slack desktop QA to ścieżka z prawdziwym UI dla błędów klasy Slack, które wymagają pulpitu Linux, ratunkowego VNC, Slack Web, prawdziwego Gateway OpenClaw, zrzutów ekranu, nagrań wideo i komentarza z dowodami w PR. Użyj jej, gdy testy jednostkowe albo bezgłowa ścieżka live Slack nie mogą udowodnić błędu.

Model przechowywania

Mantis używa trzech różnych warstw przechowywania:
  • Obraz dostawcy: zarządzany przez Crabbox i przechowywany na koncie dostawcy chmurowego. Zawiera możliwości maszyny, takie jak Chrome/Chromium, ffmpeg, scrot, Node/corepack/pnpm, natywne narzędzia build i puste katalogi pamięci podręcznej.
  • Ciepły stan dzierżawy: zarządzany przez bieżącą sesję operatora. Może zawierać zalogowany profil przeglądarki, /var/cache/crabbox/pnpm oraz przygotowany checkout źródeł, dopóki dzierżawa jest aktywna.
  • Artefakty Mantis: zarządzane przez przebieg OpenClaw. Znajdują się w .artifacts/qa-e2e/mantis/..., następnie GitHub Actions je przesyła, a aplikacja GitHub Mantis komentuje dowody inline w PR.
Nigdy nie umieszczaj sekretów, ciasteczek przeglądarki, stanu logowania Slack, checkoutów repozytorium, node_modules ani dist/ we wstępnie przygotowanym obrazie dostawcy.

Dispatch GitHub

Uruchom workflow z 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
Dozwolone wartości candidate_ref są celowo wąskie, ponieważ workflow używa poświadczeń live: bieżące pochodzenie main, tagi wydań albo głowica otwartego PR z openclaw/openclaw. Workflow zapisuje:
  • przesłany artefakt: mantis-slack-desktop-smoke-<run-id>-<attempt>;
  • komentarz inline w PR z aplikacji GitHub 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;
  • zdalne logi, takie jak slack-desktop-command.log, openclaw-gateway.log, chrome.log i ffmpeg.log.
Komentarz w PR jest aktualizowany w miejscu przez ukryty marker <!-- mantis-slack-desktop-smoke -->.

Lokalne CLI

Dowód ze świeżych źródeł:
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
Zachowaj VM do ratunkowego VNC:
pnpm openclaw qa mantis slack-desktop-smoke \
  --provider aws \
  --class standard \
  --gateway-setup \
  --scenario slack-canary \
  --keep-lease
Otwórz VNC:
crabbox vnc --provider aws --id <cbx_id> --open
Użyj ponownie ciepłej dzierżawy:
pnpm openclaw qa mantis slack-desktop-smoke \
  --provider aws \
  --lease-id <cbx_id-or-slug> \
  --gateway-setup \
  --scenario slack-canary \
  --hydrate-mode source
Używaj --hydrate-mode prehydrated tylko wtedy, gdy ponownie używana zdalna przestrzeń robocza ma już node_modules i zbudowane dist/. Mantis odmawia kontynuacji, jeśli ich brakuje. Udowodnij natywny UI zatwierdzania Slack:
pnpm openclaw qa mantis slack-desktop-smoke \
  --provider aws \
  --class standard \
  --approval-checkpoints \
  --credential-source convex \
  --credential-role maintainer \
  --hydrate-mode source
Tryb punktów kontrolnych zatwierdzania wzajemnie wyklucza się z --gateway-setup. Uruchamia opcjonalne scenariusze slack-approval-exec-native i slack-approval-plugin-native, chyba że przekażesz jawne flagi punktów kontrolnych zatwierdzania --scenario; inne scenariusze Slack są odrzucane przed startem VM. Runner QA Slack zapisuje każdy plik JSON punktu kontrolnego z prawdziwej wiadomości API Slack, którą zaobserwował, a następnie zdalny watcher renderuje migawkę tej wiadomości do approval-checkpoints/<scenario>-pending.png i approval-checkpoints/<scenario>-resolved.png. Przebieg kończy się niepowodzeniem, jeśli brakuje jakiegokolwiek JSON punktu kontrolnego, dowodu wiadomości, JSON ack albo wyrenderowanego zrzutu ekranu, albo jeśli są puste. Zimne dzierżawy GitHub Actions nie mają ciasteczek Slack Web, więc ich przechwytywanie przeglądarki może trafić na logowanie Slack. W przypadku dowodu punktu kontrolnego zatwierdzania ufaj wyrenderowanym obrazom punktów kontrolnych i artefaktom QA Slack zamiast slack-desktop-smoke.png. Użyj zachowanej ciepłej dzierżawy z ręcznie zalogowanym profilem Slack Web tylko wtedy, gdy sam zrzut ekranu przeglądarki musi pokazywać Slack Web.

Tryby hydrate

TrybUżyj, gdyZachowanie zdalneKompromis
sourceNormalny dowód PR, zimne maszyny, CIUruchamia pnpm install --frozen-lockfile --prefer-offline i pnpm build wewnątrz VMNajwolniejszy, najsilniejszy dowód z checkoutu źródeł
prehydratedCelowo przygotowano ponownie używaną dzierżawęWymaga istniejących node_modules i dist/; pomija install/buildSzybki, ale poprawny tylko dla ciepłych dzierżaw kontrolowanych przez operatora
GitHub Actions zawsze przygotowuje checkout kandydata przed uruchomieniem VM. Jego magazyn pnpm jest buforowany według systemu operacyjnego, wersji Node i pliku blokady. Przebieg źródłowy VM używa także /var/cache/crabbox/pnpm, gdy jest dostępny.

Interpretacja czasu

mantis-slack-desktop-smoke-report.md zawiera czasy faz:
  • crabbox.warmup: rozruch dostawcy chmurowego, gotowość pulpitu/przeglądarki oraz SSH.
  • crabbox.inspect: wyszukiwanie metadanych dzierżawy.
  • credentials.prepare: pozyskanie dzierżawy poświadczeń Convex.
  • crabbox.remote_run: synchronizacja, uruchomienie przeglądarki, instalacja/build OpenClaw albo walidacja hydrate, start Gateway, zrzut ekranu i przechwytywanie wideo.
  • artifacts.copy: rsync z powrotem z VM.
crabbox.remote_run może być oznaczone jako accepted, gdy Crabbox zwraca niezerowy zdalny status po tym, jak Mantis skopiował metadane dowodzące, że albo konfiguracja Gateway OpenClaw została ukończona, albo samo polecenie QA Slack zakończyło się pomyślnie. Traktuj accepted jako zaliczenie z wyjaśnieniem, a nie nieudany scenariusz. Jeśli przebieg jest wolny:
  • dominuje warmup: wstępnie przygotuj albo wypromuj lepszy obraz dostawcy Crabbox;
  • dominuje remote_run w source: użyj ciepłej dzierżawy, popraw ponowne użycie magazynu pnpm albo przenieś wymagania maszyny do obrazu dostawcy;
  • dominuje remote_run w prehydrated: zdalna przestrzeń robocza nie była faktycznie gotowa albo konfiguracja Gateway/przeglądarki/Slack jest wolna;
  • dominuje kopiowanie artefaktów: sprawdź rozmiar wideo i zawartość katalogu artefaktów.

Lista kontrolna dowodów

Dobry komentarz w PR powinien pokazywać:
  • identyfikator scenariusza i SHA kandydata;
  • URL przebiegu GitHub Actions;
  • URL artefaktu;
  • zrzut ekranu punktu kontrolnego zatwierdzania inline albo zrzut ekranu Slack Web z zalogowanej ciepłej dzierżawy;
  • animowany podgląd inline, gdy jest dostępny;
  • linki do pełnego MP4 i przyciętego MP4;
  • status powodzenia/niepowodzenia;
  • podsumowanie czasu w załączonym raporcie.
Nie commituj zrzutów ekranu ani nagrań wideo do repozytorium. Trzymaj je w artefaktach GitHub Actions albo w komentarzu PR.

Obsługa niepowodzeń

Jeśli workflow zawiedzie przed uruchomieniem VM, najpierw sprawdź zadanie Actions. Typowe przyczyny to niezaufany candidate_ref, brakujące sekrety środowiska albo niepowodzenie instalacji/buildu kandydata. Jeśli przebieg VM zawiedzie, ale zrzuty ekranu zostały skopiowane z powrotem, sprawdź:
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
Jeśli przebieg zachował dzierżawę, otwórz VNC poleceniem crabbox vnc ... z raportu. Zatrzymaj dzierżawę po zakończeniu:
crabbox stop --provider aws <cbx_id-or-slug>
Jeśli logowanie Slack wygasło, napraw je w VNC na zachowanej dzierżawie i uruchom ponownie z --lease-id. Nie wypiekaj tego profilu przeglądarki w obrazie dostawcy.

Powiązane