تعتمد أغلب المواقع الثابتة الطريقة نفسها لإجبار المتصفح على جلب النسخة الجديدة من الملف: يبقى اسم الملف كما هو ويُضاف رقم إصدار إلى العنوان، مثل styles.css?v=abc123. تغيّر الملف فيتغيّر الرقم، فيضطر كل متصفح إلى طلب النسخة الجديدة. هذا ما فعلناه، وهو يعمل في الأيام العادية.
في اليوم الذي لم يعمل فيه، رأى زوار منطقة واحدة الصفحة الجديدة بملف التنسيق القديم. لم يكن في الكود خطأ. طلبت الصفحة الجديدة styles.css?v=new، فوصل الطلب إلى مركز بيانات ما زال يقدّم النسخة السابقة من الموقع، فأجاب بالملف الذي لديه: styles.css القديم. ثم خزّنت ذاكرة الشبكة المؤقتة هذا الرد تحت العنوان الجديد لسبعة أيام، لأن هذا ما طلبناه منها للملفات ذات الإصدار. وكان الخطأ سيبقى في تلك المنطقة طوال الأسبوع لولا أننا حذفنا ذلك العنوان من الذاكرة المؤقتة يدوياً.
السبب موثّق لدى Cloudflare: كل نسخة منشورة على Pages ثابتة لا تتغيّر، لكن توزيعها على الشبكة لا يحدث في لحظة واحدة، وقد تظل بعض المواقع تقدّم النسخة السابقة لبعض الوقت. ورقم الإصدار في العنوان لا يحميك من ذلك، لأن النسخة القديمة تملك فعلاً ملفاً اسمه styles.css، وهي ببساطة تتجاهل ما بعد علامة الاستفهام.
كان الحل أن ننقل الإصدار إلى اسم الملف نفسه: styles.3f9a1c2b7e.css، حيث يُحسب الاسم من محتوى الملف. النسخة القديمة لا تملك ملفاً بهذا الاسم، فلا يمكنها أن تجيب بمحتوى خاطئ، وكل ما تستطيعه أن تقول إنه غير موجود. وأضفنا قاعدة صغيرة على الشبكة لهذه الحالة: إذا لم يوجد الملف ذو الاسم المحسوب، يُقدَّم الملف الحالي دون تخزين مؤقت. فقد يرى الزائر الذي صادف لحظة التوزيع ملف التنسيق السابق في تلك الزيارة وحدها، لكن لا يُخزَّن أي شيء خاطئ، فتكون الزيارة التالية صحيحة.
صار البناء يفشل إذا أشارت أي صفحة إلى ملف تنسيق أو سكربت دون اسم محسوب، أو برقم إصدار في العنوان، حتى لا يعود النمط القديم بالخطأ. أما الصور والخطوط فتبقى أسماؤها ثابتة عن قصد، فيبقى الخطر قائماً معها: إذا قُدّمت صورة مستبدلة بنسختها القديمة نحذف ذلك العنوان وحده من الذاكرة المؤقتة.
الدرس العام لا يخص مزوّداً بعينه. أي نظام يُطلق التحديثات تدريجياً، شبكة توزيع محتوى أو مجموعة خوادم أو متجر تطبيقات، تمرّ عليه فترة تعمل فيها النسختان القديمة والجديدة جنباً إلى جنب. صمّم النظام بحيث لا تستطيع النسخة القديمة أن تجيب عن سؤال لا تفهمه إلا الجديدة.