Sổ nguồn SRC-0175 tới SRC-0199
Một mảnh của sổ tiếp nhận. Chỉ CHÈN dòng bằng node scripts/src-new.mjs, không ghi đè cả file.
| ID | Ngày nhận | Nguồn | Canonical hóa vào | Trạng thái |
|---|---|---|---|---|
| SRC-175 | 2026-08-16 | Chỉ đạo: đổi "Toàn cảnh" thành Dashboard, breadcrumb School → Dashboard → từng môn; bỏ chú giải màu; mỗi Learning Package một dòng, bên trong là Module; kèm câu hỏi "nên trả lời Coverage hay Mastery, hay cả hai?"; hover ra tooltip, click ra popover | Trả lời: cần cả hai, và tuyệt đối không trộn vào một số. Bản cũ chỉ có một con số = trung bình mastery trên toàn bộ bài, kể cả bài chưa đo (tính là 0) — hậu quả thấy ngay: learner học 4/36 bài rất giỏi vẫn hiện "8%", nhìn như học kém trong khi sự thật là chưa đo. Nay API trả coverage (đã đo bao nhiêu phần bản đồ) và mastery_of_assessed (phần đã đo vững tới đâu) riêng biệt; mastery chỉ hiện khi đã có bài được đo, chưa đo thì hiện "—" vì 0% là một khẳng định còn "—" mới là sự thật. Màn hình: mỗi Learning Package một dòng có thanh coverage, mở ra là các Module (skill_nodes.module), mỗi Module có dải ô theo bài. Bỏ chú giải màu cố định — thay bằng tooltip khi hover và popover khi bấm vào ô bài (nói rõ tên bài, lớp, trạng thái, mức vững, độ tin). Breadcrumb đổi thứ tự vì Dashboard chứa các môn chứ không phải trang con của môn. Đồng bộ sang app phụ huynh (marlins). Slug /toan-canh giữ redirect mềm | ✅ |
| SRC-176 | 2026-08-16 | Chỉ đạo: bỏ tính năng "Tiến độ" của learner | Trang Tiến độ và Dashboard cùng trả lời một câu hỏi — "đã học tới đâu, vững tới đâu" — nhưng Dashboard trả lời theo bản đồ kiến thức còn Tiến độ chỉ gộp thành mấy con số rời. Hai màn cùng trả lời một câu thì learner phải chọn tin cái nào, và khi hai chỗ lệch nhau (chúng CÓ lệch vì cách lấy trung bình khác nhau) thì mất tin cả hai. Bỏ khỏi learn: route · nhãn · card lối vào ở trang chủ school · component. Link cũ /tien-do đưa về Dashboard chứ không rơi vào 404. App phụ huynh vẫn giữ trang này vì phụ huynh cần một trang gộp theo school, không theo môn | ✅ |
| SRC-177 | 2026-08-16 | Chỉ đạo: đưa link Thư viện Lab ra trang Hôm nay và đổi tên thành "Interactive Labs"; đưa nội dung Dashboard ra luôn trang này và bỏ trang Dashboard | Thư viện Lab trước nằm sâu trong Phòng Lab nên gần như không ai thấy — nay là một thẻ ngay trang Hôm nay, tên Interactive Labs (đổi ở cả thẻ, trang chủ school, nút trong Phòng Lab và tiêu đề trang). Nội dung Dashboard nhúng thẳng dưới hàng thẻ: bản đồ môn học là thứ cần liếc mỗi ngày, bắt đi thêm một trang nữa để xem thì phần lớn sẽ không xem. Bỏ trang overview khỏi route, nhãn, breadcrumb và thẻ lối vào. Ba slug của trang đã bỏ (/tien-do, /dashboard, /toan-canh) đều đưa về trang Hôm nay — có 3 smoke test khoá riêng luật này, vì link đã chia sẻ rơi vào 404 là mất niềm tin nhanh nhất | ✅ |
| SRC-178 | 2026-08-16 | Chỉ đạo: bỏ hết "phần trăm đã đo", chỉ còn mức vững; chuyển sang điểm thang 10, một số lẻ; Module thành hình tròn có màu, tên nằm dưới, bấm vào mở popover các Unit kèm mức vững từng Unit | Dashboard nay chỉ trả lời một câu — "phần đã học thì vững tới đâu" — chấm trên thang 10 (8,3 · 5,0). Vòng tròn tô màu theo mức: ≥8 xanh · 5–8 vàng · <5 coral · chưa đo thì xám. Giữ nguyên một luật từ SRC-175: module chưa đo bài nào thì hiện "—", không hiện 0,0 — 0 điểm là một khẳng định (đã đo, và kém) còn "—" mới là sự thật. Điểm tính trên các bài đã đo, không pha loãng bởi bài chưa học (nếu không thì học 1 bài giỏi trong 20 bài vẫn ra điểm thấp). API bổ sung tầng Unit bên trong Module cho popover. Đồng bộ sang app phụ huynh. 2 smoke test | ✅ |
| SRC-179 | 2026-08-16 | Chỉ đạo: bỏ cụm "Môn học" và cụm "Của con" ở trang chủ school | Hai cụm này đều là lối đi thứ hai tới cùng một chỗ: hàng nút môn trùng với các thẻ phía trên (đã đưa thẳng vào môn), còn "Của con" trùng với thẻ Mục tiêu trong phần học — mà hai chỗ lấy số theo hai đường khác nhau nên có lúc lệch nhau. Bỏ luôn hai lệnh gọi API chỉ phục vụ hai cụm đó (cockpit, getExamTargets), nên trang chủ school nhẹ đi hai request mỗi lần vào | ✅ |
| SRC-180 | 2026-08-16 | Chỉ đạo: bấm "Mục tiêu" ra trang riêng — có tối đa 3 mục tiêu chung, mỗi mục tiêu có lịch thi tuyển riêng và lịch thi ở trường đang học (giữa kỳ 1 · cuối kỳ 1 · giữa kỳ 2 · cuối kỳ 2); hệ thống tự tạo sẵn kèm ngày gợi ý, learner chỉ bấm xác nhận, sửa inline được bất kỳ mục nào | Trang /{school}/muc-tieu + migration 0040_goal_dates + API GET /goal-dates (tự tạo sẵn phần còn thiếu ngay lần đọc đầu) và PATCH /goal-dates/{id}. Cột confirmed là chỗ quan trọng nhất: ngày do máy đoán mà đem dựng lịch ôn gấp rút thì learner bị hối theo một mốc không có thật — nên chưa xác nhận = ước lượng (trên màn ghi rõ "tạm tính"), đã xác nhận = mốc cứng cho Planning Engine. Sửa ngày thì tự động coi như đã xác nhận (người đã gõ tay thì không cần bấm thêm) và source chuyển sang learner để sau còn biết con số nào do ai đặt. Gợi ý: thi tuyển ~đầu tháng 6, 3 ngày liền; lịch trường theo khung năm học VN. 8 unit test cho phần dễ sai một năm — schoolYearStart (tháng 1-7 thuộc năm học năm trước) và "mùa thi đã qua thì gợi ý năm sau"; 2 smoke test | ✅ |
| SRC-181 | 2026-08-16 | Chỉ đạo: mỗi Package cần 6-9 Module (tối thiểu 6), mỗi Module xử lý một vấn đề riêng; vòng tròn nhỏ lại, bỏ "/10", điểm chuyển sang thang 100 dạng số nguyên (37 thay cho 3,7) | Đo trước khi làm: 42/42 package chỉ có 1 module (trừ Toán 4 và Vật lí CH 2) — "module" khi đó chỉ là một cái tên gộp, không phân loại được gì. Chia lại 11 package có từ 6 bài trở lên thành 7-9 module, mỗi module đặt tên theo vấn đề nó xử lý chứ không theo "chương mấy" (162 bài được xếp lại). Giới hạn phải nói rõ: 31/42 package còn lại chỉ có 3-5 bài nên KHÔNG THỂ có 6 module mà mỗi module vẫn có bài — chia nhỏ ở đó chỉ tạo ra module một bài, nhìn đủ số nhưng không phân loại được gì; chỗ đó cần soạn thêm bài, không phải xếp lại nhãn. Script tự chặn nếu một package rơi ra ngoài khoảng 6-9, có module rỗng, hoặc một bài nằm ở hai module. UI: vòng tròn 84→60px, bỏ dòng "/10", thang 100 số nguyên. Bắt được một lỗi khi đổi thang: mốc màu vẫn viết cứng 8 và 5 nên với thang 100 thì mọi vòng tròn đều xanh — màu mất sạch tác dụng cảnh báo mà nhìn màn hình vẫn thấy "có màu" nên không lộ ra ngay; nay mốc tính theo SCORE_MAX và có 6 unit test khoá lại | ✅ |
| SRC-182 | 2026-08-16 | Chỉ đạo (nhiều lượt trong ngày): vài ảnh không hiển thị; bỏ link "Interactive Labs" ở Phòng Lab; chọn Package xong thì chỉ còn vài Module, chọn Module thì mọi Unit mở sẵn; ở chế độ English thì tên Package/Module/Unit cũng phải là tiếng Anh; điểm thang 100 (hiện 81, bỏ "/10"); 5 hình tròn một dòng; chưa đo thì để trống, không hiện dấu "—" lẫn chữ "chưa đo"; popover chỉ còn tên + vòng tròn, bỏ "2 unit · 1/3 bài đã học"; điểm của Package nằm ngay cạnh tên Package | "Ảnh không hiển thị" không phải lỗi ảnh: đợt chuyển hình sang tông đơn sắc đã đẩy 19 màu tô lên ~#F2F2F2, tức gần trắng — hình vẫn vẽ đủ, chỉ là vô hình trên nền trắng. Sửa bằng cách hạ độ sáng 26 màu xuống ≤0.86, giữ nguyên đơn sắc chứ không quay ngược lại (chừa white50 vì đó là vệt sáng), kèm test chặn mọi màu tô vượt ngưỡng. Tên tiếng Anh sai từ gốc: SRC-181 chia lại module nhưng chỉ ghi cột module, để nguyên module_en cũ — nên ở chế độ EN có hai module khác nhau cùng mang một tên tiếng Anh, màn hình nói sai chứ không chỉ chưa dịch. Nay script ghi cả hai cột cùng lúc và tự chặn nếu thiếu hoặc trùng tên tiếng Anh; API overview trả name_en ở đủ bốn tầng (môn · Package · Module · Unit). Hiển thị: lưới cố định 5 cột (wrap thì số cột đổi theo bề rộng cửa sổ, hai lần mở máy thấy hai bố cục khác nhau), vòng tròn rỗng khi chưa đo — vòng xám đã tự nói "chưa có gì ở đây", thêm chữ vào chỉ làm phần chưa học nổi hơn phần đã học | ✅ |
| SRC-183 | 2026-08-16 | Chỉ đạo: Luyện đề cần chia thành 4 cụm — giữa kỳ 1 (mã A), cuối kỳ 1 (B), giữa kỳ 2 (C), cuối kỳ 2 (D) — mỗi cụm 5 đề, A1…A5 | Trước đó mỗi môn mỗi lớp chỉ có đúng một đề "học kỳ": làm một lần là hết, và nó trộn cả năm vào một chỗ nên không ôn được cho một kỳ kiểm tra cụ thể nào. Nay 240 đề (3 môn × 4 lớp × 4 cụm × 5 đề, 2.205 câu). Cụm không phải cái nhãn: mỗi cụm lấy câu từ đúng phần chương trình đã học tới mốc đó theo module_order → unit_order → level (giữa kỳ 1: 0-25% · cuối kỳ 1: 0-50% · giữa kỳ 2: 50-75%, chỉ phần mới của kỳ 2 · cuối kỳ 2: cả năm) — đề giữa kỳ 1 mà hỏi phần tháng 4 thì learner làm xong chỉ thấy mình dốt chứ không biết mình đã sẵn sàng chưa. 5 đề trong một cụm chia vòng tròn theo độ khó nên đề nào cũng có đủ dễ-vừa-khó. Dùng lại cột exams.term sẵn có từ 0015 thay vì đặt bộ mã mới (hai cột cùng nghĩa thì chỉ cần quên ghi một chỗ là hai chỗ nói khác nhau); migration 0041 chỉ thêm paper_code. Đề gộp cũ xếp kho chứ không xoá — đã có learner làm nó. Nói rõ chỗ còn mỏng: 13 cụm (giữa kỳ của Anh/Văn) có pool 18-28 câu cho 5 đề nên các đề dùng chung câu; script in ra danh sách ấy mỗi lần chạy thay vì im lặng phát lại câu cũ như thể đề nào cũng mới | ✅ |
| SRC-184 | 2026-08-16 | Chỉ đạo (nhiều lượt): thêm công tắc — mặc định chỉ hiện Package kèm điểm, bấm mới mở chi tiết Module; vòng tròn nhỏ lại và nối nhau bằng nét như bản đồ gap của chuyenchon (cùng dòng thì nối, khác dòng thì không); gộp khu "Bắt đầu" với "Ôn nhanh" còn đúng một nút tên "Lao ra biển" và đúng một dòng giải thích "Nemo12 tự tính toán giúp con nên học gì"; chế độ EN phải dịch cả nhãn thẻ ("Luyện đề", "Mục tiêu"…) | Hai lối vào cạnh nhau — "Việc số 1 hôm nay" và thẻ "Ôn nhanh" — do cùng một bộ máy xếp hạng sinh ra, nên bắt learner chọn giữa chúng là đẩy ngược phần tính toán về phía learner. Nay hệ thống tự chọn theo thứ tự: việc đang chặn nhiều nhất → bài đáng ôn hôm nay → Phòng Lab; tên bài cũng bỏ khỏi nút vì nó hiện ngay khi bài mở ra. Dashboard mặc định về mức Package (mở sẵn mọi module thì một môn dài ba màn hình, mà câu hỏi thường ngày chỉ là "mình mạnh yếu ở mảng nào"), có công tắc Gọn ⇄ Chi tiết, kèm smoke test khoá cả hai chiều. Vòng tròn 56→44px, nét nối vẽ bằng ::before/::after trên lưới 5 cột không có gap ngang nên nét liền mạch qua mép ô; không nối vòng cuối dòng trên với vòng đầu dòng dưới — làm thế là vẽ ra một thứ tự học không có thật. Bổ sung 9 chuỗi vào catalog EN | ✅ |
| SRC-185 | 2026-08-16 | Chỉ đạo: tên rút gọn cho Package/Module/Unit, cả Việt (1-2 âm tiết, tối đa 3) lẫn Anh, và hiển thị bằng tên rút gọn; độ rõ vòng tròn theo phần đã hoàn thành; tạo môn Tin học ưu tiên lập trình và thuật toán; "tối thiểu 6 áp dụng cho mọi môn" — ≥6 Package, mỗi Package ≥6 Module, mỗi Module ≥6 Unit | Tên rút gọn là cột riêng (migration 0042), không phải cắt chuỗi lúc hiển thị: cắt máy móc cho ra "Bất đẳng thức và giá…" — vẫn dài mà mất nghĩa. Module do người đặt hết (118 tên), Unit có luật rút gọn máy móc nhưng chỗ nào luật cho ra quá 3 âm tiết thì bắt buộc đặt tay, script tự chặn nếu thiếu (104 chỗ phải đặt tay). Tên đầy đủ không mất — nó ở tooltip và popover. Độ rõ = phần đã đo: điểm nói "vững tới đâu" nhưng nói một mình thì 90 điểm trên 1/9 bài trông y hệt 90 điểm trên 9/9 bài; độ rõ mang đúng phần thông tin còn thiếu mà không thêm con số nào lên màn hình (sàn 0.45 — mờ quá thì thành "hỏng màn hình" chứ không còn là tín hiệu). Tin học: 6 package · 36 module · 216 unit, 4/6 package là lập trình + thuật toán, script tự chặn nếu không đạt 6/6/6 hoặc tên rút gọn quá dài. Nói thẳng về quy mô luật 6/6/6: một môn đạt chuẩn cần ≥216 unit, mười môn còn lại đang có tổng 256 unit — thiếu khoảng 1.900 unit, gấp ~7 lần toàn bộ chương trình hiện có. Đây là chương trình soạn nội dung dài hạn, không phải một lần chạy script; xếp lại nhãn cho đủ số chỉ tạo ra module một bài và unit rỗng. Bảng đo từng môn + thứ tự đề nghị ở curriculum-666.md | ✅ |
| SRC-186 | 2026-08-16 | Chỉ đạo: bỏ 3 thẻ (Phòng Lab · Luyện đề · Interactive Labs) ở trang chủ từng school | Ba thẻ này lặp lại đúng ba thẻ đã có ở trang Hôm nay, mà trang Hôm nay mới là nơi biết learner đang học môn nào — vào từ trang school thì hệ thống phải đoán môn, và đoán sai thì learner mở ra thấy môn khác. Trang school nay chỉ còn một việc: nói đây là school gì rồi "Vào học". Bỏ luôn prop onGo của SchoolHome vì không còn chỗ nào dùng | ✅ |
| SRC-187 | 2026-08-16 | Chỉ đạo: thẻ "Lao ra biển" nhỏ lại và đứng cùng hàng với "Mục tiêu", "Luyện đề" xuống cuối hàng hai; popover cũng hiển thị tên rút gọn của Module/Unit; đổi tên "Phòng Lab" thành cái gì đó có nghĩa hơn | Hàng một = "hôm nay học gì" + "đang nhắm tới đâu" — hai vế của cùng một câu hỏi, đặt cạnh nhau thì đọc một lượt là đủ. Hàng hai = những nơi learner TỰ CHỌN, Luyện đề đứng cuối vì nó là việc của mùa thi chứ không phải việc thường ngày. Popover chuyển sang tên rút gọn cho khớp với lưới: một cái tên mà chỗ này gọi kiểu này, chỗ kia gọi kiểu khác thì learner phải ghép lại trong đầu xem có phải cùng một thứ không; tên đầy đủ vẫn ở tooltip. "Phòng Lab" → "Bài học" (EN: Lessons): tên cũ vừa không nói được trang chứa gì, vừa đụng tên với "Interactive Labs" — hai thẻ cạnh nhau cùng chữ "Lab" mà là hai thứ khác hẳn (một bên là đường học có khoá mở tuần tự, một bên là thư viện mô phỏng vào xem tự do) | ✅ |
| SRC-188 | 2026-08-16 | Chỉ đạo: đổi tên trang thành "Đường học"; tạo Package/Module/Unit cho môn Tin | "Đường học" nói đúng thứ bên trong: một lộ trình Package → Module → Unit mở dần theo thứ tự, không phải một cái phòng chứa đồ (EN: Learning path). Môn Tin học đã dựng ở SRC-185 — 6 package · 36 module · 216 unit · 216 bài, đã có trong D1; lần này bổ sung unit_order (trước đó để trống nên thứ tự unit chỉ đúng nhờ ăn may theo level) và đưa tên rút gọn xuống cả Đường học: API labs trả thêm short/short_en cho Package, module_short, unit_short, màn hình hiện tên rút gọn còn tên đầy đủ ở tooltip — hai màn cùng nói về một Module mà gọi hai kiểu tên thì learner phải tự ghép lại xem có phải cùng một thứ không. Còn thiếu ở Tin học: chưa có câu hỏi nào, nên mọi bài hiện ở trạng thái chưa đo | ✅ |
| SRC-189 | 2026-08-16 | Chỉ đạo: môn chưa có nội dung chẩn đoán thì vẫn cho vào; đổi "Gọn"/"Chi tiết" sang icon; Lý và Hoá vẫn thiếu quá nhiều | Cửa chẩn đoán trước đây dựng theo assessed_nodes === 0, nên môn mới dựng xong khung chương trình mà chưa soạn câu (Tin học) thì cửa ấy khoá chặt: bấm vào không có gì để làm, mà không bấm thì không vào được môn. Nay cockpit trả thêm item_count và chỉ dựng cửa khi môn có câu thật. Công tắc chuyển sang hai icon vẽ tại chỗ — mấy vạch xếp chồng = danh sách Package, mấy chấm tròn = lưới Module, kèm aria-label vì hình một mình thì trình đọc màn hình không nói được gì. Lý và Hoá dựng lại theo 6/6/6: mỗi môn 6 package · 36 module · 216 unit (Lý thêm hai package Áp suất và Âm thanh, Hoá thêm Liên kết & hợp chất và Tính toán hoá học). 31 bài cũ giữ NGUYÊN id — mastery và lịch sử luyện tập móc vào id, đặt id mới là xoá sạch tiến độ đã đo mà màn hình trông như chỉ đổi tên. Bắt được một lỗi thật trong lúc làm: script dùng INSERT OR REPLACE (xoá cả dòng rồi chèn lại) nên các cột nó không nhắc tới bị xoá trắng ở bài tái dùng — mất effort_minutes của 31 bài, không hiện gì trên màn hình nên suýt không ai biết; đã khôi phục và đổi sang ON CONFLICT DO UPDATE chỉ ghi đúng cột nó sở hữu | ✅ |
| SRC-190 | 2026-08-16 | Chỉ đạo: soạn câu hỏi cho môn Tin, Lý, Hoá | Đợt đầu: 432 câu cho 3 package nền tảng — Tin học Lập trình cơ bản, Vật lí Cơ học, Hoá học Chất và biến đổi (mỗi package 36 bài × 4 câu). Bốn câu mỗi bài đi đúng thứ tự vai trò canonical → variant → discriminator → boundary: selection.ts để dành câu phân loại cho phần ĐO, nên bài chỉ toàn câu luyện thường thì bài đo không phân biệt được "hiểu thật" với "quen tay". Mỗi câu discriminator/boundary gắn với một lỗi hiểu có thật, ghi trong misconception (ví dụ: input() trả về chuỗi nên x + x ra "55"; nặng không rơi nhanh hơn nhẹ; khuấy làm tan NHANH hơn chứ không tan NHIỀU hơn). Script nạp tự xoay vị trí đáp án theo id — người soạn cứ đặt đáp án đúng ở đầu cho dễ rà, còn để nguyên thì đáp án luôn ở ô A và learner đoán theo vị trí là qua hết bài, mọi bằng chứng thu được sau đó đều là bằng chứng giả. Script chặn: bài không tồn tại · phương án trùng · đáp án dồn một vị trí. Còn thiếu, nói rõ: 3 môn này còn 15 package (540 bài) chưa có câu nào | ✅ |
| SRC-191 | 2026-08-16 | Chỉ đạo: thứ tự hiển thị Package/Module/Unit luôn bắt đầu bằng phần nền tảng | Bảng strands không có cột thứ tự nào, nên API trả về theo thứ tự SQLite quét bảng — tức thứ tự GHI VÀO, một thứ tự tình cờ. Hậu quả thấy ngay ở Tin học: "Cấu trúc dữ liệu" hiện trước "Lập trình cơ bản", tức mời learner học mảng trước khi biết biến là gì. Migration 0043 thêm cột ord; thứ tự do người đặt theo mạch học (Toán: Số học → Đại số → Hình học; Hoá: Chất → Nguyên tử → Liên kết → Phản ứng → Tính toán; Tin: Lập trình → Cấu trúc → Thuật toán…) và script tự chặn nếu một môn khai thiếu hoặc khai thừa package. Không sắp theo tên hay theo mã: sắp chữ cái thì "Áp suất" đứng trước "Cơ học" — vẫn là một thứ tự tình cờ khác. Module và Unit đã có module_order/unit_order từ trước nên chỉ cần bổ sung tầng Package | ✅ |
| SRC-192 | 2026-08-16 | Chỉ đạo: soạn tiếp câu hỏi cho các package còn lại của Tin, Lý, Hoá | Đợt 2: thêm 432 câu cho 3 package tiếp theo — Tin học Thuật toán nền tảng, Vật lí Điện và từ, Hoá học Phản ứng hoá học. Cùng chuẩn 4 vai trò như SRC-190, và mỗi câu discriminator/boundary vẫn phải bám vào một lỗi hiểu có thật: tìm nhị phân trên dãy chưa sắp xếp cho kết quả sai mà KHÔNG báo lỗi; cường độ dòng điện không "bị tiêu thụ dần" qua từng bóng đèn, cái bị tiêu thụ là năng lượng; chất xúc tác làm phản ứng nhanh hơn chứ không cho nhiều sản phẩm hơn. Tổng cộng sau hai đợt: 864 câu / 6 package. Còn lại: 12 package (432 bài) chưa có câu nào — Tin học 4, Vật lí 4, Hoá học 4 | ✅ |
| SRC-193 | 2026-08-16 | Chỉ đạo: sau các Model thì tới Recommendation Engine — mô tả kỹ tương tự | reference/recommendation-engine.md: 5 bước chọn việc, ghi rõ công thức code (weight × deficit) khác công thức SDD-002 §10 (6 thừa số), 3 loại candidate chưa sinh (Rest/Ask Mentor/Skip), 4 engine đề xuất khác (Parent WF-12, Need Signal, Whale, Orca fit); khoảng trống nặng nhất: recommendation không lưu nên không truy được lịch sử | ✅ |
| SRC-194 | 2026-08-16 | Chỉ đạo: soạn tiếp câu hỏi — đợt 3 cho Tin, Lý, Hoá | Thêm 432 câu cho Tin học Cấu trúc dữ liệu, Vật lí Nhiệt học, Hoá học Nguyên tử và bảng tuần hoàn; vẫn đủ 4 vai trò mỗi bài như SRC-190. Lỗi hiểu được nhắm vào trong đợt này: [[0]*3]*3 tạo ba hàng cùng trỏ tới MỘT danh sách nên sửa một hàng là ba hàng cùng đổi; sờ ghế sắt thấy lạnh hơn ghế gỗ dù hai ghế cùng nhiệt độ — giác quan đo TỐC ĐỘ MẤT NHIỆT chứ không đo nhiệt độ; mở cửa tủ lạnh làm phòng NÓNG thêm, vì tủ chuyển nhiệt chứ không tiêu diệt nhiệt; khối lượng nguyên tử 35,5 của clo là trung bình có trọng số của các đồng vị, không phải của một nguyên tử nào. Tổng sau ba đợt: 1.296 câu / 9 package. Còn lại: 9 package (324 bài) chưa có câu — Tin học 3, Vật lí 3, Hoá học 3 | ✅ |
| SRC-195 | 2026-08-16 | Chỉ đạo: tiếp tục với Learning Engine và Assessment Engine | reference/learning-engine.md + reference/assessment-engine.md: cơ chế tách câu luyện/câu đo (SRC-141), nhịp 10 câu (SRC-153), 3 lớp đo, ba tầng chống rác đầu vào; hai khoảng trống đối chiếu SDD: chưa có Difficulty Controller (SDD-002 §11) và comment chẩn đoán nói "ưu tiên node thuộc goal blueprint" nhưng SQL không làm điều đó | ✅ |
| SRC-196 | 2026-08-16 | Chỉ đạo: soạn tiếp (đợt 4) + chỉnh Dashboard — vòng tròn Module nhỏ hơn vòng tròn Package, nét nối mảnh lại, các vòng gần nhau hơn; "Gọn/Chi tiết" chuyển sang icon; bỏ dòng "mức vững trung bình trên 25 bài đã học"; popover trình bày vòng tròn trên, tên unit dưới; bỏ nút "Đóng" | Thêm 432 câu: Tin học Kỹ thuật giải thuật, Vật lí Áp suất và chất lỏng, Hoá học Liên kết và hợp chất. Lỗi hiểu nhắm vào đợt này: tham lam đổi tiền với bộ mệnh giá 1-3-4 cho 3 tờ trong khi tối ưu là 2 tờ; nghịch lý thuỷ tĩnh — hai bình khác hình dạng nhưng cùng mực nước thì áp suất đáy BẰNG NHAU; tinh thể muối không hề có "phân tử NaCl" riêng lẻ, công thức chỉ nói tỉ lệ 1:1. Về giao diện: vòng tròn Module 44→32px (nhỏ hơn Package 44px nên nhìn ra ngay tầng trên và tầng dưới), nét nối 2→1px và tính theo biến --dot nên đổi cỡ vòng tròn là nét tự theo, lưới co lại max-width: 34rem — trải hết bề ngang thẻ thì một dãy 5 vòng nhìn rời rạc như 5 thứ không liên quan. Hero bỏ dòng đếm bài vì màn này chỉ trả lời một câu "vững tới đâu"; popover dùng đúng lưới n12-modmap như Module để cùng một cách đọc ở mọi tầng, và bỏ nút Đóng vì bấm ra ngoài đã đóng được. Tổng sau bốn đợt: 1.728 câu / 12 package. Còn lại: 6 package (216 bài) | ✅ |
| SRC-197 | 2026-08-16 | Chỉ đạo: tiếp tục với Depth Engine và Quality Engine | reference/quality-engine.md: 4 lớp gác nội dung (sàng lọc 12 luật, rubric CC-QAF 8 chiều ≥2 evaluator KHÁC góc nhìn, cổng publish 6 điều kiện số, vòng phản hồi learner báo sai). reference/depth-engine.md: ghi thẳng là CHƯA XÂY — grep depth trả rỗng, trong khi REQ-INT-11/LRN-07/SCH-03/PAR-06 đang ✔ trong PRD (✔ = đã có thiết kế, không phải đã thi hành); liệt kê 4 mảnh đang tạm thay và chúng thiếu gì, cùng 2 thứ dữ liệu đang chặn việc xây | ✅ |
| SRC-198 | 2026-08-16 | Hỏi tiếp về Retention Engine và Planning Engine — hai engine này đã có trang riêng nhưng nằm dưới tên Model nên khó tìm | Sửa chỗ khó tìm: sidebar đổi thành "Retention Model & Engine" / "Learning Plan & Planning Engine", thêm bảng tra cứu engine → trang ở reference/index; bổ sung chi tiết code mới chưa có trong docs: snapshot retention cắt next_review_ideal tới NGÀY vì snapshot bị hash — để nguyên mili-giây thì mỗi lượt cron đẻ một version rác cho mọi learner | ✅ |
| SRC-199 | 2026-08-16 | Chỉ đạo: soạn tiếp — đợt 5 | Thêm 432 câu: Tin học Máy tính và dữ liệu, Vật lí Âm thanh, Hoá học Tính toán hoá học. Lỗi hiểu nhắm vào đợt này: mạng 100 Mbps tải tệp 100 MB mất ~8 giây chứ không phải 1 giây — bit và byte lệch nhau 8 lần; gảy mạnh dây đàn làm âm TO hơn chứ không CAO hơn (biên độ khác tần số); 1 mol khí O₂ chứa gấp đôi số Avogadro nguyên tử oxi; hai xe cùng 70 dB cộng lại chỉ ~73 dB vì thang đêxiben là logarit. Cũng nhắc lại đúng luật đã chốt ở Dashboard trong ngữ cảnh dữ liệu: điền 0 vào ô trống của cột điểm là nói sai — 0 nghĩa là "thi được 0 điểm", khác hẳn "không có dữ liệu". Tổng sau năm đợt: 2.160 câu / 15 package. Còn lại: 3 package (108 bài) — Tin học Ứng dụng và sản phẩm, Vật lí Quang học, Hoá học Hoá học đời sống | ✅ |