Storage model
Mantis तीन अलग-अलग storage layers का उपयोग करता है:- Provider image: Crabbox के स्वामित्व में और cloud provider account में संग्रहीत। इसमें Chrome/Chromium, ffmpeg, scrot, Node/corepack/pnpm, native build tools, और खाली cache directories जैसी machine capabilities होती हैं।
- Warm lease state: वर्तमान operator session के स्वामित्व में। Lease सक्रिय रहने तक इसमें
logged-in browser profile,
/var/cache/crabbox/pnpm, और prepared source checkout हो सकते हैं। - Mantis artifacts: OpenClaw run के स्वामित्व में। वे
.artifacts/qa-e2e/mantis/...के अंतर्गत रहते हैं, फिर GitHub Actions उन्हें upload करता है और Mantis GitHub App PR पर inline evidence comment करता है।
node_modules, या dist/ को कभी भी prebaked provider image में न डालें।
GitHub dispatch
Workflow कोmain से चलाएँ:
candidate_ref values जानबूझकर सीमित हैं क्योंकि workflow
live credentials का उपयोग करता है: current main ancestry, release tags, या
openclaw/openclaw से open PR head।
Workflow लिखता है:
- uploaded artifact:
mantis-slack-desktop-smoke-<run-id>-<attempt>; - Mantis GitHub App से inline PR comment;
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;- remote logs जैसे
slack-desktop-command.log,openclaw-gateway.log,chrome.log, औरffmpeg.log।
<!-- mantis-slack-desktop-smoke --> marker द्वारा वहीं update किया जाता है।
Local CLI
Cold source proof:--hydrate-mode prehydrated का उपयोग केवल तब करें जब reused remote workspace में पहले से
node_modules और built dist/ हों। यदि वे
मौजूद नहीं हैं तो Mantis fail closed करता है।
Native Slack approval UI सिद्ध करें:
--gateway-setup के साथ mutually exclusive है। यह
opt-in slack-approval-exec-native और slack-approval-plugin-native
scenarios चलाता है जब तक आप explicit approval checkpoint --scenario flags पास नहीं करते; अन्य
Slack scenarios को VM शुरू होने से पहले reject कर दिया जाता है। Slack QA runner
देखे गए वास्तविक Slack API message से प्रत्येक checkpoint JSON file लिखता है, फिर
remote watcher उस message snapshot को
approval-checkpoints/<scenario>-pending.png और
approval-checkpoints/<scenario>-resolved.png में render करता है। यदि कोई checkpoint
JSON, message evidence, ack JSON, या rendered screenshot missing या empty है तो run fail होता है।
Cold GitHub Actions leases में Slack Web cookies नहीं होते, इसलिए उनका browser
capture Slack sign-in पर पहुँच सकता है। Approval checkpoint proof के लिए,
slack-desktop-smoke.png के बजाय rendered checkpoint images और Slack QA artifacts पर भरोसा करें।
Browser screenshot में स्वयं Slack Web दिखना आवश्यक हो तभी manually logged-in Slack
Web profile के साथ kept warm lease का उपयोग करें।
Hydrate modes
| Mode | कब उपयोग करें | Remote behavior | Tradeoff |
|---|---|---|---|
source | Normal PR proof, cold machines, CI | VM के अंदर pnpm install --frozen-lockfile --prefer-offline और pnpm build चलाता है | सबसे धीमा, सबसे मजबूत source-checkout proof |
prehydrated | आपने जानबूझकर reused lease तैयार किया है | मौजूदा node_modules और dist/ की आवश्यकता होती है; install/build skip करता है | तेज, लेकिन केवल operator-controlled warm leases के लिए valid |
/var/cache/crabbox/pnpm का उपयोग करता है।
Timing interpretation
mantis-slack-desktop-smoke-report.md में phase timings शामिल हैं:
crabbox.warmup: cloud provider boot, desktop/browser readiness, और SSH।crabbox.inspect: lease metadata lookup।credentials.prepare: Convex credential lease acquisition।crabbox.remote_run: sync, browser launch, OpenClaw install/build या hydrate validation, gateway startup, screenshot, और video capture।artifacts.copy: VM से rsync back।
crabbox.remote_run को accepted mark किया जा सकता है जब Crabbox non-zero
remote status लौटाता है, लेकिन Mantis ने ऐसा metadata copy कर लिया हो जो सिद्ध करता है कि या तो OpenClaw
gateway setup पूरा हुआ या Slack QA command स्वयं successfully exited हुई।
accepted को failed scenario नहीं, बल्कि pass-with-explanation मानें।
यदि run धीमा है:
- warmup dominate करता है: बेहतर Crabbox provider image prebake या promote करें;
sourceमें remote_run dominate करता है: warm lease उपयोग करें, pnpm store reuse सुधारें, या machine prerequisites को provider image में ले जाएँ;prehydratedमें remote_run dominate करता है: remote workspace वास्तव में ready नहीं था, या gateway/browser/Slack setup धीमा है;- artifact copy dominate करता है: video size और artifact directory contents inspect करें।
Evidence checklist
अच्छे PR comment में दिखना चाहिए:- scenario id और candidate SHA;
- GitHub Actions run URL;
- artifact URL;
- inline approval checkpoint screenshot, या logged-in warm lease से Slack Web screenshot;
- उपलब्ध होने पर inline animated preview;
- full MP4 और trimmed MP4 links;
- pass/fail status;
- attached report में timing summary।
Failure handling
यदि workflow VM run से पहले fail होता है, तो पहले Actions job inspect करें। सामान्य कारण untrustedcandidate_ref, missing environment secrets, या candidate
install/build failure होते हैं।
यदि VM run fail होता है लेकिन screenshots copy back हुए हैं, तो inspect करें:
crabbox vnc ... command से VNC खोलें।
काम पूरा होने पर lease stop करें:
--lease-id के साथ rerun करें। उस browser profile को provider image में bake न करें।