Skip to content

Sổ nguồn SRC-0475 tới SRC-0499 ​

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-4752026-08-21Feedback (ảnh Dashboard): bấm "Bắt đầu" phải mở popover xác nhận rồi mới đi tiếp; trước khi bấm learner cần thấy ý chính "Nemo12 tự tính ra bài cần học, khỏi lo nghĩ nhiều", còn tên bài kiểu "Bảng nhân và chia" chuyển vào popover; đổi "Vì sao lại là việc này" thành "Cơ sở để hệ thống tính toán"Mặt card Việc hôm nay chỉ còn lời hứa của hệ (tên bài + câu lý do rời vào popover) — trước khi bấm, learner cần biết mình đang tin vào cái gì, chứ không phải đọc tên một Unit chưa có bối cảnh; popover mang tên bài + "vì sao đáng làm" + nút Vào học, bấm ra ngoài là ở lại (luật SRC-310). Nhãn cụm giải thích đổi tên vì nó bày VẾT TÍNH TOÁN của hệ, không phải một lời biện minh✅
SRC-4762026-08-21Chỉ đạo: "khi learner bị hổng kỹ năng A thì hệ giúp fix thế nào? Cần xem bao nhiêu lab, trải qua bao nhiêu lesson, rồi làm assessment lại sau bao lâu?" — muốn một trang RIÊNG để tự kiểm, liệt kê mọi chỗ hổng, bấm vào thì ra link vài Learning Experience + tối thiểu 1 lab + 1 Assessment; link ở cột trái và chỉ hiện với dac2205@gmail.comTrang /{school}/cho-hong/{môn} + GET /v1/learners/{id}/gaps. Chỗ hổng chia BA loại vì cách chữa khác nhau: weak (đã đo, dưới 5/10), shaky (mới một lượt, bằng chứng mỏng), unseen (chưa đo mà đang chặn bài khác — rủi ro lớn nhất vì không ai biết); xếp theo mức hại (chặn nhiều bài trước, rồi yếu nhất). Mỗi chỗ hổng mở ra đơn thuốc: các Lesson có kho câu (bấm là vào luyện), lab của Unit (link riêng), bài đo lại (bấm là vào chế độ check), số lượt học, và khoảng cách đo lại tính từ engine retention (S₀ = f(mastery đích), ngày R rơi về ngưỡng ôn — không bịa số). Endpoint KHÔNG dựng model mới, chỉ đọc dữ liệu đang chạy rồi viết thành lời. Quyền canh ở SERVER bằng danh sách email QC (SRC-454); ẩn link ở client chỉ là tiện, không phải hàng rào✅
SRC-4772026-08-21Feedback (ảnh lab Vật lí): cụm "Thấy hay đoán" cần tách ra để learner hiểu đó là tên/tag của lab, không liên quan tới câu hỏi ngay bên dướiTên lab thành CHIP có viền tròn, kèm nhãn "LAB" và icon — tên đứng trần ngay trên câu hỏi thì mắt đọc nó như một phần của đề ("Thấy hay đoán" · "Câu nào là quan sát?" đọc thành một cụm); chip nói ngay đây là cái tên chứ không phải câu phải trả lời✅
SRC-4782026-08-21Báo lỗi: "vừa làm xong 1 lesson trong unit 'Mô tả đúng cái mình thấy' nhưng ra Toàn cảnh không thấy dữ liệu được ghi nhận"Truy trên production: Experience ĐÃ ghi (lab:ph-describe-what-you-see completed 12:07), nhưng dải mức vững của Unit vẫn rỗng vì lab chưa bao giờ phát evidence — câu kiểm cuối lab được chấm ở client rồi vứt đi, trong khi SDD-010 §5 (REQ-LAB-04) khai inquiry_answer(correct, attempt) từ đầu. Thi hành nốt: POST /v1/labs/{id}/evidence ghi learner_evidence + cập nhật mastery với reliability 0.45 (thấp hơn luyện tập: câu kiểm lab chỉ 1-3 câu, phương án bày sẵn, lời giải hiện ngay — bằng chứng thật nhưng mỏng); một lượt lab = MỘT bằng chứng, event_id mang ngày nên làm lại hôm sau vẫn tính mà bấm lại trong ngày thì không nhân bản; lab chưa gắn node thì TỪ CHỐI ghi thay vì đoán bừa một node✅
SRC-4792026-08-21Việc lộ ra ngay sau SRC-478: 70 lab live không trỏ vào node nào nên không ghi được bằng chứng (english 32 · vietnamese 33 · chemistry 3 · biology 1 · physics 1)Chúng vào D1 từ đợt migrate chuyenchon và các đợt "Lab khác" (SRC-455/458, lab phụ để unit=NULL cho khỏi cướp chỗ lab chính). Trước SRC-478 hệ quả chỉ là "không nằm trong đường đi của Unit"; nay nặng hơn: learner nghịch xong mà hồ sơ im lặng. Soạn orphan-lab-nodes.json (mỗi dòng kèm câu vì sao gắn vào đó) + link-orphan-labs.mjs chỉ chạm node_id, KHÔNG đụng unit (luật một lab live mỗi Unit giữ nguyên) và kiểm từng dòng node có thật + đúng môn trước khi ghi. Kết quả: 61 lab gắn được, 9 để trống có chủ đích — 7 lab không có Unit nào trong cây Pearl phủ (kỹ năng nghe, yếu tố kịch, xung đột, bối cảnh truyện, nhạc tính thơ, điện phân) và 2 lab chỉ khớp xấp xỉ; thà thiếu bằng chứng còn hơn gắn sai chỗ làm hồ sơ nói dối về kỹ năng learner chưa chạm✅
SRC-4802026-08-21Chủ dự án (nêu cùng đợt SRC-473, tôi làm sót): "click vào 9 đống lửa hay 10 tia sét hay 6 unit đã vững thì đều cần hiển thị lên Popover"Ba con số ở panel phải là thứ hệ dùng để thúc learner quay lại, nhưng trước đó chúng chỉ có title — tức trên máy cảm ứng learner không có cách nào biết chúng nghĩa gì, mà vẫn bị chúng thúc. Nay mỗi con số là một nút mở popover nói đúng hai điều: đang đếm cái gì, và làm gì thì nó nhúc nhích (chuỗi: nghỉ một ngày là về 0 nên học ngắn cũng được; điểm: đo công sức chứ không đo độ vững nên chỉ đi lên; đã vững: đúng nhiều lượt qua nhiều ngày, ôn bài cũ cũng làm đổi)✅
SRC-4812026-08-21Chủ dự án: trang mới "mỗi ngày tôi đã học thêm được những gì", liệt kê số lượng unit và chính xác từng unit, có mục trong menuCard "Xong hôm nay" (SRC-470) chỉ nói được HÔM NAY và chỉ đếm Experience. Dựng trang Nhật ký (/nhat-ky, mở cho mọi learner) + GET /v1/learners/{id}/daily: mỗi ngày một thẻ, tách rõ unit MỚI khỏi unit ôn lại, kèm dải cột cho thấy nhịp học đứt hay liền. Đếm theo UNIT chứ không theo lượt làm bài, và "mới" nghĩa là lần đầu chạm unit ấy nên cộng các ngày lại đúng bằng số unit đã học, không tự khen bằng cách đếm trùng✅
SRC-4822026-08-21Chủ dự án: trang mô phỏng "học 6/7 ngày thì sau 3 tháng phủ được module nào, tỷ lệ hổng dự kiến, mỗi unit cần học lại bao nhiêu lần", tham số chỉnh ngay trên trang, theo từng môn; và hỏi "còn tuỳ theo lớp nữa đúng ko?"ĐÚNG, nên lớp là một thanh trượt: cây trải lớp 1-12, không chốt phạm vi thì con số phủ vô nghĩa. Dựng trang Mô phỏng (/mo-phong) + GET /v1/learners/{id}/forecast. Server chỉ trả BẢNG KIỂM KÊ, phép tính chạy trong trang theo từng nấc thanh trượt, để công thức nằm cạnh kết quả mà soi. Mô hình chạy theo TỪNG NGÀY nên trả lời được luôn "mỗi ngày làm unit nào"; unit đã vững vẫn ăn giờ ôn theo chu kỳ lấy từ engine retention thật, bỏ lỡ hai kỳ thì rơi lại hàng đợi — nhờ vậy "tỷ lệ hổng" sinh ra từ một đánh đổi có thật (học nhanh thì ôn không kịp) chứ không phải một phép chia. Cùng cổng QC với Phòng khám: một con số dự báo bày cho phụ huynh rất dễ bị đọc thành lời hứa✅
SRC-4832026-08-21Chủ dự án (ảnh Pearl): bấm Package phải ra Ý xuyên suốt cả Package, bấm Module phải ra "học xong Module này thì tôi có thể…" — "việc này tôi nói rất nhiều rồi, nhưng ko hiểu sao vẫn chưa làm xong"Tìm ra gốc rễ thật, và nó không nằm ở dữ liệu hay ở popover: trong /overview, khối gom node chép tay từng trường nên i_will, module_i_will, unit_evidence, unit_misconception rụng ngay tại đó, khiến pick(...) phía dưới luôn trả null. Truy vấn có SELECT đủ, D1 có đủ chữ (english 19/19 module), popover có chỗ hiển thị — mà màn hình vẫn trống, và không có gì báo lỗi vì null là giá trị hợp lệ. Đó là lý do sửa mãi không xong qua nhiều phiên. Kèm theo: thêm cột strands.big_idea (migration 0066) + packageBigIdea() trong sync để lấy khối "Ý xuyên suốt package" của Pearl (đủ 55/55 package đã có sẵn chữ), và nhãn i-will nay nói rõ CẤP (Package/Module/Unit) thay vì một câu chung cho cả ba✅
SRC-4842026-08-21Hệ quả trực tiếp của SRC-483: nối dây xong thì lộ ra 40/55 Package chưa hề có câu "Ý xuyên suốt" trong Pearl (chỉ Toán · Ngữ văn · Tiếng Anh có)Popover Package nay có ô Big Idea, nhưng tám môn còn lại sẽ hiện ô rỗng, mà một ô rỗng là lời chê chứ không phải chỗ trống. Soạn đủ 40 câu cho Lý · Hoá · Sinh · Tin · GenAI · AP · IELTS · SAT, mỗi câu chắt từ chính đoạn văn xuôi sẵn có trong trang (chỗ package ấy hay hỏng), không bịa ý mới: Big Idea nói HẠT NHÂN SƯ PHẠM, khác vai với i-will vốn là lời hứa với learner. Nạp vào D1 đủ 55/55✅
SRC-4852026-08-21Chủ dự án: "tôi vẫn không hiểu khi nào thì cần học vượt, khi nào thì không. Có thể bỏ hết cơ chế học vượt đi không?" rồi chốt: đổi tên và chỗ đặt theo đề xuấtGiữ cơ chế, vì nó có việc thật: learner đã chắc một Unit mà vẫn phải đi hết sáu ô là bị phạt vì giỏi. Nhưng cả TÊN lẫn CHỖ ĐẶT đang nói sai về nó, và đó mới là chỗ gây khó hiểu. Tên cũ "Học vượt" mô tả kết quả chứ không nói điều kiện dùng; tên mới "Con biết rồi?" là câu hỏi learner tự trả lời được ngay. Chỗ đặt cũ là ô ĐẦU TIÊN của chuỗi dọc, tức đúng vị trí của "bước 1", nên nó đọc thành việc phải làm trước; nay nó ra hẳn khỏi chuỗi, thành một lối tắt riêng phía trên có khung nét đứt và một câu nói rõ khi nào dùng, còn đường đi bên dưới bắt đầu bằng một ô HỌC thật. Cơ chế không đổi một dòng: vẫn chỉ mở ở Unit chưa học, vẫn một bong bóng, vẫn phải đúng tất cả, vẫn chờ 3 tiếng nếu trượt✅
SRC-4862026-08-21Lỗi lộ ra ngay khi thêm công tắc 7/30/60 ngày cho Nhật ký (SRC-221)Nhãn "unit MỚI" đang so trong PHẠM VI CỬA SỔ đang xem, nên một unit chạm từ tháng trước, nay ôn lại, sẽ hiện thành "mới" mỗi lần learner thu cửa sổ về 7 ngày. Nhật ký mà khen sai thì hỏng đúng cái nó sinh ra để làm. Sửa: lần đầu chạm tính trên TOÀN BỘ lịch sử (một truy vấn MIN(occurred_at) theo unit), không phụ thuộc đoạn đang nhìn✅
SRC-4872026-08-21Ảnh chủ dự án: câu "Don't judge a book by its cover." hiện thành lead "Don" rồi một đoạn trích in nghiêng bắt đầu bằng "t judge a book…"Luật tách đề đọc hiểu (SRC-156) gộp mọi ký tự nháy vào MỘT lớp ký tự, nên dấu lược giữa từ thành dấu mở ngoặc: mọi câu tiếng Anh có 's, n't, 're đều dính. Nay dấu mở phải đứng đầu chuỗi hoặc sau một ký tự không phải chữ/số và ngay sau nó phải là chữ; dấu đóng ngược lại; mở và đóng phải CÙNG MỘT CẶP. Kèm test cho chính câu tục ngữ đó và cho đoạn trích thật có dấu lược bên trong✅
SRC-4882026-08-21Chủ dự án (ảnh màn kết quả): bỏ nhãn "làm lại 1 lượt"; nút chính là "Tiếp tục" màu đỏ; thay button "Xem lại 1 chỗ sai" bằng link nhỏ "Rà soát lại bài làm"Nhãn "làm lại N lượt" là chi tiết CƠ CHẾ của lúc đang làm (câu sai bị xếp lại cuối hàng), đứng ngay dưới điểm số thì đọc thành lời chê kèm điểm, đúng lúc màn hình đang để khen. Nút chính nay LUÔN là "Tiếp tục", kể cả khi còn câu sai: bản trước đổi việc chính theo kết quả, learner làm tốt thì được đi tiếp còn làm chưa tốt thì bị chặn bằng một nút to đếm lỗi. Rà soát vẫn còn nhưng là lựa chọn, nên xuống hàng link nhỏ cùng "Làm lại"✅
SRC-4892026-08-21Chủ dự án (ảnh Toàn cảnh): "mới làm đúng có 1 lần thôi, sao màu xanh đã đậm đặc? Đúng ra chỉ là viền xanh thôi chứ"Đúng, và luật ô rỗng của SRC-459 có hai lỗ hổng, cả hai đều làm hệ khen sớm: (1) sure chỉ được truyền xuống thẻ Unit, nên thẻ Module, thẻ Package và thanh tổng LUÔN vẽ đặc, tức đúng chỗ mắt nhìn đầu tiên thì màu vẫn nói "xong rồi"; (2) một lượt đo vẫn có thể cho confidence trên ngưỡng, mà một lượt thì chưa ai biết learner có nhớ qua hôm sau không. Nay mọi tầng đều nhận sure và attempts, và chưa đủ hai lượt là rỗng bất kể confidence. Ô đặc từ nay nghĩa là đã chứng minh✅
SRC-4902026-08-21Chủ dự án: "chuyển toàn bộ những gì đã trao đổi vào docs.nemo12.com. Việc này gọi là tạo các canonical à?"Đúng tên gọi. Sổ intake là nơi ghi NGUYÊN VĂN yêu cầu và quyết định (đã có, và cũng nằm trên docs.nemo12.com); canonical hoá là bước đưa chúng thành yêu cầu trong PRD và thiết kế trong SDD, có trace hai chiều để sau này đọc PRD là đủ, không phải lần lại lịch sử chat. Đợt này canonical hoá SRC-476 tới SRC-489: thêm REQ-VIS-11..15 và REQ-LRN-41..44 vào PRD-001, viết SDD-008 §8-§12 (lời hứa từng tầng thẻ, luật ô đặc, Nhật ký, Mô phỏng, Phòng khám), SDD-010 §5.1 (bằng chứng từ lab, lab mồ côi) và SDD-021 §7.1-§7.2 (lối tắt đổi tên, màn kết quả, tách đề)✅
SRC-4912026-08-21Chủ dự án: "mô tả và gợi ý thêm về các việc còn sót, quyết luôn giúp tôi rồi làm luôn càng tốt"Hai việc treo từ 17/8 được chốt và làm ngay. SRC-217 "Nhắc lại": dấu hỏi nhỏ cạnh dấu "i" trong màn làm bài, mở ra nhắc khái niệm của cả bài kèm ví dụ, có câu nói thẳng "không phải đáp án câu này" để learner không bấm vào rồi thất vọng. Chốt KHÔNG dựng cột hint_vi rỗng: dùng chữ Pearl đã có (812/822 node), thiếu chữ thì ẩn nút. SRC-218 xử lý tiếp ở dòng dưới✅
SRC-4922026-08-21Việc lộ ra khi khép SRC-218: attach-figures.mjs chỉ chạy được cho nhánh Hình học cũBảng BY_NODE của nó suy dạng hình TỪ ID NODE, cách này chỉ đúng với nhánh cũ nơi id đã tự nói ra hình (pythagoras, inscribed-angle). Cây B21 đặt tên theo NĂNG LỰC và mỗi unit có hai node, nên suy từ id là bịa. Thêm cờ --map nạp bản đồ soạn tay (hình của bản đồ KHÔNG bị refine theo từ khoá đề, vì tham số đã được chọn cho đúng unit) và --strand 'B%' để quét cả cây✅
SRC-4932026-08-21Chủ dự án: "bổ sung Unit trong Pearl cho đủ số lượng tối thiểu đi (tối thiểu mỗi Module có tối thiểu 5 unit đúng ko?)" và "lưu các số lượng min max này ra đâu đó trong docs để tôi xem lại"Số nhớ hơi lệch: luật là 3 tới 6 ở cả hai tầng, có cả cận trên. Và chỗ thiếu KHÔNG phải unit: mọi Module hiện có đều đủ 3-6 unit; thiếu là Module, vì GenAI và AP mỗi Package chỉ có 1 (đang xin ngoại lệ S1). Soạn thêm 20 Module (2 cho mỗi Package của hai môn) kèm ~74 Unit mới, mỗi unit đủ sáu phần bắt buộc. Kết quả: ap 5/15/58, genai 5/15/55, và gỡ hẳn hai khối xin ngoại lệ nên trình kiểm nay báo 0 error 0 warn 0 info. Ngưỡng min/max gom vào bảng tra nhanh đầu curriculum-pearl-standard.md; cố ý KHÔNG chép số hiện trạng vào docs vì chép là để nó lệch, trình kiểm in số thật✅
SRC-4942026-08-22Chủ dự án: "một mặt dùng cơ chế vẽ SVG như hiện nay rồi áp sang các môn khác, mặt khác bổ sung thêm các cơ chế vẽ khác, dùng threejs hoặc engine khác mà bạn đề xuất"Tách làm ba tầng, ghi ở SDD-010 §11.1. Tầng 1 (làm ngay): phần thiếu ở Lý, Hoá, Sinh phần lớn không cần công nghệ mới, chỉ thiếu DẠNG hình. Thêm bar-chart, venn, force-body vào chính engine SVG, có test canh ĐỌC ĐÚNG SỐ chứ không chỉ render được (cột 9 phải cao hơn cột 3, lực mạnh hơn thì mũi tên dài hơn). Tầng 2: sơ đồ mạch điện, tia sáng, công thức cấu tạo phẳng, box plot, làm khi dữ liệu cho thấy có câu cần. Tầng 3 · three.js: nhận, nhưng vào LAB chứ không vào hình của câu hỏi, vì hình câu hỏi là thứ liếc rồi trả lời (cảnh 3D xoay được sẽ cướp chú ý khỏi chính câu hỏi), vì 150KB nén rơi vào cả learner môn Ngữ văn không cần tới, và vì đa số ca "cần 3D" đã đọc được bằng phép chiếu SVG. Hai chỗ 3D thật sự đổi cách hiểu: hình học phân tử VSEPR và mặt cắt khối✅
SRC-4952026-08-21Chỉ đạo: hệ Quality Standards trong docs.nemo12.com — inventory mọi content type (subject/package/module/unit/LX/AX...) kèm chỉ tiêu số lượng + tiêu chuẩn chất lượng, ngắn gọn luôn có con số; là chuẩn cuối để audit, pass 100% mới coi là xong; gom tài liệu chất lượng rải rác về docs; docs.nemo12.com kỹ thuật giống hệt pearl.nemo12.comquality/index.md, quality/content-standards.md, QG-012, REQ-DOC-09/10✅
SRC-4962026-08-21Tầng 1 của SRC-494 áp sang ba môn khoa học (dòng này từng bị MẤT: tôi sửa sổ bằng replace không assert trong lúc phiên khác vừa đẩy con trỏ, nên lệnh ghi thành no-op và không ai biết)Bản đồ node → hình cho Lý (49 node), Hoá (80), Sinh (51), mỗi dòng kèm câu vì sao; nạp 1.684 hình nên tổng câu có hình đi từ 1.228 lên 2.912. Bỏ qua 45 node đúng luật thà thiếu còn hơn gắn sai: an toàn phòng thí nghiệm, đạo đức sinh học, kỹ năng viết. Chính việc soạn lộ ra một lỗ hổng engine: coordinate chỉ vẽ điểm rời nên đồ thị khoa học mất hết ý nghĩa (đoạn NẰM NGANG của đường đun nóng chính là chỗ chất đổi trạng thái), nay thêm line. Bài học vận hành: mọi lệnh sửa sổ chung phải assert là đã thay được, và tốt hơn là dùng scripts/src-new.mjs như luật CLAUDE.md đã ghi✅
SRC-4972026-08-21Chủ dự án 2026-08-22: "docs.nemo12.com là chỗ lưu thông tin cốt lõi, source of truth, để tôi đọc và AI Agents đọc, và nó lưu cả năng lực lẫn kiến thức, chứ không phải Pearl chỉ lưu năng lực. Sau đó D1 lấy từ docs, Pearl cũng lấy từ docs. Nếu D1 nhiều hơn docs thì làm sao docs đầy đủ đã"Đảo chiều phụ thuộc. Cây năng lực chuyển từ apps/pearl/content/curriculum về docs/curriculum/ (288 trang), Pearl nay là bản DẪN XUẤT sinh bằng scripts/gen-pearl-from-docs.mjs và có cổng --check chặn trôi. docs/ từ nay có hai loại file chịu hai bộ luật: tài liệu quản trị (frontmatter, đóng vết REQ) và dữ liệu chương trình dưới docs/curriculum/ (kiểm bằng check-curriculum-pearl). Phần D1 nhiều hơn docs (42 strand kiến thức, 1.790 node, 1.109 cạnh tiên quyết) là bước kế tiếp🟡
SRC-4982026-08-21Bước hai của SRC-497: phần D1 nhiều hơn docsXuất cây KIẾN THỨC từ D1 ra docs/knowledge/<môn>.md bằng scripts/export-knowledge-to-docs.mjs: 1.790 node cả 11 môn, gồm 42 strand theo chủ đề vốn chỉ sống trong D1 và không ai đọc được nếu không viết SQL. Nói rõ mức độ hoàn thành trong SDD-004 §1.1: chiều D1 → docs đã chạy (có cờ --check báo bản trong docs đã cũ tới đâu), chiều docs → D1 thì CHƯA, nên hôm nay docs đã đủ nhưng chưa phải nơi ghi. Hai mảnh còn thiếu đã ghi ra để không ai tưởng docs trọn vẹn: 1.109 cạnh tiên quyết, và kho 15.656 câu hỏi mà khuyến nghị là docs giữ hợp đồng và chỉ mục chứ không giữ từng câu✅
SRC-4992026-08-21Feedback UI 2026-08-22 của chủ dự án (2 ảnh learn.nemo12.com): (a) chế độ EN còn sót 3 mục cột trái tiếng Việt — Nhật ký/Chỗ hổng/Mô phỏng; (b) 🔥 streak, ⚡ XP và Solid units phải là các MINI CARD có viền riêng để thấy ngay chúng bấm được; (c) Phòng khám chỗ hổng: ẩn ~80% chữ trên mặt trang — mặt dòng chỉ còn icon trạng thái + tên Unit, mọi giải thích vào accordion/popover; (d) bản đồ 'Em học chắc tới đâu' có 3 mức xem chọn bằng icon: standard=Package (mặc định), expand=+Module, detail=+UnitPRD-001 (luật tối giản SRC-048 áp tiếp); code: lang.tsx, App.tsx XpBar, GapClinic.tsx, ProgressViews.tsx (nhánh session/ui-minimal)✅