Skip to content

Khảo sát trước khi dựng cây B21 + sinh Experience (chuẩn bị cho mẻ chạy 05:15, 18.08.2026) ​

Ghi lại những gì đã đo được trên code và D1 thật, để mẻ chạy sau không phải dò lại và không phải đoán. Mọi con số dưới đây lấy bằng lệnh, không phải từ trí nhớ.

1. Cây curriculum đã có sẵn, không cần nghĩ lại ​

SRC-246 đã viết xong cây cho cả hai môn trong apps/pearl/content/curriculum/. Các bảng unit ở đó là máy đọc được (4 cột: Unit · Mastery level · Lớp VN · Key concept), nên đã viết scripts/curriculum-parse.mjs để đọc thẳng ra thay vì gõ lại lần thứ hai.

node scripts/curriculum-parse.mjs
MônPackageModuleUnitUnit chạm lớp 4-7
toan5218249
van5185739

Đủ rộng để lấy 30 Experience mỗi môn mà vẫn chia đều bốn lớp (lớp 4: 33 unit toán / 23 unit văn; lớp 5: 33/27; lớp 6: 35/27; lớp 7: 32/27).

Một chỗ vênh cần báo chủ dự án, KHÔNG tự sửa: số tự khai trên toan/index.md lệch với chính bảng của nó — package 2 ghi "18 unit" nhưng bảng có 20, package 3 ghi 16 nhưng bảng có 17. Lấy BẢNG làm chuẩn (bảng là nội dung, con số tóm tắt là thứ dễ quên cập nhật). Ngoài ra module 2.5 đang nằm giữa 2.2 và 2.3 trong file, thứ tự trình bày sai.

2. "Learning Experience" trong learn thực chất là gì ​

Đây là chỗ dễ làm sai nhất, nên đo kỹ:

  • Bảng learning_experiences chỉ có 6 dòng, tất cả kind='assessment', 0 dòng kind='lx', và chỉ Coral (workers/api/src/modules/coral/routes.ts) đọc/ghi nó ở trạng thái draft. App learn KHÔNG đọc bảng này. Nạp 60 dòng vào đây thì learner không thấy gì hết.
  • Cái learner thật sự chạy (apps/learn/src/Learning.tsx) ghép từ ba nguồn:
    1. skill_nodes — một unit = một node (subject_id, id, strand, grade, module, unit…)
    2. items — bộ câu hỏi của node đó (MCQ: prompt, options_json, correct_index, misconception)
    3. apps/learn/src/explore/configs.tsx — widget khám phá, nằm trong CODE, khoá theo node id (hasExplore/exploreKey). Muốn có phần "khám phá" thì phải sửa code, không nạp DB được.
  • Assessment mà learner đang dùng là đề thi: exams + exam_questions (apps/learn/src/ExamPractice.tsx). Hiện có 21 đề/lớp cho math và vietnamese, chỉ lớp 6-9. Lớp 4-5 chưa có đề nào — đây chính là khoảng trống cần lấp.

Kết luận cho mẻ chạy ​

  • 30 Learning Experience/môn = 30 unit node (lớp 4-7) có đủ items, cộng explore config cho những unit hợp với thao tác trực quan.
  • 30 Assessment Experience/môn = 30 bản ghi exams + exam_questions, ưu tiên lấp lớp 4-5 rồi mới tới 6-7.
  • Không đụng learning_experiences trừ khi có ý định wire renderer — mà việc đó phải hỏi trước.

3. Ràng buộc khi ghi ​

  • D1 chặn 100 tham số/câu lệnh → chia lô ≤20 dòng. Mẫu script: scripts/mathify-items.mjs.
  • Token wrangler hết hạn thì chạy npx wrangler d1 execute nemo12-platform --remote --command "select 1" một lần.
  • items.role chỉ nhận canonical|variant|boundary|discriminator; exams.exam_type chỉ nhận semester|selective; term chỉ nhận giua_ki_1|cuoi_ki_1|giua_ki_2|cuoi_ki_2.
  • Công thức toán viết $…$ (KaTeX). Đơn vị đo để nguyên Unicode, không bọc math.