스토리지 모델
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 head만 사용할 수 있습니다.
워크플로는 다음을 작성합니다.
- 업로드된 아티팩트:
mantis-slack-desktop-smoke-<run-id>-<attempt>; - Mantis GitHub App의 인라인 PR 댓글;
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;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 증명:
--gateway-setup과 함께 사용할 수 없습니다. 명시적인 승인 체크포인트 --scenario 플래그를 전달하지 않으면 옵트인 slack-approval-exec-native 및 slack-approval-plugin-native 시나리오를 실행합니다. 다른 Slack 시나리오는 VM이 시작되기 전에 거부됩니다. Slack QA 러너는 관찰한 실제 Slack API 메시지에서 각 체크포인트 JSON 파일을 작성한 다음, 원격 watcher가 해당 메시지 스냅샷을 approval-checkpoints/<scenario>-pending.png 및 approval-checkpoints/<scenario>-resolved.png로 렌더링합니다. 체크포인트 JSON, 메시지 증거, ack JSON, 렌더링된 스크린샷 중 하나라도 없거나 비어 있으면 실행은 실패합니다.
콜드 GitHub Actions 리스에는 Slack Web 쿠키가 없으므로 브라우저 캡처가 Slack 로그인 화면에 도달할 수 있습니다. 승인 체크포인트 증명의 경우 slack-desktop-smoke.png보다 렌더링된 체크포인트 이미지와 Slack QA 아티팩트를 신뢰하세요. 브라우저 스크린샷 자체가 Slack Web을 보여야 할 때만 수동으로 Slack Web에 로그인된 프로필이 있는 유지된 웜 리스를 사용하세요.
하이드레이트 모드
| 모드 | 사용할 때 | 원격 동작 | 트레이드오프 |
|---|---|---|---|
source | 일반 PR 증명, 콜드 머신, CI | VM 안에서 pnpm install --frozen-lockfile --prefer-offline 및 pnpm build 실행 | 가장 느리지만 가장 강한 소스 체크아웃 증명 |
prehydrated | 재사용 리스를 의도적으로 준비한 경우 | 기존 node_modules 및 dist/를 요구하며 install/build를 건너뜀 | 빠르지만 운영자가 제어하는 웜 리스에 대해서만 유효 |
/var/cache/crabbox/pnpm가 있으면 이를 사용합니다.
타이밍 해석
mantis-slack-desktop-smoke-report.md에는 단계별 타이밍이 포함됩니다.
crabbox.warmup: 클라우드 프로바이더 부팅, 데스크톱/브라우저 준비 상태, SSH.crabbox.inspect: 리스 메타데이터 조회.credentials.prepare: Convex 자격 증명 리스 획득.crabbox.remote_run: 동기화, 브라우저 실행, OpenClaw install/build 또는 하이드레이트 검증, Gateway 시작, 스크린샷, 동영상 캡처.artifacts.copy: VM에서 rsync로 다시 복사.
crabbox.remote_run이 accepted로 표시될 수 있습니다. accepted는 실패한 시나리오가 아니라 설명이 포함된 통과로 취급하세요.
실행이 느린 경우:
- warmup이 지배적임: 더 나은 Crabbox 프로바이더 이미지를 미리 굽거나 승격하세요.
source에서 remote_run이 지배적임: 웜 리스를 사용하거나, pnpm store 재사용을 개선하거나, 머신 필수 구성 요소를 프로바이더 이미지로 옮기세요.prehydrated에서 remote_run이 지배적임: 원격 워크스페이스가 실제로 준비되지 않았거나 Gateway/브라우저/Slack 설정이 느린 것입니다.- artifact copy가 지배적임: 동영상 크기와 아티팩트 디렉터리 내용을 검사하세요.
증거 체크리스트
좋은 PR 댓글은 다음을 보여야 합니다.- 시나리오 id 및 후보 SHA;
- GitHub Actions 실행 URL;
- 아티팩트 URL;
- 인라인 승인 체크포인트 스크린샷 또는 로그인된 웜 리스의 Slack Web 스크린샷;
- 사용 가능한 경우 인라인 애니메이션 미리보기;
- 전체 MP4 및 잘라낸 MP4 링크;
- 통과/실패 상태;
- 첨부된 보고서의 타이밍 요약.
실패 처리
워크플로가 VM 실행 전에 실패하면 먼저 Actions 작업을 검사하세요. 일반적인 원인은 신뢰할 수 없는candidate_ref, 누락된 환경 시크릿, 후보 install/build 실패입니다.
VM 실행은 실패했지만 스크린샷이 다시 복사된 경우 다음을 검사하세요.
crabbox vnc ... 명령으로 VNC를 여세요. 완료되면 리스를 중지하세요.
--lease-id로 다시 실행하세요. 해당 브라우저 프로필을 프로바이더 이미지에 굽지 마세요.