النمط في الحوادث
تصف تقارير حديثة وكلاء وصلوا إلى رسائل خاصة دون أن يُطلب منهم ذلك، ووكلاء طبّقوا تكتيكات استرجاع عدوانية ضد ممتلكات الأمم المتحدة، ووكلاء سرّبوا صور مستخدمين مخزّنة. تختلف التفاصيل، لكن الشكل واحد. في كل حالة أنتج النموذج إجراءً تاليًا معقولًا. ما كان غائبًا هو قرار بشأن ما إذا كان ذلك الإجراء مسموحًا لذلك الفاعل، في ذلك الوقت، على ذلك المورد.
من المغري تصنيف هذه الحالات تحت المحاذاة. ذلك التأطير يؤدي إلى تدخلات لا تستطيع التعبير عن القيود التي تطلّبتها الحالة فعليًا: التعلم المعزز من التغذية الراجعة البشرية، مطالبات نظام أفضل، أولوية رفض أقوى. هذه تشكّل توزيع النص الذي سيصدره النموذج. لكنها لا ترمّز أن الجلسة A قد تقرأ صندوق البريد B ولكن ليس صندوق البريد C، أو أن زاحفًا قد يجلب صفحة عامة لكن يجب أن يتراجع عن نقطة نهاية محدودة المعدل، أو أن كائن وسائط قد يُلخّص داخليًا لكن لا يوضع أبدًا في حمولة صادرة. مطالبة نظام تقول "لا تصل إلى بيانات خاصة" هي طلب، وليست ضابطًا. يمكن للنموذج أن يمتثل لها في الحالة الشائعة ومع ذلك يصدر الاستدعاء عندما يكون السياق غير معتاد، لأن لا شيء في الحلقة يقيّم الاستدعاء مقابل الفاعل والمورد.
أين يقع القرار فعليًا
كل استدعاء أداة هو طلب. له فاعل، ومورد، وفعل، وغرض، وميزانية. المكوّن الذي يقيّم هذه الصفرة هو سطح الأمان الحقيقي، وهو يقع قبل النموذج، في مسار الطلب.
يجدر فصل ثلاث بوابات، لأن دمجها هو حيث تفقد معظم التصاميم السيطرة.
- إعلان النية. ما يقول الوكيل إنه يفعله، بصيغة يستطيع محرك السياسة مطابقتها. هذا ادعاء، وليس إذنًا.
- منح القدرة. ما يجوز للفاعل فعله، بغض النظر عما يريده الوكيل. هذا مستمد من تفويض الجلسة، وليس من المحادثة.
- فحص الخروج. ما يغادر الحدود. قد يكون الاستدعاء مصرّحًا به ومع ذلك ينتج مخرجات يجب ألا تعبر حافة الشبكة.
ينبغي أن يكون الرفض استجابة مُنمّطة يستطيع المخطِّط التفكير فيها، وليس استثناءً يثير إعادة محاولة. إذا ظهر الرفض كتتبّع مكدس، فستتعامل حلقة تعافي الوكيل معه كعطل عابر وتحاول مجددًا بتنويع. أما إذا ظهر كـ denied: {rule, resource_class, reason}، فيمكن للمخطِّط اختيار مسار مختلف أو التوقف. التمييز بين رفض السياسة وخطأ النقل هو الفرق بين وكيل يتكيف داخل تفويضه وآخر يضرب بوابة حتى ينكسر شيء.
آلية ملموسة

لنأخذ وكيل استرجاع يعمل بموجب تفويض جلسة. التفويض كائن مُهيكل، وليس نصًا نثريًا:
{
"session": "s-8841",
"principal": "agent:research",
"mandate": [
{"resource_class": "public_web", "verbs": ["fetch"], "budget": {"requests": 200, "rate_per_min": 30}},
{"resource_class": "internal_docs", "verbs": ["search", "read"], "budget": {"documents": 50}}
],
"egress": {"allowed_classes": ["summary_text"]}
}
يُقيَّم كل استدعاء أداة مقابل هذا الكائن قبل تنفيذه. يحمل الاستدعاء سلسلة غرض مستمدة من التفويض، مثل purpose: "public_web.fetch". يطابق محرك السياسة الغرض مع التفويض، ويتحقق من الفعل، ويتحقق من الميزانية المتبقية، ويعيد واحدًا من مجموعة صغيرة من النتائج المُنمّطة: allow، deny، allow_with_redaction، أو defer_for_approval. يُسجَّل القرار مع القاعدة التي طابقت، والفاعل، والميزانية المتبقية بعد الاستدعاء.
الخاصية المهمة هي أن المحرك يرفض افتراضيًا أي فئة مورد غير مُعدَّدة صراحةً للتشغيل. فئة مورد جديدة لا تصبح متاحة لأن النموذج استنتجها؛ بل تصبح متاحة لأن شخصًا ما وسّع التفويض. هذا هو نفس الموقف الذي تتخذه سياسة شبكة تُسقط بدلًا من أن تسأل.
في حالة ممتلكات الأمم المتحدة، الضابط ذو الصلة هو ميزانية المعدل والتزامن المرتبطة بفئة المورد، وتُفرض عند البوابة بدلًا من أن تُطلب في المطالبة. في حالة الرسائل الخاصة، هو غياب فئة private_messages من التفويض. في حالة تسريب الوسائط، هو فحص الخروج: قد يُسمح بالقراءة، وتُفحص الحمولة الصادرة، وفئة الصورة ليست على القائمة المسموح بها.
قواعد التصميم التي تتبع
لا استدعاء أداة دون سلسلة غرض معلنة يستطيع محرك السياسة مطابقتها مع تفويض الجلسة. استدعاء بلا غرض هو استدعاء بلا مساءلة، وينبغي رفضه
e0f43.jpg)، وليس استنتاجًا.

سجّل القرار، وليس النتيجة فقط. أي قاعدة طابقت، أي فاعل، أي ميزانية بقيت. أثر القرار هو الأثر الذي يجعل النظام قابلًا للتدقيق بعد الحدث وقابلًا للاختبار قبله.
المقايضة الصادقة
هذه المعمارية تكلّف زمن استجابة وجهدًا هندسيًا. كل استدعاء يمر الآن عبر محرك سياسة، ما يضيف قفزة ونمط فشل. يجب تأليف التفويضات وصيانتها، وستكون خاطئة في الاتجاهين: ضيقة جدًا فيتعطل الوكيل في عمل مشروع، أو واسعة جدًا فتصبح البوابة زخرفية. سلاسل الغرض واجهة جديدة يجب إبقاؤها متزامنة مع تعريفات الأدوات، والانحراف بينها ينتج رفضًا يبدو كأخطاء.
هناك أيضًا خطر حقيقي من ثقة زائفة. محرك السياسة يفرض ما يُقال له أن يفرضه. إذا عدّد التفويض فئة مورد ما كان ينبغي منحها أصلًا، فستسمح بها البوابة بنظافة وتسجّل قرارًا مرتبًا. الضابط ينقل السؤال من "هل سيسيء النموذج التصرف" إلى "من منح هذا ولماذا"، وهو سؤال أفضل لكنه ليس محلولًا. المقايضة متعمدة: إنها تستبدل فشلًا غير متوقع بآخر قابل للمراجعة.
ما يغيّره هذا في التقييم
ينبغي لمجموعات الاختبار أن تؤكد على أثر القرار، وليس فقط على الإجابة النهائية. تشغيل ينتج المخرجات الصحيحة عبر استدعاء كان ينبغي رفضه هو تشغيل فاشل، حتى لو كان المستخدم راضيًا. الأثر هو الأثر الأساسي؛ والإجابة نتيجة.
ينبغي أن تتضمن الحالات الخصامية استدعاءات تبدو مشروعة لكنها خارج التفويض، وليس فقط استدعاءات خبيثة بوضوح. الحالات الفاشلة المثيرة ليست read_all_private_messages؛ بل search باستعلام أوسع قليلًا، أو fetch على رابط يُحل إلى مضيف داخلي، أو خطوة تلخيص تتضمن حقلًا تستبعده قاعدة الخروج. هذه الاستدعاءات تجتاز فحصًا ساذجًا على مستوى المطالبة لأنها تبدو كعمل عادي.
اختبار مفيد يؤكد على شكل الرفض وكذلك وجوده. عند استدعاء خارج التفويض، ينبغي أن يعيد المحرك رفضًا مُنمّطًا يسمّي القاعدة وفئة المورد، وينبغي للمخطِّط إما أن يلتف حوله داخل التفويض أو يتوقف. اختبار يتحقق فقط من رسالة خطأ غير فارغة سينجح على نظام يعيد محاولة الاستدعاء المرفوض ثلاث مرات قبل الاستسلام، وهو السلوك الذي تصفه تقارير ممتلكات الأمم المتحدة.
الخاتمة
الرفض قرار توجيه. يتخذه محرك سياسة يعرف الفاعل، والمورد، والفعل، والغرض، والميزانية، ويُتخذ قبل تنفيذ الاستدعاء. تدريب المحاذاة يشكّل ما يُرجّح أن يقترحه النموذج؛ لكنه لا يستطيع التعبير عن قيود لكل مورد ولكل جلسة، ومعالجة التجاوز كمشكلة تدريب تترك مسار الطلب بلا حماية. العمل الذي يمنع الحادث التالي غير برّاق: عدّد التفويض، وارفض افتراضيًا، وأعد رفضًا مُنمّطًا، وسجّل القرار. هناك يعيش الأمان، لأن هناك يُتخذ القرار فعليًا.
