أمان الإصدارات
تغييرات الأعلام لا تتجاوز المراجعة.ولا حتى بمفتاح مسؤول.
يتعامل NanoFlags مع تغيير العلم كما يُتعامل مع تغيير الشيفرة: مسودة، وسبب، واختبارات يجب أن تنجح، ومراجِع غير صاحب التغيير. وتفرض قاعدة البيانات هذه القواعد بنفسها، فلا يستطيع أي عميل أو سكربت أو مفتاح الالتفاف عليها.
المسودة
عدّل الأعلام في مسودة البيئة. لا يراها أي SDK.
draft
الاختبار
شغّل فحوص السيناريوهات على تلك المسودة بعينها.
testing
المراجعة
اطلب الموافقة من شخص لم يعدّل المسودة.
awaiting_approval
الموافقة
ترتبط الموافقة بالـ checksum الخاص بالمسودة.
approved
النشر
نسخة جديدة مرقّمة وموقّعة، ويبقى السجل محفوظًا.
published
المسودات والنسخ
لا يصل شيء إلى أي SDK قبل النشر.
تعديل العلم يغيّر مسودة البيئة. والنشر يلتقط المسودة كاملةً، بكل أعلامها وشرائحها، في نسخة مرقّمة غير قابلة للتعديل ولها checksum. ولا تستقبل حزم الـ SDK إلا النسخ المنشورة.
النسخة المتوقعة
DESTINATION_CHANGEDكل عملية نشر تحدد النسخة التي تتوقع أن تحل محلها. إذا نشر أحدٌ في الأثناء، يُرفض نشرك بدلًا من الكتابة فوق نشره.
لا نشر فارغ
NO_CHANGESلا يمكن نشر مسودة مطابقة للإعدادات المنشورة.
قيم بأنواعها
INVALID_VALUEترفض قاعدة البيانات القيم التي لا تطابق نوع العلم أو الـ JSON schema الخاص به.
طلبات التغيير والموافقات
المستقلة تعني مستقلة فعلًا.
يجمع طلب التغيير الأعلام التي تنوي تعديلها في بيئة واحدة، مع عنوان وسبب ومرجع اختياري إلى الشيفرة. وحيث تُشترط الموافقة، لا يمكن النشر إلا عبر تغيير حصل على العدد الكافي من الموافقات الصالحة.
- صاحب التغيير لا يوافق عليهSELF_APPROVAL
- ولا أي شخص حفظ تعديلًا على مسودة تلك البيئة منذ بدء التغيير. ويجب أن يكون الموافِق مسؤولًا (admin) أو مالكًا (owner).
- الموافقة مرتبطة بالمسودةdraft checksum
- تسجّل الموافقة الـ checksum الخاص بالمسودة التي رُوجعت. إذا عُدّلت المسودة بعدها تصبح الموافقة متقادمة: لا تُحتسب، ويحتاج التغيير إلى موافقة جديدة.
- من 1 إلى 5 موافقينper environment
- تحدد كل بيئة عدد الموافقات الصالحة التي يحتاجها النشر، والرفض يعيد التغيير إلى المسودة.
- المفاتيح لا تتجاوز المراجعةCHANGE_REQUIRED · APPROVAL_REQUIRED
- لا يستطيع مفتاح API بصلاحية المسؤول النشر في بيئة تشترط الموافقة. ويخضع الـ CLI والسكربتات للقواعد نفسها التي يخضع لها الأشخاص.
- draft
- testing
- awaiting_approval
- approved
- published
author maya
draft c27d80 (edited after approval)
reason Error rate flat for 48 h at 25%. Next step of the rollout plan.
Scenario checks
runs were on 9f3c1a · run again on c27d80
Approvals · 1 required
- mayaauthor · cannot approve
- samedited this draft · cannot approve
- leeapproved 9f3c1a · stale, draft changed
فحوص السيناريوهات
اختبارات تتحكم في زر النشر.
السيناريو علمٌ وسياق والقيمة التي تتوقعها، مثل: “المستخدم المسجّل في الاتحاد الأوروبي يحصل على true”. وحيث تكون فحوص السيناريوهات إلزامية، يجب أن ينجح كل سيناريو ضمن النطاق على المسودة نفسها التي ستُنشر.
- المسودة نفسها، والنتيجة نفسهاsame checksum
- لا يُحتسب التشغيل إلا للـ checksum الذي شُغّل عليه. عدّل المسودة وستحتاج إلى تشغيلها من جديد. والنجاح يعني تطابقًا تامًا دون تحويل للأنواع.
- دليل مستقلCI key or another person
- لا يُعتدّ بالتشغيل في التغيير إلا إذا جاء من مفتاح CI أو مفتاح مسؤول، أو من شخص غير صاحب التغيير وغير من عدّلوا مسودته.
- سيناريوهات بإصداراتscenario versions
- كل تعديل على سيناريو يحتفظ بالتعريف السابق، ولا تُحتسب إلا تشغيلات التعريف الحالي.
- في CI وفي طلبات الدمجGitHub Action · GitHub App
- يشغّل الـ CLI السيناريوهات لكل commit، ويضيف تطبيق GitHub فحصًا باسم “NanoFlags scenarios” إلى طلبات الدمج.
جرّب البوابة
EU signed-in users get the new checkout
{ region: "EU", signedIn: true, key: "u_18" }
expected trueactual true
Signed-out visitors keep the old checkout
{ region: "EU", signedIn: false }
expected falseactual false
Internal staff always see it
{ staff: true, region: "US" }
expected trueactual true
US customers stay out of the rollout
{ region: "US", signedIn: true }
expected falseactual truematched Rule 02 (region in [EU, US])
بدّل بين المسودتين. لا يُفتح النشر إلا حين تنجح كل السيناريوهات على المسودة التي أمامك.
البيئات المحمية والترقية
لبيئة Production سياسة، ولتغييرها سياسة أيضًا.
يحدد المسؤولون لكل بيئة ما إذا كانت محمية، وما إذا كانت تشترط الموافقة وكم موافقًا، وما إذا كانت تشترط فحوص السيناريوهات. وتبدأ المشاريع الجديدة وبيئة Production فيها محمية.
التخفيف يحتاج إلى المالك
OWNER_REQUIREDإزالة الحماية أو تخفيف سياسة بيئة محمية يحتاج إلى مالك المؤسسة، أما المسؤولون فيستطيعون تشديدها فقط.
ترقية مع سجل
Staging → Productionتنسخ الترقية إعدادات أعلام مختارة من مسودة بيئة إلى مسودة بيئة أخرى، ولا تنشر أبدًا. ويحفظ السجل النسخة المصدر، وما إذا كانت مسودة المصدر مطابقة لها، ونسخة البيئة الهدف والـ checksums قبل الترقية وبعدها.
مرتبطة بالنشر
published_revisionيُربط النشر التالي في البيئة الهدف بالترقية، فتستطيع تتبّع نسخة Production حتى نسخة Staging التي جاءت منها.
الاستعادة
تراجع دون إعادة كتابة التاريخ.
تحمّل الاستعادة إعدادات الأعلام في نسخة سابقة، والشرائح التي كانت تستخدمها، إلى المسودة. ثم تنشرها نسخةً جديدة عبر الفحوص نفسها التي يمر بها أي تغيير آخر. لا يُحذف شيء.
- تُعرض الأعلام التي أُضيفت بعد تلك النسخة، لتقرر ما تفعله بها.
- تحتاج الاستعادة إلى صلاحية محرّر، ويخضع نشرها لسياسة البيئة.
- تبقى كل نسخة قابلة للقراءة طوال عمر المشروع.
- r185current
Raise checkout-v2 to 50% in EU
lee · 12:06
- r184Restore to draft
checkout-v2 to 25% in EU
lee · 10 Nov 09:12
- r183Restore to draft
Enable new-pricing-page for internal staff
omar · 9 Nov 16:40
audit log
12:06:14leepublished r185 · production
12:04:51leeapproved change · draft 9f3c1a
12:01:09ciscenarios 4/4 passed · commit 3e1f2a0
11:58:32mayaedited draft · checkout-v2
سجل التدقيق
تكتبه قاعدة البيانات، لا العميل.
تسجّل triggers قاعدة البيانات والدوال على الخادم تعديلاتِ المسودة والموافقات وعمليات النشر وتغييرات المفاتيح والسياسات والأعضاء. وسجل التدقيق للقراءة فقط عبر الـ API.
- 12:06:14leepublishedr185 · production
- 12:04:51leeapprovedchange · draft 9f3c1a
- 12:01:09ciscenarios4/4 passed · commit 3e1f2a0
- 11:58:32mayaediteddraft · checkout-v2
- يذكر كل قيد الفاعل والكائن وملخصًا، مع التفاصيل بيانات منظّمة.
- تبقى القيود بعد حذف مشروعها: حذف المشروع يُبقي سجل تدقيقه.
- تصدير سجل التدقيق متاح في خطة Scale.
أدلة الإصدار
منشورة، أو مُبلَغ عنها، أو مجهولة. لا افتراضات.
تعرض صفحة التغيير ما الذي اختُبر، ومن وافق عليه، وإلى أي نسخة تحوّل، وما الذي تُبلغ خدماتك أنها تشغّله. ويُبقي NanoFlags هذه الحالات منفصلة بوضوح، ولا يصف أي إصدار بأنه “آمن”.
منشورة
النسخة التي يقدّمها الـ edge للبيئة.
مُبلَغ عنها
عملية تستخدم مفتاحًا لهذه البيئة قالت إنها حمّلت النسخة N. والبلاغ يخص تلك العملية، لا كل النسخ العاملة.
مجهولة
لم يصل أي بلاغ. ربما القياس معطّل أو محجوب أو خارج العيّنة. يُظهر NanoFlags هذه الفجوة بدلًا من افتراض التطابق.
فتحت مايا التغيير
draft 9f3c1a · base r184
نجحت 4 من 4 سيناريوهات
مفتاح CI · commit 3e1f2a0
وافق لي
ليس صاحب التغيير ولا من محرّري المسودة · مرتبطة بـ 9f3c1a
رُقّي من staging r212
سجل الترقية مرتبط
نُشرت r185 · موقّعة
أبلغت 3 من 4 خدمات · واحدة مجهولة
ما الذي تتضمنه كل خطة
الموافقات الإلزامية وفحوص السيناريوهات ونتائج تشغيلات CI والـ webhooks متاحة في خطتي Team وScale. وجلسات الاختبار المشتركة وتصدير سجل التدقيق في خطة Scale. أما المسودات والنسخ والاستعادة وسجل التدقيق ففي كل الخطط. ولا تحجب أي خطة النشر: تبقى البيانات الموجودة قابلة للقراءة.
ضع عينًا ثانية على Production.
ابدأ مجانًا بخطة Explore، وفعّل الموافقات وفحوص السيناريوهات الإلزامية عند الانتقال إلى Team.