انتقل إلى المحتوى
NanoFlags
ابدأ مجانًا

أمان الإصدارات

تغييرات الأعلام لا تتجاوز المراجعة.ولا حتى بمفتاح مسؤول.

يتعامل NanoFlags مع تغيير العلم كما يُتعامل مع تغيير الشيفرة: مسودة، وسبب، واختبارات يجب أن تنجح، ومراجِع غير صاحب التغيير. وتفرض قاعدة البيانات هذه القواعد بنفسها، فلا يستطيع أي عميل أو سكربت أو مفتاح الالتفاف عليها.

  1. المسودة

    عدّل الأعلام في مسودة البيئة. لا يراها أي SDK.

    draft

  2. الاختبار

    شغّل فحوص السيناريوهات على تلك المسودة بعينها.

    testing

  3. المراجعة

    اطلب الموافقة من شخص لم يعدّل المسودة.

    awaiting_approval

  4. الموافقة

    ترتبط الموافقة بالـ checksum الخاص بالمسودة.

    approved

  5. النشر

    نسخة جديدة مرقّمة وموقّعة، ويبقى السجل محفوظًا.

    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 والسكربتات للقواعد نفسها التي يخضع لها الأشخاص.
Raise checkout-v2 to 50% in EUProduction · base r184approval stale
  1. draft
  2. testing
  3. awaiting_approval
  4. approved
  5. 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
needs a fresh approvalPublish blocked: approval required
changes / raise-checkout-v2واجهة المنتج · بيانات للتوضيح

فحوص السيناريوهات

اختبارات تتحكم في زر النشر.

السيناريو علمٌ وسياق والقيمة التي تتوقعها، مثل: “المستخدم المسجّل في الاتحاد الأوروبي يحصل على true”. وحيث تكون فحوص السيناريوهات إلزامية، يجب أن ينجح كل سيناريو ضمن النطاق على المسودة نفسها التي ستُنشر.

المسودة نفسها، والنتيجة نفسهاsame checksum
لا يُحتسب التشغيل إلا للـ checksum الذي شُغّل عليه. عدّل المسودة وستحتاج إلى تشغيلها من جديد. والنجاح يعني تطابقًا تامًا دون تحويل للأنواع.
دليل مستقلCI key or another person
لا يُعتدّ بالتشغيل في التغيير إلا إذا جاء من مفتاح CI أو مفتاح مسؤول، أو من شخص غير صاحب التغيير وغير من عدّلوا مسودته.
سيناريوهات بإصداراتscenario versions
كل تعديل على سيناريو يحتفظ بالتعريف السابق، ولا تُحتسب إلا تشغيلات التعريف الحالي.
في CI وفي طلبات الدمجGitHub Action · GitHub App
يشغّل الـ CLI السيناريوهات لكل commit، ويضيف تطبيق GitHub فحصًا باسم “NanoFlags scenarios” إلى طلبات الدمج.

جرّب البوابة

Scenarios · checkout-v2draft 9f3c1a1 failing
  • 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])

3 of 4 passed on this draftPublish blocked by scenario checks
source: draft · productionواجهة المنتج · بيانات للتوضيح

بدّل بين المسودتين. لا يُفتح النشر إلا حين تنجح كل السيناريوهات على المسودة التي أمامك.

البيئات المحمية والترقية

لبيئة Production سياسة، ولتغييرها سياسة أيضًا.

يحدد المسؤولون لكل بيئة ما إذا كانت محمية، وما إذا كانت تشترط الموافقة وكم موافقًا، وما إذا كانت تشترط فحوص السيناريوهات. وتبدأ المشاريع الجديدة وبيئة Production فيها محمية.

  • التخفيف يحتاج إلى المالك

    OWNER_REQUIRED

    إزالة الحماية أو تخفيف سياسة بيئة محمية يحتاج إلى مالك المؤسسة، أما المسؤولون فيستطيعون تشديدها فقط.

  • ترقية مع سجل

    Staging → Production

    تنسخ الترقية إعدادات أعلام مختارة من مسودة بيئة إلى مسودة بيئة أخرى، ولا تنشر أبدًا. ويحفظ السجل النسخة المصدر، وما إذا كانت مسودة المصدر مطابقة لها، ونسخة البيئة الهدف والـ checksums قبل الترقية وبعدها.

  • مرتبطة بالنشر

    published_revision

    يُربط النشر التالي في البيئة الهدف بالترقية، فتستطيع تتبّع نسخة Production حتى نسخة Staging التي جاءت منها.

الاستعادة

تراجع دون إعادة كتابة التاريخ.

تحمّل الاستعادة إعدادات الأعلام في نسخة سابقة، والشرائح التي كانت تستخدمها، إلى المسودة. ثم تنشرها نسخةً جديدة عبر الفحوص نفسها التي يمر بها أي تغيير آخر. لا يُحذف شيء.

  • تُعرض الأعلام التي أُضيفت بعد تلك النسخة، لتقرر ما تفعله بها.
  • تحتاج الاستعادة إلى صلاحية محرّر، ويخضع نشرها لسياسة البيئة.
  • تبقى كل نسخة قابلة للقراءة طوال عمر المشروع.
RevisionsProductionlive r185
  • r185

    Raise checkout-v2 to 50% in EU

    lee · 12:06

    current
  • r184

    checkout-v2 to 25% in EU

    lee · 10 Nov 09:12

    Restore to draft
  • r183

    Enable new-pricing-page for internal staff

    omar · 9 Nov 16:40

    Restore to draft

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

history · times in UTCواجهة المنتج · بيانات للتوضيح

سجل التدقيق

تكتبه قاعدة البيانات، لا العميل.

تسجّل triggers قاعدة البيانات والدوال على الخادم تعديلاتِ المسودة والموافقات وعمليات النشر وتغييرات المفاتيح والسياسات والأعضاء. وسجل التدقيق للقراءة فقط عبر الـ API.

audit_log · read-onlyواجهة المنتج · بيانات للتوضيح
  1. 12:06:14leepublishedr185 · production
  2. 12:04:51leeapprovedchange · draft 9f3c1a
  3. 12:01:09ciscenarios4/4 passed · commit 3e1f2a0
  4. 11:58:32mayaediteddraft · checkout-v2
  • يذكر كل قيد الفاعل والكائن وملخصًا، مع التفاصيل بيانات منظّمة.
  • تبقى القيود بعد حذف مشروعها: حذف المشروع يُبقي سجل تدقيقه.
  • تصدير سجل التدقيق متاح في خطة Scale.

أدلة الإصدار

منشورة، أو مُبلَغ عنها، أو مجهولة. لا افتراضات.

تعرض صفحة التغيير ما الذي اختُبر، ومن وافق عليه، وإلى أي نسخة تحوّل، وما الذي تُبلغ خدماتك أنها تشغّله. ويُبقي NanoFlags هذه الحالات منفصلة بوضوح، ولا يصف أي إصدار بأنه “آمن”.

  • منشورة

    النسخة التي يقدّمها الـ edge للبيئة.

  • مُبلَغ عنها

    عملية تستخدم مفتاحًا لهذه البيئة قالت إنها حمّلت النسخة N. والبلاغ يخص تلك العملية، لا كل النسخ العاملة.

  • مجهولة

    لم يصل أي بلاغ. ربما القياس معطّل أو محجوب أو خارج العيّنة. يُظهر NanoFlags هذه الفجوة بدلًا من افتراض التطابق.

Raise checkout-v2 to 50% in EUproductionpublished r185
  1. فتحت مايا التغيير

    draft 9f3c1a · base r184

  2. نجحت 4 من 4 سيناريوهات

    مفتاح CI · commit 3e1f2a0

  3. وافق لي

    ليس صاحب التغيير ولا من محرّري المسودة · مرتبطة بـ 9f3c1a

  4. رُقّي من staging r212

    سجل الترقية مرتبط

  5. نُشرت r185 · موقّعة

    أبلغت 3 من 4 خدمات · واحدة مجهولة

changes / raise-checkout-v2 · UTCواجهة المنتج · بيانات للتوضيح

ما الذي تتضمنه كل خطة

الموافقات الإلزامية وفحوص السيناريوهات ونتائج تشغيلات CI والـ webhooks متاحة في خطتي Team وScale. وجلسات الاختبار المشتركة وتصدير سجل التدقيق في خطة Scale. أما المسودات والنسخ والاستعادة وسجل التدقيق ففي كل الخطط. ولا تحجب أي خطة النشر: تبقى البيانات الموجودة قابلة للقراءة.

قارن الخطط

ضع عينًا ثانية على Production.

ابدأ مجانًا بخطة Explore، وفعّل الموافقات وفحوص السيناريوهات الإلزامية عند الانتقال إلى Team.