---
name: scope-lock
description: بروتوكول قفل النطاق — لكل طلب ميزة/تغيير كود قبل كتابة أي سطر: عقد نطاق صريح (داخل/خارج) + قيود التنفيذ + انتظار موافقة بكلمة واحدة. أثناء التنفيذ العقد حدّ صلب؛ أي عمل مجاور يُقترَح كمتابعة لا يُنفَّذ. المهام المتتبَّعة = بنود العقد فقط.
---

# /scope-lock — عقد نطاق قبل الكود، حدّ صلب أثناء التنفيذ

يُشغَّل تلقائياً (لا يحتاج استدعاء `/scope-lock` صريحاً) لكل طلب يتضمّن كتابة/تعديل كود بنطاق غير
تافه — امتداد تنفيذي لـ**STRICT SCOPE RULE** في CLAUDE.md الجذر، لمنع تكرار حادثة "توسيع غير
مصرَّح به استلزم تراجعاً كاملاً واستهلك جلسة كاملة" (موثَّقة في CLAUDE.md).

## متى يُطبَّق بالكامل، ومتى يُختصَر

- **بالكامل:** أي طلب ميزة/إصلاح/تغيير يتضمّن حكماً تقديرياً (أي ملفات، أي حجم، هل يشمل حالات
  حافّية…) — حتى لو بدا "بسيطاً" في الظاهر.
- **يُختصَر (سطر واحد يكفي، لا حاجة لعقد كامل):** طلب يحدّد **الملف + السطر/الدالّة + التغيير
  الدقيق** بلا أي هامش تقدير متروك لي (مثال: "غيّر `X` إلى `Y` في السطر 42 من `foo.js`"). حتى هنا،
  إن وُجد أي احتمال لتأثير جانبي (استدعاءات أخرى للدالة، ملفات متطابقة يجب تحديثها معاً) اذكره
  كسطر قيد لا كعقد كامل.
- **لا يُطبَّق إطلاقاً:** طلبات قراءة/بحث/تدقيق/تقرير بلا كتابة كود (كالتدقيقات التي أجريناها سابقاً
  هذه الجلسة) — البروتوكول خاص بكتابة الكود تحديداً.

## الخطوات (قبل أي `Write`/`Edit` على كود إنتاجي)

### 1) عقد النطاق — قائمة نقطية صريحة

اكتب دائماً قسمين، لا قسماً واحداً:

```
✅ داخل النطاق:
- <بند دقيق قابل للتحقّق>
- <بند دقيق قابل للتحقّق>

❌ خارج النطاق (لن يُنفَّذ إلا بعقد منفصل):
- <أي عمل مجاور محتمل الخلط بالطلب — حتى لو بدا "الخطوة المنطقية التالية">
```

قاعدة كتابة قسم "خارج النطاق": لا تتركه فارغاً أو عاماً ("لا شيء آخر") — اذكر **تحديداً** ما قد
يُفهَم خطأً أنه مشمول (ملفات مشابهة، تطبيقات GAS الأخرى المتأثّرة بنفس الخلل، خطوة النشر نفسها إن
كان الطلب عن الكود فقط، التوسّع لحالات استخدام غير مذكورة صراحة).

### 2) قيود التنفيذ (سطر أو سطران)

اذكر أي مما ينطبق:
- **طريقة التنفيذ:** طرفية فقط (`clasp`/`gh`/`node`) أم يتطلّب متصفّح (`chrome-devtools` MCP) —
  الافتراض في هذا المستودع طرفية أولاً (راجع "Environment & Constraints" بالجذر).
- **نمط القرار:** تلقائي كامل بعد الموافقة، أم قابل للاختيار (أعرض خيارات عبر `AskUserQuestion`
  عند نقطة معيّنة) — إن كان الطلب نفسه غامضاً بين عدّة تصاميم ممكنة، هذا يُحسَم **قبل** العقد لا بعده.
- **حدّ النشر:** هل يشمل هذا العقد `clasp deploy` حيّاً؟ (افتراضياً لا — النشر عقد/موافقة منفصلة
  دوماً، حتى لو كان ضمن نفس المحادثة، لأنه 🔴 دائماً بحسب سياسة المشروع الموثَّقة).

### 3) توقّف — انتظر موافقة بكلمة واحدة

اعرض العقد كاملاً ثم **توقّف** (أنهِ الدور). لا تبدأ أي `Write`/`Edit` قبل ردّ صريح من المالك
(كلمة واحدة تكفي: "نعم"/"موافق"/"go"). ردّ يعدّل بنداً = عقد جديد يُعرَض مجدداً، لا تفسير اجتهادي
لما "لعلّه يقصده".

## أثناء التنفيذ — العقد حدّ صلب

- **`TaskCreate` لبنود "داخل النطاق" فقط** — نسخة حرفية تقريباً من قائمة العقد الموافَق عليها، بندٌ
  بمهمة. لا تُضِف مهمّة لعمل لم يكن في العقد الأصلي مهما بدا ضرورياً أثناء التنفيذ.
- **اكتشفت عملاً مجاوراً يبدو لازماً؟** لا تُنفِّذه ولا تُنشئ له `Task`. سجّله نصّاً في قسم
  "متابعات مقترحة" بالتقرير النهائي (راجع الخطوة التالية) واستمرّ في العقد الأصلي فقط.
- **اكتشفت أن العقد نفسه غير كافٍ لإتمام المهمة بشكل صحيح** (لا مجرّد "إضافة تحسين" بل خللاً
  يمنع العمل أصلاً)؟ توقّف واعرض عقداً مُعدَّلاً — لا توسّع صامتاً بحجّة "كان لازماً".

## التقرير النهائي — فصل واضح

كل تقرير إنجاز يفصل صراحةً:
```
تم تنفيذه (يطابق العقد):
- …

متابعات مقترحة (خارج هذا العقد، بانتظار عقد منفصل إن أردتها):
- …
```
لا تدمج القسمين. "متابعات مقترحة" وصف لا التزام — لا `Task` مفتوحة لها إلا بعد عقد جديد صريح.

## العلاقة بمهارات أخرى

- `/gas-pipeline` خطوته الأولى ("تحديد النطاق") تستخدم هذا البروتوكول لصياغة العقد قبل الفرع.
- `STRICT SCOPE RULE` بالجذر هي المرجعية القانونية؛ هذا الملف هو **الآلية التنفيذية** لتطبيقها بنص
  ثابت قابل للتكرار بدل حكم متفاوت كل مرة.
