Skip to content

Năm mức hoàn thiện của một khoá ​

Một khoá không phải "xong" hoặc "chưa xong". Nó đi qua năm mức, và mỗi mức là một lớp dữ liệu chạy được độc lập.

Điều đó cho phép làm rộng trước, sâu sau: đưa mọi khoá lên mức 2 rồi mới nâng dần, thay vì làm xong 100% một khoá mới sang được khoá kế tiếp. Trước khi có cách chia này, một khoá ngốn nhiều giờ và mười khoá còn lại nằm im chờ.

Năm mức ​

MứcTênCó gìNgười học làm được gì
1Đích đến và người họcUnit và khái niệm, Course Outcome bám thang năng lực, chân dung người học (pains · jobs · needs · không hợp với ai)Biết học xong làm được gì, và quyết định được khoá này có phải cho mình không
2Đặc tảBig Idea, Essential Question, mục đích, outcome, khái niệm chính, khung tư duy, hiểu lầm, điều kiện trước, Performance Task kèm tiêu chíQuyết định được có nên học không, và biết sẽ phải làm gì
3Mở bàiCâu chuyện SCQA cấp unit và cấp bài, Guiding Question, Kiến thức/Kỹ năng, thư viện Big Idea, bản tiếng AnhVào học được: mọi trang unit và bài đều hiện đủ
4Học được trọn một vòngBa bài viết, chín ví dụ chia ba nhóm, ba chỗ dừng, hai ngân hàng câu hỏiHọc thật, làm quiz chốt, và mở được Unit sau
5Chấm được sản phẩmRubric bốn mức của Performance TaskNộp bài và biết mình đạt hay chưa

Vì sao ngân hàng câu hỏi ở mức 4 chứ không phải mức 5

Quiz chốt bài là thứ mở Unit sau. Thiếu nó thì người học đọc hết bài rồi kẹt lại, tức khoá chưa đi hết được một vòng, mà "học được" phải có nghĩa là đi được tới cuối.

Mức 5 dành cho việc chấm sản phẩm người học làm ra, là một tầng khác hẳn: nó không chặn đường đi, nó xác nhận năng lực.

Luật xếp mức ​

Một khoá đạt mức N khi mọi unit và mọi bài của nó đủ lớp N. Không lấy trung bình.

Một khoá mà nửa số bài chưa dạy được thì không phải "mức 4 rưỡi", nó là mức 3. Người học không gặp một khoá trung bình; họ gặp đúng cái bài đang mở, và bài đó hoặc dạy được hoặc không.

Xem mức hiện tại ​

GET /api/course-intelligence/course-levels

Trả về mức của mọi khoá đang hoạt động, kèm missing, số unit hoặc bài còn thiếu ở từng lớp. Đó mới là con số dùng để xếp việc, vì nó nói còn bao nhiêu chứ không chỉ đã tới đâu.

Nâng một mức ​

Đường CHÍNH từ 28.08.2026 là hệ tự chạy: CourseOpsOrchestratorWorkflow đọc missing của mọi khoá mỗi 3 tiếng, ưu tiên lỗi chặn rồi tới lớp thấp nhất còn thiếu, và tự giao việc sinh. Muốn đẩy ngay một khoá thì gọi:

POST /api/course-intelligence/ops/run   { "course_slugs": ["sales"], "budget": 12 }

Đường CHẠY TAY (sửa điểm, thử nghiệm) vẫn còn: các endpoint /authoring/* dưới đây chạy khi TEST_MODE=true qua wrangler dev --remote, hoặc bash api.conan.school/scripts/author_by_level.sh 2 sales offer để chạy hàng loạt từ máy.

Mức 1 nay có hai phần. Phần khung (unit nào, ba khái niệm dễ nhầm nào đi cùng nhau) vẫn do người soạn quyết định, không sinh bằng máy. Phần đích đến và người học thì máy sinh, và sinh trước mọi thứ khác.

Vì sao Course Outcome phải gắn mức năng lực

"Học xong bạn viết được lập luận tốt" đúng ở mọi mức, nên không kiểm được ở mức nào. Chuẩn v2.2 bắt mỗi outcome gắn đúng một bậc trong thang bốn mức:

MứcNghĩa
aware Nhận raGọi tên được và nhận ra khi gặp, nhưng chưa tự làm
guided Làm được khi có mẫuLàm đúng khi có khuôn, có ví dụ hoặc có người soát lại
fluent Tự làm đượcTự làm trong việc thật của mình, không cần ai soát
lead Sửa được cho người khácNhìn bài người khác chỉ ra chỗ hỏng và nói được vì sao

Kèm theo là bằng chứng nhìn thấy được, một sản phẩm, một việc họ làm khác đi, một thứ đếm được. Một năng lực không nhìn thấy được thì người học không biết mình đã tới hay chưa.

Và learner_fit bắt nói cả ai KHÔNG hợp: chỉ nói hợp với ai thì mọi khoá đều hợp với mọi người, và câu trả lời rỗng nghĩa như nhau. Cùng một kỷ luật với anti_scope.

Mỗi mức ứng với endpoint nào ​

MứcCấp UnitCấp Lesson
1courses/:id/outcomes · courses/:id/learner-fit,
2units/:id/specconcepts/:id/spec
3units/:id/scqa · units/:id/big-idea · units/:id/bilingualconcepts/:id/basics
4,concepts/:id/learning-experience · concepts/:id/quiz-banks
5units/:id/task,

Từ chuẩn v2.1, phép đếm đuổi kịp phép tả: mức 3 đòi cả thư viện Big Idea của mọi unit (chuẩn v2 vốn đã ghi unit.big_idea_quiz ở mức 3 nhưng phép đếm cũ bỏ qua), và mức 4 đòi cả hai ngân hàng, bài có formative mà mất summative thì quiz chốt trống, người học đọc hết bài vẫn kẹt trước cổng mở Unit sau. Bản tiếng Anh (bilingual) được máy điều phối sinh bù nhưng không gác mức.

Vì sao chia đúng năm lớp này ​

Ranh giới giữa các mức không tuỳ tiện, mỗi mức là một câu hỏi khác nhau của người học:

  • Mức 1 trả lời "học xong tôi làm được gì, và khoá này có phải cho tôi không?"
  • Mức 2 trả lời "khoá dạy tôi bằng cách nào, và tôi sẽ phải làm ra cái gì?"
  • Mức 3 trả lời "vào học thì gặp gì?"
  • Mức 4 trả lời "tôi học được thật, và đi tiếp được không?"
  • Mức 5 trả lời "làm sao biết tôi đã làm được thật?"

Một khoá dừng ở mức 2 vẫn có ích: người ta đọc và quyết định được. Một khoá dừng ở mức 4 thì học hết được cả khoá, chỉ chưa nộp được sản phẩm để lấy xác nhận. Không mức nào là vô dụng, nên dừng ở đâu cũng còn dùng được, đó chính là điều làm cho việc đi rộng trước trở nên an toàn.

Dùng chuẩn này ở trường khác, repo khác ​

Chuẩn không thuộc về một trường hay một repository nào. Nó sống ở gói @conan/course-standard, và có ba đường dùng:

1. Import gói, trong monorepo này:

js
import { courseLevel, missingCounts, standard } from '@conan/course-standard'

2. Đọc file JSON, repo khác, ngôn ngữ khác, không cần npm:

https://docs.conan.school/standard/course-standard.v2.2.json

File này mô tả đủ để một repo Python hay Go tự cài đặt phép xếp mức. Luật nằm ở levelRule và levels[].artifacts. Các bản v2.1, v2 và v1 vẫn sống nguyên tại chỗ cho repo đang đọc chúng.

3. Fork, trường có mô hình khác hẳn thì cứ chép làm điểm khởi đầu.

Chuẩn và profile ​

Ranh giới quan trọng nhất: chuẩn nói CÁI GÌ phải có và VÌ SAO; profile nói bao nhiêu và bằng tiếng gì.

Thuộc chuẩnThuộc profile của từng trường
Khoá gồm unit, unit gồm lessonNgôn ngữ và giọng văn
Năm mức và luật xếp mứcTên nhân vật, bối cảnh trong ví dụ
Ba nhóm ví dụ: rõ / dễ nhầm / không áp dụngSố unit mỗi khoá, số bài mỗi unit
Hai ngân hàng câu hỏi không giao nhauNgưỡng đạt của Performance Task
Chín luật chất lượngTừ ngữ hiển thị cho người học

Không có ranh giới này thì gói dùng chung sẽ nhanh chóng đầy những thứ chỉ đúng với Conan School, và trường khác lại phải fork.

Phép xếp mức là hàm THUẦN ​

courseLevel(counts) không chạm cơ sở dữ liệu và không biết gì về lược đồ bảng, mỗi repo tự đếm theo cách của mình rồi đưa con số vào. API của api.conan.school cũng đi đúng đường đó: nó chỉ làm việc mà chỉ nó biết cách làm là đếm trên D1, còn xếp mức thì gọi chuẩn.

Đánh phiên bản ​

standard.v1.json đã công bố thì không sửa tại chỗ. Đổi luật nghĩa là ra v2 và giữ v1 sống tiếp, vì có repo đang đọc nó qua URL mà mình không biết.

Luật này đã dùng thật hai lần: chuyển ngân hàng câu hỏi từ mức 5 xuống mức 4 đổi nghĩa cả hai mức nên ra v2 (v1 nằm nguyên tại /standard/course-standard.v1.json); v2.1 chỉ THÊM (sáu luật chất lượng mới, đặc tả lớp kiểm đáp án, sàn 12 câu mỗi ngân hàng, ba counter xếp mức tuỳ chọn) nên ra file mới mà v2.json không bị đụng tới; còn v2.2 đổi NGHĨA của mức 1 (từ "có unit và khái niệm" thành "có đích đến và chân dung người học") nên cũng là một file mới.

Tài liệu nội bộ nền tảng Conan School.