Rubric audit một Course (SRC-616)
Chấm bằng máy: node scripts/audit-course.mjs <course_id> (chạy sau npm run migrate:dryrun). Ngưỡng đạt ≥90/100 — dưới ngưỡng thì course chưa được commit tiếp nội dung mới; nâng cấp rồi chấm lại. Rubric là điều kiện CẦN (máy đo số lượng, hiện diện, mối nối); chất lượng câu chữ do vòng review theo CD-4/CD-8/CD-9/CD-10 — sửa ngưỡng thì sửa file này trước, script theo sau.
| Nhóm | Mục | Điểm |
|---|---|---|
| A · Cấu trúc (30) | A1 Unit 3-5 | 5 |
| A2 Lesson mỗi unit 3-5 | 5 | |
| A3 Big Idea + Essential Question mỗi unit | 6 | |
| A4 Key concepts 3-5 | 4 | |
| A5 Ngữ liệu ≥2 mỗi unit | 4 | |
| A6 Khung tư duy 2-3 | 3 | |
| A7 Guiding Question + concepts mỗi lesson | 3 | |
| B · Outcomes & assessment (40) | B1 Unit Outcomes 2-4 | 6 |
| B2 Performance Task đủ đề + sản phẩm nộp | 6 | |
| B3 Tiêu chí chấm 3-5 | 4 | |
| B4 ≥60% tiêu chí nối về outcome | 4 | |
| B5 Lesson Outcomes 1-2 | 4 | |
| B6 Formative checks 2-4 mỗi lesson | 6 | |
| B7 ≥60% checks nối về outcome | 4 | |
| B8 Học liệu 1-3, ≥1 kèm reflection | 6 | |
| C · Spec (30) | C1 Course spec đủ purpose · progression · assessment strategy · completion criteria | 4 |
| C2 Course outcomes 2-4 + prerequisites ≥1 | 4 | |
| C3 Unit spec đủ purpose · progression · mastery criteria | 4 | |
| C4 Unit prerequisites ≥2 dòng | 3 | |
| C5 Misconception Map unit 3-5 | 4 | |
| C6 Lesson misconceptions 3-5 | 4 | |
| C7 Lesson errors 2-4 | 3 | |
| C8 Interventions ≥3 mỗi lesson | 4 |
Cổng chặn trước khi chấm — dữ liệu trùng
Script dừng với mã lỗi trước khi tính điểm nếu phát hiện nhãn bị ghi nhiều lần trong cùng một chỗ (curriculum_unit_elements, curriculum_unit_outcomes, curriculum_lesson_checks).
Vì sao cần cổng riêng thay vì một mục điểm: mọi mục của rubric chấm theo KHOẢNG ("3-5 key concept", "≥2 ngữ liệu"), nên một course bị đổ hai lần bằng hai đường ống đánh seq khác nhau vẫn lọt lưới và vẫn ăn đủ điểm. Ca thật 2026-08-27: migration 0091 để lại 18 dòng khung tư duy thay vì 12 — A6 trượt vì trần là 3, nhưng A4 và A5 vẫn xanh dù cũng nhân đôi. Điểm cao trên dữ liệu hỏng nguy hơn điểm thấp, nên đây là điều kiện chặn chứ không phải điểm trừ.
Mục theo tỷ lệ: đơn vị nào đạt thì ăn phần điểm của đơn vị đó (3/4 unit đạt A4 = 3đ). Quy trình chuỗi soạn (goal SRC-616): xoay vòng Toán → Ngữ văn → Tin (lập trình thi đấu) → Tiếng Anh, mỗi vòng một course; nội dung viết ở scripts/course-content/<course_id>.json, đổ bằng scripts/course-content-to-sql.mjs thành migration, audit đạt ≥90 rồi mới commit và sang course kế. Học liệu chỉ dùng nguồn thật: lab id có trong D1, hoặc URL pearl.nemo12.com có file tương ứng trong apps/pearl/content — cấm bịa link (CD-7.2).
Rubric cấp Lesson-draft của Content Foundry (SRC-632, thang v2 theo SRC-633)
Thang chấm bản thảo lesson máy sinh trong workflow LessonForge (SDD-027 §4) — thi hành ở workers/foundry/src/rubric.ts. File này là chuẩn: sửa tiêu chí / điểm / ngưỡng thì sửa đây TRƯỚC, tăng RUBRIC_VERSION trong rubric.ts theo sau. Điểm chỉ so được giữa các trial cùng rubric_version (stamp vào R2 + content_run_trials, migration 0165).
Cùng triết lý thang A/B/C ở trên: điều kiện CẦN — máy chỉ đo số lượng, hiện diện, mối nối và dấu hiệu văn phong bắt được bằng máy; chất lượng câu chữ là việc của vòng review model khác và của người duyệt.
| Mục | Tiêu chí | Điểm | Ghi chú |
|---|---|---|---|
| L1 | Guiding question là câu hỏi thật (kết thúc ?) | 8 | |
| L2 | Outcomes 1-2 mục | 2 | schema đã ép — dây an toàn |
| L3 | Outcome không dùng giọng sách giáo khoa | 8 | regex TEACHER_VOICE |
| L4 | Story đủ bốn phần SCQA, câu hỏi là câu hỏi | 10 | |
| L5 | Story không chép nguyên văn guiding question | 6 | |
| L6 | Misconception 3-5 mục | 3 | schema đã ép |
| L7 | Misconception không trùng nhau | 6 | |
| L8 | Lỗi hay mắc 2-4 mục | 2 | schema đã ép |
| L9 | Interventions ≥3, đủ bằng chứng + hành động | 4 | schema đã ép |
| L10 | Học liệu 1-3, ≥1 kèm reflection | 8 | phần reflection schema KHÔNG ép |
| L11 | Checks 2-4 mục | 2 | schema đã ép |
| L12 | ≥60% checks nối về outcome có thật | 8 | mối nối ma không tính (= B7 thang course) |
| L13 | Đủ chỗ đặt nhiễu: ≥1 mcq và số misconception ≤ mcq×3 | 12 | bất biến 5g — cùng hằng số với cổng chặn của audit-course.mjs |
| L14 | Không có dấu gạch dài (em dash) | 6 | |
| L15 | Misconception không trùng nguyên văn với error | 6 | CD-8: hai loại, hai đơn thuốc |
| L16 | Mối nối với Unit hợp lệ: concepts ⊆ key concepts, unit_code có trong Misconception Map | 9 | chỉ chấm khi brief mang ngữ cảnh unit; thiếu thì tính đủ điểm, max giữ 100 |
Ngưỡng đạt ≥90/100 (PASS_SCORE). Điểm chết (tiêu chí schema bảo đảm sẵn) là 13/100 — thang v1 là 44/100 nên "90" khi ấy thực chất là "được rớt đúng một tiêu chí". Vòng sửa chạy khi CÒN BẤT KỲ chỗ chưa đạt nào, không chỉ khi dưới ngưỡng: bài 92 điểm mang guiding question không phải câu hỏi vẫn phải được vá. So với thang course ở trên: L12 = B7, L6 = C6, L8 = C7, L9 = C8, L10 = B8 — hai thang cùng đo một chuẩn CD-8 ở hai thời điểm (trước khi chạm D1 / sau khi nạp D1).