저장소 모델
Mantis는 세 가지 저장소 계층을 사용합니다.- 제공자 이미지 - Crabbox가 소유하며 클라우드 제공자 계정에 저장됩니다. 머신 기능(Chrome/Chromium, ffmpeg, scrot, Node/corepack/pnpm, 네이티브 빌드 도구)과 비어 있는 캐시 디렉터리를 포함합니다.
- 웜 임대 상태 - 현재 운영자 세션이 소유합니다. 임대가 유지되는 동안 로그인된 브라우저 프로필,
/var/cache/crabbox/pnpm, 준비된 소스 체크아웃을 보관할 수 있습니다. - Mantis 아티팩트 - OpenClaw 실행이 소유합니다.
.artifacts/qa-e2e/mantis/...아래에 있으며, GitHub Actions가 이를 업로드하고 Mantis GitHub App이 PR에 인라인 증거를 댓글로 게시합니다.
node_modules 또는 dist/를 제공자 이미지에 절대 포함하지 마세요.
GitHub 디스패치
main에서 워크플로를 실행합니다.
candidate_ref는 제한됩니다. 현재 main의 계보, 릴리스 태그 또는 openclaw/openclaw의 열린 PR 헤드로 해석되어야 합니다.
워크플로는 다음을 생성합니다.
- 업로드된 아티팩트
mantis-slack-desktop-smoke-<run-id>-<attempt> - Mantis GitHub App이 작성한 인라인 PR 댓글
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- 원격 로그:
slack-desktop-command.log,openclaw-gateway.log,chrome.log,ffmpeg.log
<!-- mantis-slack-desktop-smoke --> 마커를 통해 기존 위치에서 갱신됩니다.
로컬 CLI
콜드 소스 증명:node_modules와 빌드된 dist/가 있는 경우에만 --hydrate-mode prehydrated를 사용하세요. 그렇지 않으면 Mantis는 닫힌 상태로 실패합니다.
네이티브 Slack 승인 UI 증명:
--approval-checkpoints와 --gateway-setup은 함께 사용할 수 없습니다. 명시적인 승인 체크포인트 --scenario를 전달하지 않으면 옵트인 방식의 slack-approval-exec-native 및 slack-approval-plugin-native 시나리오를 실행합니다. 다른 Slack 시나리오는 VM이 시작되기 전에 거부됩니다. Slack QA 실행기는 관찰한 실제 Slack API 메시지에서 각 체크포인트 JSON 파일을 작성하고, 원격 감시자는 해당 메시지를 approval-checkpoints/<scenario>-pending.png 및 approval-checkpoints/<scenario>-resolved.png로 렌더링합니다. 체크포인트 JSON, 메시지 증거, 확인 응답 JSON 또는 렌더링된 스크린샷 중 하나라도 없거나 비어 있으면 실행이 실패합니다.
콜드 GitHub Actions 임대에는 Slack Web 쿠키가 없으므로 브라우저 캡처가 Slack 로그인 화면에 표시될 수 있습니다. 승인 체크포인트 증명에는 slack-desktop-smoke.png 대신 렌더링된 체크포인트 이미지와 Slack QA 아티팩트를 신뢰하세요. 브라우저 스크린샷 자체에 Slack Web을 표시해야 하는 경우에만 수동으로 로그인한 Slack Web 프로필이 있는 유지된 웜 임대를 사용하세요.
하이드레이션 모드
GitHub Actions는 VM 실행 전에 항상 후보 체크아웃을 준비합니다. pnpm 저장소는 운영체제, Node 버전 및 잠금 파일을 기준으로 캐시됩니다. VM의
source 실행도 /var/cache/crabbox/pnpm이 있으면 이를 재사용합니다.
시간 해석
mantis-slack-desktop-smoke-report.md에는 단계별 소요 시간이 포함됩니다.
crabbox.warmup- 클라우드 제공자 부팅, 데스크톱/브라우저 준비 상태, SSH.crabbox.inspect- 임대 메타데이터 조회.credentials.prepare- Convex 자격 증명 임대 획득.crabbox.remote_run- 동기화, 브라우저 실행, OpenClaw 설치/빌드 또는 하이드레이션 검증, Gateway 시작, 스크린샷 및 동영상 캡처.artifacts.copy- VM에서 rsync로 다시 복사.
crabbox.remote_run에 accepted가 표시될 수 있습니다. accepted는 실패한 시나리오가 아니라 설명이 포함된 통과로 취급하세요.
실행이 느린 경우:
- 워밍업이 대부분을 차지함: 더 나은 Crabbox 제공자 이미지를 사전 베이크하거나 승격하세요.
source에서remote_run이 대부분을 차지함: 웜 임대를 사용하거나, pnpm 저장소 재사용을 개선하거나, 머신 필수 구성 요소를 제공자 이미지로 이동하세요.prehydrated에서remote_run이 대부분을 차지함: 원격 작업 공간이 실제로 준비되지 않았거나 Gateway/브라우저/Slack 설정이 느린 것입니다.- 아티팩트 복사가 대부분을 차지함: 동영상 크기와 아티팩트 디렉터리 내용을 점검하세요.
증거 체크리스트
좋은 PR 댓글에는 다음이 포함됩니다.- 시나리오 ID 및 후보 SHA
- GitHub Actions 실행 URL 및 아티팩트 URL
- 인라인 승인 체크포인트 스크린샷 또는 로그인된 웜 임대의 Slack Web 스크린샷
- 가능한 경우 인라인 애니메이션 미리보기
- 전체 MP4 및 잘라낸 MP4 링크
- 통과/실패 상태 및 보고서의 소요 시간 요약
실패 처리
VM 실행 전에 워크플로가 실패하면 먼저 Actions 작업을 점검하세요. 일반적인 원인은 신뢰할 수 없는candidate_ref, 누락된 환경 비밀 정보 또는 후보 설치/빌드 실패입니다.
VM 실행은 실패했지만 스크린샷이 다시 복사된 경우 다음을 점검하세요.
crabbox vnc ... 명령으로 VNC를 연 다음, 작업이 끝나면 임대를 중지하세요.
--lease-id를 사용하여 다시 실행하세요. 해당 브라우저 프로필을 제공자 이미지에 포함하지 마세요.