Files
saqel/docs/GRADE10_CANDIDATE_INTAKE_GATE.md

2.8 KiB

بوابة قبول تفريغ كتب الصف العاشر

ملفات backend/storage/curriculum/_incoming/grade_10 مواد واردة للمراجعة، وليست محتوى منشوراً ولا مصدراً لتوليد تمارين أو مختبرات. لا يُنقل أي ملف منها إلى حزمة نشر إلا بعد اجتياز هذه البوابة والمراجعة الأكاديمية وحقوق المصدر.

الفحص الآلي

شغّل الأمر التالي من جذر المشروع:

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؛ لا يكفي عنوان الدرس.

بهذا يصبح الفشل صريحاً: لا تظهر حصة خاطئة أو تمرين مبني على صفحة غير موجودة للطالب.