سير عمل دورة حياة أعلام الميزات (Feature Flags) — من الطرح التدريجي المضبوط بمعيار إلى إزالة العلَم وحذف المسار القديم ومنع دين الأعلام
سير عمل تنفيذي (runbook) يدير دورة حياة علَم الميزة (Feature Flag / Feature Toggle) كاملةً: من تعريفه وطرحه التدريجي المضبوط بمعيار نجاح، مرورًا بقرار التعميم أو التراجع الفوري، وصولًا إلى الخطوة التي يغفل عنها كثيرون — إزالة العلَم وحذف المسار القديم من الكود بعد التعميم — لمنع تراكم «دين الأعلام» (flag debt): أعلام ميتة تتكدّس في الكود ولوحة الإدارة، تُعقّد المنطق، وتتحوّل مفاتيح خطيرة منسيّة قد يقلبها أحد فيكسر الإنتاج. يختلف هذا السير جوهريًا عن غيره في السوق ولا يكرّره: فهو ليس «سير النشر بإطلاق تدريجي (Canary) وتراجع آلي» الذي يوجّه حصة من حركة الإنتاج إلى إصدار مَنشور جديد ويتراجع آليًا عند تدهور الصحة — بينما علَم الميزة مفتاح تشغيل زمن-تشغيل (runtime) منفصل عن النشر، يشغّل الميزة أو يطفئها دون إعادة نشر، وجوهر هذا السير هو إدارة دورة حياة المفتاح نفسه بما فيها تقاعده وتنظيفه، وهو مفهوم لا وجود له في الـ canary. وهو ليس «سير الاستجابة لحادثة إنتاج» الذي يبدأ بعد عطل قائم (وإن كان العلَم أداة تخفيف داخله)، ولا «سير ترحيل قاعدة البيانات بنمط التوسيع/الانكماش» الذي يغيّر مخطط بيانات، ولا «سير تدوير الأسرار» — بل هدفه المحدّد: تسليم ميزة تدريجيًا خلف مفتاح قابل للإطفاء الفوري، والحكم على تعميمها بمعيار كمي، ثم إغلاق دورة الحياة بإزالة الأثر. يميّز السير بين أنواع الأعلام لأن مصيرها يختلف: علَم إطلاق مؤقت (release toggle) يُطرَح ثم يُزال بعد التعميم؛ علَم تجربة (experiment / A-B) يُقاس ثم يُحسَم ويُزال؛ علَم تشغيل تدريجي (ops toggle / kill switch) قد يبقى عمدًا كمفتاح أمان دائم بمبرر ومالك؛ علَم صلاحيات (permission toggle) يبقى لكن بحوكمة. فلا يُعامَل كل علَم بأنه يجب حذفه، ولا يُترَك كل علَم بلا مصير. يعمل السير عبر سبع مراحل: (1) تعريف العلَم وغرضه ونوعه، وقيمته الافتراضية الآمنة (الميزة مطفأة افتراضيًا)، ومفتاح الإيقاف الفوري، ومعيار النجاح/الفشل الكمي، ومالكه وتاريخ انتهائه؛ (2) الاستهداف والطرح التدريجي لشريحة صغيرة (داخلي ثم نسبة صغيرة ثم كوهورت) بدل التفعيل الشامل دفعة واحدة؛ (3) المراقبة بمقارنة مقاييس المُفعّل بالمُعطّل (أخطاء، أداء، تحويل، أعمال) مقابل المعيار المحدّد سلفًا؛ (4) قرار التعميم أو التراجع الفوري عبر kill switch إن خالف المعيار — بلا انتظار نشر؛ (5) التثبيت بعد الوصول إلى 100% مع إبقاء إمكانية التراجع فترة استقرار؛ (6) التنظيف بإزالة العلَم من نظام الإدارة وحذف الشرط والمسار القديم (dead code) من الكود بعد التعميم الكامل — هذه الخطوة الفارقة التي تمنع دين الأعلام؛ (7) التوثيق والإغلاق بتسجيل القرار ومقاييس قبل/بعد وتاريخ الإزالة. تحكمه قواعد صارمة: لكل علَم مؤقت مالك وتاريخ انتهاء وخطة إزالة منذ إنشائه؛ القرار بمعيار كمي محدّد سلفًا لا بالانطباع؛ قيمة افتراضية آمنة ومفتاح إيقاف فوري جاهزان قبل أي طرح؛ لا خلط عدة تغييرات غير مرتبطة خلف علَم واحد؛ ولا إعلان اكتمال قبل حذف العلَم والمسار القديم (أو تسجيل الإبقاء المتعمّد بمبرر). مناسب لمهندسي البرمجيات وDevOps وقادة الإصدار الذين يستعملون أعلام الميزات للتسليم التدريجي ويريدون منع تحوّلها إلى دين تقني، ويعمل مع أدوات مثل LaunchDarkly وUnleash وFlagsmith وGrowthBook أو نظام أعلام داخلي، وقابل للتحويل إلى runbook أو checklist داخل Claude Code وCursor وCodex.
تقرير دورة حياة علَم ميزة عربي منظّم وقابل للتطبيق: بطاقة العلَم (الاسم، الغرض، النوع، القيمة الافتراضية الآمنة، مفتاح الإيقاف، المالك، تاريخ الإزالة)، معيار القرار الكمي، جدول طرح تدريجي (الشريحة/النسبة، المدة، ما يُراقَب، شرط الانتقال)، آلية المراقبة والقرار (تعميم عند مطابقة المعيار أو تراجع فوري عبر kill switch عند مخالفته)، خطة تنظيف (إزالة العلَم وحذف الشرط والمسار القديم من الكود بعد التعميم، أو قرار إبقاء مبرّر لعلَم دائم)، ثم توثيق بالقرار ومقاييس قبل/بعد وتاريخ الإزالة — كله مبني على معيار كمي محدّد سلفًا وقيمة افتراضية آمنة ومفتاح إيقاف، ومع منع دين الأعلام بإغلاق دورة الحياة، دون خلط عدة تغييرات خلف علَم واحد ودون إعلان اكتمال قبل التنظيف.