Skip to content

PRD-008 - Program Grammar ​

Nguồn: SRC-1104 (chủ dự án 28.09.2026). Mười câu hỏi xác nhận, chủ dự án chốt "OK hết". Thiết kế: SDD-048. Địa chỉ: learn.nemo12.com/grammar.

1. Là gì ​

Một chương trình riêng để học ngữ pháp tiếng Anh, chia 5 level. Learner tự chọn level và học từng bài. Vòng đầu chỉ dựng tên và vỏ (danh mục + khung trang) để chủ dự án nhìn được tổng quan; nội dung bài làm ở các vòng sau.

2. Mười quyết định ​

#Quyết định
1/grammar là chương trình độc lập, lớn hơn. 36 chủ đề của /ielts/grammar được xếp vào đúng level (đánh dấu ↗ bên dưới) và bài ở /grammar trỏ sang chủ đề ấy; /ielts/grammar giữ nguyên, không mất tiến độ
2Chỉ bám khung chủ đề và thứ tự học của bộ English Grammar in Use (Essential, Intermediate, Advanced). Tên bài, ví dụ, bài tập Nemo tự viết; không chép chữ nào của sách; trang không ghi tên sách, chỉ ghi A1-C1
3Năm level: Starter (A1), Elementary (A2), Intermediate (B1), Upper-intermediate (B2), Advanced (C1)
4Level → Mảng (6 mảng mỗi level) → Bài (3-5 bài mỗi mảng); tổng 103 bài
5Learner tự chọn level, mọi level đều mở. Bài xếp lớp 10 câu để vòng sau
6Ngôn ngữ như sân IELTS: tên level, mảng, bài tiếng Anh; phần Nemo giải thích tiếng Việt
7Bắt đăng nhập như /ielts/**; dùng chung gói Membership và free trial 14 ngày của IELTS
8Giao diện dùng lại khung /ielts: thanh tối, vệt đường dẫn, ô số liệu, danh sách dòng có mũi tên. Thanh ghi NEMO GRAMMAR, chip duy nhất là phút học hôm nay
9Trang bài có năm khung: Video, Rule, 3 Examples, 3 Common mistakes, 5 Practice (level 1-5), vòng này ghi "Coming soon". Dashboard ba ô: phút tuần này, số bài đã xong, level đang học
10Tài liệu: trang này (kèm danh mục) và SDD-048

3. Danh mục ​

Nguồn máy đọc: packages/grammar-catalog/catalog.json. Bảng dưới sinh từ file ấy; đổi danh mục thì sửa JSON rồi sinh lại bảng. ↗ = đã có bài luyện ở /ielts/grammar.

Level 1: Starter (A1, 21 bài) ​

Những khối cơ bản nhất: động từ be, hiện tại đơn, danh từ, đại từ. Đủ để giới thiệu bản thân và nói về cuộc sống hằng ngày.

MảngBài
The verb beI am, you are, he is · Am I? Is she? Are they? · Short answers: Yes, I am · There is and there are ↗
Present simpleI work, she works ↗ · I don't work ↗ · Do you work? ↗ · Adverbs of frequency: always, never ↗
Nouns and articlesa and an · Singular and plural ↗ · the ↗ · this, that, these, those
Pronouns and possessivesI, me, my, mine ↗ · Possessive 's ↗ · Whose is this?
Place and timein, on, at for places ↗ · in, on, at for time ↗ · Prepositions of position
Ability and requestscan and can't ↗ · Can I...? Could you...? · Imperatives: Sit down, Don't talk

Level 2: Elementary (A2, 21 bài) ​

Nói về quá khứ và tương lai, so sánh, và đếm được hay không đếm được.

MảngBài
Present continuousI am working now ↗ · Present simple or continuous? · Verbs we rarely use in -ing
Past simplewas and were · Regular verbs: worked, played ↗ · Irregular verbs: went, saw · Did you...? I didn't...
Future formsgoing to for plans ↗ · will for decisions and predictions · Present continuous for arrangements
QuantityCountable and uncountable ↗ · some and any ↗ · much, many, a lot of ↗ · a few and a little
ComparingComparatives: bigger, more useful ↗ · Superlatives: the biggest ↗ · as ... as · too and enough ↗
Obligation and advicemust and have to ↗ · should and shouldn't ↗ · need to

Level 3: Intermediate (B1, 23 bài) ​

Các thì hoàn thành, câu điều kiện, bị động, và nối ý bằng mệnh đề.

MảngBài
Past and perfectPast continuous ↗ · Present perfect: experience ↗ · Present perfect: for and since · Present perfect or past simple? · Used to
ConditionalsZero conditional · First conditional ↗ · Second conditional · unless and in case
Passive voicePresent and past passive ↗ · Passive with modals · get something done
Verb patternsVerb + -ing ↗ · Verb + to infinitive · Verb + object + infinitive · Prepositions + -ing
Relative clauseswho, which, that ↗ · Leaving out the relative pronoun · where and whose
Adjectives and adverbs-ed and -ing adjectives ↗ · Adjective order ↗ · Adverbs of manner · Adverb position

Level 4: Upper-intermediate (B2, 20 bài) ​

Thì phức hợp, điều kiện loại ba, câu tường thuật, và các từ nối để viết mạch lạc.

MảngBài
Perfect and continuousPresent perfect continuous · Past perfect · Past perfect continuous · Future continuous and future perfect
Advanced conditionalsThird conditional · Mixed conditionals · wish and if only
Reported speechReporting statements ↗ · Reporting questions · Reporting verbs: suggest, warn, admit
Modals of deductionmust, might, can't for now · must have, might have for the past · should have and could have
Linking and contrastalthough, though, even though ↗ · despite and in spite of · Linking words for reasons and results · Joining ideas in one sentence ↗
Agreement and word orderSubject-verb agreement ↗ · Word order in questions and statements ↗ · Indirect questions

Level 5: Advanced (C1, 18 bài) ​

Cấu trúc nhấn mạnh, đảo ngữ, mệnh đề rút gọn, và văn phong trang trọng.

MảngBài
Emphasis and inversionCleft sentences: What I need is... · Inversion after negative adverbs · Fronting for emphasis
Advanced passiveIt is said that... · Passive with reporting verbs · Causative have and get
Participle clausesPresent participle clauses · Past participle clauses · Having done
Hypothetical meaningIt's time, would rather · Inverted conditionals: Had I known · as if and as though
Noun phrasesNominalisation · Compound nouns · Determiners: each, every, either, neither
Formal and informal styleEllipsis and substitution · Hedging: tend to, appear to · Discourse markers in writing

4. Trang giới thiệu trên nemo12.com (SRC-1106) ​

Chủ dự án 28.09.2026: Grammar là chương trình thứ ba để vào đại học, cạnh IELTS và SAT, dùng cho cả thi vào lớp 10, thi tốt nghiệp THPT và IELTS. Trang công khai ở nemo12.com/{students|parents}/university/grammar cùng ba trang con who-is-it-for, levels, how-it-works; nút chính trỏ về learn.nemo12.com/grammar. Luật và danh sách URL: public-web-ia §6.

5. Ngoài phạm vi vòng đầu ​

  • Nội dung từng bài (video, công thức, ví dụ, lỗi hay gặp, 5 bài luyện).
  • Bài xếp lớp 10 câu.
  • Số thật cho ba ô dashboard (tiến độ và phút học ghi vào learning_events).

6. Nội dung level Starter (SRC-1105, 28.09.2026) ​

Cả 21 bài Starter đã có nội dung: đoạn giới thiệu tiếng Việt, công thức, 3 ví dụ, 3 lỗi hay gặp, 5 bài luyện level 1-5 (làm từng câu một, đúng lần đầu được cộng 2 phút học như khu Grammar của IELTS).

  • 12 bài có ↗ dùng lại nguyên nội dung chủ đề tương ứng ở /ielts/grammar và chung tiến độ với nó: một nội dung không có hai bản.
  • 9 bài viết mới: I am, you are, he is · Am I? Is she? Are they? · Short answers · a and an · this, that, these, those · Whose is this? · Prepositions of position · Can I...? Could you...? · Imperatives.
  • Chưa có: video cho 9 bài mới (render tốn tiền nên để chủ dự án quyết); bốn level còn lại vẫn là vỏ.

7. Nội dung level Elementary (SRC-1107, 28.09.2026) ​

Cả 21 bài Elementary đã có nội dung, cùng khuôn với Starter.

  • 11 bài có ↗ dùng lại nội dung chủ đề ở /ielts/grammar, chung tiến độ.
  • 10 bài viết mới: Present simple or continuous? · Verbs we rarely use in -ing · was and were · Irregular verbs · Did you...? I didn't... · will for decisions and predictions · Present continuous for arrangements · a few and a little · as ... as · need to.
  • Chưa có: video cho 10 bài mới.

8. Nội dung level Intermediate (SRC-1111, 28.09.2026) ​

Cả 23 bài Intermediate đã có nội dung, cùng khuôn với Starter và Elementary.

  • 8 bài có ↗ dùng lại nội dung chủ đề ở /ielts/grammar, chung tiến độ.
  • 15 bài viết mới: Present perfect for and since · Present perfect or past simple? · Used to · Zero conditional · Second conditional · unless and in case · Passive with modals · get something done · Verb + to infinitive · Verb + object + infinitive · Prepositions + -ing · Leaving out the relative pronoun · where and whose · Adverbs of manner · Adverb position.
  • Chưa có: video cho 15 bài mới. Hai level còn lại (Upper-intermediate, Advanced) vẫn là vỏ.

9. Nội dung level Upper-intermediate và rà soát bài cũ (SRC-1112, 28.09.2026) ​

Upper-intermediate: cả 20 bài đã có nội dung. 5 bài có ↗ dùng lại chủ đề /ielts/grammar; 15 bài viết mới (các thì hoàn thành tiếp diễn, tương lai tiếp diễn và hoàn thành, điều kiện loại 3 và hỗn hợp, wish, tường thuật câu hỏi, động từ tường thuật, suy đoán hiện tại và quá khứ, should have / could have, despite, từ nối nguyên nhân - kết quả, câu hỏi gián tiếp). Chỉ còn Advanced là vỏ.

Rà soát bài cũ: cổng scripts/audit-content.mjs nay quét cả grammar/content/** (nay content/grammar/**, §19): 85 file, cả 85 đạt 100 điểm (đủ giới thiệu, công thức, 3 ví dụ, 3 lỗi, 5 bài level 1-5, đáp án nằm trong lựa chọn). Ba chỗ thiếu đã bù:

  • Tiến độ đứng ở 0/5 sau khi làm xong 5/5 (ảnh chủ dự án 28.09.2026): tiến độ chỉ đọc lại từ localStorage, nên trình duyệt chặn localStorage là bộ đếm không lên. Nay có bản trong bộ nhớ gộp với localStorage.
  • Chip "min today" đứng ở 0: chip chỉ tải một lần lúc mở trang; nay đọc lại sau mỗi bài làm đúng.
  • Video: 36 bài dùng chung với /ielts/grammar nay hiện video 1 phút đã có. Bài viết mới vẫn chưa có video (render tốn tiền, chờ chủ dự án quyết).
  • Trang level hiện tiến độ n/5 cạnh từng bài.

10. Nội dung level Advanced (SRC-1114, 28.09.2026) ​

Cả 18 bài Advanced đã có nội dung, đều viết mới (không có chủ đề tương ứng ở /ielts/grammar): câu chẻ, đảo ngữ sau trạng từ phủ định, fronting, It is said that, bị động với động từ tường thuật, thể sai khiến, mệnh đề phân từ hiện tại và quá khứ, Having done, It's time / would rather, đảo ngữ câu điều kiện, as if, danh từ hóa, danh từ ghép, each / every / either / neither, tỉnh lược và thay thế, hedging, từ nối trong bài viết. Program Grammar nay đủ 103/103 bài; còn thiếu video cho 67 bài viết mới.

11. Video cho 5 bài quan trọng nhất (SRC-1119, 28.09.2026) ​

Chủ dự án: làm video cho 5 bài quan trọng nhất (luật render tiết kiệm SRC-1081: không dựng cả kho). Chọn theo số người học và độ dễ sai, mỗi level đầu ít nhất một bài: I am, you are, he is (Starter) · Did you...? I didn't... (Elementary) · Present perfect or past simple? và Second conditional (Intermediate) · Linking words for reasons and results (Upper-intermediate). Kịch bản cùng khuôn video Grammar cũ (hook, luật, ví dụ, lỗi hay gặp, lời mời luyện); id grammar-<bài>; file nội dung bài ghi video_id để trang bài hiện video. Video xưng NEMO IELTS như 36 video Grammar cũ, vì thương hiệu suy từ tiền tố id và đổi nó là sửa nemo12-videos/videos/src/, tức đổi vân tay cả kho. 62 bài viết mới còn lại chưa có video.

12. Video Grammar xưng NEMO GRAMMAR (SRC-1126, 29.09.2026) ​

Chủ dự án chọn đổi thương hiệu video Grammar từ NEMO IELTS sang NEMO GRAMMAR. brandOf trong nemo12-videos/videos/src/Frame.tsx nay đọc tiền tố grammar- thành GRAMMAR, cho cả 41 video Grammar (36 của /ielts/grammar và 5 của Program Grammar). Vì đây là sửa nemo12-videos/videos/src/, vân tay mọi video đổi; theo luật render tiết kiệm (SRC-1081) chỉ dựng lại 5 video của Program Grammar trong lượt này. 36 video cũ giữ chữ NEMO IELTS cho tới khi chủ dự án chỉ định dựng lại (khoảng 36 × 3 = 108 phút Actions).

13. Giao diện tiếng Anh, căn giữa (SRC-1173, 01.10.2026) ​

Chủ dự án: mọi nhãn và nút trên giao diện learn.nemo12.com/grammar/** là tiếng Anh; nội dung bài (lấy từ kho nội dung: title_vi, intro_vi, lời giải explain_vi, giới thiệu level) giữ nguyên. Điều này thay quyết định 6 cho phần GIAO DIỆN; chữ Nemo giải thích nằm trong nội dung nên vẫn tiếng Việt. /ielts/grammar không đổi: nó thuộc sân luyện IELTS và đi theo luật SRC-953 (nhãn nút tiếng Việt). Cập nhật 10.10.2026 (SRC-1325): /ielts/grammar/** nay cũng tiếng Anh 100%, kể cả hướng dẫn và nhãn nút; nội dung chỉ có tiếng Việt (như title_vi) không hiện ở đó.

Bố cục: mọi trang /grammar là một cột căn giữa, không full-width. Trang bài rộng tối đa 768px, phần đầu (mảng, tên bài, công thức, nút luyện) căn giữa, bốn khung gập căn trái; trang level rộng tối đa 896px.

14. Tiêu chuẩn bài tập: số lượng và chất lượng (SRC-1174, 01.10.2026) ​

Chủ dự án: mỗi bài cần nhiều bài tập hơn, có bài ngắn 3-5 câu, bài khoảng 10 câu, bài dài 20 câu; cần tiêu chuẩn cho từng unit và từng task, cả số lượng lẫn chất lượng, rồi làm dần theo.

Từ dùng trong mục này: lesson là một trang bài (/grammar/<level>/<lesson>); unit là một mảng của level (ví dụ "The verb be"); set là một bài tập gồm nhiều câu; task là một câu hỏi.

14a. Một lesson đạt chuẩn khi ​

SetSố câuVai tròDạng câu
Quick5Năm câu level 1-5 đang có, dễ dầntuỳ
Practice10Luyện đủ các trường hợp của luậtít nhất 2 dạng; ít nhất 4 câu tự gõ (gap)
Mastery20Trộn trường hợp, có câu bẫy từ Common mistakesít nhất 2 dạng; ít nhất 8 câu tự gõ; ít nhất 3 câu dựng từ 3 lỗi trong pitfalls

Tổng 35 câu mỗi lesson, không câu nào trùng prompt trong cùng lesson. Cộng với 3 Examples và 3 Common mistakes đang có.

14b. Một unit đạt chuẩn khi ​

  1. Mọi lesson của unit đạt chuẩn 14a.
  2. Có một Unit review 20 câu trộn các lesson của unit, mỗi lesson ít nhất 3 câu, xếp xen kẽ chứ không theo từng khối. Đây là chỗ learner phải tự nhận ra luật nào áp dụng, việc mà set của từng lesson không đòi hỏi.

14c. Một task đạt chuẩn khi ​

Máy đo được (test gác, xem SDD-048 §6):

  1. Câu choice có 2-4 lựa chọn, không trùng nhau, answer nằm trong options.
  2. Câu gap có answer không rỗng; dạng viết tắt tương đương (isn't / is not) nằm trong accept.
  3. explain_vi dài ít nhất 40 ký tự: nói vì sao đáp án đúng, không chỉ gọi tên luật ("Mẫu as if." là chưa đạt).
  4. prompt tối đa 12 từ ở Starter và Elementary, tối đa 20 từ ở các level trên.

Người soạn tự kiểm (máy không đo được):

  1. Câu kiểm đúng luật của lesson, không kiểm một luật khác.
  2. Chỉ một đáp án đúng; lựa chọn sai là lỗi người học thật hay mắc, không phải lựa chọn vô nghĩa.
  3. Câu tự nhiên, từ vựng đúng level CEFR, ngữ cảnh gần đời sống learner Việt (trường, nhà, bạn bè).
  4. Nemo tự viết, không chép câu của sách nào (quyết định 2).

14d. Làm dần ​

Thứ tự: Starter → Elementary → Intermediate → Upper-intermediate → Advanced, mỗi lượt một level. Mỗi lượt gồm Practice + Mastery cho mọi lesson của level, Unit review cho mọi unit, và nâng 5 câu Quick cũ lên đạt 14c. Tiến độ đo bằng npm run grammar:coverage --workspace @nemo12/learn. Khối lượng cả kho: 103 lesson × 30 câu mới + 30 unit × 20 câu, khoảng 3.700 câu. Lượt đầu cần dựng thêm giao diện chọn set trên trang bài.

Hiện trạng ngày 01.10.2026: 103 lesson, mỗi lesson đúng 5 câu (Quick); 0 lesson và 0 unit đạt chuẩn.

Lượt 1, Starter (01.10.2026): 21/21 lesson và 6/6 unit đạt chuẩn. 750 câu mới (21 × 30 + 6 unit review × 20), 105 câu Quick cũ được viết lại lời giải. 12 lesson dùng chung file với /ielts/grammar, nên lời giải mới của Quick cũng hiện ở đó. Câu tự gõ về mạo từ có gợi ý (a/an) hoặc (a/an/the) ngay trong câu, vì để trống thì "one", "my", "that" cũng đúng mà máy chấm sai.

Lượt 2, Elementary (01.10.2026): 21/21 lesson và 6/6 unit đạt chuẩn, 750 câu mới. Lượt này lộ ra một lỗ của cổng: người soạn lách trần 40 ký tự bằng cách nối một câu chung vào mọi lời giải ngắn ("..., dạng này phải học thuộc.", "Nhớ: many cho thứ đếm được..."). Cổng nay bắt hai dấu hiệu ấy (fillerProblems trong standard.ts): một câu giống hệt lặp ở từ 3 lời giải của một bài, và 4 từ cuối giống nhau ở từ 6 lời giải chiếm ít nhất 40% bài. Khoảng 80 lời giải đã được viết lại; 8 câu có hai đáp án đúng được thêm ngữ cảnh.

Lượt 3, Intermediate (01.10.2026): 23/23 lesson và 6/6 unit đạt chuẩn, 750 câu mới. Cổng câu đệm không bắt được trường hợp nào. Ba câu tự gõ được nhận thêm dạng đúng ngữ pháp ("are going to go", "walked", "won"); một đáp án sai được bỏ (mệnh đề không xác định thiếu dấu phẩy).

Lượt 4 và 5, Upper-intermediate và Advanced (12.10.2026, SRC-1373): 14/14 và 19/19 lesson, 5/5 và 6/6 unit đạt chuẩn; cả kho 115/115 lesson, 29/29 unit. Khoảng 1.090 câu mới và 138 lời giải ngắn được viết lại. Năm agent soạn song song; một agent lùi file của agent khác về HEAD giữa chừng, nên luật giao việc cho agent con nay nằm ở .claude/rules/subagents.md.

Cùng lượt (SRC-1373): set Fix it 3 câu cho mọi bài, dựng từ 3 pitfalls (learner gõ lại câu đúng, mã tiến độ gf-<level>-<bài>); Level test ở /grammar/<level>/test, mỗi bài một câu Mastery, chỉ tính lần trả lời đầu, đạt khi đúng ít nhất 80% (mã gt-<level>); Placement test 10 câu ở /grammar/placement, 2 câu mỗi level, gợi ý level thấp nhất chưa đúng đủ 2 câu. Điểm lưu ở máy chủ từ 12.10.2026 (bảng grammar_test_results, migration 0352; POST/GET /v1/learners/{id}/grammar-tests): giữ mọi lượt, trả điểm cao nhất mỗi level và lần placement gần nhất; localStorage chỉ còn là bản tạm khi chưa đăng nhập hay mạng hỏng.

15. Học mỗi tuần: tự học, Live thứ Hai, hỏi mentor (SRC-1307, 09.10.2026) ​

Chủ dự án: mỗi tuần learner có một buổi Live qua Zoom và cần làm đủ bài tập. Mỗi learner học theo tốc độ riêng, hệ thống dẫn dần từng bước. Khó thì được hướng dẫn trong buổi Live, hoặc nhắn mentor để được hướng dẫn nhanh. Learner xem được lịch; bấm "tham gia" một buổi thì mới thấy link Zoom. Buổi Live tối thứ Hai 20:00-21:30 (giờ VN), từ thứ Hai gần nhất sau 10.10.2026, tức 12.10.2026. Mọi buổi đều ghi hình; ngoài ra có video quay sẵn và hệ thống luyện tập.

Ba quyết định chủ dự án chốt 09.10.2026:

#Quyết định
1Chat với mentor là nhóm Zalo NEMO GRAMMAR, không dựng chat trong app ở vòng này
2Một link Zoom cố định cho mọi buổi (biến môi trường GRAMMAR_ZOOM_URL)
3Bản ghi là link YouTube không công khai, dán vào buổi sau khi học xong

Nơi hiện: learn.nemo12.com/grammar (thẻ "Live class every Monday", trang /grammar/live, khung "How NEMO GRAMMAR works") và www.nemo12.com/grammar (trang How it works: "Mỗi tuần học thế nào"; hai câu FAQ mới). Nhãn nút trên learn là tiếng Anh theo SRC-1173: nút tham gia ghi "I'm joining". Chủ dự án viết "Tôi tham gia" trong yêu cầu; nếu muốn đúng chữ ấy thì đây là ngoại lệ của SRC-1173 và cần ghi lại.

16. Luyện tập không lộ đáp án (SRC-1308, 09.10.2026) ​

Chủ dự án: đừng trả lời ngay khi learner vừa đưa ra đáp án. Làm đi làm lại 3 lần mới hiện đáp án và giải thích. Kể cả khi learner trả lời đúng, đáp án và giải thích vẫn không hiện mặc định; chỉ hiện khi learner bấm một nút nhỏ. Ẩn bớt mọi thứ trên màn cho gọn, và có thanh tiến độ cho biết đã làm bao nhiêu câu, còn bao nhiêu câu.

Tình huốngMàn hình
Bấm Check, sai lần 1-2"Not yet. Try again (2 tries left)", không có đáp án, không có lời giải; đổi câu trả lời thì Check bật lại
Sai lần thứ 3Hiện đáp án và lời giải, nút Next; câu ấy không được tính là đúng
Đúng"Correct" và nút nhỏ "Show explanation"; bấm mới thấy lời giải
Đang làm một setChỉ còn tên mảng, tên bài, thanh tiến độ "n / N", câu hỏi; dòng phụ dưới tiêu đề ẩn đi
Hết set"Finished: x/N correct", đếm câu đúng thật chứ không đếm câu đã qua

Áp cho cả /ielts/grammar vì hai nơi dùng chung ô luyện; từ SRC-1325 ở đó nhãn tiếng Anh và không hiện lời giải tiếng Việt (explain=false), nên khi lộ đáp án chỉ hiện đáp án.

17. Chuẩn ngữ pháp CEFR và lệch của danh mục (SRC-1318, 10.10.2026) ​

Chủ dự án hỏi mỗi level CEFR gồm ngữ pháp gì, tra cứu ở đâu, và muốn đưa chuẩn vào coral.nemo12.com, rà NEMO GRAMMAR lệch chuẩn thế nào rồi chỉnh cho khớp. Chuẩn, nguồn, bảng lệch và kế hoạch dời bài: Chuẩn ngữ pháp CEFR. Hai quyết định chủ dự án chốt 10.10.2026: Core Inventory là chuẩn chính, dời bài về đúng level; Coral có tab đọc dữ liệu tĩnh (packages/grammar-catalog/cefr-standard.ts). Hiện trạng: 20 bài lệch level, 11 chủ điểm chưa có bài.

18. Gỡ Grammar khỏi sân IELTS (SRC-1337, 11.10.2026) ​

Chủ dự án: loại bỏ Grammar trong IELTS, chỉ còn NEMO GRAMMAR độc lập. Khu /ielts/grammar (36 chủ đề, SRC-1065) đã gỡ: 36 chủ đề ấy vốn là 36 bài của /grammar, nay nội dung chuyển hẳn về apps/grammar/src/content/<level>/ (từ 15.10.2026 là D1, xem §19) và giữ video cũ. Địa chỉ /ielts/grammar và /ielts/grammar/<chủ đề> chuyển hướng sang /grammar để link đã gửi không gãy. Dòng "Grammar" ở bảng phải /ielts/today và gợi ý "làm một bài ngữ pháp" của hành trình Recovery nay trỏ tới /grammar. Tiến độ 36 bài ấy đổi mã (theo mã chủ đề IELTS sang g-<level>-<bài>), chấp nhận như SRC-1318.

19. Nội dung bài nằm trong D1 (SRC-1373, 15.10.2026) ​

Chủ dự án: "Chuyển tối đa code lên database, để cho code trở nên tối thiểu". Nội dung 115 bài và 29 unit review không còn đóng gói trong app learn: chúng nằm ở bảng D1 grammar_content (migration 0357, một dòng một bài hay một unit review, body_json giữ nguyên JSON của file). Learn tải theo level qua GET /v1/public/grammar/levels/{level} (công khai, cache 60 giây), giữ trong bộ nhớ của tab; trang hiện "Loading..." khi đang tải và "Coming soon" khi không có dữ liệu. Sửa một bài không cần sửa code hay deploy.

  • Sửa nhanh một bài trên production: PUT /v1/admin/grammar/{level}/{kind}/{slug} (vai admin, kind là lesson hoặc unit_review), body là trọn JSON của bài. API kiểm khuôn tối thiểu (title, rule_en, 3 ví dụ, 3 lỗi, 5 bài luyện, đáp án nằm trong lựa chọn) và trả 400 khi sai. Chép thay đổi ngược về file, nếu không lượt seed sau sẽ đặt lại bản trong file.
  • File là nguồn seed và lịch sử: content/grammar/<level>/<lesson>.json và content/grammar/<level>/_units/<unit>.json. Sau khi sửa file: node scripts/gen-grammar-seed.mjs sinh scripts/seed-grammar.sql (INSERT OR REPLACE), rồi nạp bằng workflow seed-data (gh workflow run seed-data.yml -f file=scripts/seed-grammar.sql). Cổng gen-grammar-seed.mjs --check trong check:code đỏ khi file seed lệch các file; test apps/grammar/src/*.test.ts kiểm các file theo chuẩn §14.
  • Giới hạn còn lại: thêm một bài MỚI vẫn cần sửa danh mục packages/grammar-catalog/catalog.json và chạy scripts/gen-grammar-topics.mjs (danh sách mã chủ đề API chấp nhận khi ghi tiến độ), tức là vẫn một lượt deploy.

20. Báo lỗi ở mọi nơi (SRC-1418, 16.10.2026) ​

Chủ dự án 16.10.2026: thêm tính năng report cho Grammar giống IELTS, và làm thành một tính năng chung cho mọi nơi (mọi câu quiz, mọi chỗ). Hiện thực:

  • Một API: POST /v1/reports (cần đăng nhập) nhận surface (khu: grammar, sat, lab...), target_key (đúng câu, ổn định giữa các lần mở), page_url, reasons (tick được nhiều lý do như cờ IELTS của SRC-1029), note và context nhỏ (câu hỏi, câu learner trả lời). Lưu ở bảng learner_reports (migration 0358) và vào hàng soát content_review_queue (cùng một chỗ đang mở thì gộp, không thêm việc).
  • Một nút: packages/learn-shell/src/ReportButton.tsx, lá cờ nhỏ ở hàng nút của mỗi câu; chữ tiếng Anh hay tiếng Việt theo bề mặt; biến thể kind="page" cho trang không có câu hỏi và kind="video" dưới video. Grammar: mỗi bài tập (TaskCard, dùng chung cho bài học, level test, placement, unit review), mỗi trang bài học và video bài học.
  • Một chỗ xử lý: admin.nemo12.com, trang Báo lỗi (cụm Content): lọc theo trạng thái và khu, mở đúng trang, đánh dấu đã sửa hoặc bỏ qua kèm ghi chú (GET /v1/admin/reports, PATCH /v1/admin/reports/{id}, chỉ admin).
  • Hai đường cũ vẫn chạy: /v1/learners/{id}/ielts-reports (bài luyện IELTS) và /v1/content/items/{id}/report (câu trong ngân hàng).
  • marlins.nemo12.com (cùng API, bản nút riêng apps/marlins/src/components/ReportButton.tsx, tiếng Việt mặc định): mỗi câu quiz bài học bố mẹ, mỗi thẻ bước của hành trình khoá, thanh đọc ebook (báo cả chương), video sự kiện. Khu trong admin: marlins-lesson, marlins-journey, marlins-ebook, marlins-event-video.
  • Chưa có: trang công khai nemo12.com (người đọc chưa đăng nhập, cần cơ chế chống spam riêng).

21. Thêm C2, mỗi level 12 unit (SRC-1424, 17.10.2026) ​

Chủ dự án: thêm C2 (khi ấy mới có A1 tới C1), và chia lại mỗi level thành 12 unit (khi ấy mỗi level 5 tới 6 unit). Chủ dự án chọn khoảng 3 bài mỗi unit.

  • Sáu level, 72 unit, 216 bài. Level mới proficiency (Proficiency, C2), URL /grammar/proficiency. Mỗi level đúng 12 unit, mỗi unit đúng 3 bài, mỗi unit một review 20 câu (test catalog.test.ts gác hình dạng này).
  • Bài cũ không đổi level, không đổi URL. 115 bài cũ chỉ được xếp lại vào unit mới. 101 bài mới: A1 9, A2 8, B1 9, B2 22, C1 17, C2 36. Bài mới đạt chuẩn §14 như bài cũ (Quick 5, Practice 10, Mastery 20).
  • C2 không có cấu trúc mới lớn (Core Inventory không có danh sách C2, xem §17): 12 unit dạy độ chính xác, độ đa dạng và văn phong: giả định thức, đảo ngữ nâng cao, nhấn mạnh, mệnh đề rút gọn, văn danh từ, tỉnh lược, sắp xếp thông tin, liên kết trang trọng, giọng điệu, mẫu cố định. Chuẩn CEFR ghi các bài này dưới điểm c2-refinement; bài mới ở A1 tới C1 ghi dưới điểm <level>-extension.
  • Unit đã đổi id (ví dụ starter/units/place-and-time): link cũ mở trang level thay vì trang không có. Seed seed-grammar.sql xoá dòng unit review không còn file, để D1 khớp file.
  • Unit review dựng bằng script: mỗi bài góp 6 tới 7 câu, lấy trước từ câu review mới viết cho bài mới, rồi câu của review cũ gắn với bài ấy, thiếu nữa mới lấy từ set Mastery của bài.
  • Đã làm nốt (18.10.2026): chữ học phí ghi 6 khoá A1 tới C2 (seed seed-grammar-tuition-c2-2026-10-18.sql, chỉ đổi ghi chú, không đổi giá); repo nemo12-www nhận cùng danh mục, sách và chữ trang Grammar (PR #7 ở repo ấy); mười hai quyển sách Grammar (mười quyển A1-C1 và hai quyển C2) mỗi quyển 6 chương cho đúng 6 unit của nó.

22. Giao diện Reef (SRC-1427, 18.10.2026) ​

Chủ dự án: thay giao diện learn.nemo12.com/grammar bằng mẫu web.conan1.com/t/reef-ielts-grammar (theme ocean-reef, sáng). Lấy THIẾT KẾ, không lấy chữ: mẫu viết tiếng Việt, còn nhãn và nút của /grammar vẫn tiếng Anh theo SRC-1173; nội dung bài (*_vi) giữ tiếng Việt.

  • Sáu level là sáu tầng nước: Shallows (A1, 0-5 m), Coral Garden, Kelp Forest, Blue Wall, Twilight Reef, Abyss (C2, 200 m +). Trang chủ: hero cảnh biển có linh vật cá hề Cam Cam, ba ô số liệu, thẻ Live có tờ lịch, danh sách level dạng dải màu đậm dần theo độ sâu, bốn bước "How NEMO GRAMMAR works".
  • Trang level: hero có huy hiệu CEFR và thanh tiến độ có cá bơi theo; mỗi unit một thẻ (số unit, ba bài có chấm trạng thái chưa học / đang học / xong, dòng Unit review).
  • Trang bài: thẻ đầu căn giữa (unit, bài thứ mấy, luật trong khung cam), video trong khung biển, "About this lesson", bốn set dạng thẻ có vòng tiến độ (set kế tiếp viền cam), ví dụ và lỗi hay gặp hai cột, thanh bài trước và bài sau. Trang unit review: hero có điểm, danh sách bài góp câu hỏi.
  • Linh vật và icon lấy từ Conan1, không vẽ lại (chủ dự án 18.10.2026: "kiếm quanh các trang khác"): linh vật là Coral, cá hề của NEMO ở web.conan1.com/mascots, ba nét mặt (vui ở trang chủ, nghĩ ở bài và đề kiểm tra, mừng ở unit review) là ba file SVG trong apps/grammar/src/assets/; icon là bộ Reef Cartoon ở web.conan1.com/icons (bộ khuyên dùng cho theme Coral Reef), trong ReefIcons.tsx. Bản 3D (three.js) của Coral không dùng: chủ dự án chọn chỉ 2D, vì three.js là thư viện thứ hai mà SRC-650 cấm.
  • Kỹ thuật: theme là bộ token shadcn đặt lại trong lớp .reef (apps/grammar/src/reef.css), nên Card, Button, Progress tự theo. Hình ở ReefArt.tsx, chỉ đọc token. Màu, cỡ và chuyển động riêng nằm trong CSS, nên TSX không thêm màu thô, giá trị tuỳ ý hay style inline (cổng audit-ui và nợ giao diện SRC-1302; trần button hạ còn 327). Chữ Fredoka (tiêu đề) và Nunito (thân), tự host từ @fontsource-variable ghim 5.3.0; Fredoka không có bộ chữ Việt nên tiêu đề lui về Nunito cho ký tự có dấu. Tắt chuyển động khi hệ điều hành bật giảm chuyển động. Thanh trên vẫn là NavBar chung của learn (menu chương trình, ngăn kéo trên mobile).