· فريق Reqdesk

ملاحظات من مقبرة إصدارات الودجت

شُحن إصداران متتاليان من الودجت ببناء IIFE مكسور. ما الذي فعلناه، وما الذي غيّرناه حتى لا يتكرّر.

في أواخر مارس، شحنّا إصدارَين متتاليَين من الودجت (1.2.20 و1.2.21) بنفس الخلل: بناء IIFE صدّر ofetch وأشقاءه في مساحة العمل خارجيًا، متوقّعًا أن يُحلّوا في وقت التشغيل. ولم يُحلّوا. كل موقع مُثبَّت على هذين الإصدارَين سجّل ReferenceError عند أوّل تفاعل.

هذه التدوينة تشريح ما بعد الحادثة، بأسماء حقيقية. التظاهر بأن الأمر لم يحدث أسوأ من تدوينه.

ما الذي انكسر؟

@reqdesk/widget يشحن بناء IIFE للاستخدام المضمّن. عامل التجميع تعامل مع أشقاء مساحة العمل (@reqdesk/sdk-core، @reqdesk/sdk-react) وofetch كخارجيّين — وهذا صحيح لبناء ESM (المستهلك يثبّتهم) لكنه خاطئ لبناء IIFE (المستهلك يريد ملفًا مستقلًا).

كان اختبار واحد سيمسك المشكلة. لم يكن لدينا اختبار لبناء IIFE. صار لدينا الآن.

ما الذي فعلناه؟

  1. أزلنا الإصدارَين من قائمة الاحتفاظ في الـ CDN فورًا. المواقع المثبّتة على 1.2.20 / 1.2.21 ترجع 404 الآن بدلًا من 500 صامت. الـ 404 يفشل بسرعة ووضوح؛ الـ ReferenceError يفشل ببطء وصمت. سنأخذ الـ 404.
  2. شحنّا 1.2.22 ببناء IIFE يُدمج ofetch والأشقاء داخليًا.
  3. رفعنا قيمة script_url_default في إضافة Filament إلى 1.2.22 ووسمنا إصدارًا.
  4. أضفنا Vitest spec يُحمّل بناء IIFE في بيئة JSDOM ويتأكّد أن الودجت يُرسم دون رميان. الاختبار يعمل في الـ CI عند كل تغيير.

ما الذي غيّرناه في دليل التشغيل؟

دليل CDN في CLAUDE.md يحوي الآن قاعدة صريحة “لا تحتفظ بإصدارات معروف أنها مكسورة”. الكتلة التعليقيّة في رأس retained-versions.txt هي السجلّ الرسمي لسبب استبعاد كل إصدار. مستقبلنا لن يحتار.

لماذا 404 أفضل من كسر صامت؟

لأن JavaScript مكسور على موقع عميل غير مرئيّ لنا. يرى العميل ودجت الدعم لا يظهر، يفترض أن التكامل هشّ، ويزيله بهدوء. الـ 404 في DevTools على الأقل قابل للإيجاد. اخترنا الكسر الظاهر على الكسر الصامت — وسنواصل اختياره.