تأمين وكيل ذكاء اصطناعي يستخدم الأدوات: أقل الصلاحيات والموافقات وOAuth لـMCP وعزل Dockerتأمين وكيل ذكاء اصطناعي يستخدم الأدوات: أقل الصلاحيات والموافقات وOAuth لـMCP وعزل Docker

يبني هذا الدليل غلافاً أمنياً عملياً حول وكيل يستطيع قراءة مستودع، والتعليق على قضية، وربما الوصول إلى أدوات أقوى. الهدف ليس تعظيم الاستقلالية، بل تقليص مساحة الضرر: صلاحيات ضيقة، قرار يرفض افتراضياً، موافقة بشرية قبل الكتابة، حدود OAuth صحيحة عند استخدام MCP عن بُعد، تنفيذ معزول، وسجل تدقيق واضح. طبقة السياسة المستقلة عن النموذج نُفذت محلياً فعلاً؛ وقد نجحت أربعة اختبارات: السماح بقراءة مصرّح بها، وفرض الموافقة على الكتابة، ومنع قراءة سر، ورفض أداة مجهولة. أما تكامل Agents SDK فمبني على التوثيق الرسمي لكنه لم يُنفذ محلياً لأن الحزمة لم تكن مثبتة ولأن pip لم يملك اتصالاً شبكياً في بيئة التنفيذ. تُسجّل هذه المحدودية صراحة في تقرير التحقق بدلاً من الادعاء بأن الاختبار تم.

مسار التحكم: المعنى ظاهر داخل التسميات الدلالية وليس في مربعات مرقمة عامة.
مسار التحكم: المعنى ظاهر داخل التسميات الدلالية وليس في مربعات مرقمة عامة.

المتطلبات وحالة البداية

المتطلبات: Python 3.11+، مستودع اختبار، حساب GitHub اختباري مع token محدود الصلاحيات إذا فعّلت API، وDocker لاختبار العزل، ومشروع OpenAI إذا شغلت تكامل Agents SDK فعلياً. لا تستخدم مستودعات أو أسرار الإنتاج في الاختبارات.

الدليل المتوقع: احتفظ بمعرف الطلب وقرار السياسة وهوية الأداة ونتيجة قابلة للرصد. عبارة من النموذج تقول «نجحت العملية» ليست دليلاً. الدليل يأتي من استجابة API أو إعادة قراءة الحالة بعد التغيير أو رمز رجوع أو أثر يمكن قياسه. حالات الفشل التي يجب اختبارها: محتوى خارجي يحمل تعليمات متعارضة، معامل خارج allowlist، مورد مفقود، token منتهي، 401، 403، timeout، ورفض بشري. حدّد السلوك المتوقع قبل الاختبار حتى لا يبرر الفريق أي نتيجة بعد وقوعها. قرار معماري: إذا أمكن تحضير العملية ثم تطبيقها فافصل المرحلتين. يمكن أتمتة التحضير وإنتاج diff، بينما يطبق التغيير بعد التحقق. هذا يجعل التدقيق أوضح ويجعل rollback أكثر واقعية.

شيفرة السياسة المنفذة محلياً

نفّذ طبقة السياسة أولاً من دون نموذج. أضف assertions الأربع التالية. النتيجة المرصودة في بيئة التنفيذ: 4 policy tests passed. بعد ذلك فقط اربط النموذج وبيئة الأدوات. بهذه الطريقة يمكن فصل عيب التفويض عن عيب التوليد.

from dataclasses import dataclass
from enum import Enum

@dataclass(frozen=True)
class Decision:
    allowed: bool
    approval_required: bool
    reason: str

READ_ONLY = {"repo.read", "issue.read", "docs.read"}
WRITE = {"issue.comment", "issue.label"}
DESTRUCTIVE = {"repo.delete", "secret.read", "shell.root"}

def decide(tool: str, user_scopes: set[str]) -> Decision:
    if tool in DESTRUCTIVE:
        return Decision(False, True, "blocked-by-policy")
    if tool in WRITE:
        if tool not in user_scopes:
            return Decision(False, True, "scope-missing")
        return Decision(True, True, "human-approval-required")
    if tool in READ_ONLY:
        if tool not in user_scopes:
            return Decision(False, False, "scope-missing")
        return Decision(True, False, "read-only")
    return Decision(False, True, "unknown-tool-fail-closed")
assert decide("repo.read", {"repo.read"}).allowed
assert decide("issue.comment", {"issue.comment"}).approval_required
assert not decide("secret.read", {"secret.read"}).allowed
assert not decide("unknown.action", {"unknown.action"}).allowed

1. بناء مصفوفة القدرات قبل كتابة الـprompt

أنشئ جدولاً يحوي tool_id والمورد والأثر وscope والخطر والموافقة والدليل المتوقع. في وكيل GitHub مصغر يمكن اعتبار repo.read وissue.read للقراءة، وissue.comment كتابة ظاهرة، بينما secret.read وshell.root ممنوعان. يصبح هذا الجدول مصدر الحقيقة للسياسة. توصي OWASP بأقل الصلاحيات والتفويض لكل أداة، وتوثق GitHub أذونات دقيقة لعائلات endpoints. لا يملك النموذج حق توسيع المصفوفة. التحقق: أي قدرة لا يستطيع الفريق تصنيفها تبقى معطلة. [S9][S11]

حالات الفشل التي يجب اختبارها: محتوى خارجي يحمل تعليمات متعارضة، معامل خارج allowlist، مورد مفقود، token منتهي، 401، 403، timeout، ورفض بشري. حدّد السلوك المتوقع قبل الاختبار حتى لا يبرر الفريق أي نتيجة بعد وقوعها. قرار معماري: إذا أمكن تحضير العملية ثم تطبيقها فافصل المرحلتين. يمكن أتمتة التحضير وإنتاج diff، بينما يطبق التغيير بعد التحقق. هذا يجعل التدقيق أوضح ويجعل rollback أكثر واقعية. ضبط النطاق: لا تعرض للنموذج قائمة موارد أوسع من حاجة المهمة الحالية. الوكيل الذي يعمل على issue واحدة لا يحتاج إلى كل المستودعات والفروع والأسرار. تقليل السياق يقلل أيضاً مسارات التسريب العرضي.

Verification: ضبط النطاق: لا تعرض للنموذج قائمة موارد أوسع من حاجة المهمة الحالية. الوكيل الذي يعمل على issue واحدة لا يحتاج إلى كل المستودعات والفروع والأسرار. تقليل السياق يقلل أيضاً مسارات التسريب العرضي.

2. تنفيذ سياسة رفض افتراضي مستقلة عن النموذج

استخدم دالة حتمية تقارن tool_id بصلاحيات المستخدم. الأداة المجهولة مرفوضة. العملية المدمرة مرفوضة حتى لو ظهر scope بالاسم نفسه. الكتابة المسموحة تظل approval_required=true. نُفذت هذه الطبقة محلياً بأربع assertions وظهرت النتيجة “4 policy tests passed”. الميزة الأساسية أن prompt injection ناجحاً ضد النموذج لا يستطيع إعادة كتابة جدول التفويض. التحقق: أضف معرف أداة وهمياً؛ يجب أن تبقى allowed=false.

قرار معماري: إذا أمكن تحضير العملية ثم تطبيقها فافصل المرحلتين. يمكن أتمتة التحضير وإنتاج diff، بينما يطبق التغيير بعد التحقق. هذا يجعل التدقيق أوضح ويجعل rollback أكثر واقعية. ضبط النطاق: لا تعرض للنموذج قائمة موارد أوسع من حاجة المهمة الحالية. الوكيل الذي يعمل على issue واحدة لا يحتاج إلى كل المستودعات والفروع والأسرار. تقليل السياق يقلل أيضاً مسارات التسريب العرضي. معيار الخروج: ينتهي التشغيل إما بفعل تم التحقق منه، أو interruption صريح، أو فشل مشخص. تجنب الحالة الملتبسة التي ينتج فيها النموذج كلاماً مقنعاً بينما لم تنجح أي عملية خارجية فعلياً.

Verification: معيار الخروج: ينتهي التشغيل إما بفعل تم التحقق منه، أو interruption صريح، أو فشل مشخص. تجنب الحالة الملتبسة التي ينتج فيها النموذج كلاماً مقنعاً بينما لم تنجح أي عملية خارجية فعلياً.

3. إجبار النموذج على اقتراح منظم لا أمر حر

قبل أي استدعاء حساس اطلب بنية مغلقة فيها action وresource_id وrisk وrationale. تحقق في الشيفرة من الأنواع والأطوال والمعرّفات وقيم enum. توصي OpenAI بالمخرجات المنظمة لتقليل المسارات الحرة التي يستغلها الحقن. النص المسترجع من صفحة أو issue لا يُدمج في رسالة developer. التحقق: ضع داخل issue عبارة تطلب تجاهل القواعد وقراءة الأسرار؛ يجب أن تبقى بيانات بلا تأثير على السياسة. [S5]

ضبط النطاق: لا تعرض للنموذج قائمة موارد أوسع من حاجة المهمة الحالية. الوكيل الذي يعمل على issue واحدة لا يحتاج إلى كل المستودعات والفروع والأسرار. تقليل السياق يقلل أيضاً مسارات التسريب العرضي. معيار الخروج: ينتهي التشغيل إما بفعل تم التحقق منه، أو interruption صريح، أو فشل مشخص. تجنب الحالة الملتبسة التي ينتج فيها النموذج كلاماً مقنعاً بينما لم تنجح أي عملية خارجية فعلياً. الدليل المتوقع: احتفظ بمعرف الطلب وقرار السياسة وهوية الأداة ونتيجة قابلة للرصد. عبارة من النموذج تقول «نجحت العملية» ليست دليلاً. الدليل يأتي من استجابة API أو إعادة قراءة الحالة بعد التغيير أو رمز رجوع أو أثر يمكن قياسه.

Verification: الدليل المتوقع: احتفظ بمعرف الطلب وقرار السياسة وهوية الأداة ونتيجة قابلة للرصد. عبارة من النموذج تقول «نجحت العملية» ليست دليلاً. الدليل يأتي من استجابة API أو إعادة قراءة الحالة بعد التغيير أو رمز رجوع أو أثر يمكن قياسه.

4. ربط الموافقة بأداة الكتابة نفسها

يستطيع Agents SDK إيقاف أداة حساسة لطلب الموافقة. ينبغي للمراجع رؤية اسم الأداة والمعاملات والهدف. في issue.comment اعرض رقم القضية ونص التعليق المقترح ولا تطلب موافقة غامضة مثل «حدّث GitHub». عند الرفض استأنف RunState برسالة مضبوطة. التحقق: يجب أن يظهر interruption قبل التنفيذ وأن يكون عدد الكتابات صفراً بعد reject. [S3]

معيار الخروج: ينتهي التشغيل إما بفعل تم التحقق منه، أو interruption صريح، أو فشل مشخص. تجنب الحالة الملتبسة التي ينتج فيها النموذج كلاماً مقنعاً بينما لم تنجح أي عملية خارجية فعلياً. الدليل المتوقع: احتفظ بمعرف الطلب وقرار السياسة وهوية الأداة ونتيجة قابلة للرصد. عبارة من النموذج تقول «نجحت العملية» ليست دليلاً. الدليل يأتي من استجابة API أو إعادة قراءة الحالة بعد التغيير أو رمز رجوع أو أثر يمكن قياسه. حالات الفشل التي يجب اختبارها: محتوى خارجي يحمل تعليمات متعارضة، معامل خارج allowlist، مورد مفقود، token منتهي، 401، 403، timeout، ورفض بشري. حدّد السلوك المتوقع قبل الاختبار حتى لا يبرر الفريق أي نتيجة بعد وقوعها.

Verification: حالات الفشل التي يجب اختبارها: محتوى خارجي يحمل تعليمات متعارضة، معامل خارج allowlist، مورد مفقود، token منتهي، 401، 403، timeout، ورفض بشري. حدّد السلوك المتوقع قبل الاختبار حتى لا يبرر الفريق أي نتيجة بعد وقوعها.

5. إحاطة function tools بحواجز أدوات

حاجز إدخال عام لا يحمي بالضرورة كل استدعاء داخلي في سلسلة متعددة الوكلاء. tool guardrails يمكنها فحص مدخلات ومخرجات function tools المخصصة. أضف حدود طول وallowlist للموارد وفحص المعرّفات. في الكتابة ارفض أي repository خارج الهدف الذي اختاره المستخدم. التحقق: مرر owner/repo غير متوقع؛ ينبغي أن يتوقف الاستدعاء قبل الأثر الجانبي. [S4]

الدليل المتوقع: احتفظ بمعرف الطلب وقرار السياسة وهوية الأداة ونتيجة قابلة للرصد. عبارة من النموذج تقول «نجحت العملية» ليست دليلاً. الدليل يأتي من استجابة API أو إعادة قراءة الحالة بعد التغيير أو رمز رجوع أو أثر يمكن قياسه. حالات الفشل التي يجب اختبارها: محتوى خارجي يحمل تعليمات متعارضة، معامل خارج allowlist، مورد مفقود، token منتهي، 401، 403، timeout، ورفض بشري. حدّد السلوك المتوقع قبل الاختبار حتى لا يبرر الفريق أي نتيجة بعد وقوعها. قرار معماري: إذا أمكن تحضير العملية ثم تطبيقها فافصل المرحلتين. يمكن أتمتة التحضير وإنتاج diff، بينما يطبق التغيير بعد التحقق. هذا يجعل التدقيق أوضح ويجعل rollback أكثر واقعية.

Verification: قرار معماري: إذا أمكن تحضير العملية ثم تطبيقها فافصل المرحلتين. يمكن أتمتة التحضير وإنتاج diff، بينما يطبق التغيير بعد التحقق. هذا يجعل التدقيق أوضح ويجعل rollback أكثر واقعية.

6. تأمين MCP البعيد بـOAuth والاكتشاف القياسي

في MCP محمي عبر HTTP اتبع نموذج resource server في المواصفة. ينشر الخادم Protected Resource Metadata، ويكتشف العميل خادم التفويض، وتدخل PKCE والمطابقة الدقيقة للـredirect URI ضمن المتطلبات المذكورة. اطلب فقط scopes الضرورية للعملية الحالية. استجابة 403 insufficient_scope لا ينبغي أن توسع الصلاحيات تلقائياً؛ اعرض طلب الرفع وسببه. التحقق: token للقراءة فقط يفشل في الكتابة مع استمرار القراءات المسموحة. [S8]

حالات الفشل التي يجب اختبارها: محتوى خارجي يحمل تعليمات متعارضة، معامل خارج allowlist، مورد مفقود، token منتهي، 401، 403، timeout، ورفض بشري. حدّد السلوك المتوقع قبل الاختبار حتى لا يبرر الفريق أي نتيجة بعد وقوعها. قرار معماري: إذا أمكن تحضير العملية ثم تطبيقها فافصل المرحلتين. يمكن أتمتة التحضير وإنتاج diff، بينما يطبق التغيير بعد التحقق. هذا يجعل التدقيق أوضح ويجعل rollback أكثر واقعية. ضبط النطاق: لا تعرض للنموذج قائمة موارد أوسع من حاجة المهمة الحالية. الوكيل الذي يعمل على issue واحدة لا يحتاج إلى كل المستودعات والفروع والأسرار. تقليل السياق يقلل أيضاً مسارات التسريب العرضي.

Verification: ضبط النطاق: لا تعرض للنموذج قائمة موارد أوسع من حاجة المهمة الحالية. الوكيل الذي يعمل على issue واحدة لا يحتاج إلى كل المستودعات والفروع والأسرار. تقليل السياق يقلل أيضاً مسارات التسريب العرضي.

7. عزل التنفيذ المحلي بدلاً من منح shell المضيف

إذا احتاج الوكيل تنفيذ شيفرة، استخدم container أو sandbox مخصصاً بلا أسرار mounted افتراضياً. يطبق Docker ملف seccomp افتراضياً على أساس allowlist وينصح بعدم تعطيله. أضف filesystem للقراءة فقط عند الإمكان، وشبكة محدودة، ومستخدماً غير مميز، وحدود CPU/ذاكرة، ودليل عمل مؤقتاً. الهدف ليس اعتبار container حاجزاً مثالياً بل تقليل نطاق الضرر. التحقق: بيئة الاختبار لا ترى أسرار المضيف وتفشل في عملية محظورة صراحة. [S10]

قرار معماري: إذا أمكن تحضير العملية ثم تطبيقها فافصل المرحلتين. يمكن أتمتة التحضير وإنتاج diff، بينما يطبق التغيير بعد التحقق. هذا يجعل التدقيق أوضح ويجعل rollback أكثر واقعية. ضبط النطاق: لا تعرض للنموذج قائمة موارد أوسع من حاجة المهمة الحالية. الوكيل الذي يعمل على issue واحدة لا يحتاج إلى كل المستودعات والفروع والأسرار. تقليل السياق يقلل أيضاً مسارات التسريب العرضي. معيار الخروج: ينتهي التشغيل إما بفعل تم التحقق منه، أو interruption صريح، أو فشل مشخص. تجنب الحالة الملتبسة التي ينتج فيها النموذج كلاماً مقنعاً بينما لم تنجح أي عملية خارجية فعلياً.

Verification: معيار الخروج: ينتهي التشغيل إما بفعل تم التحقق منه، أو interruption صريح، أو فشل مشخص. تجنب الحالة الملتبسة التي ينتج فيها النموذج كلاماً مقنعاً بينما لم تنجح أي عملية خارجية فعلياً.

8. تسجيل القرارات المفيدة من دون جمع الأسرار

ينبغي أن يربط السجل الإدخال بالاقتراح والأداة المطلوبة ونتيجة السياسة وهوية الموافق والنتيجة المرصودة. يمكن hash أو redact للحمولات الحساسة. يسجل tracing في Agents SDK استدعاءات الدوال والتحويلات والحواجز. التحقق: عند رفض كتابة يجب أن يحتوي السجل request_id وtool_id وpolicy_result=deny/review وألا يحتوي قيمة سرية. [S2]

ضبط النطاق: لا تعرض للنموذج قائمة موارد أوسع من حاجة المهمة الحالية. الوكيل الذي يعمل على issue واحدة لا يحتاج إلى كل المستودعات والفروع والأسرار. تقليل السياق يقلل أيضاً مسارات التسريب العرضي. معيار الخروج: ينتهي التشغيل إما بفعل تم التحقق منه، أو interruption صريح، أو فشل مشخص. تجنب الحالة الملتبسة التي ينتج فيها النموذج كلاماً مقنعاً بينما لم تنجح أي عملية خارجية فعلياً. الدليل المتوقع: احتفظ بمعرف الطلب وقرار السياسة وهوية الأداة ونتيجة قابلة للرصد. عبارة من النموذج تقول «نجحت العملية» ليست دليلاً. الدليل يأتي من استجابة API أو إعادة قراءة الحالة بعد التغيير أو رمز رجوع أو أثر يمكن قياسه.

Verification: الدليل المتوقع: احتفظ بمعرف الطلب وقرار السياسة وهوية الأداة ونتيجة قابلة للرصد. عبارة من النموذج تقول «نجحت العملية» ليست دليلاً. الدليل يأتي من استجابة API أو إعادة قراءة الحالة بعد التغيير أو رمز رجوع أو أثر يمكن قياسه.

9. بناء اختبارات عدائية واختبارات انحدار

أضف حالات يطلب فيها محتوى خارجي تجاوز السياسة، وأداة مجهولة، وscope مفقود، وموافقة مرفوضة، واستجابة MCP من نوع 401/403، وفشل sandbox. تقييمات التتبّع تفحص اختيار الأداة والتحويلات وانتهاكات السياسة. لا يقبل الإصدار إذا تراجعت هذه الحالات. التحقق: احتفظ بمعرفات حالات ثابتة بين الإصدارات للمقارنة القابلة لإعادة الإنتاج. [S6][S7]

معيار الخروج: ينتهي التشغيل إما بفعل تم التحقق منه، أو interruption صريح، أو فشل مشخص. تجنب الحالة الملتبسة التي ينتج فيها النموذج كلاماً مقنعاً بينما لم تنجح أي عملية خارجية فعلياً. الدليل المتوقع: احتفظ بمعرف الطلب وقرار السياسة وهوية الأداة ونتيجة قابلة للرصد. عبارة من النموذج تقول «نجحت العملية» ليست دليلاً. الدليل يأتي من استجابة API أو إعادة قراءة الحالة بعد التغيير أو رمز رجوع أو أثر يمكن قياسه. حالات الفشل التي يجب اختبارها: محتوى خارجي يحمل تعليمات متعارضة، معامل خارج allowlist، مورد مفقود، token منتهي، 401، 403، timeout، ورفض بشري. حدّد السلوك المتوقع قبل الاختبار حتى لا يبرر الفريق أي نتيجة بعد وقوعها.

Verification: حالات الفشل التي يجب اختبارها: محتوى خارجي يحمل تعليمات متعارضة، معامل خارج allowlist، مورد مفقود، token منتهي، 401، 403، timeout، ورفض بشري. حدّد السلوك المتوقع قبل الاختبار حتى لا يبرر الفريق أي نتيجة بعد وقوعها.

10. تجهيز rollback وkill switch وإجراء الحوادث

قبل الإنتاج اجعل تعطيل أداة فوراً وإبطال token وتقليل scopes والعودة إلى نسخة سياسة سابقة أموراً ممكنة. عند الحادث عطّل القدرة المتأثرة أولاً، واحفظ التتبّعات، وحدد الموارد المتأثرة، ثم أصلح الآلية لا نص الـprompt فقط. يضع NIST إدارة المخاطر عبر دورة الحياة، وتشمل OWASP المراقبة والتحقق العدائي. التحقق: نفذ تمريناً يُعطل issue.comment من دون تعطيل repo.read. [S9][S12]

الدليل المتوقع: احتفظ بمعرف الطلب وقرار السياسة وهوية الأداة ونتيجة قابلة للرصد. عبارة من النموذج تقول «نجحت العملية» ليست دليلاً. الدليل يأتي من استجابة API أو إعادة قراءة الحالة بعد التغيير أو رمز رجوع أو أثر يمكن قياسه. حالات الفشل التي يجب اختبارها: محتوى خارجي يحمل تعليمات متعارضة، معامل خارج allowlist، مورد مفقود، token منتهي، 401، 403، timeout، ورفض بشري. حدّد السلوك المتوقع قبل الاختبار حتى لا يبرر الفريق أي نتيجة بعد وقوعها. قرار معماري: إذا أمكن تحضير العملية ثم تطبيقها فافصل المرحلتين. يمكن أتمتة التحضير وإنتاج diff، بينما يطبق التغيير بعد التحقق. هذا يجعل التدقيق أوضح ويجعل rollback أكثر واقعية.

Verification: قرار معماري: إذا أمكن تحضير العملية ثم تطبيقها فافصل المرحلتين. يمكن أتمتة التحضير وإنتاج diff، بينما يطبق التغيير بعد التحقق. هذا يجعل التدقيق أوضح ويجعل rollback أكثر واقعية.

استكشاف الأعطال: خمس حالات يجب تحفيزها عمداً

  1. يقترح النموذج أداة ممنوعة: يجب أن ترفض السياسة قبل التنفيذ؛ أصلح كتالوج القدرات لا الـprompt وحده. الدليل المتوقع: احتفظ بمعرف الطلب وقرار السياسة وهوية الأداة ونتيجة قابلة للرصد. عبارة من النموذج تقول «نجحت العملية» ليست دليلاً. الدليل يأتي من استجابة API أو إعادة قراءة الحالة بعد التغيير أو رمز رجوع أو أثر يمكن قياسه.
  2. يعيد GitHub خطأ 403: افحص إذن endpoint المطلوب تحديداً ولا تمنح صلاحيات واسعة للراحة. حالات الفشل التي يجب اختبارها: محتوى خارجي يحمل تعليمات متعارضة، معامل خارج allowlist، مورد مفقود، token منتهي، 401، 403، timeout، ورفض بشري. حدّد السلوك المتوقع قبل الاختبار حتى لا يبرر الفريق أي نتيجة بعد وقوعها.
  3. لا تظهر الموافقة: تأكد أن شرط الموافقة مرتبط بالأداة المستدعاة فعلياً لا wrapper آخر. قرار معماري: إذا أمكن تحضير العملية ثم تطبيقها فافصل المرحلتين. يمكن أتمتة التحضير وإنتاج diff، بينما يطبق التغيير بعد التحقق. هذا يجعل التدقيق أوضح ويجعل rollback أكثر واقعية.
  4. يستطيع container رؤية سر المضيف: أزل mount وأنشئ workspace مؤقتاً وأعد الاختبار بهوية غير مميزة. ضبط النطاق: لا تعرض للنموذج قائمة موارد أوسع من حاجة المهمة الحالية. الوكيل الذي يعمل على issue واحدة لا يحتاج إلى كل المستودعات والفروع والأسرار. تقليل السياق يقلل أيضاً مسارات التسريب العرضي.
  5. يحوي التتبّع أسراراً: أضف redaction قبل التصدير ودوّر بيانات الاعتماد المكشوفة حسب إجراء الحوادث. معيار الخروج: ينتهي التشغيل إما بفعل تم التحقق منه، أو interruption صريح، أو فشل مشخص. تجنب الحالة الملتبسة التي ينتج فيها النموذج كلاماً مقنعاً بينما لم تنجح أي عملية خارجية فعلياً.

Rollback / recovery

الـrollback: عطّل أداة الكتابة أولاً، وأبطل token أو قلل صلاحياته، واستعد النسخة السابقة من policy.py، ثم أعد حالات الاختبار قبل إعادة التفعيل. احتفظ بتتبّعات الحادث منفصلة عن الأسرار. لا يكتمل rollback إلا عندما تستمر القراءات الضرورية بينما تبقى القدرة الخطرة معطلة.

الدليل المتوقع: احتفظ بمعرف الطلب وقرار السياسة وهوية الأداة ونتيجة قابلة للرصد. عبارة من النموذج تقول «نجحت العملية» ليست دليلاً. الدليل يأتي من استجابة API أو إعادة قراءة الحالة بعد التغيير أو رمز رجوع أو أثر يمكن قياسه. حالات الفشل التي يجب اختبارها: محتوى خارجي يحمل تعليمات متعارضة، معامل خارج allowlist، مورد مفقود، token منتهي، 401، 403، timeout، ورفض بشري. حدّد السلوك المتوقع قبل الاختبار حتى لا يبرر الفريق أي نتيجة بعد وقوعها. قرار معماري: إذا أمكن تحضير العملية ثم تطبيقها فافصل المرحلتين. يمكن أتمتة التحضير وإنتاج diff، بينما يطبق التغيير بعد التحقق. هذا يجعل التدقيق أوضح ويجعل rollback أكثر واقعية. ضبط النطاق: لا تعرض للنموذج قائمة موارد أوسع من حاجة المهمة الحالية. الوكيل الذي يعمل على issue واحدة لا يحتاج إلى كل المستودعات والفروع والأسرار. تقليل السياق يقلل أيضاً مسارات التسريب العرضي. معيار الخروج: ينتهي التشغيل إما بفعل تم التحقق منه، أو interruption صريح، أو فشل مشخص. تجنب الحالة الملتبسة التي ينتج فيها النموذج كلاماً مقنعاً بينما لم تنجح أي عملية خارجية فعلياً.

ملحق تشغيلي: معايير الدليل لكل مرحلة

ضابط 1: الدليل المتوقع: احتفظ بمعرف الطلب وقرار السياسة وهوية الأداة ونتيجة قابلة للرصد. عبارة من النموذج تقول «نجحت العملية» ليست دليلاً. الدليل يأتي من استجابة API أو إعادة قراءة الحالة بعد التغيير أو رمز رجوع أو أثر يمكن قياسه. قرار معماري: إذا أمكن تحضير العملية ثم تطبيقها فافصل المرحلتين. يمكن أتمتة التحضير وإنتاج diff، بينما يطبق التغيير بعد التحقق. هذا يجعل التدقيق أوضح ويجعل rollback أكثر واقعية.

ضابط 2: حالات الفشل التي يجب اختبارها: محتوى خارجي يحمل تعليمات متعارضة، معامل خارج allowlist، مورد مفقود، token منتهي، 401، 403، timeout، ورفض بشري. حدّد السلوك المتوقع قبل الاختبار حتى لا يبرر الفريق أي نتيجة بعد وقوعها. ضبط النطاق: لا تعرض للنموذج قائمة موارد أوسع من حاجة المهمة الحالية. الوكيل الذي يعمل على issue واحدة لا يحتاج إلى كل المستودعات والفروع والأسرار. تقليل السياق يقلل أيضاً مسارات التسريب العرضي.

ضابط 3: قرار معماري: إذا أمكن تحضير العملية ثم تطبيقها فافصل المرحلتين. يمكن أتمتة التحضير وإنتاج diff، بينما يطبق التغيير بعد التحقق. هذا يجعل التدقيق أوضح ويجعل rollback أكثر واقعية. معيار الخروج: ينتهي التشغيل إما بفعل تم التحقق منه، أو interruption صريح، أو فشل مشخص. تجنب الحالة الملتبسة التي ينتج فيها النموذج كلاماً مقنعاً بينما لم تنجح أي عملية خارجية فعلياً.

ضابط 4: ضبط النطاق: لا تعرض للنموذج قائمة موارد أوسع من حاجة المهمة الحالية. الوكيل الذي يعمل على issue واحدة لا يحتاج إلى كل المستودعات والفروع والأسرار. تقليل السياق يقلل أيضاً مسارات التسريب العرضي. الدليل المتوقع: احتفظ بمعرف الطلب وقرار السياسة وهوية الأداة ونتيجة قابلة للرصد. عبارة من النموذج تقول «نجحت العملية» ليست دليلاً. الدليل يأتي من استجابة API أو إعادة قراءة الحالة بعد التغيير أو رمز رجوع أو أثر يمكن قياسه.

ضابط 5: معيار الخروج: ينتهي التشغيل إما بفعل تم التحقق منه، أو interruption صريح، أو فشل مشخص. تجنب الحالة الملتبسة التي ينتج فيها النموذج كلاماً مقنعاً بينما لم تنجح أي عملية خارجية فعلياً. حالات الفشل التي يجب اختبارها: محتوى خارجي يحمل تعليمات متعارضة، معامل خارج allowlist، مورد مفقود، token منتهي، 401، 403، timeout، ورفض بشري. حدّد السلوك المتوقع قبل الاختبار حتى لا يبرر الفريق أي نتيجة بعد وقوعها.

ضابط 6: الدليل المتوقع: احتفظ بمعرف الطلب وقرار السياسة وهوية الأداة ونتيجة قابلة للرصد. عبارة من النموذج تقول «نجحت العملية» ليست دليلاً. الدليل يأتي من استجابة API أو إعادة قراءة الحالة بعد التغيير أو رمز رجوع أو أثر يمكن قياسه. قرار معماري: إذا أمكن تحضير العملية ثم تطبيقها فافصل المرحلتين. يمكن أتمتة التحضير وإنتاج diff، بينما يطبق التغيير بعد التحقق. هذا يجعل التدقيق أوضح ويجعل rollback أكثر واقعية.

ضابط 7: حالات الفشل التي يجب اختبارها: محتوى خارجي يحمل تعليمات متعارضة، معامل خارج allowlist، مورد مفقود، token منتهي، 401، 403، timeout، ورفض بشري. حدّد السلوك المتوقع قبل الاختبار حتى لا يبرر الفريق أي نتيجة بعد وقوعها. ضبط النطاق: لا تعرض للنموذج قائمة موارد أوسع من حاجة المهمة الحالية. الوكيل الذي يعمل على issue واحدة لا يحتاج إلى كل المستودعات والفروع والأسرار. تقليل السياق يقلل أيضاً مسارات التسريب العرضي.

ضابط 8: قرار معماري: إذا أمكن تحضير العملية ثم تطبيقها فافصل المرحلتين. يمكن أتمتة التحضير وإنتاج diff، بينما يطبق التغيير بعد التحقق. هذا يجعل التدقيق أوضح ويجعل rollback أكثر واقعية. معيار الخروج: ينتهي التشغيل إما بفعل تم التحقق منه، أو interruption صريح، أو فشل مشخص. تجنب الحالة الملتبسة التي ينتج فيها النموذج كلاماً مقنعاً بينما لم تنجح أي عملية خارجية فعلياً.

ضابط 9: ضبط النطاق: لا تعرض للنموذج قائمة موارد أوسع من حاجة المهمة الحالية. الوكيل الذي يعمل على issue واحدة لا يحتاج إلى كل المستودعات والفروع والأسرار. تقليل السياق يقلل أيضاً مسارات التسريب العرضي. الدليل المتوقع: احتفظ بمعرف الطلب وقرار السياسة وهوية الأداة ونتيجة قابلة للرصد. عبارة من النموذج تقول «نجحت العملية» ليست دليلاً. الدليل يأتي من استجابة API أو إعادة قراءة الحالة بعد التغيير أو رمز رجوع أو أثر يمكن قياسه.

Publicité