Get started
راهنمای عملیاتی دسکتاپ Slack برای Mantis
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 آنها را بارگذاری میکند و GitHub App مربوط به Mantis شواهد درونخطی را در PR نظر میدهد.
هرگز اسرار، کوکیهای مرورگر، وضعیت ورود 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=sourcecandidate_ref محدود شده است، زیرا گردشکار از اطلاعات هویتی واقعی استفاده میکند: این مقدار
باید به ancestry فعلی main، یک تگ انتشار یا head یک PR باز در
openclaw/openclaw resolve شود.
گردشکار موارد زیر را تولید میکند:
- آرتیفکت بارگذاریشده
mantis-slack-desktop-smoke-<run-id>-<attempt> - نظر درونخطی PR از GitHub App مربوط به Mantis
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
نظر 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 sourceماشین مجازی را برای بازیابی از طریق 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 بهصورت fail-closed متوقف میشود.
رابط کاربری بومی تأیید Slack را اثبات کنید:
pnpm openclaw qa mantis slack-desktop-smoke \ --provider aws \ --class standard \ --approval-checkpoints \ --credential-source convex \ --credential-role maintainer \ --hydrate-mode source--approval-checkpoints با --gateway-setup ناسازگار است و نمیتوان هر دو را همزمان استفاده کرد. این گزینه
سناریوهای opt-in یعنی slack-approval-exec-native و slack-approval-plugin-native
را اجرا میکند، مگر اینکه یک --scenario صریح برای نقطه بررسی تأیید ارسال کنید؛ سایر
سناریوهای Slack پیش از شروع ماشین مجازی رد میشوند. اجراکننده QA مربوط به Slack
هر فایل JSON نقطه بررسی را از پیام واقعی Slack API که مشاهده کرده است مینویسد، سپس
ناظر راه دور آن پیام را در
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 را نشان دهد.
حالتهای آمادهسازی
| حالت | زمان استفاده | رفتار راه دور | موازنه |
|---|---|---|---|
source |
اثبات عادی PR، ماشینهای سرد، CI | pnpm install --frozen-lockfile --prefer-offline و pnpm build را داخل ماشین مجازی اجرا میکند |
کندترین حالت، قویترین اثبات checkout کد منبع |
prehydrated |
عمداً یک اجاره مورداستفاده مجدد را آماده کردهاید | به node_modules و dist/ موجود نیاز دارد؛ نصب/ساخت را رد میکند |
سریع است، اما فقط برای اجارههای گرم تحت کنترل اپراتور معتبر است |
GitHub Actions همیشه checkout کاندید را پیش از اجرای ماشین مجازی آماده میکند. مخزن
pnpm آن بر اساس سیستمعامل، نسخه Node و lockfile کش میشود. اجرای 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- بازگرداندن دادهها از ماشین مجازی با rsync.
هنگامی که Crabbox یک وضعیت راه دور غیرصفر برمیگرداند، crabbox.remote_run ممکن است
accepted را نشان دهد، اما Mantis فرادادهای را کپی کرده باشد که ثابت میکند یا راهاندازی
Gateway مربوط به OpenClaw کامل شده یا خود فرمان QA مربوط به Slack با موفقیت خاتمه یافته است.
accepted را موفق با توضیح در نظر بگیرید، نه یک سناریوی ناموفق.
اگر اجرا کند است:
- مرحله آمادهسازی غالب است: یک ایمیج بهتر برای ارائهدهنده Crabbox از پیش بسازید یا ارتقا دهید.
remote_runدرsourceغالب است: از یک اجاره گرم استفاده کنید، استفاده مجدد از مخزن pnpm را بهبود دهید یا پیشنیازهای ماشین را به ایمیج ارائهدهنده منتقل کنید.remote_runدرprehydratedغالب است: فضای کاری راه دور در واقع آماده نبوده است، یا راهاندازی Gateway/مرورگر/Slack کند است.- کپی آرتیفکت غالب است: اندازه ویدئو و محتوای دایرکتوری آرتیفکت را بررسی کنید.
چکلیست شواهد
یک نظر خوب در PR موارد زیر را نشان میدهد:
- شناسه سناریو و SHA کاندید
- نشانی اجرای GitHub Actions و نشانی آرتیفکت
- اسکرینشات درونخطی نقطه بررسی تأیید، یا اسکرینشات Slack Web از یک اجاره گرم واردشده
- پیشنمایش متحرک درونخطی در صورت وجود
- پیوندهای MP4 کامل و MP4 برشخورده
- وضعیت موفق/ناموفق و خلاصه زمانبندی گزارش
اسکرینشاتها یا ویدئوها را در مخزن commit نکنید. آنها را در آرتیفکتهای GitHub Actions یا نظر PR نگه دارید.
مدیریت خطا
اگر گردشکار پیش از اجرای ماشین مجازی ناموفق شد، ابتدا job مربوط به Actions را بررسی کنید.
علتهای معمول: candidate_ref غیرقابلاعتماد، نبود اسرار محیط یا
ناموفقبودن نصب/ساخت کاندید.
اگر اجرای ماشین مجازی ناموفق شد اما اسکرینشاتها بازگردانده شدند، موارد زیر را بررسی کنید:
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 دوباره اجرا کنید. آن پروفایل مرورگر را در ایمیج ارائهدهنده تعبیه نکنید.