Rà soát yêu cầu — trạng thái THẬT
Chủ dự án yêu cầu 2026-08-17: "Đưa toàn bộ các yêu cầu tôi đã yêu cầu vào docs, để đảm bảo không bị sót. Rà soát xem còn yêu cầu nào chưa được thực hiện, hoặc đã làm rồi nhưng deploy bị sót, hoặc chưa tồn tại tính năng đó trên hệ thống."
Sổ yêu cầu vẫn là intake.md — mỗi yêu cầu một dòng SRC, không có sổ thứ hai. Trang này không chép lại sổ; nó trả lời một câu khác: "cái đã ghi là xong, trên production có thật không?"
Cách đọc trạng thái — chỉ có ba mức, và mức nào cũng phải kèm bằng chứng kiểm được:
| Mức | Nghĩa |
|---|---|
| ✅ Đang chạy | Code đã trên main, workflow deploy xanh, và (nếu cần schema) migration đã có trong d1_migrations |
| 🔵 Xong một phần | Phần lõi chạy được, phần còn lại nêu rõ ở cột "còn thiếu" |
| 🟡 Chưa làm | Đã ghi nhận yêu cầu, chưa có dòng code nào |
Ba thứ không được tính là ✅: code đã commit nhưng workflow deploy đỏ; migration còn trong migrations/ mà chưa vào d1_migrations; tính năng chạy được nhưng dữ liệu để nó có ích thì chưa có.
1. Đang chạy trên production (đã kiểm 2026-08-17)
| SRC | Yêu cầu | Bằng chứng |
|---|---|---|
| SRC-207 | Toàn cảnh mở dần ba tầng: Package → Module (mũi tên thứ tự học) → Unit (thẻ chứa chấm Experience) | ProgressViews.tsx; 3 test e2e; deploy-learn xanh |
| SRC-208 | Mỗi Unit tối đa 1 lab | 0048_one_lab_per_unit.sql đã trong d1_migrations; 225 → 182 lab live, 113 unit mỗi unit đúng 1 lab, 43 lab chuyển draft |
| SRC-211 | Sửa câu khó hiểu · lời nhắc nhịp độ xuống cuối thẻ · /labs trả tên rút gọn | Learning.tsx, learning/routes.ts; deploy-api + deploy-learn xanh |
| SRC-212 | Đánh dấu lab yêu thích + lọc nhanh | 0050_lab_favorites.sql đã trong d1_migrations; 3 endpoint; 1 test e2e |
| SRC-213 | Gộp hai lời động viên thành một | Learning.tsx |
| SRC-214 | Đáp án ngắn xếp 2 cột · Skip/Exit thành icon | Learning.tsx; test e2e bám aria-label |
| SRC-215 | Avatar thật ở góc trên phải · công tắc VI/EN nhỏ lại | /v1/me nay trả avatar_url (trước đó chưa bao giờ trả, dù 7/7 user đã có ảnh trong DB); .n12-switch-sm |
| SRC-216 | Slug /labs · Exit thành icon góc dưới phải · phân số vẽ bằng hai hình tròn | App.tsx, LabPlayer.tsx, explore/engine.tsx; slug cũ vẫn mở được (có test) |
2. Xong một phần — phần còn thiếu nói rõ
| SRC | Đã có | Còn thiếu | Vì sao chưa xong |
|---|---|---|---|
| SRC-208 | 113 unit mỗi unit 1 lab | 70 lab chưa gắn được unit nào (Anh 32 · Văn 33 · Hoá 3 · Lý 1 · Sinh 1) | Chúng dạy Nghe/Nói và Làm văn, mà chương trình chưa có unit tương ứng. Khớp theo tên chỉ trúng 3/70. Gắn được thì phải mở thêm unit — việc soạn nội dung |
| SRC-210 | Footer chung ở learn + marlins | web/ chưa dùng bản chung | apps/web/src/App.tsx đang có phần việc chưa commit của phiên song song; footer inline hiện tại cùng nội dung nên chưa lệch gì |
| SRC-211 | Bỏ em dash trong 6 chuỗi nudge/khen | ~26 chuỗi em dash ở các file learn khác | Luật DS-001 §5b điều 8 cấm trong MỌI chuỗi UI; đợt này mới quét cụm phản hồi làm bài |
| SRC-212 | Đánh dấu lab yêu thích | Gợi ý 1-2 lab bù khi hổng | Đo được: chỉ 184/1013 bài (18%) có đường ra một lab qua unit của chính nó hoặc qua prereq — Toán 82/96 nhưng Lý 9/216 · Hoá 10/216 · Tin 0/216. Chờ chủ dự án chốt cách xử lý khi không có gì để gợi ý |
| SRC-202 | Luồng bố mẹ (wizard 5 bước) | Luồng con chưa phân màn theo cấp học, xưng hô chưa áp vào learn | — |
| SRC-206 | Đã rà 9 cựu học sinh, ghi draft | Chưa ai lên trang | Thiếu nguồn cho 5 người, và consent của cả 9 người chưa hỏi |
3. Chưa làm — yêu cầu đã nhận, chưa có dòng code nào
| SRC | Yêu cầu | Việc cần làm | Chặn bởi |
|---|---|---|---|
| SRC-217 | Mỗi Learning Experience có "Nhắc lại": icon ? nhỏ góc dưới phải, bấm mở popover nói sơ qua một khái niệm + ví dụ nhỏ | Migration thêm skill_nodes.hint_vi/hint_en; /practice/start trả kèm; popover ở Learning.tsx; soạn nội dung | Cột description sẵn có chỉ chứa rác kiểu "Kỹ năng: Làm tròn số." — không dùng lại được. 1.013 bài cần hint, đợt đầu nên làm Toán (96 bài) |
| SRC-218 | Ảnh minh hoạ bằng thuật toán cho một số câu hỏi (cấm bitmap) | Mở rộng FigureSpec sang Đại số/Số học (trục số, phân số, đồ thị hệ số góc) rồi chạy attach-figures.mjs | Engine + bảng item_figures (migration 0038) đã có sẵn, hiện mới phủ Hình học |
| SRC-219 | Thư viện công thức toán — so sánh rồi triển khai | KaTeX, import() động, subset font; cho phép $…$ ngay trong prompt/options để chuyển dần, không phải sửa 2.160 câu cùng lúc | Đã tư vấn xong, chờ chủ dự án gật |
| SRC-220 | Màn kết thúc Learning Experience: việc quan trọng nhất tiếp theo là gì | Một nút accent duy nhất do hệ thống chọn theo kết quả (xem lại chỗ sai → đo mức vững → đi tiếp ô kế); "Ẩn bài làm" thôi làm nút chính; thêm dòng lịch ôn lại | Đã trả lời kèm lý do, chờ chốt |
| SRC-221 | Unit cũng có điểm và trình bày như Module; nút xem diff 7 ngày và 30 ngày cho từng Package/Module/Unit | Điểm Unit: API /overview đã trả sẵn mastery_of_assessed cho unit, chỉ là UI chưa vẽ vòng tròn. Diff: dùng learner_evidence.mastery_before/after + occurred_at (migration 0044) | Dữ liệu lịch sử mới có 52/262 mẩu evidence mang mastery_after (cột thêm ở 0044), nên mốc "7 ngày trước" của bài học từ trước đó không dựng lại được — phải nói thẳng "chưa có dữ liệu" thay vì hiện 0 |
| SRC-222 | Gộp Toàn cảnh và Đường học làm một | Giữ Toàn cảnh làm bản đồ duy nhất; Đường học còn lại đúng màn chơi của một Unit; bỏ lọc theo lớp ở tầng module | Đã phân tích (7 vs 5 module là do hai bộ lọc khác nhau trên cùng dữ liệu), chờ chốt vì việc này xoá một trang khỏi điều hướng |
4. Việc lớn còn treo từ các đợt trước
| Việc | Số đo hôm nay | Ghi chú |
|---|---|---|
| 6/6/6 cho mọi môn (SRC-190) | Đủ: Hoá · Tin · Lý (6 package · 36 module · 216 unit). Thiếu: Toán 3 package · Văn 3 · Anh 4 · Sinh 4 · SAT/AP/IELTS/GenAI 5 | Còn ~1.500 unit — đây là chương trình nội dung, không phải một lần chạy script |
| 3 package cuối chưa có câu hỏi | Tin Ứng dụng 36 bài · 0 câu; Hoá Hoá học đời sống 36 bài · 0 câu; Lý Quang học 36 bài · 30 câu | Đợt soạn câu thứ 6 dừng giữa chừng; mỗi package cần 144 câu |
| 13 cụm đề Anh/Văn dùng chung câu hỏi | Pool chỉ 18–28 câu cho 5 đề | Script in danh sách này mỗi lần chạy |
docs/reference lệch với code | Sinh từ bản đã commit ra 147 endpoint / 81 bảng, docs đang ghi 180 / 90 | Docs được sinh từ code chưa commit của phiên song song; đóng được khi phiên đó commit nốt |
5. Chỗ dễ sót nhất — hai phiên làm song song
Hai phiên Claude cùng làm trên một cây thư mục trong ngày 2026-08-17. Hệ quả đã xảy ra thật, ghi lại để người sau không mất thời gian tìm:
- Số SRC đụng nhau ba lần (193, 195, và 207/208 — hai số cuối được dùng làm nhãn commit cho phần mentor trong khi sổ đã cấp cho phần Toàn cảnh và lab).
- Dãy migration hở:
0046,0047đã áp lên D1 nhưng file vẫn chưa commit, nên cổng AS-04.1.1 (số liên tục) sẽ báo khi CI chạy tới đó. - Docs bị sinh từ cây làm việc bẩn — nguyên nhân của mục cuối bảng §4.
Cách tránh: git add đúng file của mình, và trước khi cấp số SRC/migration mới thì đọc lại intake.md + ls migrations ngay tại thời điểm đó.