SDD-038 · Kho bài Nghe
Một phần của SDD-038 Cổng IELTS. Phần đầu là đặc tả đang áp dụng, mỗi mục giữ số § cũ; diễn biến và lý do các vòng quyết định nằm ở mục Lịch sử quyết định cuối trang.
15. Nghe ngữ liệu trong bài tập năng lực (SRC-864, 2026-09-19)
Không có ô chọn giọng, và đó là một quyết định sư phạm chứ không phải một nút bị cắt cho gọn: trong phòng thi learner không chọn được giọng người đọc. Một learner luôn nghe đúng một giọng quen sẽ tưởng mình nghe được, cho tới hôm gặp giọng khác. Giọng bốc lại ở MỖI LẦN BẤM — nghe lại một đoạn bằng giọng khác chính là bài tập.
Chọn giọng nằm ở trình duyệt, không ở server. Route vẫn nhận voice như hai route TTS trước đó (SRC-787/789) vì khoá R2 phải mang giọng trong tên; bốc ngẫu nhiên ở server nghĩa là một URL trả về bốn nội dung khác nhau và cache lập tức vô nghĩa.
GET /v1/public/ielts/micro-items/{itemId}/audio?voice= — nhận ID CÂU chứ không nhận chữ, cùng luật với hai route kia: nhận chữ tự do từ trình duyệt là mở một dịch vụ TTS miễn phí cho cả internet trên hoá đơn của mình. Chỉ đọc câu đã published và chỉ khi lang = 'en': ngữ liệu chặng 1-2 là tiếng Việt (SRC-821), và đọc tiếng Việt bằng giọng tiếng Anh cho ra một thứ không ai học được gì từ nó.
16. Lời thoại tách khỏi ghi chép, và đóng sẵn (SRC-866, 2026-09-19)
Ngữ liệu dạng điền-từ được soạn thành một khối chữ duy nhất: lời người ta nói, rồi tờ ghi chép chép lại lời ấy (Lời thoại: ... Ghi chép: ..., bản tiếng Anh là ... Notes: ...). Nay tách làm hai khối, và lời thoại đóng sẵn.
Lý do quan trọng hơn cái gọn: đây là bài tập NGHE. Bày sẵn bản chữ của thứ đáng lẽ phải nghe là đưa luôn đáp án — learner đọc một dòng là xong, không cần nghe câu nào. Nút nghe (§15) đứng ngay trên, còn bản chữ nằm sau một cú bấm, dành cho lúc đã nghe mà vẫn chưa ra.
Nhận diện bằng chính nhãn có sẵn trong ngữ liệu, KHÔNG thêm cột: dữ liệu đã soạn xong cả nghìn câu, và thêm cột nghĩa là nạp lại từng ấy dòng chỉ để nói một điều mà chữ đã nói. Câu không có phần ghi chép thì không giấu gì cả — đoạn văn CHÍNH LÀ thứ phải đọc.
Nút nghe chỉ ở bài tập Nghe. Bản đầu gắn nó cho mọi ngữ liệu tiếng Anh, tức là cả bài tập Đọc — lặp lại đúng cái vừa gỡ khỏi trang Reading ở §12.1. Cổng bắt được: một ca Playwright của ieltsMicroSkill.spec.ts bấm section button đầu tiên và trúng nút nghe thay vì đáp án.
23. Dot 2 bai nghe: 16 bai moi, va de nghe het kho (SRC-879, 2026-09-19)
So hoc cua mot de nghe. Mot de lay BON bai tu BON linh vuc khac nhau (muc 5d), nen so de bang tong so bai chia bon, khong phai so cum. Tam cum x 2 bai = 16 bai = 4 de. Dot nay them clip 3 va 4 cho ca tam cum: 32 bai = 8 de mo, 12 de con kho.
Cho ma dot nay CHUA lam duoc: tran hai bai moi cum. testCardsFor va listeningPaper deu dem cung mot cach - lay theo LOP (bai dau cua moi cum truoc, roi bai thu hai), va ca hai deu dung cung so lop. Truoc dot nay so lop la hai, viet cung trong code. Nay layers() suy so lop tu chinh du lieu, nen them bai la co them de ma khong phai sua code lan nua.
Hai ham ay dem doc lap nhau, va lech mot lop thi danh sach bay ra mot de ma trang de tra ve "No paper at this address" - hong dung kieu chi lo ra khi co nguoi bam vao. Nen co mot test di qua TUNG id tren danh sach va mo no (apps/learn/src/ielts/examTests.test.ts), thay vi so hai con so.
Dap an khong con luon nam o lua chon dau. Ra soat luc soan phat hien 16 bai nghe DANG CHAY co 123 tren 128 cau trac nghiem dat dap an dung o vi tri thu nhat. Do la he qua tu nhien cua viec soan tay: dap an dung duoc viet ra truoc, ba phuong an nhieu viet sau. Learner lam toi bai thu ba se nhan ra, va tu do bai kiem tra do tri nho ve thoi quen soan de chu khong do tieng Anh.
Script sinh seed cua dot ay (nay da go, xem muc 25) xoay lua chon theo ma cau bang mot ham bam on dinh - cung mot file sinh ra cung mot de o moi lan chay, nen nap lai lan hai khong doi dap an duoi chan learner dang lam do. 128 cau moi rai deu: 31 / 25 / 38 / 34.
16 bai cu van con loi nay va CHUA sua: xoay lua chon cua chung se lam lech y nghia nhung lan tra loi da luu (bang ghi chi so lua chon, khong ghi noi dung). Do la mot viec rieng, can quyet dinh rieng.
Duong nap (bay gio da doi, xem muc 25). File JSON trong scripts/content/ giu ban da gui di, script tren sinh scripts/seed-ielts-listening-batch2.sql, nap qua gh workflow run seed-data.yml. File JSON o scripts/content/ khong pha luat "D1 la ban duy nhat" (muc 19): no la ban DA NAP, cung loai voi moi scripts/seed-*.sql, va cho sua noi dung sau khi nap van la man admin.
Rang buoc kiem truoc khi sinh SQL (vi ca ba deu khong tu lo ra khi xem trang): moi bai 10 cau chia dung nam nhom (gist 2, detail 3, note 2, inference 2, attitude 1) voi 2 cau dien tu; turns dai dung bang so cau thoai, vi trang doc turns[i] cho cau thu i nen lech mot phan tu la moi cau sau do gan nham nguoi noi; dap an tro vao mot lua chon co that.
24. Dot 3 bai nghe: 48 bai, Listening het de kho (SRC-881, 2026-09-19)
Cung khuon voi dot 2 (muc 23): moi bai 12-14 cau thoai, 10 cau hoi chia dung nam nhom, 2 cau dien tu, dap an xoay theo ma cau. 480 cau moi rai deu bon vi tri: 103 / 90 / 99 / 92.
Script sinh seed nhan THAM SO DOT (... batch3; script nay nay da go, xem muc 25). Truoc do ten dot viet cung trong code, va dot thu hai se phai sua chinh cong kiem de chay duoc - sua mot cong de no cho qua du lieu moi la cach hong cong nhanh nhat. Sinh lai dot 2 bang ban moi cho ra dung nhung cau INSERT cu (chi khac dong comment tieu de), nen doi dot khong lam lech du lieu da nap.
Tinh huong 48 bai deu khac nhau, va chon co y theo bon dang cua de that: hoi thoai doi song, doc thoai doi song, hoi thoai hoc thuat, bai giang. Moi cum sau bai xen ke doc thoai va hoi thoai, dung lai von tu cua cum bai doc cung linh vuc - nghe mot tu trong cau noi mieng khac han doc no tren trang giay, va do chinh la cho bai nghe phai lam viec.
Van chua sua: 16 bai cu co 123/128 cau dap an o vi tri mot (muc 23). Quyet dinh do van cho chu du an, vi xoay chung lam lech y nghia cac lan tra loi da luu.
31. Năm năng lực nhỏ của phần Nghe, đặt lại theo khung IELTS (SRC-894, 2026-09-20)
Chỉ đạo chủ dự án 2026-09-20, kèm ảnh chụp thẻ "Where am I strong?" của trang Listening: năm năng lực nhỏ phải là
| seq | Mã | Tên trên thẻ | Đo điều gì |
|---|---|---|---|
| 1 | gist | Gist / Main Idea | Hiểu ý chính |
| 2 | detail | Detail / Factual Information | Hiểu thông tin cụ thể |
| 3 | attitude | Opinion & Attitude | Hiểu quan điểm và thái độ người nói |
| 4 | purpose | Purpose / Intention | Hiểu mục đích của một lời nói |
| 5 | development | Development of Ideas | Theo được mạch triển khai ý |
Và, chỉ đạo thứ hai cùng ngày: "mỗi sub-skills đều có cái để learners có thể học và luyện tập" — nên bản này không dừng ở việc đổi danh mục.
a. note biến mất vì nó không cùng trục với bốn cái kia
"Note completion" là một dạng đề, không phải một thao tác nhận thức. Một câu điền từ đo đúng điều mà một câu trắc nghiệm chi tiết đo: nghe ra một thông tin cụ thể. Để nó đứng ngang hàng là trộn cách hỏi với điều được hỏi vào cùng một thẻ, và thẻ ấy nói với learner rằng "con yếu phần điền từ" — một câu không dẫn tới việc gì làm tiếp được, vì không ai luyện được "dạng đề".
Nên 128 câu điền từ trong kho chuyển thẻ sang detail, và toàn bộ thang bốn chặng của note chuyển theo (đổi micro_skill_id, seq dời về dải 90+ để đứng cuối mỗi bậc). Nội dung ấy vẫn học và luyện được, chỉ đứng dưới đúng cái tên của nó.
b. inference không bị bỏ mà ĐỔI MÃ thành purpose
Đọc lại ngữ liệu đã soạn cho listening.inference (migration 0242) thì gần như toàn bộ là: một lời từ chối lịch sự, một câu né trả lời, một lời khen hẹp hàm ý chê. Đó đúng là câu hỏi "lời này nói ra để làm gì" — định nghĩa Purpose / Intention của IELTS, chứ không phải suy luận nói chung.
Vì thế purpose thừa kế nguyên vẹn: thang bốn chặng, các bài tập, và mọi bằng chứng learner đã làm. Dựng một purpose rỗng rồi bỏ inference lại là cách làm mất tiến độ của learner vì một lần đặt lại tên — và mất im lặng, không có dòng lỗi nào. Nên migration 0259 còn viết lại cả learning_events.ref (exercise:listening.inference.* → exercise:listening.purpose.*), vì thẻ Mastery đọc mã năng lực từ chính chuỗi ref ấy (mastery.ts · codeOfExerciseRef).
c. development là mã mới, và nó sinh ra đã có nội dung
Migration 0259 nạp cho development: bài lý thuyết đủ năm phần, một bộ bài bậc 1 tiếng Việt (5 đoạn) và một bộ bậc 3 tiếng Anh (5 đoạn). Một thẻ năng lực mở ra rỗng là một ngõ cụt — đúng lý lẽ đã viết trong 0251 khi từ chối dựng sẵn bài tập bậc 5.
Sau bản này, cả năm năng lực đều có lý thuyết và bài luyện:
| Mã | Bài tập | Câu hỏi trong kho bài nghe |
|---|---|---|
gist | 4 | 128 |
detail | 8 (4 của chính nó + 4 nhận từ note) | 320 |
attitude | 4 | 64 |
purpose | 4 (thừa kế) | 83 |
development | 2 (mới) | 45 |
d. Gắn lại thẻ cho 640 câu hỏi, ở HAI nơi
Thẻ Mastery đếm theo ielts_content_questions.sub_skill. Phép gắn lại:
note→detail;inference→purposekhi đề bắt đầu bằng Why hoặc hỏi về việc nhắc tới một điều;inference→developmentvới phần còn lại ("What does X suggest about…").
Phép này chạy ở migration 0259 và được sửa thẳng trong hai file seed (scripts/seed-ielts-listening-batch2.sql, batch3.sql). Hai nơi phải nói cùng một điều vì seed chạy lại bằng INSERT OR REPLACE: để nguyên file seed thì lần nạp lại sau sẽ lặng lẽ trả kho câu hỏi về danh mục cũ.
e. Còn mở
detailđang chiếm một nửa kho (320/640) sau khi nhận 128 câu điền từ, còndevelopmentmới có 45 câu. Cân lại đòi soạn nội dung mới chứ không gắn thẻ lại được nữa — gắn thẻ chỉ sắp xếp được thứ đã có.- 45 câu
developmentlà câu đã soạn cho mục đích khác rồi gắn thẻ lại theo dạng đề. Chúng đo đúng hướng, nhưng một đợt rà nội dung cho riêng năng lực này vẫn nên có.
75. Cổng bản chữ: năm lần nghe TRỌN, và một nút hình tam giác (SRC-973, 22.09.2026)
75a. Đếm lần nghe TRỌN — một lần đảo luật
SRC-850 cố ý đếm lần bấm, với lý do: learner nghe kỹ nửa đoạn khó rồi tua lại sẽ không bao giờ tới ngưỡng nếu đếm onended.
Lý do mới thắng: bấm Nghe rồi dừng sau hai giây cũng tính một lần, nên cổng ba-lần-bấm mở ra sau sáu giây mà learner chưa nghe hết đoạn nào. Nó chặn đúng người trung thực và thả đúng người đang tìm đường tắt. Đếm lần trọn thì cái giá là có thật.
75b. Hai con số ở MỘT chỗ
apps/learn/src/ielts/listeningConfig.ts: LISTENS_TO_UNLOCK_TRANSCRIPT = 5 và LISTENS_BEFORE_HINT = 2. Trước đây PLAYS_FOR_TRANSCRIPT nằm giữa MicroExercise.tsx; chỗ ấy đúng khi chỉ một màn cần nó, nhưng luật nay áp cho mọi bài nghe, và một hằng số nằm trong một file component là hằng số sẽ bị chép sang file thứ hai vào lần thêm màn tiếp theo.
75c. Câu nhắc xuống cuối, và im lặng lúc đầu
Nó từng nằm ngay dưới nút Nghe — thứ hai learner đọc được sau khi mở bài. Một lối ra đặt ngay cửa vào thì ai cũng thấy nó trước khi kịp thử. Nay ở dưới cùng, sau cả phần bài làm, và chỉ hiện khi đã nghe trọn đủ hai lần.
75d. Thẻ audio nay nằm TRONG DOM
new Audio() sống ngoài cây tài liệu, nên không có cách nào kiểm cổng này bằng e2e: Playwright không phát ra tiếng, nên ca kiểm phải tự bắn sự kiện ended vào chính thẻ ấy. Một luật an toàn không kiểm được là một luật sẽ trôi. Thẻ nay hidden và mang data-nemo-listen.
Nút Nghe thành một nút tròn mang hình tam giác — thứ một đứa trẻ nhận ra trước khi biết đọc, và giữ nguyên nghĩa ở mọi thứ tiếng; aria-label vẫn nói thành lời cho trình đọc màn hình. Nút chấm bài nói tiếng Anh ở bài tiếng Anh, tiếng Việt ở bài tiếng Việt — theo item.lang, cùng luật với mọi chữ khác trong bài.
78. Thang luyện NGHE nói tiếng Anh từ bậc 1 (SRC-976, 22.09.2026)
Đảo lại một phần thang bốn chặng, và vì sao đảo là đúng. 0242 đặt bậc 1-2 bằng tiếng Việt với một lý do thật: học một thao tác mới trong khi tai còn vật lộn với chữ thì không học được gì. Nhưng từ khi nút Listen đọc thành tiếng chính đoạn ngữ liệu (SRC-787/788), lý do ấy quay ra chống lại chính nó - một bài NGHE bằng tiếng Việt thì learner không nghe tiếng Anh ở đâu cả, và phần khó nhất bị hoãn tới bậc 3. Cách giữ được cả hai điều là hạ độ khó của CHỮ chứ không hạ NGÔN NGỮ: câu ngắn, thì hiện tại, tình huống ai cũng gặp (mua vé, hỏi giờ thư viện, xin đổi buổi học). Thao tác nhận thức không hạ theo: vẫn là nhận ra chỗ người nói đổi ý, vẫn là phân biệt "sai" với "chỉ đúng trong một điều kiện".
Migration 0274 viết lại 50 câu tại chỗ, giữ nguyên ID: mọi bằng chứng learner đã làm neo vào ID, và dựng bộ mới là xoá sạch tiến độ của họ vì một lần đổi ngữ liệu. Lời giải thích sau mỗi câu cũng sang tiếng Anh, viết ở cùng mức dễ - một dòng tiếng Việt xen giữa bài tiếng Anh là đúng cái lớp dịch mà chỉ đạo yêu cầu gỡ.
Hai cái bẫy đã gặp khi viết bản này, ghi lại vì chúng im lặng: (1) ID đã bị 0259 đổi (listening.note.* → listening.detail.note-s*, listening.inference.* → listening.purpose.*), nên viết theo ID cũ thì UPDATE khớp 0 dòng và migration chạy xanh mà không đổi gì; (2) bản nháp đầu để đáp án đúng ở vị trí 1 cho cả 50 câu, một kiểu rò rỉ learner nhận ra sau mươi câu.
80. Mỗi bậc Nghe ít nhất ba bài, và bậc 1 vẫn tiếng Việt (SRC-976 sửa lại, SRC-978, 22.09.2026)
Bậc 1 quay lại tiếng Việt. Bản đầu của SRC-976 chuyển cả bậc 1 và 2 sang tiếng Anh. Chủ dự án xem rồi chốt lại: "với riêng level 1 của mọi sub-skills, thì chấp nhận tiếng Việt toàn bộ". Lý do đứng vững: lần đầu gặp một thao tác, sai là sai ở CÁCH NGHĨ, và bắt learner vừa học cách nghĩ vừa bơi trong chữ lạ thì không đo được họ hỏng ở đâu. Tiếng Anh vào từ BẬC 2, sớm hơn thang cũ một chặng - đủ để tai vào cuộc sớm mà không đánh mất chặng làm quen. Migration 0274 vì thế chỉ động vào 30 câu của bậc 2 (và bậc 2 của development), không động vào bậc 1.
Ba bài mỗi bậc. Trước 0275, bốn trong năm năng lực Nghe chỉ có ĐÚNG MỘT bài ở mỗi bậc. Learner làm xong là hết bậc, và lần luyện thứ hai gặp lại đúng bốn câu vừa làm - lúc đó họ không luyện thao tác nữa mà chỉ nhớ đáp án. Một thanh bậc trông đầy đủ trong khi mỗi bậc chỉ có một bài là loại thiếu không nhìn thấy được từ màn hình. 0275 thêm 24 bài, 96 câu.
81. Nghe trọn hai lần rồi mới được chọn (SRC-979, 22.09.2026)
Không có cổng này thì một bài NGHE làm được bằng cách ĐỌC: chữ nằm ngay trên màn, và learner chọn xong trước khi bấm nghe lần nào - bài đo tai biến thành bài đo mắt mà không có dấu hiệu nào.
Hai lần là mức cố ý thấp: đủ để lần đầu nghe lấy ý, lần hai nghe lại chỗ mình hụt. Đếm lần nghe TRỌN (audio.onended), không đếm cú bấm - cùng một lẽ với cổng bản chữ ở §75. Bậc 4 đứng ngoài vì nó mô phỏng phòng thi, nơi số lần nghe do chính đề quy định.
Cổng chỉ khoá phần CHỌN, không khoá phần đọc, và có một dòng nói thẳng còn thiếu mấy lần. Một màn hình mờ đi mà không nói vì sao thì trông như đang hỏng, và learner sẽ bấm mãi vào một nút không phản ứng.
Con số nằm ở apps/learn/src/ielts/listeningConfig.ts cùng chỗ với cổng bản chữ: sửa một chỗ, mọi bài đổi theo (SRC-973).
83. Một câu, một giọng, một file (SRC-981, 22.09.2026)
Tầng cache đã có sẵn từ SRC-864: route /v1/public/ielts/micro-items/{id}/audio băm chữ + giọng thành khoá R2 và chỉ gọi TTS khi chưa có object. Thứ làm nó vô nghĩa nằm ở phía app: mỗi lần bấm, trình duyệt bốc ngẫu nhiên một trong bốn giọng, nên mỗi câu có tới bốn file phải sinh và learner gần như luôn rơi vào cái chưa có.
Hai hậu quả, và cái thứ nhất mới là cái đáng kể: learner nghe lại một đoạn để bắt chỗ mình hụt thì gặp một người khác đọc, tức là họ phải làm quen lại từ đầu thay vì nghe kỹ hơn. Cái thứ hai là mỗi câu tốn bốn lượt TTS trả tiền thay vì một.
Nay giọng suy ra từ chính id câu (voiceFor), nên một câu có đúng một giọng, mãi mãi. Điều mà chỉ đạo cũ (SRC-864) muốn vẫn còn: learner không chọn giọng, và cả kho vẫn dùng đủ bốn giọng - chỉ là chia theo CÂU chứ không theo LẦN BẤM.
85. Bậc 4 của Nghe cũng đủ ba bài, và một cổng giữ chỗ ấy (SRC-978 phần còn lại, 22.09.2026)
Đó là chỗ tệ nhất để hết bài. Bậc 4 mô phỏng độ khó phòng thi, nên nó là bậc learner cần lặp nhiều nhất, và cũng là bậc mà việc nhớ đáp án cũ phá phép đo rõ nhất. Migration 0276 thêm 9 bài, 36 câu; sau bản này cả bốn bậc của cả năm năng lực đều có ba bài.
Ngữ liệu bậc 4 không hạ độ khó của chữ (60-80 từ, vốn từ như đề thật) - ba bậc dưới đã làm việc ấy rồi, và một bậc 4 dễ thì không còn là bậc 4. Cũng không có technique_vi: nhãn kỹ thuật là phần dạy của bậc 2, còn ở bậc 4 learner phải tự gọi tên thao tác.
Kèm theo là một cổng trong microSkills/routes.test.ts: mọi năng lực Nghe phải có ít nhất ba bài ở mỗi bậc. Thiếu bài không làm đỏ thứ gì - thanh bậc vẫn vẽ đủ năm thẻ, learner vẫn vào làm được, và từ màn hình thì một bậc có một bài trông y hệt một bậc có ba bài.
Khoản nợ ấy đã trả xong (23.09.2026). Migration 0281 thêm 60 bài / 180 câu cho phần NÓI, và 0284 thêm 90 bài / 270 câu cho phần VIẾT. Sau hai bản ấy, cả bốn kỹ năng đều có ít nhất ba bài ở bậc 1, 2, 3; NGHE có đủ cả bậc 4.
Ba năng lực Viết mang status='draft' (concede, conclusion, introduction) đứng ngoài: chúng nằm ngoài khung bốn tiêu chí chấm từ SRC-896 và không hiện ra với learner. Soạn bài cho một năng lực chưa phát hành là làm một việc chưa ai cần, và nếu ngày nào đó chúng được bật lên thì nội dung cũng phải viết theo khung mới chứ không phải khung hôm nay.
Còn nợ: bậc 4 của NÓI và VIẾT (mỗi năng lực mới có một bài). Bậc 4 là bậc mô phỏng phòng thi, nên nó đáng được lặp - nhưng nó cũng là bậc ít learner chạm tới nhất cho tới khi ba bậc dưới đã mòn, nên xếp sau là một thứ tự có lý.
Lịch sử quyết định
Từ mục 15. Nghe ngữ liệu trong bài tập năng lực (SRC-864, 2026-09-19)
Chỉ đạo chủ dự án: "Cần có tính năng audio ở đây nhé. Click vào thì hệ thống sẽ bật ngẫu nhiên một trong 4 giọng (US hoặc UK, Male hoặc Female). Learner ko cần chọn, và không chọn được."
Từ mục 16. Lời thoại tách khỏi ghi chép, và đóng sẵn (SRC-866, 2026-09-19)
Chỉ đạo chủ dự án: "Trang này nhiều thông tin bị thừa, cần giấu nó đi, click vào thì mới expand thông tin ra. Cần tách cụm 'Lời thoại' ra khỏi phần 'Ghi chép'."
Từ mục 23. Dot 2 bai nghe: 16 bai moi, va de nghe het kho (SRC-879, 2026-09-19)
Chi dao chu du an: "soan noi dung that cho cac de Listening con khoa", sau khi SRC-862 bay ra 20 de moi ky nang va Listening chi co 4 de that.
Vi sao khong soan het 20 de mot lan. Chu du an chon 16 bai truoc de doc thu chat luong roi moi quyet co cay tiep khong. Soan het 64 bai roi moi phat hien giong van hay dang cau hoi chua dung y nghia la sua tren ca 64 bai.
Từ mục 24. Dot 3 bai nghe: 48 bai, Listening het de kho (SRC-881, 2026-09-19)
Chi dao chu du an: "soan tiep 32 clip nua cho du 20 de". So hoc thi khong khop - 32 bai nua chi ra 16 de - nen dot nay soan 48 bai (clip 5 den 10 cua ca tam cum), dua Listening len 80 bai va dung 20 de. Khong con de kho o ky nang nay.
Từ mục 75. Cổng bản chữ: năm lần nghe TRỌN, và một nút hình tam giác (SRC-973, 22.09.2026)
"Có icon play thay cho nút Listen. Dùng tiếng Anh thay vì button 'Kiểm tra'. Chuyển 'Listen 3 more times…' xuống dưới cùng. Và câu này chỉ hiển thị sau khi Learners nghe xong hoàn toàn 2 lần (…) total cần nghe 5 lần thì transcript mới hiển thị. Áp dụng cái này với mọi bài. Con số 5 này cần cấu hình ở đâu đó trên toàn hệ thống."
Từ mục 78. Thang luyện NGHE nói tiếng Anh từ bậc 1 (SRC-976, 22.09.2026)
Chỉ đạo chủ dự án: mọi bài luyện của năm năng lực Nghe đều nghe được tiếng Anh ngay, "không còn chút xíu tiếng Việt nào nữa"; nhưng bậc 1 và 2 thì tình huống và tốc độ phải cực dễ, gần như không có từ mới, để học sinh lớp 5 cũng theo được.
Từ mục 80. Mỗi bậc Nghe ít nhất ba bài, và bậc 1 vẫn tiếng Việt (SRC-976 sửa lại, SRC-978, 22.09.2026)
Hai chỉ đạo cùng ngày, đi liền nhau, và cái sau sửa một phần cái trước.
Từ mục 81. Nghe trọn hai lần rồi mới được chọn (SRC-979, 22.09.2026)
Chỉ đạo: "Learners cần nghe tối thiểu 2 lần thì hệ thống mới cho phép chọn đáp án. Đó là đối với Level 1 và Level 2 và Level 3."
Từ mục 83. Một câu, một giọng, một file (SRC-981, 22.09.2026)
Chỉ đạo: "Hiện nay mỗi lần click vào lại ra một giọng khác nhau, cần ra đúng 1 giọng thôi. Và hệ thống cần lưu sẵn file audio, không nên mỗi lần click vào thì lại đi generate."
Từ mục 85. Bậc 4 của Nghe cũng đủ ba bài, và một cổng giữ chỗ ấy (SRC-978 phần còn lại, 22.09.2026)
Chỉ đạo mở đầu bằng "Tạo đủ các bài tập" rồi mới nói "đặc biệt là trong level 1, 2, 3". 0275 lo ba bậc dưới; bậc 4 khi ấy còn đúng một bài cho bốn trong năm năng lực.
Một lỗi tự bắt được khi soạn, đáng ghi lại. Bản nháp phần NÓI có 166/180 câu mà đáp án đúng là lựa chọn DÀI NHẤT - learner đếm chữ là trúng chín phần mười mà không cần đọc. Đây đúng là lỗi SRC-990 vừa tìm ra trên kho nội dung cũ, và nó tái xuất hiện tự nhiên vì câu trả lời ĐÚNG thường là câu cụ thể hơn, mà cụ thể thì dài. Cách chữa giống SRC-990: viết các lựa chọn SAI thành câu đầy đủ hơn, giữ nguyên cái sai của chúng, không đụng vào đáp án đúng. Phần VIẾT vì thế được viết với các lựa chọn dài xấp xỉ nhau ngay từ đầu, và kết quả đo được là không câu nào có đáp án đúng dài hơn lựa chọn kế tiếp quá 9 ký tự.