# PROJECT_STATUS

**آخر تحديث:** 24 يوليو 2026
**الإصدار الحالي:** `v0.1 Foundation`

---

## نسبة الإنجاز الحالية

| المقياس | النسبة |
|---|---|
| **إنجاز مرحلة "الأساس التقني" (Phase 1 Foundation) نفسها** | **~95%** |
| إنجاز المشروع الكامل (بالنظر إلى رؤية 100M+ مستخدم ونطاق المشروع الكامل) | **~6–8%** (متوقَّع لمرحلة تأسيس واحدة من عدة مراحل قادمة) |

**لماذا 95% لا 100% لمرحلة الأساس نفسها؟**
الفجوة الوحيدة المتبقية بيئية وليست هندسية: تعذّر تشغيل `prisma generate` وجلب Google Fonts داخل بيئة التنفيذ الحالية (Sandbox) بسبب قيود شبكة، مما ترك 3 أخطاء TypeScript مصدرها واحد وموثَّق. تم إضافة `postinstall: prisma generate` وتم التحقق (باستبدال مؤقت) أن باقي خط الأنابيب يعمل بنجاح تام. هذه الفجوة تُغلَق تلقائيًا في أي بيئة حقيقية دون أي تدخل كود إضافي — لذلك لا تُحتسب ضد جودة الأساس نفسه، لكنها تُحتسب ضد "التحقق النهائي المؤكَّد 100% في هذه الجلسة تحديدًا".

---

## آخر مرحلة مكتملة

**Phase 1 — الأساس التقني (Technical Foundation)**
تشمل: إعداد Next.js/React/TypeScript، قاعدة البيانات وAuth.js، نظام الصلاحيات (RBAC)، i18n/RTL-LTR، الثيمات والخطوط والأيقونات، طبقات البنية التحتية (S3/Search/Redis كواجهات جاهزة)، فحص أمني كامل (0 ثغرات)، مراجعة هندسية شاملة، وتوثيق الديون التقنية وخارطة المرحلة القادمة.

**حالة الاعتماد:** جاهز للاعتماد الرسمي، بانتظار موافقة صريحة من مالك المشروع.

---

## المرحلة القادمة

**Phase 2 — قاعدة البيانات والمحتوى والخدمات**
التفاصيل الكاملة (بالترتيب الصحيح: Database Architecture ← Content Models ← Headless CMS ← APIs ← Search ← Admin Dashboard) موثَّقة في `docs/PHASE_2_ROADMAP.md`. **لن يبدأ أي تنفيذ فعلي منها إلا بعد موافقة صريحة منفصلة.**

قبل البدء الفعلي بـ Phase 2، يُنصَح بمعالجة أسرع بندين تأثيرًا من `docs/TECHNICAL_DEBT.md`:
1. إطار اختبار أساسي (Vitest) — حتى لا يُبنى منطق أعمال جديد بلا أي شبكة أمان اختبارية.
2. خط CI بسيط (lint + typecheck + build على كل PR).

---

## جميع القرارات الهندسية المتخذة وأسبابها

### قرارات إصدارات الحزم (Dependency Version Decisions)

| القرار | البديل المرفوض | السبب |
|---|---|---|
| **Next.js 16.2.11** | 15.1.0 | 15.1.0 يحتوي ثغرة أمنية موثَّقة (CVE-2025-66478). 16.2.11 أحدث إصدار مستقر خالٍ منها. |
| **next-auth 4.24.15 (مستقر)** | next-auth 5.0.0-beta.25 | المستخدم طلب صراحة "أحدث إصدار **مستقر**"؛ Auth.js v5 لا يزال beta رسميًا (dist-tag `beta` لا `latest`) حتى تاريخ هذا الإصدار. |
| **@next-auth/prisma-adapter** | @auth/prisma-adapter | الأخير مصمَّم لواجهة Adapter الخاصة بـ v5 (`@auth/core`)، واكتُشف عبر `tsc` أنه يسبب **تعارض أنواع حقيقي** مع next-auth v4 (وليس مجرد تحذير Peer)، تحديدًا في خاصية `role` المضافة عبر التوسيع المخصص. |
| **Prisma 6.19.3** | Prisma 7.x (الأحدث) | v7 يفرض ESM إجباريًا، ومحوّلات تشغيل (driver adapters) إجبارية، وله خطأ توافق موثَّق مع Turbopack + Next.js 16 (`Cannot find module '.prisma/client/default'`) حتى تاريخ هذا القرار. 6.19.3 أحدث إصدار مستقر ومتوافق فعليًا مع بقية الاختيارات. |
| **Tailwind CSS v4.3.3** | v3.4.x | v4 هو الإصدار المستقر الحالي فعليًا (ليس تجريبيًا)، بمحرك CSS أسرع وحجم إخراج أصغر؛ التزامًا بطلب "أحدث إصدار مستقر". تطلّب إعادة كتابة نظام الثيمات بالكامل من JS config إلى CSS-first (`@theme`). |
| **zod v4.4.3** | v3.24.x | أحدث إصدار مستقر؛ تطلّب تحديث الكود لصيغ v4 (`z.url()` بدل `z.string().url()`, `z.flattenError()` بدل `.flatten()`). |
| **ESLint 9.39.5** | ESLint 10.7.0 (الأحدث فعليًا) | تم اختباره فعليًا: `eslint-plugin-react` المرفق حاليًا مع `eslint-config-next` **يتعطل بخطأ تشغيلي حقيقي** (`contextOrFilename.getFilename is not a function`) مع ESLint 10 بسبب إزالة API داخلي. هذا ليس تحذير توافق نظري بل عطل مؤكَّد بالتجربة. 9.39.5 أحدث إصدار **فعليًا متوافق**. |
| **overrides لـ @auth/core, postcss, sharp, nodemailer** | ترك القيم الافتراضية أو `npm audit fix --force` | `--force` كان سيُخفِّض next-auth إلى إصدار أقدم (تراجع غير مقبول). الحل البديل: إجبار الإصدارات المصحَّحة لنفس الحزم عبر `overrides` دون المساس بإصدارات الحزم الرئيسية — أدى إلى **0 ثغرات** دون أي downgrade. |

### قرارات بنيوية (Architectural Decisions)

| القرار | السبب |
|---|---|
| **`proxy.ts` بدل `middleware.ts` في الجذر** | Next.js 16 غيَّر الاسم الرسمي للملف (نفس الآلية والـ API)؛ تم اكتشاف التحذير أثناء `next build` ومعالجته فورًا. مجلد `middleware/` (بصيغة الجمع) أُبقي كما هو تمامًا حسب طلب المستخدم الصريح — يحتوي وحدات التركيب الداخلية التي يستوردها `proxy.ts`. |
| **`params` في `app/[locale]/layout.tsx` مكتوبة كـ `string` لا `Locale`** | أنواع المسارات التي يولّدها Next.js 16 تلقائيًا (`LayoutProps<"/[locale]">`) تتوقع `{ locale: string }` عامًا، لا اتحادًا ضيّقًا مخصَّصًا. تم التحقق عبر `hasLocale()` وقت التشغيل بدل الاعتماد على تضييق النوع وقت الترجمة فقط — نمط موصى به رسميًا من next-intl. |
| **`i18n/` كمجلد إضافي خارج القائمة الأصلية** | next-intl يتطلب بنيويًا ملفات `routing.ts`/`navigation.ts`/`request.ts` منفصلة عن `middleware/` (التي تحتوي فقط تركيب الـ Proxy). اعتُبرت ضرورة تقنية لتنفيذ "نظام تعدد اللغات (i18n)" المطلوب صراحة، لا ميزة إضافية من عندنا. |
| **`docs/` كمجلد إضافي** | خاص بمخرجات هذه المرحلة التوثيقية فقط (المراجعة الهندسية، الديون التقنية، خارطة Phase 2) — لم يُطلب صراحة كاسم مجلد لكنه أنسب موضع لمحتوى توثيقي بهذا الحجم بدل تكديسه في الجذر. |
| **`features/` و`services/` أُبقيا شبه فارغين (README فقط)** | التزامًا الصارم بـ "لا تضف صفحات/ميزات من عندك" — البنية جاهزة دون أي افتراض مسبق لشكل أي ميزة قبل اعتماد Phase 2 Roadmap. |
| **نموذج `Article` عام مقترح (في Phase 2 Roadmap) بدل جداول منفصلة لكل قسم** | مبدأ تصميم يقلل تكرار البنية عبر أقسام "عن الإسلام"/"الفقه"/"السيرة" المتشابهة هيكليًا في وثيقة IA؛ الفروقات تُدار عبر `Taxonomy` لا عبر مخطط منفصل. **لم يُنفَّذ بعد** — قرار مُقترَح للمراجعة ضمن Phase 2 فقط. |
| **RBAC كمصدر وحيد (`config/permissions.ts`) مع Prisma enum مطابق حرفيًا** | يمنع انحراف تعريف الأدوار بين طبقة التطبيق وطبقة قاعدة البيانات بمرور الوقت؛ موثَّق صراحة بتعليق تحذيري في كلا الملفين. |
| **`postinstall: prisma generate`** | ممارسة قياسية لأي مشروع Prisma؛ تضمن تزامن الأنواع المولَّدة تلقائيًا مع كل `npm install`، وتحل فجوة التحقق البيئي الحالية تلقائيًا في أي بيئة حقيقية. |

---

## ملخّص أوامر التحقق (يُنصَح بتشغيلها فور الاستلام)

```bash
npm install
npx tsc --noEmit
npm run lint
npm run build
npm audit
```

النتيجة المتوقَّعة: نجاح الأوامر الخمسة بالكامل دون أي تدخل إضافي، بناءً على ما تم التحقق منه في هذه الجلسة (حيث كان القيد الوحيد بيئيًا/شبكيًا بحتًا).
