Skip to content

Sổ nguồn SRC-0100 tới SRC-0124 ​

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-1002026-08-14Feedback màn khởi động + lý do chọn: bỏ badge "10 câu", bỏ dòng hướng dẫn kéo thanh trượt, bỏ link "Bài khác", bỏ dòng "làm hết 10 câu mới xem đáp án"; 4 mức tự đánh giá thành 4 dòng, bỏ icon; canvas khám phá hạ còn ~70% chiều cao; các lý do "Vì sao con chọn…" mỗi cái một dòng, xáo thứ tự, mỗi dòng có dấu ? mở popover giải nghĩa + ví dụ vì học sinh không hiểu "suy luận từ điều đã hiểu" nghĩa là gìLearning.tsx (explore phase gọn, lý do dạng dòng + popover), explore/engine.tsx (FIG chặn chiều cao SVG), justifications.ts (hint + example cho cả 20 ô = 5 profile x 4 mã, shuffleJustifications seed theo id câu hỏi để thứ tự cố định trong một câu)✅
SRC-1012026-08-14Chỉ đạo Student Portrait (learn): mỗi card một trang riêng có URL riêng, 3 portrait cùng một dòng, card chỉ còn tên (2-3 chữ), bỏ link "Về trang chính"; tách Lộ trình ra trang riêng, full-width, thêm khung nhìn quý / năm / 5 năm, bỏ chữ trùng; trang chi tiết: icon like/dislike "thô thiển" -> bỏ emoji, và tách cụm Thảo luận ra khỏi cụm trênApp.tsx route /student-portrait/{id} + /lo-trinh; PortraitView.tsx (list 3 cột, card chỉ tên, nút phản hồi dạng pill có chấm màu trạng thái, thảo luận thành card riêng); RoadmapPage.tsx mới; Roadmap.tsx (full-width, 3 khung thời gian + nút lùi/tiến theo khung, cắt thanh track theo mép khung)✅
SRC-1022026-08-14Chỉ đạo Phòng Lab học theo Duolingo: đầu mỗi Unit là một dãy Experience, mỗi ô chỉ một hình đại diện, không mô tả dài; 3 Assessment Experience ở đầu/giữa/cuối, cái đầu tên là "Học vượt" — 1 trái tim, sai một câu là trượt và phải làm lại từ đầu, coi như không được vượt unit; ngoài ra 6 Learning Experience, thiếu thì tạo nốt; 3 màu trạng thái: chưa làm - đã xong - cần làm ngay. Kèm luật chống loạn UI: mỗi lúc tối đa 1 Learning Package, trong đó 1 module, trong đó 1 unit được mởREQ-LRN-16; SDD-010 §9; migration 0028_learner_experience_state.sql; /labs trả thêm experiences, practice/start nhận kind=skip + node_ids (đo cả unit, 10 câu) + round (vòng 2 trở đi đảo thứ tự câu), POST /experience/complete; Learning.tsx: unitPath() (9 ô: Học vượt -> 3 ô học -> Đo giữa -> 3 ô học -> Đo cuối), UnitPath/ExpTile 3 màu, Practice có chế độ skip 1 bong bóng + màn "Lần này chưa vượt được", accordion 1-mở-1✅
SRC-1032026-08-14Chỉ đạo: trong mọi Learning Experience và Assessment Experience, câu trả lời sai đều bị bắt trả lời lại tới khi đúng; hết "lượt được sai" thì phải làm lại cả Experience đóREQ-LRN-17; SDD-010 §9; Learning.tsx: chế độ sửa câu (retryFb giữ feedback lần đầu, chọn lại chấm tại chỗ, mỗi lần sai mất một bong bóng), banner "Chọn lại nhé", màn hết bong bóng có nút "Làm lại từ đầu"; các lần sửa không gửi /answer nên evidence vẫn là lần trả lời đầu tiên✅
SRC-1042026-08-14Chỉ đạo: Retention Model phải được update và tính toán định kỳ — không chỉ chạy khi có evidenceCron Trigger hằng ngày 21:00 UTC → WF-17 Retention Refresh (SDD-017 §15); Retention Engine sinh snapshot version như các model khác (REQ-INT-30); refreshRetentionProjections() chỉ ghi trường phái sinh, cấm đụng anchor — test bất biến retention/periodic.test.ts✅
SRC-1052026-08-14Chỉ đạo: docs.nemo12.com cần khu mô tả rất kỹ từng Model (Learner, Parent, Goal, Learner Context…), từng Engine (logic + thuật toán, đầu vào, đầu ra), từng Workflow (chi tiết step), Queue, Cronjob, Webhook — kèm "còn cần mô tả gì nữa, hãy đề xuất rồi bổ sung"; nhấn mạnh thêm Retention Model phải được mô tả kỹ cả cơ chế cập nhật lẫn cách dùngreference/ — 16 trang; REQ-DOC-04; scripts/gen-reference.mjs sinh data-dictionary/api/events từ source; đề xuất bổ sung được duyệt: state machines, permissions, error catalog, AI registry, glossary✅
SRC-1062026-08-14Chỉ đạo Student Portrait: mỗi mục lớn cần 2 cột — một cột là phiên bản của riêng con, con chủ động viết, cột kia là phiên bản bố/mẹ viết; tên các mục lớn dùng chung. Đổi "đồng ý / băn khoăn / chưa đồng ý" thành icon và đặt bên dưới từng mụcREQ-POR-09; SDD-015 §2b; migration 0029_portrait_learner_sections.sql; PUT /v1/portraits/{id}/learner-sections (chỉ role learner được ghi), bundle trả thêm learner_sections; PortraitView.tsx: mỗi mục 2 cột (sand "Bố mẹ viết" · seafoam "Con viết" — textarea mỗi dòng một ý, tự lưu khi rời ô), ô "Thêm mục con muốn nói" cho mục bố mẹ bỏ trống, ReactRow thành 3 icon SVG đặt dưới mục✅
SRC-1072026-08-14Chỉ đạo: learner xem được Learning Plan mới nhất (theo Learning Plan Model) + xem lại các phiên bản trước, mỗi bản kèm "đã điều chỉnh gì so với bản trước, vì sao, cái gì làm plan đổi"; kèm định nghĩa đầy đủ Learning Plan Model (input: Learner/Retention/Goal/Context/Constraints/Readiness; nội dung: priorities, phases, time allocation, sequence, maintenance, review, milestones, replanning triggers). Bổ sung trong phiên: cả learner lẫn bố mẹ đều khai thêm được thông tin để Planning Engine tính lạiREQ-INT-20 (⏳→✔), REQ-LRN-18, REQ-PAR-15; SDD-007 §6b; models/planning.ts (Planning Engine plan-v1 + diff "vì sao đổi", 8 test), step cuối của WF-04; migration 0030_context_events.sql (Context Event Registry — bật §5b); GET/POST /v1/learners/{id}/learning-plan[/versions/{v}][/replan], GET/POST .../context-events; trang /ke-hoach (learn) và #/child/{id}/plan (marlins)✅
SRC-1082026-08-15Chỉ đạo: tạo tiêu chuẩn audit toàn bộ hệ thống — 10 bộ tiêu chuẩn phủ nhiều khía cạnh, mỗi bộ 5 tiêu chí, mỗi tiêu chí 5 indicator, mỗi indicator chỉ có pass hoặc không passREQ-DOC-05; audit-standard/index.md — AS-01..AS-10 × 5 tiêu chí × 5 chỉ báo = 250 chỉ báo nhị phân; luật chấm L1..L6 (cấm N/A, không bằng chứng = không pass, 🔴 chặn release), thang trưởng thành 5 mức, ánh xạ AS ↔ QG, quy trình audit + mẫu báo cáo✅
SRC-1092026-08-14Chỉ đạo: màn Blueprint mở ra là label, bấm Edit rồi click từng element mới sửa inline; xem được danh sách Experience đã sinh từ blueprint, click ra chi tiết, có nút generate; mỗi blueprint sinh 3 experience để soát chất lượng blueprint lẫn chất lượng LX/AXEditor 3 bước (label → editMode → click field); migration 0019 learning_experiences (provenance QG-010); GET /v1/coral/blueprints/{id}/experiences, GET /v1/coral/experiences/{id}, POST /v1/coral/blueprints/{id}/generate sinh 3 bản qua AI Gateway + ghi generation_runs; chi tiết hiện self-check "bám spec ở đâu / blueprint còn mơ hồ ở đâu"✅
SRC-1102026-08-14Chỉ đạo: learner chọn xong đáp án thì bấm nút mới sang câu tiếp, cứ thế hết bài; gửi xong không được xem kết quả hay đáp án ngay, làm xong xuôi mới được xem lạiLearning.tsx: nộp câu là sang thẳng câu kế (không hiện đúng/sai, lựa chọn chỉ đánh dấu "con chọn"); kết quả từng câu giữ trong state tới khi hết bài; màn cuối có "Xem lại bài làm" hiện từng câu kèm đáp án đúng, lựa chọn của con, misconception và mức vững✅
SRC-1112026-08-15Chỉ đạo: sửa toàn bộ hệ để đạt ≥90% (225/250) chỉ báo Audit Standard trước khi mở thử cho 10 phụ huynh thật; mỗi chỉ báo KHÔNG PASS phải có hành động đóng được, không giấu độ chín thấp bằng miễn trừREQ-DOC-06; PRD-001 §5 REQ-DOC, audit #001 §4, quality-gates QG-001/002🔵
SRC-1122026-08-15Chỉ đạo: chuyển lab legacy (mỗi lab ứng một môn/lớp/unit) sang Phòng Lab thành một dạng Learning Experience riêng, tương tác cao; hàng nghìn lab nên phải tính cách lưu trữ + tải động từng phần để client không quá tải. Ưu tiên Toán trước, rồi audit "unit nào còn thiếu lab". Bổ sung trong phiên: kiểm chất lượng thấy ổn thì chuyển nốt tất cả; Coral cần chỗ quản lý lab (dashboard, unit nào thiếu)SDD-010 §10; migration 0037_labs.sql (labs + lab_content tách metadata/nội dung); scripts/extract-labs.mjs (esbuild + stub ESM, đọc ITEMS/INQUIRY/CHECKS), check-labs.mjs (chặn lỗi trước khi nạp), seed-labs.mjs, audit-labs.mjs → lab-coverage; API GET /v1/labs/{id} + labs metadata trong /labs, GET /v1/coral/labs; LabPlayer.tsx (picker + predict/observe/check, tải nội dung khi mở) và ô 🔬 Lab trên đường đi Unit; Coral thêm tab Lab. Đã nạp 225 lab / 451 câu kiểm tra cho 6 môn✅
SRC-1132026-08-15Chỉ đạo: gộp Student Portrait + Learning Plan + Lộ trình dài hạn thành một mảng mới tên "Hải đăng" (tiếng Anh: Lighthouse); vào trong đó học sinh và phụ huynh được giới thiệu để trải nghiệm từng phầnREQ-LRN-19; SDD-015 §2c; Lighthouse.tsx ở cả learn (/hai-dang) và marlins (#/child/{id}/hai-dang) — hero + 3 card giới thiệu "là gì · vào đó làm gì"; trang gốc learn gộp 2 card thành 1 card Hải đăng; ba trang con giữ URL riêng, breadcrumb đổi thành "Hải đăng · …", nút quay lại trỏ về hub✅
SRC-1142026-08-15Chỉ đạo: bài hình học ưu tiên có nhiều hình ảnh, hình vẽ bằng thuật toán để tương tác được, không được tạo file ảnh bitmap (JPEG/PNG)REQ-LRN-20; SDD-010 §11; migration 0038_item_figures.sql; figures/engine.tsx (10 archetype có thanh kéo) + 27 test kiểm tính đúng của hình; scripts/attach-figures.mjs (node → dạng hình, đề bài → variant/số đo) đã gắn 280/280 câu hình học Toán; /practice/start trả kèm figure✅
SRC-1152026-08-15Chỉ đạo (sửa SRC-103): đừng bắt learner học lại ngay; câu sai chèn xuống cuối danh sách, tổng số câu tăng dần (10 → 11 → 12)REQ-LRN-17 viết lại; SDD-010 §9; Learning.tsx: hàng đợi queue nối thêm câu sai, thanh tiến độ + tổng kết tách "đúng ngay lần đầu" và "lượt làm thêm"; lượt gặp lại chấm ở client nên evidence vẫn chỉ tính lần đầu✅
SRC-1162026-08-15Chỉ đạo: mọi hình tròn trong Unit phải cùng màu, cùng style 3D Pixar, hình to hơn cho dễ nhìn; Học vượt = chim mòng biển mỏ rất to, Luyện tập = con cua, Khám phá = cá ngựa, Luyện thêm dùng chung icon với Luyện tập; bỏ "0/9"SDD-010 §9; N12Art.tsx thêm IconSeagull + IconSeahorse (radial gradient 3 stop, rim light, bóng đổ) và nâng IconCrab lên khối 3D; ô tròn 80px / art 56px, bỏ lớp làm mờ art, bỏ bộ đếm; kiểm bằng render thật ra SVG (có gradient, không bitmap, không NaN)✅
SRC-1172026-08-15Chỉ đạo: khi Skip thì đừng chấm điểm nữa, đi thẳng tới câu tiếp theoSDD-010 §9; Learning.tsx tách skipItem() khỏi luồng chấm: không reveal, không trừ bong bóng, không chèn lại xuống cuối; vẫn ghi ngầm một tín hiệu "chưa biết" cho Evidence Registry✅
SRC-1182026-08-15Chỉ đạo: làm Interactive Onboarding Tour with Spotlight trên learn.nemo12.com và marlins.nemo12.com. Ngoài ra ngay trên www.nemo12.com và marlins.nemo12.com cần một đề nghị nhỏ "hãy xem phim Finding Nemo" để hiểu rõ thêm về "Nemo12 World"REQ-ONB-09, REQ-BRD-06; DS-001 §5c; packages/design-system/ui/Tour.tsx (canonical, copy per-app như N12Art) — đèn rọi bằng box-shadow spread nên phần sáng luôn khít element, thẻ tự lật trên/dưới theo chỗ trống, tự cuộn tới element, bỏ bước không tìm thấy element, Esc / bấm nền / "Bỏ qua" đều thoát, localStorage nhớ đã xem, mở lại từ menu avatar; 4 tour: learn learn-home (5 bước) + learn-cockpit (3), marlins marlins-family (5) + marlins-child (2). ui/FindingNemo.tsx trên web (trang chủ, dưới lưới school) và marlins (trang Gia đình, tắt được vĩnh viễn) — ánh xạ Nemo · Marlin · Crush · Bruce · cá voi · Dory sang vai trong hệ; cố ý không gắn link tới dịch vụ phát trực tuyến nào✅
SRC-1192026-08-15Chỉ đạo Phòng Lab: bỏ cụm chú giải "Chưa làm / Đã xong / Làm ngay"; Learning Package đưa lên trên cùng thành tag như chip lớp; chọn package → hiện Module → Unit → các hình tròn; hầu hết Experience bị khoá, chỉ khi làm xong "Đo cuối" của unit ngay trên thì unit kế mới mởSDD-010 §9; Learning.tsx: bỏ legend, pkg thành chip (mặc định package đầu còn bài sau khi lọc lớp), dựng danh sách unit theo thứ tự module→unit rồi tính unlocked (unit đầu mở; unit sau mở khi unit trên có final hoặc skip = completed); ô khoá hiện art xám + ổ khoá + dòng giải thích, không bấm được✅
SRC-1202026-08-15Chỉ đạo trang gốc learn: Whale và Orca lên trên, nối tiếp ngay sau Squid School; bỏ các nhãn "Các school", "Chọn một school để vào xem", "Cơ hội và sân chơi", "Đường dài của con"; đổi "Hải đăng" thành "Lighthouse" và đưa nút Lighthouse lên navbar; learner phải khai đủ thông tin trong Lighthouse thì school mới mở dầnREQ-LRN-21; SDD-015 §2c; GET /v1/learners/{id}/lighthouse (5 bước đọc từ dữ liệu thật, unlocked = 1 + done); App.tsx gộp một lưới + LockedCard (mascot xám, ổ khoá, câu chỉ đường) + nút Lighthouse trên navbar + banner tiến độ; Lighthouse.tsx thêm checklist bấm sang đúng chỗ để khai✅
SRC-1212026-08-15Chỉ đạo: mặc định mới vào thì KHOÁ HẾT school; khai thông tin cá nhân trong Lighthouse thì Turtle mới mở. Kèm: bỏ nút "Về Nemo12" ở trang school trên webREQ-LRN-21 amend; SDD-015 §2c; unlocked = done (bỏ +1), thứ tự thẻ cố định theo SCHOOLS, khai đủ 5/5 mở hết; form hồ sơ nhúng thẳng vào trang Lighthouse (ProfileEdit + onSaved để tính lại tiến độ ngay); apps/web bỏ nút "← Về Nemo12" ở trang school✅
SRC-1222026-08-15Chỉ đạo: tạo tính năng events trong marlins.nemo12.com — bố mẹ có thông tin các event, xem được chi tiết từng event, và đăng ký tham gia được, chỉ với event sắp diễn ra. Kèm ảnh chụp trang Events cũ ở marlins.chuyenchon.com/dashboard/events/cafe-2026-08-16 để tham khảoREQ-PAR-16, US-82; SDD-018; migration 0039_community_events.sql (community_events + community_event_registrations, khoá theo user_id chứ không phải email — RISK-001); module workers/api/src/modules/events với GET /v1/events?scope=upcoming · all, GET /v1/events/{id}, POST .../register · /unregister — một hàm registrationState chốt "còn đăng ký được không" cho cả ba API nên thẻ và trang chi tiết không nói khác nhau, kèm bù trừ khi hai người tranh chỗ cuối (17 test hành vi); apps/marlins/src/Events.tsx + tab Sự kiện (#/events, #/events/{id}); scripts/seed-events.sql chép buổi cafe đang chạy ở legacy. Cố ý để lại ngoài đợt này (SDD-018 §6): bình chọn câu hỏi, wizard khai hồ sơ trước khi giữ chỗ, bảng admin✅
SRC-1232026-08-15Chỉ đạo trang school: gom ba cụm giới thiệu — "Dành cho ai", "Học ở … thế nào", "Ra khỏi …, con có" — vào một accordion cho gọnSchoolHome.tsx: một khối "Về {school}" đóng sẵn (phụ đề "dành cho ai · học thế nào · ra khỏi trường có gì"), ba cụm nằm trong; phần học (môn, mục tiêu của con) giữ nguyên ở trên để không bị đẩy xuống dưới màn hình✅
SRC-1242026-08-15Chỉ đạo: bổ sung các cuộc thi Toán vào Orca, tra thông tin trên mạng, đặc biệt IMAS, APMOPS, IMSOscripts/seed-orca-math.mjs: 4 cuộc thi (IMAS · APMOPS · IMSO · SASMO) + 4 kỳ thi sắp tới, kèm format, qualification_note, awards_note và source_ref ghi rõ nguồn + ngày tra; lịch là ước tính theo chu kỳ các năm trước nên để verified=0 để Orca hiện nhãn chưa xác minh. Cuộc thi Toán trong Orca: 4 → 8✅