حماية الفرع
حماية فرع Apothem على main: قاعدة الحماية الفعّالة، وفحوص الحالة المطلوبة فيها، والفحوص التي تنتظر الإضافة.
فرع main في Apothem محميّ بقاعدة حماية فرع كلاسيكية في GitHub. لا توجد في المستودع أي مجموعات قواعد. تفرض الحماية انضباط مجموعة التغييرات المُعلَن في rules/production-ready-prs.md وتُغذّي فحصَي Branch-Protection و**Code-Review** في OpenSSF Scorecard.
تُسجّل هذه الصفحة الإعدادات الفعّالة بدقّة، كما قُرئت آخر مرة من واجهة برمجة تطبيقات GitHub في 2026-10-07. أي إعداد ينويه المشرف لكنه لم يُطبّقه بعد لا يظهر إلا تحت تغييرات المشرف المعلّقة.
إعدادات الحماية
| الإعداد | حقل الواجهة البرمجية | القيمة الفعّالة | الأثر |
|---|---|---|---|
| اشتراط طلب سحب قبل الدمج | required_pull_request_reviews (موجود) | ✅ | تصل التغييرات إلى main عبر طلب سحب. |
| المراجعات الموافِقة المطلوبة | required_approving_review_count | 0 | يُدمَج طلب السحب دون مراجعة موافِقة. راجع نموذج المشرف المنفرد. |
| إسقاط الموافقات القديمة عند الكوميتات الجديدة | dismiss_stale_reviews | ✅ | لا تُحتسَب الموافقة الممنوحة قبل دفع جديد. |
| اشتراط مراجعة من Code Owners | require_code_owner_reviews | ❌ | تفعيل هذا قبل انضمام مشرف ثانٍ يُوقِع طلبات سحب المشرف المنفرد في انسداد. |
| اشتراط الموافقة على أحدث دفع قابل للمراجعة | require_last_push_approval | ❌ | يشترط GitHub أن تأتي تلك الموافقة من شخص غير الذي أجرى الدفع، وهو ما لا يستطيع المشرف المنفرد توفيره. |
| اشتراط نجاح فحوص الحالة | required_status_checks | ✅ | يجب أن تنجح السياقات الـ 12 المسرودة تحت فحوص الحالة المطلوبة. |
| اشتراط أن تكون الفروع مُحدَّثة قبل الدمج | required_status_checks.strict | ❌ | يمكن دمج طلب سحب عندما تكون فحوصه المطلوبة قد نجحت مقابل main أقدم. ثم تختبر سِيَر العمل التي تعمل عند الدفع إلى main النتيجةَ المدموجة. |
| اشتراط حلّ المحادثات قبل الدمج | required_conversation_resolution | ✅ | تحجب خيوط المراجعة المفتوحة الدمج. |
| اشتراط كوميتات موقَّعة | required_signatures | ❌ | تُوقَّع كوميتات الإصدار محليًا. ينتظر الفرض حتى توثّق وثائق انضمام المساهمين إعداد التوقيع عبر SSH أو GPG. |
| اشتراط تاريخ خطّي | required_linear_history | ✅ | يُبقي التاريخ العام لـ main خطًّا واحدًا. |
| قفل الفرع | lock_branch | ❌ | يقبل main عمليات الدمج. |
| عدم السماح بتجاوز الإعدادات أعلاه | enforce_admins | ❌ | لا تُلزِم الإعدادات أعلاه مسؤول المستودع. يستطيع المسؤول الدمج دون الفحوص المطلوبة أو الدفع إلى main مباشرةً. |
| السماح بالدفع بالقوة | allow_force_pushes | ❌ | الدفع بالقوة إلى main محظور على الجميع، بمن فيهم المسؤولون. |
| السماح بالحذف | allow_deletions | ❌ | لا يستطيع أحد حذف main، بمن فيهم المسؤولون. |
نموذج المشرف المنفرد
للمستودع مشرف واحد. ينصّ GitHub على ما يلي: «لا يستطيع مؤلّفو طلبات السحب الموافقة على طلبات السحب الخاصة بهم.» لذلك فإن أي عدد موافقات مطلوب يزيد على 0 سيحجب كل طلب سحب من المشرف. تشترط القاعدة الفعّالة طلب سحب مع 0 موافقات وتترك enforce_admins مُعطَّلًا.
بالنسبة لأي شخص لا يملك صلاحية المسؤول، لا يزال الدمج يتطلّب أن تكون فحوص الحالة المطلوبة خضراء، وأن تكون محادثات المراجعة محلولة، وأن يكون التاريخ خطّيًا. ويبقى الدفع بالقوة وحذف main محظورَين على كل حساب.
عندما ينضمّ مشرف ثانٍ، تكون الإعدادات الأقوى: موافقة مطلوبة واحدة على الأقل، والموافقة على أحدث دفع، ومراجعة CODEOWNERS، وتفعيل enforce_admins. ولا تنطبق مراسم دمج المشرف المنفرد إلا على حماية تشترط موافقةً وتفرضها على المسؤولين.
فحوص الحالة المطلوبة
كلٌّ من هذه السياقات الـ 12 مطلوب، ومصدره GitHub Actions (مُعرِّف التطبيق 15368):
quality / ubuntu-latest / py3.10
quality / ubuntu-latest / py3.11
quality / ubuntu-latest / py3.12
quality / ubuntu-latest / py3.13
quality / ubuntu-latest / py3.14
quality / windows-latest / py3.10
quality / windows-latest / py3.11
quality / windows-latest / py3.12
quality / windows-latest / py3.13
quality / windows-latest / py3.14
coverage
Require Signed-off-by| السياق | سير العمل والمهمة | كيف يُبلِغ عن حالته في كل طلب سحب |
|---|---|---|
quality / <os> / py<ver> (10) | ci.yml، المهمة quality | يعمل ci.yml عندما يمسّ طلب السحب مسار شيفرة أو إعدادات. ويُبلِغ ci-docs-stub.yml عن السياقات نفسها في طلب سحب يقتصر على الوثائق. |
coverage | ci.yml، المهمة coverage | مثل quality. |
Require Signed-off-by | dco.yml، المهمة dco | لا يحمل مُشغِّل طلبات السحب الخاص به مُرشِّح paths، لذا يعمل على كل طلب سحب إلى main. |
تعمل خلية الإصدار التمهيدي quality / ubuntu-latest / py3.15 في ci.yml مع continue-on-error وهي غير مطلوبة. ويجوز لأي سير عمل آخر، بما في ذلك CodeQL وScorecard وpip-audit، أن يُبلِغ عن حالة، لكن نتيجته لا تكون شرطًا للدمج ما لم يُضَف سياقه إلى هذه القائمة.
تغييرات المشرف المعلّقة
ينوي المشرف إضافة هذه السياقات الـ 25 إلى القائمة المطلوبة. تُعلِن ترويسة كل سير عمل أن المهمة فحصٌ مطلوب، ولا يحمل مُشغِّل طلبات السحب الخاص به مُرشِّح paths، لذا يعمل على كل طلب سحب إلى main. وإلى أن يُضاف سياقٌ ما، لا يحجب الفشلُ فيه الدمج.
clean-install-gate.yml، 7 سياقات:
installer-shell-compat / ubuntu-latest
installer-shell-compat / macos-latest
installer-shell-compat / windows-latest
clean-install-gate / ubuntu-latest
clean-install-gate / windows-latest
wheel-smoke / ubuntu-latest
wheel-smoke / windows-latestharness-matrix.yml، 17 سياقًا، سياق matrix (<adapter>) واحد لكل محوّل في مصفوفة المهمة:
matrix (antigravity)
matrix (claude-code)
matrix (codebuddy)
matrix (codex)
matrix (cursor)
matrix (gemini-cli)
matrix (github-copilot)
matrix (glm)
matrix (hermes)
matrix (kimi-code)
matrix (kiro)
matrix (open-claw)
matrix (opencode)
matrix (qwen-code)
matrix (trae)
matrix (windsurf)
matrix (zed)installer-lint.yml، سياق واحد:
installer-lintبمجرد أن تصبح سياقات harness-matrix.yml مطلوبة، يضيف تسجيل محوّل جديد سياق matrix (<adapter>)، وتكتسبه القائمة المطلوبة في التغيير نفسه. ويبقى الإعداد «اشتراط أن تكون الفروع مُحدَّثة قبل الدمج» مُعطَّلًا. وعند تطبيق تغيير معلّق، انقله إلى الأقسام الفعّالة أعلاه في التغيير نفسه.
وتيرة التدقيق
يُراجَع هذا الملف في كل تدقيق أمني وعند كل نقطة تفتيش لهندسة الإصدار. الانحراف بين هذا الملف والتهيئة الفعلية لحماية الفرع اكتشافٌ عالي الخطورة. اقرأ التهيئة الفعّالة باستخدام:
gh api repos/ahmed-g-gad/apothem/branches/main/protection
gh api repos/ahmed-g-gad/apothem/rulesetsالمراجع
- OpenSSF Scorecard — فحص Branch-Protection
- GitHub — حول الفروع المحمية
- GitHub — إدارة قاعدة حماية فرع
- GitHub — الموافقة على طلب سحب يتطلّب مراجعات
- CODEOWNERS في Apothem — ملكية المراجعة بحسب المسار
- سِيَر عمل CI في Apothem — سِيَر العمل التي يأتي منها كل سياق مطلوب
rules/production-ready-prs.mdالقسم 1 — انضباط مجموعة التغييرات نفسها الذي تفرضه هذه الحماية