Update Saqel Platform: 2026-09-10 23:13:50

This commit is contained in:
Hamza-Ayed
2026-09-10 23:13:50 +03:00
parent a742c5bfd6
commit 12fb6d07e6
376 changed files with 7606 additions and 490 deletions
+26
View File
@@ -0,0 +1,26 @@
# بوابة قبول تفريغ كتب الصف العاشر
ملفات `backend/storage/curriculum/_incoming/grade_10` مواد واردة للمراجعة، وليست محتوى منشوراً ولا مصدراً لتوليد تمارين أو مختبرات. لا يُنقل أي ملف منها إلى حزمة نشر إلا بعد اجتياز هذه البوابة والمراجعة الأكاديمية وحقوق المصدر.
## الفحص الآلي
شغّل الأمر التالي من جذر المشروع:
```bash
php backend/scripts/validate_grade10_candidate.php --json
```
الفاحص قراءة فقط: لا يتصل بقاعدة البيانات، ولا ينقل ملفات، ولا يغير حالة نشر. يفحص تطابق `manifest.candidate.json` مع ملفات Markdown، الهوية المنهجية في YAML، وجود ملف PDF الأصلي، حدود الصفحات، المحتوى الفارغ، التكرار، وتعارض تقرير QA مع الحقائق الفعلية.
أي exit code غير صفري يبقي الحزمة في `_incoming`. لا تعالج النتيجة بتمريرها إلى `sync_curriculum_to_database.php`؛ فهذا السكربت القديم يقرأ `manifest.json` الحي ويكتب النص مباشرة في جدول `lessons`.
## التسلسل الصحيح
1. صحح أو ارفض الملفات التي يسجلها الفاحص، مع بقاء النسخ القديمة للمراجعة.
2. وحّد frontmatter لكل عنصر: `grade_key`, `subject_key`, `semester_key`, `unit_key`, `lesson_key`, `curriculum_version`, و`source` الذي يحوي PDF والصفحات وحالة المراجعة.
3. صنّف العنصر صراحة: `lesson` أو `unit_review` أو `worksheet` أو `lab` أو `project`. لا يعامل اختبار الوحدة أو المختبر كدرس فيديو تلقائياً.
4. يراجع مختص المادة مطابقة النص والمعادلات والرسوم والجداول مع PDF، ويحدد بوضوح ما هو نص أصلي وما هو تبسيط أو إثراء.
5. أنشئ `content_asset` بالـchecksum، ثم `publication_bundle` مسودة، ولا تتحول إلى منشورة إلا بعد مراجعة المحتوى والحقوق.
6. يولد التدريب من حزمة منشورة فقط. تمرين الكتاب يبقى مرتبطاً بصفحته، والتمرين المولد يسجل كـ«تدريب إضافي». المختبر يحتاج هدفاً واحداً، تعليمات سلامة، أدوات أو محاكاة، متغيرات، توقع، ملاحظة، تفسير، وrubric؛ لا يكفي عنوان الدرس.
بهذا يصبح الفشل صريحاً: لا تظهر حصة خاطئة أو تمرين مبني على صفحة غير موجودة للطالب.