Get started
راهنمای اجرای دسکتاپ Mantis Slack
Mantis Slack desktop QA مسیر رابط کاربری واقعی برای باگهای همرده Slack است که به دسکتاپ Linux، نجات VNC، Slack Web، یک Gateway واقعی OpenClaw، اسکرینشاتها، ویدیوها، و یک دیدگاه شواهد در PR نیاز دارند.
وقتی از آن استفاده کنید که تستهای واحد یا مسیر زنده Slack بدون رابط گرافیکی نتوانند باگ را اثبات کنند.
مدل ذخیرهسازی
Mantis از سه لایه ذخیرهسازی متفاوت استفاده میکند:
- تصویر ارائهدهنده: متعلق به Crabbox است و در حساب ارائهدهنده ابری ذخیره میشود. این تصویر قابلیتهای ماشین مانند Chrome/Chromium، ffmpeg، scrot، Node/corepack/pnpm، ابزارهای ساخت بومی، و دایرکتوریهای کش خالی را شامل میشود.
- وضعیت اجاره گرم: متعلق به نشست فعلی اپراتور است. میتواند شامل یک
پروفایل مرورگر واردشده،
/var/cache/crabbox/pnpm، و یک checkout منبع آماده تا زمانی باشد که اجاره زنده است. - مصنوعات Mantis: متعلق به اجرای OpenClaw هستند. آنها زیر
.artifacts/qa-e2e/mantis/...قرار میگیرند، سپس GitHub Actions آنها را بارگذاری میکند و App گیتهاب Mantis شواهد درونخطی را روی PR نظر میدهد.
هرگز secrets، کوکیهای مرورگر، وضعیت ورود Slack، checkoutهای مخزن،
node_modules، یا dist/ را در تصویر ازپیشپختهشده ارائهدهنده قرار ندهید.
ارسال GitHub
گردشکار را از 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مقادیر مجاز candidate_ref عمدا محدود هستند، چون گردشکار
از اعتبارنامههای زنده استفاده میکند: تبار فعلی main، تگهای انتشار، یا سرشاخه یک PR باز
از openclaw/openclaw.
گردشکار این موارد را مینویسد:
- مصنوع بارگذاریشده:
mantis-slack-desktop-smoke-<run-id>-<attempt>; - دیدگاه درونخطی PR از App گیتهاب 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;- لاگهای راه دور مانند
slack-desktop-command.log،openclaw-gateway.log،chrome.log، وffmpeg.log.
دیدگاه PR با نشانگر پنهان
<!-- mantis-slack-desktop-smoke --> درجا بهروزرسانی میشود.
CLI محلی
اثبات سرد از منبع:
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 sourceVM را برای نجات VNC نگه دارید:
pnpm openclaw qa mantis slack-desktop-smoke \ --provider aws \ --class standard \ --gateway-setup \ --scenario slack-canary \ --keep-leaseVNC را باز کنید:
crabbox vnc --provider aws --id <cbx_id> --openیک اجاره گرم را دوباره استفاده کنید:
pnpm openclaw qa mantis slack-desktop-smoke \ --provider aws \ --lease-id <cbx_id-or-slug> \ --gateway-setup \ --scenario slack-canary \ --hydrate-mode sourceاز --hydrate-mode prehydrated فقط وقتی استفاده کنید که فضای کاری راه دورِ دوبارهاستفادهشده از قبل
node_modules و یک dist/ ساختهشده داشته باشد. اگر این موارد
موجود نباشند، Mantis بسته شکست میخورد.
رابط کاربری تأیید بومی Slack را اثبات کنید:
pnpm openclaw qa mantis slack-desktop-smoke \ --provider aws \ --class standard \ --approval-checkpoints \ --credential-source convex \ --credential-role maintainer \ --hydrate-mode sourceحالت نقطهبررسی تأیید با --gateway-setup ناسازگار است. این حالت
سناریوهای اختیاری slack-approval-exec-native و slack-approval-plugin-native
را اجرا میکند، مگر اینکه پرچمهای صریح نقطهبررسی تأیید --scenario را بدهید؛ سناریوهای دیگر
Slack پیش از شروع VM رد میشوند. اجراکننده QA Slack
هر فایل JSON نقطهبررسی را از پیام واقعی Slack API که مشاهده کرده مینویسد، سپس
ناظر راه دور آن snapshot پیام را در
approval-checkpoints/<scenario>-pending.png و
approval-checkpoints/<scenario>-resolved.png رندر میکند. اگر هر JSON نقطهبررسی،
شواهد پیام، JSON تأیید، یا اسکرینشات رندرشده وجود نداشته باشد یا خالی باشد، اجرا شکست میخورد.
اجارههای سرد GitHub Actions کوکیهای Slack Web ندارند، بنابراین ثبت مرورگر آنها
ممکن است روی ورود Slack فرود بیاید. برای اثبات نقطهبررسی تأیید، به
تصاویر رندرشده نقطهبررسی و مصنوعات QA Slack اعتماد کنید، نه
slack-desktop-smoke.png. فقط وقتی که خود اسکرینشات مرورگر باید Slack Web را نشان دهد،
از یک اجاره گرم نگهداشتهشده با پروفایل Slack Web که دستی وارد شده استفاده کنید.
حالتهای hydrate
| حالت | چه زمانی استفاده شود | رفتار راه دور | بدهبستان |
|---|---|---|---|
source |
اثبات عادی PR، ماشینهای سرد، CI | pnpm install --frozen-lockfile --prefer-offline و pnpm build را داخل VM اجرا میکند |
کندترین، قویترین اثبات checkout منبع |
prehydrated |
عمدا یک اجاره دوبارهاستفادهشده را آماده کردهاید | به node_modules و dist/ موجود نیاز دارد؛ نصب/ساخت را رد میکند |
سریع، اما فقط برای اجارههای گرم تحت کنترل اپراتور معتبر است |
GitHub Actions همیشه پیش از اجرای VM، checkout نامزد را آماده میکند. store
pnpm آن بر اساس OS، نسخه Node، و lockfile کش میشود. اجرای منبع VM نیز
در صورت وجود از /var/cache/crabbox/pnpm استفاده میکند.
تفسیر زمانبندی
mantis-slack-desktop-smoke-report.md شامل زمانبندی فازها است:
crabbox.warmup: بوت ارائهدهنده ابری، آمادگی دسکتاپ/مرورگر، و SSH.crabbox.inspect: جستوجوی فراداده اجاره.credentials.prepare: دریافت اجاره اعتبارنامه Convex.crabbox.remote_run: همگامسازی، راهاندازی مرورگر، نصب/ساخت OpenClaw یا اعتبارسنجی hydrate، راهاندازی Gateway، اسکرینشات، و ضبط ویدیو.artifacts.copy: rsync برگشتی از VM.
وقتی Crabbox پس از اینکه Mantis فرادادهای را کپی کرده که ثابت میکند یا راهاندازی
Gateway OpenClaw کامل شده یا خود فرمان QA Slack با موفقیت خارج شده است،
یک وضعیت راه دور غیرصفر برمیگرداند، crabbox.remote_run میتواند accepted علامت بخورد.
accepted را گذر با توضیح در نظر بگیرید، نه یک سناریوی شکستخورده.
اگر اجرا کند است:
- warmup غالب است: یک تصویر ارائهدهنده Crabbox بهتر را ازپیشبپزید یا ارتقا دهید؛
- remote_run در
sourceغالب است: از یک اجاره گرم استفاده کنید، استفاده مجدد از store pnpm را بهبود دهید، یا پیشنیازهای ماشین را به تصویر ارائهدهنده منتقل کنید؛ - remote_run در
prehydratedغالب است: فضای کاری راه دور در عمل آماده نبوده، یا راهاندازی Gateway/مرورگر/Slack کند است؛ - کپی مصنوع غالب است: اندازه ویدیو و محتوای دایرکتوری مصنوع را بررسی کنید.
چکلیست شواهد
یک دیدگاه PR خوب باید نشان دهد:
- شناسه سناریو و SHA نامزد؛
- URL اجرای GitHub Actions؛
- URL مصنوع؛
- اسکرینشات درونخطی نقطهبررسی تأیید، یا یک اسکرینشات Slack Web از یک اجاره گرم واردشده؛
- پیشنمایش متحرک درونخطی وقتی موجود است؛
- لینکهای MP4 کامل و MP4 بریدهشده؛
- وضعیت گذر/شکست؛
- خلاصه زمانبندی در گزارش پیوستشده.
اسکرینشاتها یا ویدیوها را در مخزن commit نکنید. آنها را در مصنوعات GitHub Actions یا دیدگاه PR نگه دارید.
مدیریت شکست
اگر گردشکار پیش از اجرای VM شکست خورد، ابتدا job مربوط به Actions را بررسی کنید. علتهای معمول
candidate_ref نامطمئن، secrets محیطی گمشده، یا شکست نصب/ساخت نامزد هستند.
اگر اجرای VM شکست خورد اما اسکرینشاتها برگشت داده شدند، بررسی کنید:
cat mantis-slack-desktop-smoke-report.mdcat mantis-slack-desktop-smoke-summary.jsoncat slack-desktop-command.logcat openclaw-gateway.logcat chrome.logcat ffmpeg.logاگر اجرا اجاره را نگه داشته است، VNC را با فرمان crabbox vnc ... موجود در گزارش باز کنید.
وقتی کار تمام شد، اجاره را متوقف کنید:
crabbox stop --provider aws <cbx_id-or-slug>اگر ورود Slack منقضی شده است، آن را در VNC روی یک اجاره نگهداشتهشده تعمیر کنید و با
--lease-id دوباره اجرا کنید. آن پروفایل مرورگر را در تصویر ارائهدهنده نپزید.