نموذج التخزين
يستخدم 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 الحالي، أو وسوم الإصدار، أو رأس PR مفتوح
من openclaw/openclaw.
يكتب سير العمل:
- الأثر المرفوع:
mantis-slack-desktop-smoke-<run-id>-<attempt>; - تعليق PR مضمّن من Mantis GitHub App؛
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 المحلي
إثبات مصدر بارد:--hydrate-mode prehydrated فقط عندما تكون مساحة العمل البعيدة المعاد استخدامها
تحتوي مسبقًا على node_modules وdist/ مبني. يفشل Mantis بإغلاق آمن إذا كانت
هذه العناصر مفقودة.
أثبت واجهة موافقة Slack الأصلية:
--gateway-setup. يشغّل
سيناريوهي الاشتراك slack-approval-exec-native وslack-approval-plugin-native
ما لم تمرّر أعلام --scenario صريحة لنقطة تحقق الموافقة؛ تُرفض سيناريوهات
Slack الأخرى قبل بدء VM. يكتب مشغّل Slack QA
كل ملف JSON لنقطة تحقق من رسالة Slack API الحقيقية التي رصدها، ثم يعرض
المراقب البعيد لقطة الرسالة تلك في
approval-checkpoints/<scenario>-pending.png و
approval-checkpoints/<scenario>-resolved.png. تفشل عملية التشغيل إذا كان أي
JSON لنقطة تحقق، أو دليل رسالة، أو JSON إقرار، أو لقطة شاشة معروضة مفقودًا أو فارغًا.
لا تحتوي تأجيرات GitHub Actions الباردة على ملفات تعريف ارتباط Slack Web، لذلك يمكن أن
ينتهي التقاط المتصفح عند تسجيل دخول Slack. لإثبات نقطة تحقق الموافقة، ثق
بصور نقاط التحقق المعروضة وآثار Slack QA بدلًا من
slack-desktop-smoke.png. استخدم تأجيرًا دافئًا محفوظًا مع ملف تعريف Slack
Web مسجّل الدخول يدويًا فقط عندما يجب أن تُظهر لقطة شاشة المتصفح نفسها Slack Web.
أوضاع التهيئة
| الوضع | يُستخدم عندما | السلوك البعيد | المفاضلة |
|---|---|---|---|
source | إثبات PR عادي، أجهزة باردة، CI | يشغّل pnpm install --frozen-lockfile --prefer-offline وpnpm build داخل VM | الأبطأ، وأقوى إثبات لنسخة المصدر |
prehydrated | أعددت تأجيرًا معاد استخدامه عمدًا | يتطلب node_modules وdist/ موجودين؛ يتجاوز التثبيت/البناء | سريع، لكنه صالح فقط للتأجيرات الدافئة التي يتحكم بها المشغّل |
/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 عندما يعيد Crabbox حالة بعيدة
غير صفرية بعد أن يكون Mantis قد نسخ بيانات تعريف تثبت أن إعداد OpenClaw
Gateway قد اكتمل أو أن أمر Slack QA نفسه خرج بنجاح.
تعامل مع accepted على أنه نجاح مع تفسير، وليس سيناريو فاشلًا.
إذا كان التشغيل بطيئًا:
- يهيمن warmup: اخبز مسبقًا أو رقِّ صورة مزوّد Crabbox أفضل؛
- يهيمن remote_run في
source: استخدم تأجيرًا دافئًا، أو حسّن إعادة استخدام مخزن pnpm، أو انقل متطلبات الجهاز المسبقة إلى صورة المزوّد؛ - يهيمن remote_run في
prehydrated: لم تكن مساحة العمل البعيدة جاهزة فعليًا، أو أن إعداد Gateway/المتصفح/Slack بطيء؛ - يهيمن نسخ الآثار: افحص حجم الفيديو ومحتويات دليل الآثار.
قائمة تحقق الأدلة
يجب أن يُظهر تعليق PR الجيد:- معرّف السيناريو وSHA المرشح؛
- عنوان URL لتشغيل GitHub Actions؛
- عنوان URL للأثر؛
- لقطة شاشة مضمنة لنقطة تحقق الموافقة، أو لقطة شاشة Slack Web من تأجير دافئ مسجّل الدخول؛
- معاينة متحركة مضمنة عند توفرها؛
- روابط MP4 الكامل وMP4 المقتطع؛
- حالة النجاح/الفشل؛
- ملخص التوقيت في التقرير المرفق.
التعامل مع الفشل
إذا فشل سير العمل قبل تشغيل VM، فافحص مهمة Actions أولًا. الأسباب الشائعة هيcandidate_ref غير موثوق به، أو أسرار بيئة مفقودة، أو فشل تثبيت/بناء المرشح.
إذا فشل تشغيل VM لكن نُسخت لقطات الشاشة عائدة، فافحص:
crabbox vnc ... الموجود في التقرير.
أوقف التأجير عند الانتهاء:
--lease-id. لا تخبز ملف تعريف المتصفح ذلك داخل صورة مزوّد.