Skip to content

Sổ nguồn SRC-0525 tới SRC-0549 ​

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-5252026-08-23Chủ dự án 2026-08-23: trong popover cần hiển thị luôn 10 ô vuông thể hiện Mastery Level, và các hình tròn thể hiện Coverage (phủ những lesson nào trong Unit hiện tại rồi)Popover xác nhận trước đây nói tên bài và một câu lý do, không nói learner đang đứng ở đâu TRONG chính Unit ấy — nên quyết định vào học là quyết định mù. Hai đại lượng cố ý vẽ bằng HAI HÌNH khác nhau vì chúng khác bản chất (luật SRC-175 không được trộn mastery với coverage): ô vuông là mức vững thang 10 dùng chung một thước với mọi thẻ trên bản đồ, hình tròn là độ phủ, mỗi lesson một hình, đặc là đã đo. Cùng một hình cho cả hai thì learner đọc 8 ô mà không biết 8 đó là vững hay là đã đi qua. Bản đồ chỉ tải khi popover mở lần đầu, vì đó là dữ liệu của cả môn còn phần lớn lượt vào app không mở popover nào✅
SRC-5262026-08-23Chủ dự án 2026-08-23: trong vùng Nguyện vọng bỏ link Bỏ, cho vào từng nguyện vọng xem chi tiết; trong chi tiết có button Sửa nguyện vọng; mỗi nguyện vọng có độ ưu tiên cao nhất, cao nhì hoặc cao thứ ba; mỗi nguyện vọng có thêm môn thi, ngày thi và hệ sốLink Bỏ rời khỏi mặt danh sách vì bỏ một nguyện vọng là việc hiếm và không thu lại được, mà nó lại đang nằm ngay cạnh tên trường ở lớp ngoài cùng: chạm nhầm một cái là mất. Nay nó nằm trong ô sửa, tức phải đi qua hai bước cố ý. Độ ưu tiên gọi bằng CHỮ chứ không phải số 1-2-3, vì số thứ tự bắt người đọc tự dịch xem 1 là cao nhất hay thấp nhất. Môn thi mang HỆ SỐ vì kỳ thi vào 10 chuyên chấm theo hệ số và mỗi trường xếp khác nhau; không có hệ số thì kế hoạch học không biết một điểm Toán đáng giá gấp mấy một điểm Văn ở đích này, mà đó đúng là thứ quyết định nên dồn thời gian vào đâu. Lưu JSON chứ không tách bảng riêng: danh sách ngắn 3-4 môn, luôn đọc trọn gói cùng nguyện vọng, không truy vấn nào cần lọc ngang qua môn thi của mọi learner✅
SRC-5272026-08-23Chủ dự án 2026-08-23: trong popover, tôi đã làm 9/10 lesson rồi, vì sao lại có dòng ghi là đã phủ 1/1 lesson?Vì hai con số đếm hai thứ khác nhau và dòng chữ đã mượn nhầm tên. Dải mười ô là MỨC VỮNG thang 10 chứ không phải mười lesson; còn dòng dưới đếm NODE của Unit, mà phần lớn Unit chỉ có đúng một node nên nó gần như luôn ghi 1/1 và chẳng nói được gì. Đặt cạnh nhau thì mắt đọc mười ô kia thành 9/10 lesson rồi hai con số đá nhau. Thứ learner thật sự ĐI QUA trong một Unit là các Experience trên đường học (Khám phá, Lab, Luyện tập, Đo giữa, Đo cuối), nên nay đếm đúng thứ đó và gọi bằng chữ chặng chứ không mượn lại chữ lesson đang bị hiểu theo hai nghĩa. Mẫu số lấy từ đường học GỐC với done luôn false, vì đường học thật sinh thêm ô Luyện thêm sau mỗi lượt xong, mà mẫu số tự phình thì learner càng làm càng thấy xa đích✅
SRC-5282026-08-23Trao đổi thiết kế Learner Model (chat chủ dự án 2026-08-23): Learner Model = State + Evidence — bổ sung evidence freshness/diversity, coverage theo môn, behavior signals; Transfer/Preferences ghi nhận là khoảng trốngSDD-002 §2 + ref.learner-model (learner-v2)✅
SRC-5292026-08-23Chỉ đạo: định kỳ gửi kết quả tổng kết của con cho bố mẹ, 2h sáng hằng ngày, chỉ khi ngày đó con có làm bài; gửi thử về dac2205@gmail.com trước; dịch vụ email có thể là ResendREQ-PAR-12 (⏳→✔); migration 0076_parent_digest.sql (parent_digest_sends, khoá chính (learner_id, digest_date) để CHỐNG GỬI TRÙNG ở tầng dữ liệu); module digest: service.ts gom số liệu theo ngày giờ Việt Nam (datetime(occurred_at,'+7 hours') — so bằng UTC thô thì buổi học tối bị trôi sang hôm sau), email.ts gọi Resend qua HTTP (Workers không có SMTP), render.ts viết thư không chấm điểm con, run.ts idempotent + một người hỏng không kéo cả mẻ; cron 0 19 * * * = 02:00 giờ VN. Chốt an toàn DIGEST_TEST_RECIPIENT: còn đặt thì MỌI thư đi về hộp thử, kèm dòng nói rõ đáng lẽ gửi cho ai. 11 test hành vi. Chờ chủ dự án: đặt secret RESEND_API_KEY và xác minh domain gửi🔵
SRC-5302026-08-23Tai khu vuc xem chi tiet cac model, can tinh nang so sanh 2 model lien nhau theo 10 tieu chi co dinh truoc, moi tieu chi xem duoc hai phien ban hai ben, he thong danh dau cho khac bietMan so sanh hai version lien nhau cua mot model theo DUNG 10 tieu chi co dinh, khong doi theo loai model; phep do nam o API de test duoc; cho khac duoc danh dau, cho giong van hien✅
SRC-5312026-08-24Chủ dự án 2026-08-23: lo lắng mỗi learning experience có ổn không, có ý nghĩa gì không — hầu như toàn trắc nghiệm 4 đáp án. Chốt mở rộng cả 5 dạng: nhập đáp số, sắp lại các bước lời giải, tìm chỗ sai trong bài giải mẫu, thao tác trên hình, ước lượng trong khoảng. Toán soạn trước, seed tay, evidence dạng mới nặng hơn MCQ, ghi thiết kế vào SDD mớiBốn lý do mở rộng, xếp theo độ nặng. MỘT: cây năng lực đang hứa những thứ 4 đáp án không đo được — Package tên là Lập luận và chứng minh, Mô hình hoá, Giải bài chưa từng gặp, mà không ai chứng minh một mệnh đề bằng cách chọn A/B/C/D; hệ trả về đã vững cho năng lực chưa từng đo là một lời khẳng định sai. HAI: nhận ra khác làm được — kỳ thi vào 10 là tự luận, learner vững 9/10 trên app vẫn có thể ngồi trước giấy trắng; khoảng cách này hệ không nhìn thấy vì chưa bao giờ yêu cầu learner SẢN XUẤT ra gì. BA: sàn đoán mò 25% làm mỗi câu mang ít thông tin, lớp justification đỡ được phần nào nhưng là tự khai. BỐN: khuôn câu hỏi lặng lẽ định hình chương trình — kỹ năng không nhét vừa 4 phương án biến mất khỏi nội dung dù Pearl vẫn ghi tên. Quyết định kèm: dạng mới là Assessment/LX Blueprint mới trong registry content_blueprints (SDD-013), không chế khái niệm mới; bằng chứng từ dạng learner tự sản xuất mang reliability cao hơn MCQ vì không đoán mò được; KHÔNG làm chấm văn tự do bằng LLM đợt này vì đắt và sai âm thầm✅
SRC-5322026-08-24Chủ dự án 2026-08-24 (ảnh lab Phân tích nhân tử): với riêng account dac2205@gmail.com, dưới cùng các trang cần hiển thị metadata của Experience — tất cả data có thể, nổi lên trên: dành cho lớp mấy trên tổng số bao nhiêu lớp, level bao nhiêu trên tổng số level trong thang Building 21Footer QcExpMeta đứng CUỐI CÙNG mỗi màn Experience vì nó là dữ liệu thô cho người rà, không được chen vào trải nghiệm của learner thường. Dòng đầu là hai con số chủ dự án theo dõi: Lớp G/12 và Level B21 x/12 — level trong D1 lưu thang 0-100 quy đổi (midpoint/12*100 ở seed-b21-tree.mjs) nên hiển thị phải đổi ngược về thang 1-12 mà Building 21 dùng, kèm level(0-100) trong phần dump để đối chiếu. Màn practice dùng cờ qc do server cấp theo email (cùng cổng với vùng kiểm định SRC-454); màn lab không có phiên practice nên dùng owner do App truyền — chỉ là hiển thị dữ liệu công khai, quyền thật server vẫn canh✅
SRC-5332026-08-24Chủ dự án 2026-08-24: ưu tiên dùng Accordion khi giải thích mà có nhiều bướcÁp ngay vào archetype blocks của explore engine (41 config đang dùng, trong đó có lab Phân tích nhân tử trên ảnh). Bản cũ là kiểu tab dọc: bốn tiêu đề một cụm, phần giải thích nằm DƯỚI CẢ CỤM — mắt phải nhảy từ Bước 2 qua Bước 3, Bước 4 mới tới nội dung của chính Bước 2, và không có dấu hiệu nào nói nội dung đó thuộc bước nào. Accordion mở nội dung ngay dưới tiêu đề đang chọn: chữ đứng cạnh chỗ nó nói về, các bước chưa mở vẫn thấy đủ mặt. Đây là luật ƯU TIÊN chung cho mọi giải thích nhiều bước sau này, không riêng chỗ này✅
SRC-5342026-08-24Chủ dự án 2026-08-24 (ảnh màn làm bài): cần một icon, click vào thì xổ ra area để học sinh viết nháp; hệ thống không lưu nháp, nháp biến mất ngay khi chuyển sang câu khácIcon bút chì đứng cùng hàng điều khiển với Nhắc lại và Bỏ qua. KHÔNG lưu là thiết kế chứ không phải thiếu: không state cha, không localStorage, không server — nháp là chỗ được phép sai và được phép bẩn, trẻ biết bị lưu thì sẽ viết dè. Xoá bằng hai cơ chế chồng nhau: advance() xoá state, và textarea mang key theo item.id nên đổi câu là dựng ô mới tinh, phòng cả đường vào lại câu cũ từ hàng đợi sai. Ô nháp ghi rõ Không lưu lại — sang câu khác là biến mất, để lời hứa nằm ngay trên mặt ô✅
SRC-5352026-08-24Chủ dự án 2026-08-24 (ảnh màn kết quả có cá và bong bóng): làm sao để các màn hình khác cũng có bong bóng và con cá đó, mỗi màn tầm 3-5 con, đặc biệt màn Home và màn đang làm bàiGom thành MỘT component SeaRow thay vì chép dải emoji viết tay ở màn kết quả đi từng nơi: đàn cá chọn theo seed nên mỗi màn một đàn khác nhau nhưng đứng yên theo màn — cùng một trang luôn thấy cùng một đàn, không nhảy lung tung mỗi lần render. Đặt ở bốn chỗ: đầu màn Home (card Việc hôm nay), trên thẻ câu hỏi lúc ĐANG làm bài cỡ nhỏ hơn, hero của School Home theo school, và màn kết quả dùng lại. Trang trí thuần: aria-hidden, pointer-events none, tôn trọng prefers-reduced-motion✅
SRC-5362026-08-24Chủ dự án 2026-08-24: gật cho làm cổng chuẩn phủ chương trình — tìm cách chắc chắn đối chiếu được một chương trình là đủ hay chưa đủ, rà soát cả Learning Experience lẫn Assessment Experience. Bối cảnh: lỗ dấu hiệu chia hết chỉ được phát hiện nhờ chủ dự án tình cờ hỏiBa cổng đang có (check-curriculum-pearl, check-docs-drift, QC từng câu) đều đo tính NHẤT QUÁN BÊN TRONG — docs khớp D1 khớp Pearl — nên cả ba cùng thiếu một chủ đề thì vẫn xanh. Đủ hay chưa là câu hỏi so với BÊN NGOÀI, và bên ngoài có một danh sách hữu hạn kiểm được bằng máy: chương trình GDPT 2018. Thiết kế: bảng chuẩn phủ docs/curriculum/coverage/<môn>.md, mỗi chủ đề bắt buộc một dòng, mỗi dòng phải ở đúng một trong BA trạng thái — ✅ trỏ node có thật kèm đủ ruột, 🚧 chưa có kèm SRC hàng chờ, ✍️ cố ý không làm kèm lý do — không tồn tại trạng thái im lặng thứ tư. Script check-coverage đối chiếu bảng với docs/knowledge/<môn>.md (bản xuất từ D1, đã có cổng drift riêng): dòng ✅ mà node không tồn tại hoặc dưới 6 câu là đỏ, vì unit có vỏ mà không có ruột thì Learning Experience lẫn Assessment Experience đều không dựng nổi. Giới hạn nói trước trong chính file: cổng chỉ tốt bằng bảng chuẩn, bảng sót thì cổng mù đúng chỗ đó — nhưng bảng là một file ai cũng đọc và sửa được, khác hẳn không-ai-biết-thiếu-gì✅
SRC-5372026-08-24Chủ dự án 2026-08-24: lấp luôn những cái còn thiếu theo bảng chuẩn phủCổng chuẩn phủ sau khi kiểm thêm TÍNH NHÌN THẤY lộ ra chuyện lớn hơn 15 lỗ ban đầu: khoảng 28 chủ đề GDPT chỉ có node nằm trong strand SH/DS/HH đã ẩn từ SRC-299 — nghĩa là toàn bộ hình học lớp 6-9, đại số lớp 8-9, thống kê, xác suất KHÔNG với tới được qua đường học, dù câu hỏi vẫn nằm trong kho. SRC-299 ẩn các strand đó vì trùng vai với cây năng lực, nhưng phần lớn node không hề có bản sao B21. Đợt lấp gồm ba phần trong seed-coverage-fill-math.sql: MỘT — gắn 52 node cổ điển không-có-bản-sao vào strand năng lực đang hiển thị (đổi strand+module, giữ nguyên id nên mọi evidence cũ còn nguyên; node có bản sao như solve-linear, identities thì giữ ẩn, bảng chuẩn trỏ về bản sao). HAI — soát nhãn lớp hai node đặt sai tầm: inequalities 7 thành 9 theo GDPT, b21f-distance-speed-and-time 7 thành 5. BA — 13 node mới cho lỗ thật (dấu hiệu chia hết lớp 6 với lập luận vì-sao-cộng-chữ-số-đúng, xem giờ, chắc chắn-có thể, góc lớp 4, hình bình hành-thoi, đếm khả năng, diện tích tam giác-thang, thể tích hộp, lăng trụ, chóp, trụ-nón-cầu, tần số ghép nhóm, xác suất lớp 9) kèm 82 câu dùng đủ năm dạng, vào candidate chờ cổng chất lượng. Số SRC này cấp SAU khi commit seed đã ghi (SRC-537) — may không đụng phiên khác; lời nhắc cho chính mình: cấp số TRƯỚC khi viết số vào commit✅
SRC-5382026-08-24Chủ dự án 2026-08-24: Ok, làm nốt đi (khép vòng chuẩn phủ — 106 câu candidate đang chờ nút nâng)Nâng candidate sạch lên published từ nay là CRON mỗi giờ (phút 10) trong worker, không còn là cái nút chờ người nhớ. Cùng một hàm promoteScreenedCandidates với nút ở Admin Ops nên ngữ nghĩa cổng chất lượng không đổi: câu qua sàng lọc máy không tì vết thì lên kệ, câu bị gắn cờ vẫn ghi hồ sơ rồi giữ lại chờ người rà. Lý do tự động hoá: bước bấm-tay làm candidate chất đống chặn mọi đợt nội dung mới — 106 câu của SRC-531 và SRC-537 nằm chờ đúng kiểu đó trong lúc chủ dự án bận. Khoá withLock chống hai lần cron chồng nhau, phút 10 tránh giờ chạm hai cron 19h và 21h✅
SRC-5392026-08-24Chỉ đạo: trang riêng xem danh sách tất cả Unit — mỗi Unit thuộc Package nào, Module nào; ba cột chấm tròn nhỏ cho Learning Experience, Assessment Experience, LabCoral tab Unit (/{school}/{subject}/unit) + GET /v1/coral/units. Ba cột dựng theo ĐÚNG unitPath của learn chứ không đếm riêng: LX = mỗi skill_node một chấm (xanh ≥10 câu theo REQ-KNW-17, vàng 1–9, rỗng 0, đỏ đang ẩn); AX = skip · mid (chỉ khi ≥2 node) · final, sẵn sàng khi unit ≥6 câu (đúng ngưỡng assessReady); Lab = mỗi dòng bảng labs một chấm. Lọc: chưa có lab · bài học mỏng · bài đo chưa sẵn sàng. Phát hiện lỗi dữ liệu: 98/161 lab Toán mồ côi (strand/module/unit không khớp unit nào) — hiện cảnh báo thay vì lặng lẽ bỏ. Đo thật (Toán): 230 unit · 300 LX · 63 lab gắn được · 167 unit chưa có lab · 16 unit còn bài mỏng✅
SRC-5402026-08-24Chủ dự án 2026-08-24 (ảnh lab Phân tích nhân tử và lab Tứ giác): bỏ toàn bộ cách thể hiện có dấu cộng dấu trừ, chuyển sang accordion; accordion khi click một mục thì đừng đóng các mục khác; nâng cấp hình minh hoạ word-web vì nhìn kinh quáBa chỉnh cùng một mạch trình bày. MỘT: stepper +/− trong LabPlayer (cả phần bước lẫn phần ý quan sát) bắt learner đi tuần tự và giấu mất mục lục — accordion cho thấy toàn bộ tiêu đề các bước ngay từ đầu, nội dung mở tới đâu đọc tới đó. HAI: mọi accordion (LabPlayer + archetype blocks của explore) mở ĐỘC LẬP — người học đang SO hai bước với nhau cần cả hai cùng mở, tự đóng hộ là giật mất một nửa phép so; mặc định mở mục đầu. BA: word-web cũ là chữ trôi tự do quanh một hình tròn, nét nối mảnh gần tàng hình trên nền sâu; nay mỗi khái niệm là một THẺ có nền và viền, nét nối vẽ tới mép thẻ, thẻ đang chọn đổi màu đầy đủ, bấm được ngay trên hình✅
SRC-5412026-08-24Chủ dự án 2026-08-24: learner học theo từng Unit — vào làm một Learning hay Assessment Experience là đang đứng trong một Unit; làm xong thì làm tiếp luôn Experience khác; thoát khỏi Experience thì về trang xem chi tiết một Unit; trang này giống hệt trang Experience về look and feel; trong đó có danh sách Experience xếp theo trình tự, mỗi Experience đánh dấu dành cho học sinh lớp mấy hệ Việt Nam và level mấy trên tổng level của hệ Building21Trang chi tiết Unit dựng trong Learning.tsx cùng khuôn với màn Experience: một card, nút thoát góc, tiêu đề Unit kèm Đã đi x/y chặng. Danh sách Experience lấy từ chính unitPath — một nguồn cho cả đường học lẫn trang này nên hai chỗ không lệch nhau được; mỗi dòng ghi rõ Learning hay Assessment Experience, nhãn Lớp G và B21 x/12 (b21Of tách ra từ QcExpMeta để hai chỗ cùng một phép đổi thang). Ba đường vào đều đổ về đây: bấm Unit từ Dashboard vào thẳng trang chi tiết thay vì chỉ cuộn tới vị trí trên đường dài; thoát một Experience về đây thay vì nhảy về Toàn cảnh như SRC-499 cũ (đảo có chủ ý: học theo Unit thì thoát một bài vẫn phải đứng trong Unit); nút Học tiếp mở đúng chặng kế chưa xong✅
SRC-5422026-08-24Chủ dự án 2026-08-24 (ảnh câu COV-DIVISIBILITY-RULES-04): cần chỉnh câu này, không hề logicHai lỗi cùng lộ. MỘT: câu find_error lấy số 1 235 — cả ba dòng đều ĐÚNG về sự kiện vì 1 235 quả thật không chia hết cho 3; cái hỏng là phép suy luận, nên bài bấm-vào-dòng-sai không có dòng nào sai để bấm. Luật rút ra cho dạng find_error, ghi vào header patch: lời giải mẫu phải chứa đúng MỘT dòng sai kiểm được độc lập, và nếu bài dùng quy tắc sai thì phải chọn dữ liệu sao cho quy tắc sai cho ra KẾT LUẬN SAI — đổi sang 2 154 (chia hết cho 3 nhưng lối nhìn chữ số cuối kết luận ngược), dòng sai là dòng phát biểu quy tắc. HAI: máy sàng lọc giữ nhầm 42 câu numeric/estimate với cờ options_too_few — screening soạn trước SDD-022, chấm câu nhập-đáp-số bằng thước của trắc nghiệm; nay hai dạng đó sàng answer_spec_json (numeric phải có answer, estimate phải min < max) thay vì sàng phương án, thêm cờ answer_spec_invalid mức chặn✅
SRC-5432026-08-24Chỉ đạo: chạy đợt đối chiếu chương trình cho Toán (liệt kê yêu cầu cần đạt theo lớp → so với node đang có → danh sách node còn thiếu), sau câu hỏi "300 node là tiêu chuẩn ở đâu, đủ hay thiếu"audit-curriculum-math + scripts/audit-curriculum-math.mjs + bản tham chiếu scripts/data/gdpt2018-math.json (171 chủ đề GDPT 2018, 3 mạch, lớp 1–12). Kết quả: phủ đúng lớp 59% (101/171); theo cấp — THCS 84% (dùng được), Tiểu học 52% (mỏng nửa), THPT 35% (17 node/3 lớp, lớp 12 đúng 1 node). Chỉ 27% chủ đề có ≥2 bài. Ước cần 700–900 node cho 1–12, kho hiện ở ~1/3. Đo có kẹp khoảng (±1 lớp / đúng lớp / ≥2 bài) vì bản lỏng nói quá. Phát hiện: 300 không đến từ tiêu chuẩn nào — tiêu chuẩn duy nhất là luật 6/6/6 (SRC-185) nói về HÌNH DẠNG cây, không nói độ phủ chương trình; nhãn "Coverage 100%" của Coral chỉ nghĩa là node đang có đều đã có câu. Xung đột cần chốt: REQ-KNW-18 (≥3 unit/module) vs luật 6/6/6 (≥6). Giới hạn: bản tham chiếu do AI dựng, chưa đối chiếu câu chữ văn bản gốc✅
SRC-5442026-08-24Chủ dự án 2026-08-24 (ảnh footer QC ở lab Tứ giác): cụm metadata dưới cùng cần hiển thị nhiều dòng, cứ 3 thông tin một cụm, và giải thích thêm về strand, item_count, need, blocks, check_available, exp để tôi hiểu thêmFooter QC đổi từ một dòng dump sang lưới 3 cột, mỗi trường có một CÂU GIẢI NGHĨA đứng ngay dưới giá trị — footer này là chỗ chủ dự án học cách hệ vận hành chứ không chỉ là chỗ dump. Bảng giải nghĩa phủ 20 trường (strand kèm ghi chú SH/DS/HH là strand ẩn; blocks là số node đang bị chặn vì cần node này làm nền — số càng lớn vá càng lời; mastery 0.00 kèm not_assessed nghĩa là chưa đo chứ không phải kém). Trường không có trong bảng vẫn hiện giá trị thô — hơn là giấu✅
SRC-5452026-08-24Chủ dự án 2026-08-24: đã khai lớp 8 mà hệ vẫn liên tục đưa bài lớp 2, lớp 5; đầu năm lớp 8 thì phải đưa bài lớp 7 để ôn cực kỳ chắc lớp 7, sau đó mới ôn chắc lớp 8Hai nguyên nhân chồng nhau. MỘT: bộ chọn unit nền dùng cửa sổ G-3..G (SRC-516) xếp theo blocks rồi level — lớp 8 cửa sổ 5..8 vớ được unit có node lớp 5 đứng đầu vì chặn 6 unit khác. HAI: unit Đọc bảng và biểu đồ gộp node lớp 2 và lớp 5 cùng tên nên đường đi trong unit trộn cả bài lớp 2. Sửa theo đúng luật chủ dự án phát biểu: ba vòng nới dần — (1) G-1..G xếp LỚP THẤP TRƯỚC tức ôn nền năm ngoái trước rồi tới lớp hiện tại, (2) G-3..G cho learner hổng sâu, (3) toàn môn chống màn hình trống. Bài lớp thấp hơn cửa sổ vẫn tới được với learner nhưng qua đường ĐO thấy hổng (repair/urgent) hoặc tự chọn trên bản đồ, không qua lời mời mặc định. Việc chờ ghi kèm: các unit gộp node lệch quá 2 lớp cùng tên (như Đọc bảng và biểu đồ lớp 2+5) cần tách theo tầm trong một đợt dọn cây riêng✅
SRC-5462026-08-24Chủ dự án 2026-08-24: còn việc gì cần làm nữa, liệt kê, đánh giá ưu tiên rồi làm dần — đợt P1P1 gồm ba mảnh khép vòng chuẩn phủ. MỘT: 10 dây unit_prereqs cho các node mới của SRC-537 (dấu hiệu chia hết làm nền cho ƯCLN-BCNN và đồng dư; chuỗi hình khối bình hành → tam giác-thang → hộp → lăng trụ → chóp → trụ-nón-cầu; xác suất cần cả chắc-chắn-có-thể lẫn kiểm đếm) — không có dây thì trang Chỗ hổng và lối cứu giữa bài không trỏ về được unit mới, chúng tồn tại mà bộ kê đơn không biết đường. HAI: 14 dòng chuẩn phủ đổi 🚧 thành ✅ sau khi 106 câu qua cổng chất lượng, bảng Toán 1-9 chỉ còn một dòng cố-ý-bỏ. BA: dòng sót phát hiện khi rà lại — kí hiệu khoa học lớp 7 — chèn thêm theo đúng luật bảng-sót-thì-chèn-không-xoá, kèm lộ ba node luỹ thừa ra khỏi strand ẩn✅
SRC-5472026-08-24P2 đợt dọn cây (tiếp SRC-545): tách các unit Toán gộp node lệch tầm từ 2 lớp trở lên27 unit, 63 node. Cây B21 cố ý dạy lại cùng kỹ năng ở tầm cao hơn (spiral) nhưng các bản mang CÙNG tên unit nên UI gộp làm một — learner lớp 8 mở unit gặp hàng Lớp 2 ngay trên hàng Lớp 5. Tách bằng hậu tố (lớp G) trên tên unit; node id giữ nguyên nên evidence theo node không mất. Ba sổ ăn theo tên unit dời cùng: learner_experience_state dời khoá node-scoped theo đuôi :node-id, riêng khoá mức-unit (skip/mid/final) không quy được về bản nào nên để nguyên và chấp nhận mất dấu done của mid/final ở unit từng gộp — đo lại được, evidence gốc không mất; unit_prereqs trỏ về BẢN THẤP NHẤT vì prerequisite nghĩa là nền; labs gắn theo node_id nếu trùng, không thì bản gần tầm nhất✅
SRC-5482026-08-24P2 tiếp: chuẩn hoá cột level của môn Toán đang trộn hai thang (B21 1-12 và 0-100)Đường học sắp thứ tự bằng level nên đang so hai thước lẫn nhau. Luật đổi: level <= 12 và abs(level - grade) <= 3 thì quy về thang 100 — node duy nhất trong vùng nhập nhằng 8-12 mà là thang-100 thật (reading-clocks lớp 1 level 8) có abs(8-1)=7 nên tự thoát luật. CHỈ ĐỔI TOÁN sau khi kiểm tra lộ ra các môn khác dùng level làm SỐ THỨ TỰ trong module (1..5, 338+ node Tin Sinh Hoá kiểu đó) — đổi hàng loạt là phá thứ tự của chúng; đây là lý do phạm vi thu hẹp có chủ ý chứ không phải làm dở. Hàm hiển thị b21Of đổi theo: dưới 8 (sàn của thang 100) trả null để giao diện bày dấu hỏi thay vì một con số bịa✅
SRC-5492026-08-23Chỉ đạo: dòng phụ của Squid School đổi thành "Vào đại học thuận lợi bằng IELTS, SAT, TSA, HSA, AP"tagline sửa ở cả 4 bản sao (apps/{learn,marlins,web}/src/schoolsInfo.ts + apps/coral/src/schools.ts) — sửa thiếu một bản là bốn bề mặt nói bốn kiểu. Đổi cả cách nói: "vào thẳng đại học" → "vào đại học thuận lợi", vì TSA và HSA là kỳ thi đánh giá năng lực trong nước, dùng để xét tuyển chứ không phải cửa vào thẳng. Lưu ý chưa xử lý: SCHOOL_SUBJECTS.squid vẫn chỉ có ["ielts","sat","ap"] — dòng phụ nay hứa 5 kỳ thi trong khi hệ thống mới có nội dung cho 3, cần bổ sung TSA và HSA vào chương trình hoặc chấp nhận khoảng lệch. Kiểm: typecheck sạch, build learn·marlins·web·coral🔵 chữ xong, nội dung TSA/HSA chưa có