---
name: language-curriculum
description: >
  Design a complete, self-contained curriculum for a PROGRAMMING LANGUAGE
  specifically (Go, Rust, Python, C, Zig, TypeScript, Java, …). This skill
  BRANCHES from `curriculum-architect`: read that skill first for the
  pedagogical philosophy (why-before-how, bottom-up, puzzle-driven, no
  hand-holding), then read this one for how a *language* is dissected. Trigger
  it whenever the learner asks for a منهج / مسار تعلّم / course / deep-dive on a
  programming language, or says "علّمني <لغة>" / "أبي أتعلم Go" / "صمّم لي منهج
  للغة X" / "how do I really learn <language>". It orders the curriculum around
  the language's type system and memory representation first, then execution
  model, binding semantics, failure model, concurrency and memory model,
  dispatch and generics, build/link model, FFI boundary, cost model,
  specification and undefined behaviour, and history. It enforces line-by-line
  code walkthroughs, keyword cards, desugaring, predict-then-run puzzles,
  misconception burial, low-level lenses, and a capstone contract.
license: MIT
---

# Language Curriculum

منهج لغة برمجة ليس جولةً في ميزاتها. **اللغة قرارٌ تصميميّ واحد كبير، وكل ما
يبدو غرابةً فيها هو نتيجة منطقية لذلك القرار.** مهمّتك أن تكشف القرار أولاً، ثم
تُري المتعلّم كيف تتساقط منه بقية اللغة. من يفهم القرار يستنتج الميزات؛ ومن يحفظ
الميزات لا يستنتج القرار أبداً.

> **اقرأ `curriculum-architect` أولاً.** فلسفتها كلها سارية هنا بلا استثناء:
> "ليش" قبل "كيف"، من القاع للقمة، ألغاز لا مشاريع استعراضية، صعوبة مرغوبة، لا
> تلميحات، لا بديهيات، لا تلعيب. هذه المهارة **لا تكرّرها** — تُخصّصها للغات.

---

## اقرأ الطبقات الثلاث أولاً

`../../invariants.md` (الثوابت) · `../../evidence/findings.md` (الأدلّة، وما
تقرّره) · `../../profiles/<name>.md` (الأسلوب المُعلَن في `curriculum.json`).
وهذه المهارة تبني على `curriculum-architect` ولا تغني عنها.

---

## قبل كل شيء: تشخيص المستوى (إلزامي)

**لا تبدأ تصميم منهج لغة قبل أن تسأل المتعلّم عن مستواه في هذه اللغة تحديداً.**

**ولا تستنتج المستوى أبداً من:** وجود منهج سابق عن اللغة، أو مجلد مشروع، أو
سجلّ git، أو كون اللغة "قريبة" من لغة يعرفها. تصميم منهج عن لغة لا يعني إتقانها
— قد يكون المنهج مؤجّلاً للدراسة أصلاً. الاستنتاج هنا يفسد توزيع العمق كلّه.

اسأل عن ثلاثة أشياء منفصلة، ولا تدمجها:

1. **مستواه في اللغة المستهدفة**: ما الذي لمسه فعلاً بيده، لا ما قرأ عنه. اسأل
   عن أشياء محدّدة بنى بها، لا عن تقييم ذاتي بالنجوم.
2. **لغة المرساة**: اللغة التي يتقنها **فعلاً** أكثر من غيرها — لا قائمة اللغات
   التي مرّ عليها. كل مقارنة تصميمية في المنهج تُبنى على هذه الواحدة، لأن المقارنة
   بلغة لم يتقنها تشرح المجهول بمجهول.
3. **سقف العمق المطلوب**: هل يريد إتقاناً متقدّماً أم أساساً صلباً؟ الجواب يحدّد
   حجم محاور المواصفة والداخليات.

### الحالات الثلاث وما تغيّره

**أ. صفر في اللغة، قويّ في غيرها.** ابنِ عبر **الفرق التصميمي** مع لغة المرساة:
لكل مفهوم، لماذا اختلفت المقايضة هنا. هذا يختصر البديهيات ويقفز مباشرة للجوهر.

**ب. تعرّض جزئي — قرأ الساينتاكس وبنى شيئاً صغيراً.** *هذه أخطر حالة، وليست
أسهل من الصفر.* صاحبها يحمل قواعد التقطها من دروس سريعة، **تشتغل عنده فعلاً**،
لكنها بلا آلية تحتها — فهي صحيحة بالصدفة، وستنهار عند أول حالة خارج النمط الذي
حفظه.

القاعدة: **لا تتخطَّ الأساسيات لأنه "يعرفها"** — أعِد بناءها من تحتها، وابدأ
بتدقيق ما يظنّ أنه يعرفه. الأداة المناسبة هي "تنبّأ ثم شغّل" (`craft.md` §٤)
مسلّطةً على البنى التي استعملها بالفعل: خذ الشيء الذي بناه وأرِه أنه لا يستطيع
التنبّؤ بسلوكه في حالة مجاورة. اكتشافه أن معرفته هشّة هو **وقود المنهج كلّه**،
ويجب أن يحدث في أول درسين لا في منتصف الطريق.

**ج. متقدّم.** لا أساسيات إطلاقاً. المنهج كلّه: مواصفة، داخليات، حواف، نموذج
تكلفة، وقرارات تصميم اللغة نفسها. اسأله عن **أصعب شيء واجهه** بالاسم — جوابه
يحدّد من أين تبدأ.

### الاستثمار في لغة المرساة

لغة المرساة ليست للمقارنة السطحية فقط. إن كانت قريبة من المستوى المنخفض (C
مثلاً)، فهي **تصريح مرور للحفر العميق مبكراً**: تستطيع الحديث عن التخطيط في
الذاكرة والمؤشّرات والمكدّس من الدرس الأول بلا تمهيد، وأن تعرض الفروق كـ«ما الذي
أضافته هذه اللغة فوق ما تعرفه، وبأي ثمن». استغلّ ذلك صراحةً بدل إعادة تأسيس ما
رسخ عنده.

---

## الخطوة صفر: استخرج روح اللغة قبل أن تكتب سطراً

قبل بناء أي خريطة، حدّد **٣–٥ قرارات تصميمية جذرية** تفسّر ٨٠٪ من سلوك اللغة
وغرابتها. اكتبها صراحةً في مقدّمة المنهج كـ"البديهيات" (axioms)، ثم **ارجع إليها
بالاسم في كل درس لاحق**: "هذه ليست قاعدة عشوائية — إنها البديهية الثانية تُطبَّق
على الدوال".

معيار القرار الجذري: لو غيّرته، لانهارت اللغة أو صارت لغة أخرى. مثال على مستوى
العمق المطلوب — Go: "التزامن مِلكية للغة لا للمكتبة"، "الوضوح يهزم الإيجاز"،
"زمن الترجمة مقدّس"، "لا وراثة، تركيب فقط"، "القيمة الصفرية يجب أن تكون صالحة
للاستعمال". لاحظ أن آخر واحدة وحدها تفسّر nil maps و zero-value mutexes و
`bytes.Buffer` ودلالات الـstructs.

**ممنوع** أن تبدأ بـ«تاريخ اللغة وشعبيتها ومجالات استخدامها». هذه ديباجة، وهي
أوّل ما يقتل الحماس. **والتاريخ السببيّ شيءٌ آخر تماماً** — انظر القسم التالي.

---

## الفصل صفر — تخصيص اللغات

**بنيته وشروطه الأربعة في `curriculum-architect` §«الفصل صفر» — اقرأها أولاً.**
هنا ما يخصّ اللغات وحدها: **بماذا يُملأ الجزء الثالث، وكيف يُتحقَّق فيه.**

**الجزء الثالث هو نظام الأنواع كاملاً — أطول أجزاء الفصل.** المحور الأول
(`references/axes.md` §١) يُستوفى هنا **نظرياً**: ما «النوع» في هذه اللغة، وكيف
تُبنى الأنواع، وما الفرق بين الاسم المستعار والنوع المشتقّ، وما يُحسم وقت الترجمة.
ولا يُترَك للفصول اللاحقة إلا **تطبيقه**.

**والجزء الثاني — بديهيات اللغة** — ثلاثٌ إلى خمس جُملٍ تُشتقّ منها بقيّتها، ومعها
جدول **ما رفضته اللغة عمداً**: لكل صفٍّ البديهية التي حمَته والثمن الذي تدفعه أنت.

**والجزء الأول — كيف صارت هذه اللغة لغة** — تاريخٌ سببيّ: *ضغطٌ ← قرار ← ثمنه ←
أثره في كودك اليوم*.

### الشرط الثاني بصيغة اللغات

«لا شيء يُطلَب تصديقه» يتحقّق هنا بأحد اثنين: **مقطعٌ يعمل**، أو **رفضٌ صريح من
المترجم** ومخرَجه منقول. والرفض أداةُ تدريسٍ من الدرجة الأولى في هذا الفصل: نصف
حقائق نظام الأنواع لا تُرى إلا في رسالة خطأ.

---

## المخرَج يحمل هويّة جهازك — فأعلن الحدّ لا الجهاز

مخرَجٌ فيه `darwin/arm64` أو `Apple M1` أو مسارُ مجلّدك يوحي للقارئ أنه يحتاج
**جهازك** ليرى ما ترى. والصواب أن تُعلن **ما يعتمد عليه الرقم فعلاً**:

| الرقم | ما يعتمد عليه حقاً | كيف يُعلَن |
|---|---|---|
| الأحجام والمحاذاة | عرض المؤشّر | «الأحجام لهدفٍ ٦٤-بت» |
| زمنٌ أو تخصيصات | جهازٌ بعينه | «الأرقام من جهازٍ واحد، **والثابت هو النسبة**» |
| مسارات في أثر المكدّس | مجلّد المؤلّف | تُقتطع، **واللوحة تقول إنها مقتطعة** |
| سلوكٌ يتغيّر بالإصدار | الإصدار | يُذكَر الإصدار وحده، بلا نظامٍ ولا معمارية |

**وما لا يعتمد على شيء يُنقَل كما هو بلا وسم.** والفحص: احذف اسم الجهاز، ثم اسأل
هل بقي الادّعاء قابلاً للتحقّق؟ إن بقي فاسم الجهاز كان زائداً.

**وكذلك رقم الإصدارة في الواجهة** (`edition 2024`، `C++17`): يُقرأ **قديماً** بعد
سنة، ولا يضيف للقارئ شيئاً. موضعه سطر الأمر الذي يُنسَخ، والفصل الذي يشرحه —
لا شارةٌ دائمة في الترويسة.

---

## قبل أن تضع زرّ تشغيل: افحص المنفّذ

إن كان الموقع يشغّل الكود في المتصفّح (مفسّر داخل WASM غالباً)، **فلا تضع زرّاً
على بلوكٍ قبل أن تشغّله على المنفّذ نفسه وتقارنه بالأداة الحقيقية.**

المفسّرات تختلف عن المترجم في مواضع **لا تُخمَّن**. مثالٌ وقع فعلاً: مفسّر
Go في المتصفّح يطبع **النوع الأساسيّ** بدل النوع المسمّى، ويخطئ في **مجموعات
الطُّرق** — وهما درسا نصف فصل الأنواع. **زرٌّ يعطي جواباً معكوساً أسوأ من لا زرّ.**

القاعدة:

| الحال | ماذا تفعل |
|---|---|
| مطابق | زرّ تشغيل |
| مختلفٌ في **صيغة** المخرَج لا معناه | زرّ + `notice` يقول الفرق **قبل** الضغط |
| مختلفٌ في **الجواب** | **بلا زرّ.** مخرَجٌ مسجَّل من الأداة الحقيقية، ويُشغّله القارئ على جهازه |
| لا يُترجَم أصلاً (درسٌ في الرفض) | **بلا زرّ.** رسالة المترجم مخرَجاً مسجَّلاً |

**والفرق يُعلَن في المتن، لا يُخفى.** ويُعاد الفحص عند كل ترقيةٍ للمنفّذ.

---

## ترتيب المحاور (وهو ترتيب العمق، لا ترتيب العرض بالضرورة)

التفاصيل الكاملة لكل محور في `references/axes.md` — **اقرأه قبل رسم الخريطة**.
الترتيب هنا هو ترتيب الأولوية في العمق والمساحة:

**١) نظام الأنواع والتمثيل في الذاكرة** — المحور الأول والأهم بلا منازع، ويأخذ
أكبر مساحة في المنهج. **ونظريّتُه تُستوفى في الفصل صفر**، ويبقى للفصول تطبيقُها.
ليس «ما هي الأنواع» بل: ما الذي *يمثّله* النوع في الذاكرة فعلياً، كم حجمه، كيف
يُحاذى (alignment)، ماذا يحدث عند الإسناد، كيف تُصنع أنواع
جديدة وما الفرق بين الاسم المستعار والنوع المشتقّ، أين يُحسم النوع (ترجمة/تشغيل)،
ما الذي يمنعه النظام وما الذي يتسرّب منه.

**٢) الساينتاكس بوصفه نتيجة** — لا تعرضه كقواعد تُحفظ. كل قرار نحوي جواب عن سؤال:
لماذا هذه الكلمة موجودة أصلاً؟ لماذا الترتيب هكذا؟ ما الالتباس الذي يمنعه؟

**٣) ما يميّز هذه اللغة تحديداً** — المحور الذي يعطي المنهج شخصيته. لكل ميزة
مميّزة: المشكلة التي وُجدت لأجلها، الآلية الداخلية الفعلية، والبديل الذي رُفض.

**٤) نموذج التنفيذ** — من المصدر إلى المعالج: ما يُحسم وقت الترجمة مقابل وقت
التشغيل، وماذا يقدّم الـruntime وبأي ثمن.

**٥) نموذج الأسماء والربط** — ما هو "المتغيّر" فعلاً، دلالة الإسناد، الـaliasing،
كيف تلتقط الـclosures. منبع أكبر سوء فهم في كل لغة بلا استثناء.

**٦) نموذج الفشل** — استثناءات أم قيم خطأ أم panic، كيف ينتشر الفشل، وموقف اللغة
الفلسفي منه.

**٧) نموذج التزامن + memory model** — يستحقّ **فصلاً كاملاً**، لا فقرة: وحدة
التزامن، المجدول، التواصل، happens-before، السباقات، الإلغاء، التسريب. وحتى
*غياب* التزامن (GIL مثلاً) يكشف تصميم اللغة ويُشرح كقرار. التفصيل في
`references/concurrency.md` — **ملف مستقلّ، اقرأه كاملاً عند تصميم هذا الفصل.**

**٨) آلية التجريد والإرسال** — static/dynamic dispatch، vtables/itabs، وكيف
تُنفَّذ الـgenerics فعلياً (monomorphization أم dictionaries أم erasure).

**٩) وحدات الترجمة والبناء والربط** — الحزم، الرؤية، ترتيب التهيئة، الدورات،
الرابط.

**١٠) الحدود مع الخارج** — FFI، syscalls، الـunsafe. أفضل نافذة للمنظور منخفض
المستوى.

**١١) نموذج التكلفة** — أي سطر يخصّص، أيّه ينسخ، أيّه يهرب للـheap، وما الذي يَعِد
المترجم بتحسينه وما الذي لن يحسّنه أبداً.

**١٢) المواصفة ومنطقة "غير المعرّف"** — ما يضمنه الـspec مقابل ما "يشتغل صدفة".
هنا بالضبط يعيش خطأ المحترفين.

**١٣) التاريخ وندوب التوافق الخلفي** — لماذا الميزة قبيحة اليوم. أقوى وقود لـ«ليش»،
**ولذلك موضعه الفصل صفر لا آخر المنهج** — بشرط أن يكون سببياً لا ديباجة. والندوب
وحدها تبقى موزّعةً على مواضعها: الندبة تُذكَر عند الميزة التي شوّهتها.

**١٤) كتابة اللغة — فصلٌ كامل.** التشريح يجعل القارئ يفهم اللغة، وهذا المحور
يجعله يكتبها: كيف يبدو برنامجٌ حقيقيّ فيها — تخطيط الحزم في مشروعٍ يكبر، والتسمية
والاصطلاح **بأسبابهما**، وتصميم الواجهات وحدود الحزمة، والاختبارات كما تقدّمها
اللغة نفسها، والأدوات في حلقة العمل اليومية. **ومادّته جاهزة: الـepitome** —
يُعاد كتابته باصطلاح اللغة، فيصير الفرق بين النسختين هو الدرس. وموضعه آخر المنهج،
بعد أن يعرف القارئ ثمن كل اصطلاح.

**ومنهج لغةٍ بلا هذا الفصل ناقص**، مهما دقّ في التشريح.

ليست كل لغة تستحق نفس التوزيع: في C يتضخّم محورا ١ و١٢، وفي Go يتضخّم ٧ و٦، وفي
Python يتضخّم ١ و٥. **حدّد التوزيع صراحةً** بعد استخراج روح اللغة، ولا تصبّ كل
اللغات في قالب واحد.

---

## المنظور منخفض المستوى

في كل محور، اسأل: **ما الذي تراه الآلة حين ترى هذا السطر؟** ليس في كل درس — بل
عند كل نقطة يكون فيها التجريد كاذباً أو مُكلفاً. المتعلّم يجب أن يخرج قادراً على
الإجابة عن: أين تعيش هذه القيمة؟ كم بايت؟ من يملكها؟ متى تموت؟ كم مؤشّراً بيني
بينها وبين المعالج؟

اللغات المُدارة (Python/Java/Go) ليست معفاة — بالعكس: هناك يكون الفرق بين النموذج
الذهني والواقع أكبر، ولذلك يكون كشفه أثمن. أَرِه الـobject header، الـinterface
word pair، الـslice header، الـstring header.

---

## قواعد الصناعة (إلزامية)

التفاصيل والقوالب الحرفية في `references/craft.md` — **اقرأه قبل كتابة أول درس**.

1. **الكود ثم التشريح سطراً سطراً.** كل مثال: بلوك كود كامل قابل للتشغيل، ثم
   تفكيكه سطراً سطراً. لا تشرح سطراً بديهياً — لكن لا تقفز عن سطر فيه قرار.
2. **بطاقة الكلمة المفتاحية.** كل keyword جديدة لها وقفة رسمية واحدة: لماذا وُجدت،
   ماذا تفعل بالضبط، أين تخدع، وما الذي لا تفعله رغم أن اسمها يوحي به. مع **سجل
   تغطية** يضمن أن كل كلمات اللغة ومعاملاتها غُطّيت قبل النهاية.
3. **إزالة السكر (desugaring).** كل صياغة مريحة تُعرض مرة واحدة على الأقل بشكلها
   المفكوك، حتى لا تبقى سحراً.
4. **تنبّأ ثم شغّل.** قبل كل حالة شاذة، اطلب توقّع المخرج ثم التنفيذ. هذا هو
   المحرّك الحقيقي لدفن الاعتقاد — الإخبار وحده لا يدفن شيئاً.
5. **نموذج ثم كسره.** أعطِ نموذجاً ذهنياً مبسّطاً، ثم اكسره لاحقاً بحالة لا
   يفسّرها، ثم رقِّه. هذا هو البديل الشريف الوحيد عن التبسيط المخلّ.
6. **قالب دفن الاعتقاد.** الاعتقاد ← لماذا يبدو مقنعاً ← الكود المضادّ ← الآلية
   الفعلية ← القاعدة الصحيحة ← حدودها.
7. **الأدوات الكاشفة.** مع كل ادّعاء غير بديهي، أمرٌ يشغّله المتعلّم ليرى بنفسه
   (disassembly، escape analysis، race detector، AST dump، حجم البنية). لا يصدّق
   نصّك — يتحقّق منه.
8. **تثبيت الإصدار.** أعلن الإصدار المستهدف بدقة، وأشِر لأين تغيّر السلوك عبر
   الإصدارات.
9. **ما لا تجيده اللغة.** نقطة تسرّب التجريد تُذكر صراحةً. لا تسويق.
10. **كل مقطع كود يحمل هدف تشغيل**: عرض فقط، أو قابل للتنفيذ في المتصفّح، أو
    محليّ فقط. انظر `references/interactive.md`.

---

## قالب درس اللغة

يمتدّ من قالب `curriculum-architect` (نبذة ← لغز مستفزّ ← درس ← تمرين ← خلاصة)
بإضافتين إلزاميتين:

- **بعد الشرح مباشرة: مقطع "تحت الغطاء"** — الآلية الفعلية بمنظور الذاكرة أو
  المترجم أو الـruntime، مع أداة كاشفة يشغّلها.
- **قبل الخلاصة: مقطع "الحواف"** — حالة أو حالتان شاذّتان بصيغة "تنبّأ ثم شغّل"،
  مختارتان لأنهما تدفنان اعتقاداً شائعاً لا لأنهما طريفتان.

**اختيار الحالات الشاذّة:** الحالة الشاذّة تدخل المنهج فقط إذا كانت **نتيجةً
مباشرة لإحدى بديهيات اللغة**. الغرابة التي لا تُشتَقّ من الروح مجرّد trivia،
والـtrivia ملل مُقنَّع. اضبطها بسؤال: هل فهم هذه الحالة يجعله يتنبّأ بحالات أخرى
لم يرها؟ إن كان الجواب لا، احذفها.

---

## المشاريع

العقد كاملاً في `references/projects.md`. الجوهر:

- **مشاريع صغيرة**، كل واحد يستهدف محوراً واحداً، وشرطه أن تكون ميزة اللغة
  **حاملةً للحمل** لا زينة: لو أمكن حلّه بأسلوب لغة أخرى دون خسارة، فالمشروع فاشل.
- **مشروع تخرّج واحد** يجمع ثلاثة محاور على الأقل، و**يغلق ألغازاً تُركت مفتوحة
  عمداً** في الدروس السابقة، ومعه معايير قبول ذاتية بلا حلّ جاهز.
- **قراءة المكتبة القياسية** مرحلة مقصودة في المنهج، لا نصيحة عابرة.

---

## الموقع والكود التفاعلي

إن صار المنهج موقعاً (`curriculum-site-design`)، فالكود لا يبقى صورة ساكنة:
يُلوَّن بمحرّك VS Code نفسه، ويُحرَّر، ويُنفَّذ فعلياً في الصفحة حيث أمكن. لكن لكل
لغة مسار تنفيذ مختلف، وبعض المحاور — التجميع، تحليل الهروب، كاشف السباقات — لا
تعمل في المتصفّح أصلاً وتُوسَم "محلياً" بدل محاكاتها كذباً.

**اقرأ `references/interactive.md`** قبل بناء أي بلوك كود في الموقع. أهم قاعدة
فيه: *حالات الحواف تُشغَّل على المحرّك المرجعي أو لا تُشغَّل* — مفسّر متأخّر في
المتصفّح سيُظهر السلوك القديم ويعلّم المتعلّم عكس النص وهو يظن أنه تحقّق بنفسه.

---

## تحقّق المؤلف (خطّ أحمر)

محتوى "الحالات الشاذة" و"ما يفهمه المطوّرون غلط" هو **أكثر محتوى معرّض للاختلاق**.
لذلك، قبل التسليم:

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

### واجعله فحصاً آلياً، لا نيّةً

القاعدة أعلاه تُنسى بعد الفصل الثالث. فاكتب في المنهج فاحصاً **يقرأ الماركداون
ويشغّل**، ويفشل عند أي لوحةٍ تخالف. النموذج العامل في
`curricula/languages/rust/tools/verify.py`، وفكرته:

| | |
|---|---|
| كل لوحة مخرَجٍ تُربَط ببرنامجٍ يسبقها، ويُقارَن التشغيل | الاختلاق يُكتشَف، لا يُتّقى |
| ما طال عن اللقطة يسكن `programs/`، والماركداون يعرض مقتطعه | المقتطع لا يُترجَم وحده، وملفّه يُترجَم |
| **ما لم يُفحَص يُعدّ ويُذكر في التقرير** | الثقب الصامت أخطر من الثقب المعلوم |
| ما يختلف بين تشغيلين (زمنٌ · عنوان) يُعلَن ويُفحَص أنه يعمل فقط | ولا يُقارَن رقمه |

**والسؤال الذي يولّد الفاحص:** ما الادّعاء الذي يقوم عليه هذا الفصل، وما أرخص أمرٍ
يكذّبه إن كان كاذباً؟

---

## خطوط حمراء خاصة باللغات

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

---

## فحص ذاتي قبل التسليم

بالإضافة إلى فحص `curriculum-architect`:

0. هل سألتَ عن المستوى ولغة المرساة، أم افترضتهما؟
1. هل بديهيات اللغة الـ٣–٥ مُعلنة، ومُشار إليها بالاسم في كل درس لاحق؟
2. هل يستطيع المتعلّم بعد المنهج أن يجيب لأي قيمة: أين تعيش؟ كم حجمها؟ متى تموت؟
3. هل كل keyword ومعامل في اللغة له وقفة مسجّلة في سجل التغطية؟
4. هل كل حالة شاذّة مشتقّة من بديهية، لا trivia؟
5. هل كل ادّعاء غير بديهي مصحوب بأمر يتحقّق به المتعلّم بنفسه؟
6. هل شُغّل كل مقطع كود فعلاً ونُسخ مخرجه الحقيقي؟
7. هل مشروع التخرّج يغلق أسئلة تُركت مفتوحة، أم مجرّد تطبيق آخر؟
