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.
التسلسل الصحيح
- صحح أو ارفض الملفات التي يسجلها الفاحص، مع بقاء النسخ القديمة للمراجعة.
- وحّد frontmatter لكل عنصر:
grade_key,subject_key,semester_key,unit_key,lesson_key,curriculum_version, وsourceالذي يحوي PDF والصفحات وحالة المراجعة. - صنّف العنصر صراحة:
lessonأوunit_reviewأوworksheetأوlabأوproject. لا يعامل اختبار الوحدة أو المختبر كدرس فيديو تلقائياً. - يراجع مختص المادة مطابقة النص والمعادلات والرسوم والجداول مع PDF، ويحدد بوضوح ما هو نص أصلي وما هو تبسيط أو إثراء.
- أنشئ
content_assetبالـchecksum، ثمpublication_bundleمسودة، ولا تتحول إلى منشورة إلا بعد مراجعة المحتوى والحقوق. - يولد التدريب من حزمة منشورة فقط. تمرين الكتاب يبقى مرتبطاً بصفحته، والتمرين المولد يسجل كـ«تدريب إضافي». المختبر يحتاج هدفاً واحداً، تعليمات سلامة، أدوات أو محاكاة، متغيرات، توقع، ملاحظة، تفسير، وrubric؛ لا يكفي عنوان الدرس.
بهذا يصبح الفشل صريحاً: لا تظهر حصة خاطئة أو تمرين مبني على صفحة غير موجودة للطالب.