نموذج التخزين
يستخدم Mantis ثلاث طبقات تخزين:- صورة المزوّد - مملوكة لـ Crabbox ومخزّنة في حساب المزوّد السحابي. تحتوي على إمكانات الجهاز (Chrome/Chromium، وffmpeg، وscrot، وNode/corepack/pnpm، وأدوات البناء الأصلية) وأدلة ذاكرة تخزين مؤقت فارغة.
- حالة مدة الاستخدام الدافئة - مملوكة لجلسة المشغّل الحالية. يمكن أن تحتوي على
ملف تعريف متصفح مسجّل الدخول، و
/var/cache/crabbox/pnpm، ونسخة عمل مصدرية مُعَدّة ما دامت مدة الاستخدام نشطة. - عناصر Mantis الأثرية - مملوكة لتشغيل OpenClaw. توجد ضمن
.artifacts/qa-e2e/mantis/...؛ ترفعها GitHub Actions ويعلّق تطبيق Mantis على GitHub بأدلة مضمّنة في طلب السحب.
node_modules، أو dist/ في صورة مزوّد.
التشغيل من GitHub
شغّل سير العمل منmain:
candidate_ref لقيود لأن سير العمل يستخدم بيانات اعتماد فعلية: إذ
يجب أن يُحل إلى سلف لـ main الحالي، أو وسم إصدار، أو رأس طلب سحب مفتوح في
openclaw/openclaw.
ينتج سير العمل:
- العنصر الأثري المرفوع
mantis-slack-desktop-smoke-<run-id>-<attempt> - تعليقًا مضمّنًا في طلب السحب من تطبيق Mantis على GitHub
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
<!-- mantis-slack-desktop-smoke -->.
CLI المحلي
إثبات بارد من المصدر:--hydrate-mode prehydrated فقط عندما تحتوي مساحة العمل البعيدة المُعاد استخدامها بالفعل
على node_modules ونسخة مبنية من dist/؛ وإلا يفشل Mantis بوضع مغلق.
أثبت واجهة الموافقة الأصلية في Slack:
--approval-checkpoints مع --gateway-setup. ويشغّل
سيناريوهَي slack-approval-exec-native وslack-approval-plugin-native
الاختياريين ما لم تمرّر سيناريو نقطة تحقق للموافقة صريحًا عبر --scenario؛ وتُرفض
سيناريوهات Slack الأخرى قبل بدء الآلة الافتراضية. يكتب مشغّل ضمان الجودة في Slack
كل ملف JSON لنقطة تحقق استنادًا إلى رسالة Slack API الفعلية التي رصدها، ثم
يعرض المراقب البعيد تلك الرسالة في
approval-checkpoints/<scenario>-pending.png و
approval-checkpoints/<scenario>-resolved.png. يفشل التشغيل إذا كان أي
ملف JSON لنقطة تحقق، أو دليل رسالة، أو ملف JSON للإقرار، أو لقطة شاشة معروضة مفقودًا
أو فارغًا.
لا تحتوي مدد الاستخدام الباردة في GitHub Actions على ملفات تعريف ارتباط Slack Web، لذلك قد ينتهي التقاط
المتصفح عند شاشة تسجيل الدخول إلى Slack. لإثبات نقاط تحقق الموافقة، اعتمد على
صور نقاط التحقق المعروضة وعناصر ضمان الجودة في Slack بدلًا من
slack-desktop-smoke.png. لا تستخدم مدة استخدام دافئة مُبقاة مع ملف تعريف
Slack Web مسجّل الدخول يدويًا إلا عندما يجب أن تُظهر لقطة شاشة المتصفح نفسها
Slack Web.
أوضاع التجهيز
تُعِد GitHub Actions دائمًا نسخة عمل المرشح قبل تشغيل الآلة الافتراضية. ويُخزَّن
مستودع pnpm مؤقتًا بحسب نظام التشغيل، وإصدار Node، وملف القفل. كما يعيد تشغيل
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.remote_run الحالة accepted عندما يعيد Crabbox حالة بعيدة
غير صفرية، لكن Mantis نسخ بيانات وصفية تثبت إما اكتمال إعداد Gateway في OpenClaw
أو خروج أمر ضمان الجودة في Slack نفسه بنجاح. تعامل مع
accepted على أنه نجاح مصحوب بتفسير، لا سيناريو فاشلًا.
إذا كان التشغيل بطيئًا:
- تهيمن مرحلة الإحماء: أنشئ مسبقًا أو روّج صورة مزوّد Crabbox أفضل.
- تهيمن
remote_runفي وضعsource: استخدم مدة استخدام دافئة، أو حسّن إعادة استخدام مستودع pnpm، أو انقل متطلبات الجهاز المسبقة إلى صورة المزوّد. - تهيمن
remote_runفي وضعprehydrated: مساحة العمل البعيدة لم تكن جاهزة فعليًا، أو أن إعداد Gateway/المتصفح/Slack بطيء. - تهيمن عملية نسخ العناصر الأثرية: افحص حجم الفيديو ومحتويات دليل العناصر الأثرية.
قائمة تحقق الأدلة
يعرض تعليق طلب السحب الجيد:- معرّف السيناريو وSHA المرشح
- عنوان URL لتشغيل GitHub Actions وعنوان URL للعنصر الأثري
- لقطة شاشة مضمّنة لنقطة تحقق الموافقة، أو لقطة شاشة لـ Slack Web من مدة استخدام دافئة مسجّل الدخول فيها
- معاينة متحركة مضمّنة عند توفرها
- روابط ملف MP4 الكامل وملف MP4 المشذّب
- حالة النجاح/الفشل وملخص توقيت التقرير
معالجة الإخفاقات
إذا فشل سير العمل قبل تشغيل الآلة الافتراضية، فافحص مهمة Actions أولًا. تشمل الأسباب المعتادة:candidate_ref غير موثوق، أو أسرار البيئة المفقودة، أو
فشل تثبيت/بناء المرشح.
إذا فشل تشغيل الآلة الافتراضية لكن نُسخت لقطات الشاشة، فافحص:
crabbox vnc ...
الوارد في التقرير، ثم أوقف مدة الاستخدام عند الانتهاء:
--lease-id. لا تضمّن ملف تعريف المتصفح هذا في صورة مزوّد.