كيف أقلل التنبيهات المتكررة دون إخفاء الأدلة؟
النتائج تجمع الوقوعات
النتيجة في التقرير مجموعة للعرض. عندما يُطلق الفحص نفسه في عدة مواضع، يعرض التقرير نتيجة واحدة تضم كل المواضع في affected_endpoints، وكل **وقوع** في occurrences ولكل منها بصمته. أما fingerprint الخاصة بالنتيجة فهي بصمة الوقوع الأساسي، أي الموضع الذي يأتي أولًا في الترتيب.
تعمل الهوية وخطوط الأساس و.fendix-ignore على مستوى الوقوعات. يستبعد المحرك أولًا ثم يجمع ما تبقى، فلا يؤثر وقوع مستبعد في نقطة النهاية أو الدليل أو القرار المعروض، ولا يُخفى وقوع في شيفرة الإنتاج لمجرد أنه كان سيشارك نتيجة مع بيانات اختبار مستبعدة.
استخدم خط الأساس لرصد التغيير
يوضح خط الأساس ما هو جديد. يُعد الوقوع جديدًا ما لم يُثبت خط الأساس أن هذا الوقوع بعينه كان موجودًا عند حفظه. إضافة موضع إلى نتيجة قائمة تُبلغ عن ذلك الموضع وحده، وحذف موضع لا يُنشئ نتيجة جديدة، ونقل الشيفرة إلى سطر آخر لا يجعلها جديدة.
خط الأساس ليس موافقة ولا يغيّر الخطورة الأصلية. يكتب --save-baseline الإصدار الثاني من صيغة خط الأساس، ويسجل كل وقوع.
fendix scan --code . --save-baseline baseline.json
fendix scan --code . --baseline baseline.jsonاستخدم .fendix-ignore لاستثناء مراجَع
تُطبَّق كل قاعدة على كل وقوع على حدة، فتستبعد بالضبط الوقوعات التي تطابقها. ضع سببًا محددًا لكل استبعاد، وأضف تاريخ انتهاء متى أمكن. استخدم أضيق محدد مستقر: fingerprint لوقوع بعينه، أو نمط مسار.
ignore:
# one durable occurrence identity
- fingerprint: 4c701b3a3a1f3c118320a8ca99974d103287d459
reason: "Accepted risk, JIRA-1234"
until: 2026-12-01
# test fixtures at any depth; production occurrences are still reported
- endpoint: "**/tests/**"
category: secrets
reason: "Sample credentials in test fixtures"المحددات ونطاقها
يحسم كل قاعدةٍ محددٌ واحد، بالترتيب المعروض. إذا ضُبط fingerprint أو id فإن endpoint وcategory في القاعدة نفسها يُتجاهلان ويُسجَّل تحذير؛ اكتب قواعد منفصلة بدلًا من ذلك.
- fingerprint
- وقوع واحدمستقر ومفضّل. في النتيجة المجمّعة انسخ بصمة الوقوع المقصود من
occurrences. - id
- المجموعة المعروضة كلهامعرّف موضعي SEC-NNN. يشمل أيضًا الوقوعات التي تُضاف إلى تلك المجموعة لاحقًا، وقد يشير إلى نتيجة أخرى بعد أي تغيير. للفرز المؤقت فقط.
- endpoint (+ category)
- وقوع واحديطابق مسار الوقوع نفسه. ومع category يجب أن يتطابق الاثنان.
- category
- كل وقوع فيهاواسع جدًا. استخدمه فقط إذا كانت الفئة كلها خارج النطاق.
أنماط نقطة النهاية
**كجزء كامل من المسار يطابق صفرًا أو أكثر من المجلدات:**/tests/**يطابقtests/a.pyوpkg/tests/a.pyوالمسارات الأعمق.*يطابق داخل جزء واحد من المسار:src/*.pyيطابقsrc/app.pyولا يطابقsrc/sub/app.py.- النمط ذو المحرف البديل الخالي من
/يطابق جزءًا من المسار على أي عمق، كما في.gitignore:*_test.pyيطابقa/b/x_test.py. - يحتفظ
dir/*وprefix*بمعناهما التاريخي كبادئة. - يُحذف
:lineمن موضع الشيفرة قبل المطابقة، والنمط المساوي لـpath:lineكاملًا يثبّت ذلك السطر وحده. - في
METHOD /pathيُطابق المسار وحده. المطابقة لا تميّز حالة الأحرف، ويُعامل\في النمط كـ/.
الترقية من v3.5.1 أو ما قبله
تُحمَّل خطوط الأساس المحفوظة بالإصدار v3.5.1 أو ما قبله، لكنها سجلت مجموعات لا وقوعات. يُثبت كل إدخال بصمته وحدها، ووجود نتيجة من النوع نفسه في كل موضع مسجّل بدقة؛ وكل ما عدا ذلك جديد. أعد حفظ خط الأساس مرة واحدة باستخدام --save-baseline.
كانت قاعدة fingerprint: المنسوخة من نتيجة مجمّعة تستبعد المجموعة كلها، وأصبحت الآن تستبعد الوقوع الذي تسميه فقط. وصار **/ يطابق صفرًا من المجلدات أيضًا، ولم يعد * يعبر /. قدّم الإصدار الثالث من Fendix البصمة الدلالية fendix/v2؛ أعد إنشاء خطوط الأساس وقواعد البصمة السابقة له.
لماذا يعمل بهذه الطريقة؟
اقرأ حدود الهوية الدقيقة في بصمات النتائج. وللاستثناءات المحكومة استخدم سجلات القرار والمخاطرة المقبولة وموافقات الإصدار. تجد خيارات خط الأساس والاستبعاد الدقيقة في مرجع سياسة وسجل scan.