Skip to content

Sổ nguồn SRC-0375 tới SRC-0399 ​

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.

IDNgày nhậnNguồnCanonical hóa vàoTrạng thái
SRC-3752026-08-19Chỉ đạo: learner đi được tới MỌI Phần, không Phần nào khoá; chỉ khoá ở cấp UnitKhoá cả Phần là bức tường dựng trên bức tường — bên trong Phần vốn đã khoá tuần tự theo Unit✅
SRC-3762026-08-19Chỉ đạo: Unit nào cũng cho học vượt; unit thiếu bài học vượt hoặc thiếu 10 câu thì bổ sungRà soát: 65/125 unit Toán và 87/126 unit Tiếng Việt dưới 10 câu. Bổ sung 102 câu cho 26 unit thuộc 3 module đầu của mỗi Package → còn 39/125 unit Toán dưới 10 câu✅
SRC-3772026-08-19Chỉ đạo: vẫn cho học vượt với số câu sẵn có; bổ sung dần, riêng môn Toán, ưu tiên unit đầu của 3 module đầu mỗi PackageLuật 'sai tối đa một câu' vốn là TỈ LỆ chứ không phải con số cố định, nên chỉ cần nói đúng số câu thật của lượt này thay vì cứng '9/10'✅
SRC-3782026-08-19Chỉ đạo: mỗi Unit một nền khác nhau, vẫn 'dưới cùng thì đậm' như dưới biển; màu lấy từ Design SystemRà DS: thang nhiều sắc duy nhất là --state-coverage-1..5; coral/sun/seafoam đều đã có nghĩa riêng nên mượn làm nền sẽ phá nghĩa. Sắc pha 55% vào lớp nền tối, giữ nguyên cấu trúc sáng-đỉnh tối-đáy. Kèm sửa body mang màu đáy biển — trang dài hơn khung nhìn thì phần dưới lòi ra nền trắng✅
SRC-3792026-08-19Chỉ đạo: 'Về Compass (La bàn)' chứ không phải 'về đường đi của Unit'; KHÔNG dùng em dash ở bất kỳ đâu; đổi lời kết lab thành 'khuyến khích việc thử nghiệm, sai càng học được nhiều'Quét sạch em dash khỏi mọi chuỗi hiển thị của app học và các chuỗi learner đọc trong Planning Engine; thêm test nodash.test.ts chặn nó quay lại (bỏ qua chú thích và biểu thức chính quy phải khớp dữ liệu cũ). Còn ~90 dòng trong workers/api chủ yếu là rationale của sổ quyền riêng tư✅
SRC-3802026-08-19Chỉ đạo: 'Các lab, ưu tiên có hình minh họa, hình đó có thể tương tác được. Và tại mỗi thời điểm thì đừng có quá nhiều text, đừng có quá nhiều dòng.'Hình tương tác được ĐƯA LÊN ĐẦU và luôn hiện khi node có viz (trước đây chỉ hiện ở nhánh không có bước, nên 57/58 lab toán có hình mà không ai thấy). Mỗi lúc chỉ MỘT bước mở ra, các bước đã xem thu về một dòng tiêu đề bấm lại được; điều hướng bằng hai nút icon và dãy chấm thay cho chữ. Kèm dời cổng chặn em dash khỏi project TypeScript của app (nodash.test.ts làm hỏng tsc --noEmit vì workspace không có @types/node) sang scripts/check-no-emdash.mjs, chạy trong check:docs, và quét cả app Marlins✅
SRC-3812026-08-19Tiếp phần bù câu hỏi cho Học vượt: 'bổ sung dần với riêng môn toán, và bổ sung các unit đầu tiên, trong 3 module đầu tiên trong từng Package'8 node còn dưới 10 câu trong phạm vi này (mỗi node 6-7 câu), viết tay thêm 31 câu để cả 8 node đủ 10. Ưu tiên câu thuộc diện boundary và discriminator vì phần đã có gần như toàn variant, mà Học vượt cần đúng loại câu phân biệt được 'làm được' với 'đoán trúng'. Sau khi nạp: 0 node trong phạm vi còn thiếu✅
SRC-3822026-08-19Tiếp luật 'không dùng em dash ở bất kỳ đâu' (SRC-379): cổng mã nguồn không với tới được phần chữ nằm trong DỮ LIỆU, mà đó mới là phần learner đọc nhiều nhấtDọn 1.467 câu hỏi (prompt/đáp án/hiểu lầm), 133 node, 37 lab và 183 nội dung lab. Đổi thành dấu hai chấm chứ không phải dấu phẩy, vì gần như mọi chỗ em dash ở đây đang làm đúng việc của dấu hai chấm. MỘT ngoại lệ có chủ đích: trường stage của lab, nơi em dash là DẤU CẮT của SRC-173 chứ không phải dấu câu, nên cắt hẳn phần sau thay vì thay dấu, giữ nguyên thứ learner đang nhìn thấy. Còn 2 lab dạy về hội thoại giữ gạch đầu dòng thoại, vì đó là chính nội dung bài✅
SRC-3832026-08-19Áp phạm vi bù câu hỏi của SRC-381 sang môn Tiếng Việt2 node còn dưới 10 câu trong phạm vi (một node chưa có câu nào), viết tay 14 câu. Phần Tiếng Việt cũ nghiêng về câu một-dòng-một-ý nên các câu mới đi vào quy trình so hai văn bản: tìm chỗ chung trước, rồi hỏi vì sao lệch, thay vì hỏi bài nào hay hơn✅
SRC-3842026-08-19Hội thoại chốt learner học theo trình tự nào: hai vòng hỏi đáp, 20 câu, chủ dự án chốt từng câu mộtChốt: (1) bỏ Compass khỏi menu, Dashboard gánh trọn, hàng chờ 1 việc lớn + 2 việc nhỏ nằm trên đầu, không có nút 'để sau'; (2) đo mở đầu BẮT BUỘC theo từng môn nhưng chỉ với ai chưa có bằng chứng nào, hỏi rộng, adaptive để sau; (3) đo lại khi 7 ngày kể từ lần cuối làm bài, chỉ lấy câu từ phần đã vững; (4) Diagnosis Report có URL riêng, không điểm số, tối đa 5 'đã vững' và đúng 1 'bắt đầu từ đây'; (5) chọn Unit quá sâu thì hé cửa chứ không khoá, sai 3 câu mới gợi tiên quyết; (6) ba bậc hiện bằng ba chấm, chữ chỉ trong popover; (7) gộp 'Học vượt' với 'đo khi nhảy vùng mới'. Canonical hoá vào SDD-021✅
SRC-3852026-08-19Chỉ đạo: 'Mỗi Unit cần có một Lab, thiết kế theo cách tiếp cận của IB, learner tương tác với website. Làm trước với môn toán. Không rõ cấp Module có nên có Lab không. Lab dạng tương tác: click, kéo thả, kéo slider vài bước, trả lời 1-2 câu hỏi'Chốt ba phần bắt buộc theo đúng thứ tự IB: ĐOÁN rồi mới NGHỊCH rồi mới HỎI. LabPlayer trước đây làm ngược (xem hình trước, hỏi 'con đoán gì' sau), tức là learner không bao giờ đoán sai nên không bao giờ ngạc nhiên. Hình tương tác chuyển sang đi bằng DỮ LIỆU (lab_content.viz) thay vì hàm trong bundle: 197 unit môn Toán mà mỗi unit một hàm thì bundle phình theo số bài học. Soạn 14 lab cho các Unit đầu của 3 Module đầu mỗi Package, độ phủ môn Toán lên 80/197; đợt hai thêm 20 lab nữa, lên 100/197, kèm cổng check-labs-ib.mjs. Cấp Module KHÔNG có lab riêng, lý do ghi ở SDD-010 §10c✅
SRC-3862026-08-19Chủ dự án vào lab ib-count-combine-split: 'Vào lab này, rồi không hiểu gì luôn. Cần có hình vẽ minh hoạ, vẽ bằng thuật toán, đừng sinh ảnh bitmap'Màn ĐOÁN trước đây chỉ có chữ. Đưa hình lên ngay màn đoán, nhưng qua previewConfig(): giữ đúng hình và trạng thái xuất phát, thay lời nhận xét bằng câu trung tính và khoá tương tác, vì lời nhận xét của hình khám phá chính là đáp án, đọc trước thì phần đoán mất sạch tác dụng. Kèm archetype mới dots-groups (hai nhóm chấm xếp nối tiếp) cho chính lab đó, vì trục số quá trừu tượng với lớp 1-3. Hình vẫn là SVG sinh từ tham số, đúng luật zero-asset REQ-LRN-20✅
SRC-3872026-08-19Chỉ đạo trên màn kết thúc lab: 'Quá nhiều text, lại dài dòng. Cần bỏ bớt text, làm ngắn các dòng lại. Đổi button thành Tới Dashboard'Câu kết dài 24 chữ chạy gần hết bề ngang, rút còn 'Đúng n/N câu.'; nút đổi thành 'Tới Dashboard'. Câu dặn của SRC-379 KHÔNG bỏ mà dời về đầu lab: nó là lời dặn TRƯỚC khi làm, đặt ở màn kết thúc thì learner đã thử xong rồi, đọc cũng không đổi được gì mà lại làm màn ấy dài ra✅
SRC-3882026-08-19Chỉ đạo: 'Khi learner dự đoán thì chỉ cần click thôi cho tiện. Click xong vẫn đổi thoải mái. Chọn xong bấm Tiếp tục thì tới bước sau'Ô chữ thay bằng 2 tới 4 lựa chọn bấm được cho cả 34 lab; đổi ý thoải mái, chưa chọn thì nút Tiếp tục còn khoá. Lựa chọn KHÔNG đánh dấu đáp án đúng, vì chấm điểm phần đoán là biến nó thành câu hỏi thứ ba và learner sẽ đoán theo kiểu tìm đáp án an toàn. Cổng check-labs-ib.mjs chặn lab thiếu lựa chọn hoặc có lựa chọn dài quá 26 ký tự✅
SRC-3892026-08-19Chỉ đạo trên màn đoán của lab: 'Có quá nhiều thông tin thừa. Cần che dấu phần lớn thông tin đi, để những thông tin còn lại vô cùng ít, không quá 20 từ trên một màn hình'Màn đoán khi đó nói CÙNG MỘT Ý BA LẦN (tiêu đề, blurb, câu hỏi lớn) trước khi tới câu learner phải trả lời. Bỏ blurb_vi và inquiry.question khỏi giao diện, bỏ chữ trong hình xem trước, cắt tiền tố 'Đoán trước:' tại chỗ hiển thị, chặn câu hỏi đoán quá 15 từ, lựa chọn quá 4 từ và cả màn quá 24 từ (đếm cả nhãn nút bấm). Phần quan sát chỉ còn ĐÚNG MỘT ý trên màn, điều hướng bằng hai nút icon và dãy chấm. Hệ quả có chủ đích: câu dặn của SRC-379 không còn chỗ nào trong giao diện, vì luật 20 từ và câu ấy không cùng tồn tại được✅
SRC-3902026-08-19Chủ dự án mở lab ib-shopping-and-change sau đợt cắt chữ: 'Nhìn cái lab này, tôi nghĩ người thiết kế bị ngu đần ấy. Đọc và không hiểu gì luôn'SRC-389 cắt quá tay: xoá luôn question của hình picker, mà đó là ĐỀ BÀI, nên màn đoán còn ba con số 50/32/18 đứng trần kèm hai hộp xám rỗng. Luật rút ra: thứ được phép giấu là phần LỘ RA sau khi bấm, không phải bối cảnh trước khi bấm. Trả lại đề bài, không dựng hộp khi chuỗi rỗng, và thay ba con số rời bằng archetype mới part-whole (một thanh là cả, kéo để cắt phần đã trả, phần thừa tự hiện) dùng lại được cho mọi bài 'có T, dùng P, còn bao nhiêu'✅
SRC-3912026-08-19Chỉ đạo trên Dashboard: 'Chỉ giữ lại Mastery thôi, bỏ Learnt đi. Cho nằm ngang bar chart ra. Bar chart cần có 10 mẩu nhỏ, gần nhau nhưng không liền nhau'Bỏ kênh 'Đã học' và cả công tắc hai thẻ: đó là con số của HỆ THỐNG (soạn được bao nhiêu bài, đo được bao nhiêu), không phải câu hỏi của learner, mà lại bắt learner bấm chọn trước khi đọc. Dải mức vững đổi từ dọc-liền-gradient sang NGANG chia 10 mẩu rời, nhờ đó con số 8/10 đếm được bằng mắt và khớp cách chấm ở trường. Mẩu chưa đạt tô nhạt chứ không để trống, vì để trống đọc ra 'hỏng' còn nhạt đọc ra 'chưa tới'. Kèm dọn coverage(), coverageColor(), CoverageRing, type Channel và các test của chúng, vì không còn chỗ dùng✅
SRC-3922026-08-19Chỉ đạo: 'Bar chart trong các Package, Module và Unit vẫn cần có chứ, nhìn mãi không ra. Các Module card độ cao cần bằng nhau'Dải có dựng nhưng bị bọc trong một span co lại vừa nội dung, mà mười mẩu chia đều theo bề ngang cha nên chúng co gần về 0: cả hàng thẻ nhìn như chỉ có mỗi con số. Cho dải chiếm hết bề ngang thẻ ở cả ba tầng; ở thẻ nhỏ thì con số xuống dòng thay vì đứng cạnh, vì thẻ Module rộng 128px, trừ chỗ cho '8/10' thì mỗi mẩu chỉ còn ~4px. Thẻ Module cao bằng nhau bằng h-full + chiều cao tối thiểu + tên đẩy xuống đáy. Kèm sửa một test e2e chập chờn có sẵn (đọc hai con số bằng await count() là một cuộc đua với lúc trang dựng dở)✅
SRC-3932026-08-19Chỉ đạo: 'Tất cả 10 điểm trong các chart đều cần là hình vuông, cố định, căn top và căn giữa. Icon chữ i nho nhỏ thì đưa hết xuống góc dưới phải'Mẩu trước đây dùng flex-1 nên bề rộng đổi theo bề ngang thẻ: cùng một thang 10 mà thẻ Package thì mẩu dẹt, thẻ Unit thì mẩu dài, hai thẻ cạnh nhau đọc ra như hai thang khác nhau. Nay là ô vuông cố định theo tầng (22px thẻ Mastery, 14px Package, 10px Module và Unit), cả cụm căn giữa theo chiều ngang và căn trên theo chiều dọc. Dấu 'i' và popover của nó chuyển xuống góc dưới phải: ở góc trên nó chen vào đúng chỗ mắt bắt đầu đọc, và trên thẻ hẹp còn đè lên con số✅
SRC-3942026-08-19Chỉ đạo: 'Rà soát xem còn thiếu gì nữa, cho riêng môn Toán'Rà soát ra một lỗi đang chạy: 80/80 cạnh tiên quyết và 60/60 trọng số blueprint của môn Toán đều trỏ vào ba Package ĐÃ TẠM ẨN (DS/HH/SH), còn cây B21 mà learner thật sự thấy thì trắng cả hai. Hệ quả: mọi gap của Readiness nằm ở vùng ẩn, nên 'việc hôm nay' đề xuất bài không xuất hiện ở bất kỳ đâu trong giao diện; và tính năng hé cửa SRC-384 §5 không bao giờ kích hoạt được. Sửa ngay phần chặn: đưa danh sách Package tạm ẩn từ client sang server (shared/hiddenStrands.ts) và lọc cả gap lẫn ứng viên ôn lại trong buildCockpit. Phần dựng lại đồ thị tiên quyết và blueprint cho B21 thì báo cáo để chủ dự án quyết✅
SRC-3952026-08-19Chỉ đạo sau rà soát: 'Làm việc 1, rồi tới 2, rồi lần lượt làm hết'Việc 1 dựng 171 cạnh tiên quyết cho 125 Unit của cây B21 (trước đó trắng hoàn toàn). Không soạn tay: sinh theo đúng thứ tự giao diện đang bày, hai luật hẹp là 'unit trước là tiên quyết của unit sau trong cùng Module' và 'bắc cầu giữa hai Module liền nhau'. Cố ý KHÔNG nối xuyên Package vì năm Package B21 là năm NĂNG LỰC chạy song song, nối chúng là bịa ra thứ tự không có thật. Nhờ đó sống lại: hé cửa SDD-021 §5, mục 'đang hổng và chặn đường' của hàng chờ, và câu 'đang chặn N bài sau'. Việc 2 thêm blueprint b21-math-core chấm trên chính cây learner đang thấy, trọng số = 1 + số bài node đó đang chặn (lấy từ đồ thị việc 1). Cockpit khi learner chưa khai mục tiêu nay chọn blueprint có nhiều node CÒN HIỆN nhất, thay vì lấy bừa cái conditional đầu tiên✅
SRC-3962026-08-19Chỉ đạo liên tiếp trong một phiên: (a) "khi làm không ổn 1 unit thì đi học lại 1-2 unit trước đó, không tính theo node hay concept nữa" — rồi làm rõ đó là 1-2 unit CHẶN unit hiện tại, tức cần graph; (b) "tạo graph cho 125 Unit, rồi làm tính năng review và phê duyệt tại coral hoặc admin"; (c) "mặc định là hệ thống tự soạn tự chốt, tôi và con người sẽ vào review và chỉnh bằng tay sau"; (d) "dùng tiếng Anh cho từ prerequisite graph"; (e) "learner nhìn thấy mảng em ấy thích thì tự tới được unit đó rồi làm các Lessons trong Unit đó"; (f) "learner làm theo đề xuất nhưng làm dở chưa xong, quay lại thì hệ lại recommend cái khác — đúng ra chưa xong thì làm tiếp cho xong"Prerequisite graph cấp Unit thay hẳn đồ thị cấp node của SRC-395: migration 0055 unit_prereqs, 225 cạnh soạn tay cho 123/125 Unit (hai Unit gốc cố ý trống), mỗi cạnh một câu lý do, 72 cạnh xuyên Package — phần mà cách sinh theo thứ tự bày không bao giờ tìm ra. Xoá 171 cạnh node của SRC-395 vì rà lại thấy 53 cạnh đi ngược lớp (lớp 7 thành nền của lớp 2), hệ quả của việc phải chọn "node chốt" cho unit vốn có nhiều node biến thể theo lớp. Runtime đổi nguồn ở ba chỗ: hé cửa SDD-021 §5 (kèm hiện luôn câu VÌ SAO), next-best-action fix_prerequisite, và prerequisite protection SDD-017 §6; trọng số blueprint b21-math-core tính lại (nặng nhất 4 → 11). Coral thêm tab Prerequisite graph — không phải cổng duyệt: cạnh có hiệu lực ngay khi sinh (REQ-PLT-12), người vào chỉ giữ / sửa lý do / bỏ, và chỉ rejected mới bị runtime bỏ qua. Kèm hai lỗi đang chạy: (1) learner_experience_state trước giờ CHỈ ghi lúc làm xong, nên bỏ dở giữa chừng không để lại vết nào và hàng chờ rơi xuống bậc "bước tiếp" — nay mở bài ra là ghi started, và câu lấy việc dở lọc ngay trong HAVING thay vì lấy unit chạm gần nhất rồi loại; (2) thẻ Unit trên Toàn cảnh là chữ chết — nay bấm được, đưa thẳng tới đúng Phần chứa Unit và cuộn tới nơi, cố ý KHÔNG tự mở bài. Việc 7 của rà soát SRC-394: lab functions từ 139 byte rỗng thành nội dung đủ ba phần; kèm sửa lab_content.bytes sai ở 249 lab✅
SRC-3972026-08-19Chỉ đạo: "làm nốt đi" (việc 3 của rà soát SRC-394) và "trong Dashboard, trước khi chuyển trang tới trang Unit thì cần có dialog để user xác nhận"Việc 3 xong: ba câu "vì sao đáng học" (SRC-345) từ 26/177 node lên 177/177, tức 0 node còn trống. Soạn theo UNIT chứ không theo node, vì 41 Unit có 2-3 node là biến thể theo lớp của cùng một ý và ba câu này nói về Ý chứ không về lớp; soạn theo node thì cùng một Unit sẽ có hai bản văn tuỳ learner rơi vào node nào. Không đè lên chữ cũ: 26 node của SRC-345 giữ nguyên và được chép sang 20 node anh em cùng Unit, 132 node còn lại nạp bản mới. Kèm dialog xác nhận trước khi rời Dashboard: Dashboard là chỗ learner đang NHÌN còn Đường học là chỗ learner BẮT ĐẦU LÀM, mà trên màn hình có mấy chục thẻ Unit nằm sát nhau nên một cú bấm nhầm đang ném learner sang trang khác và mất chỗ đang đứng; bấm ra ngoài dialog là ở lại, đúng luật popover SRC-310✅
SRC-3982026-08-19Chỉ đạo: "làm nốt đi" (việc 4 của rà soát SRC-394)156 câu hỏi soạn tay cho 39 Unit kho mỏng — 0/125 Unit còn dưới 10 câu. Soạn thẳng chứ không dùng máy sinh: bài học SRC-046 là llama-3.3 sinh MCQ tiếng Việt sai ~50%, phải rà 1.317 câu và viết lại 542 câu, nên với 156 câu thì soạn tay rẻ hơn sinh rồi rà. Mỗi câu mang một misconception mô tả HIỂU LẦM dẫn tới đáp án sai chứ không mô tả đáp án sai, vì đó là thứ Learner Model đọc và là thứ màn feedback dùng để nói ra chỗ nghĩ lệch. Câu mới rải vào node ít câu nhất của Unit thay vì dồn một chỗ, vì check_available xét theo node (≥6 câu) nên dồn hết vào một node sẽ để các node anh em mãi không mở được bài đo. Vị trí đáp án đúng xoay theo chỉ số câu để không phải lúc nào cũng là lựa chọn đầu✅
SRC-3992026-08-19Chỉ đạo: "làm nốt đi" (việc 5, việc cuối của rà soát SRC-394)39 lab cho 39 Unit chưa có lab nào — 0/125 Unit còn trắng. Phần lớn 39 Unit này dạy THÓI QUEN SUY NGHĨ (kiên trì khi bí, tự kiểm tra, nói ra cách mình làm) chứ không dạy phép tính, nên widget kéo thả không có gì để kéo; dùng khuôn picker đã chốt ở SRC-388/390: đoán trước bằng cách bấm, rồi bấm từng bước xem chuyện gì lộ ra, mỗi màn dưới 20 từ (SRC-389). Khuôn nội dung khớp ib-work-backwards đang chạy để không phải sửa LabPlayer và để mọi lab của môn đọc lên như một bộ. Lab gắn vào node vào cửa của Unit chứ không phải bài chốt, vì lab là chỗ learner chạm đầu tiên. Trung bình 1.180 byte mỗi lab, nhỏ nhất 1.055 — không có lab rỗng như functions trước đây. Rà soát SRC-394 đóng lại: cả 7 việc đã xong✅