---
url: https://docs.nemo12.com/architecture/sdd-038/learning-setup-hub-return.md
description: >-
  Learning Setup trở lại hub trong ba ngày đầu, bỏ ba chặng Starting Point,
  Diagnosis, Calibration, và bỏ trang Goal: còn lại những gì.
---

# SDD-038 · Learning Setup: trở lại hub và còn hai chặng

> Một phần của [SDD-038 Cổng IELTS](index.md), phần tiếp của [Learning Setup](learning-setup.md). Phần đầu là đặc tả đang áp dụng, mỗi mục giữ số § cũ; diễn biến và lý do nằm ở mục **Lịch sử quyết định** cuối trang.

## 57. Learning Setup trở lại hub, trong ba ngày đầu (SRC-945, 2026-09-21)

### 57a. Đây không phải đảo lại SRC-860

SRC-860 đẩy Learning Setup lên menu avatar, và lý do ấy vẫn đúng: với learner đã thiết lập xong,
nó thuộc về tài khoản chứ không thuộc về màn luyện. Nhưng nó chỉ đúng SAU ba ngày đầu. Người vừa
vào chưa biết avatar có menu, chưa có lý do bấm vào đó, và thứ duy nhất họ cần làm lúc ấy - nói
cho Nemo biết mình đang ở đâu - lại nằm sau đúng cái cửa họ không mở.

Khối ở hub (`SetupProgressCard`, `apps/learn/src/IeltsPathway.tsx`) hiện khi learner còn trong ba
ngày đầu **hoặc** khi thiết lập còn dở, và **biến mất hẳn** khi hết cả hai - không thu nhỏ, không
để lại một dòng "Setup ✓". Một khối dẫn đường ngày nào cũng thấy thì nó không còn dẫn đường, nó
chỉ là một hàng rào đứng giữa learner và bốn kỹ năng.

Vế "còn dở" đi kèm vế "ba ngày" vì một mình cái mốc thời gian sẽ gạt đúng người cần nó nhất: ai mở
Nemo lần đầu vào ngày thứ tư thì ngày đầu tiên của HỌ đã nằm ngoài cửa sổ ấy.

Khối đứng **trên** dashboard: ba ngày đầu thì dashboard còn rỗng gần hết (không chuỗi ngày, không
vốn từ, không tỉ lệ đúng), nên đặt nó bên dưới ba thẻ trống là bắt người mới cuộn qua đúng những
con số nói rằng họ chưa làm gì.

### 57b. "Làm dở" là một trạng thái, và nó được tính ở SERVER

`SetupPhase` nay mang thêm `status: "done" | "in_progress" | "not_started" | "locked"`
(`workers/api/src/modules/ielts/setup.ts`). Ba cờ `done`/`locked`/`optional` đã có đủ dữ kiện,
nhưng "làm dở" không nằm trong cờ nào - nó là "chưa xong mà đã có phần con xong rồi", và mỗi màn
hình tự bắc cầu ấy là mỗi màn hình có một định nghĩa "làm dở" riêng.

Hai luật đáng nhớ:

* **`locked` đứng trước cả ba mức kia.** Một chặng chưa tới lượt mà gọi là "not started" là trách
  learner về một việc họ chưa được phép làm.
* **"Đã đụng vào" đếm trên MỌI phần con, không riêng phần bắt buộc.** Learner `has_score` làm xong
  Writing Sample trong khi chỉ Speaking là bắt buộc vẫn đang làm dở chặng ấy; bảo họ "chưa bắt
  đầu" là xoá đi một việc họ vừa làm thật.

Bốn nhãn dùng chung một bảng (`SETUP_STATUS`) cho cả khối ở hub lẫn trang `/ielts/setup`, nên hai
màn không thể gọi cùng một trạng thái bằng hai chữ khác nhau. Bốn hình thức khác nhau HẲN chứ
không phải bốn sắc độ của một màu - cùng luật với §52c.

### 57c. Cửa sổ ba ngày đo ở server, không đo bằng đồng hồ máy learner

`SetupState.days_since_start` đếm số ngày TRỌN từ `learners.created_at`; null khi không đọc được,
và khi ấy màn hình rơi về luật "còn dở thì còn bày". Client tự đếm được nếu được trao ngày bắt
đầu, nhưng khi ấy nó đếm bằng đồng hồ của máy learner - một máy lệch giờ là một learner nhìn thấy
(hoặc mất) đúng cái khối mà chỉ đạo này sinh ra để bày.

Mốc là `learners.created_at` chứ không phải ngày mở Learning Setup lần đầu: bảng `learner_ielts_setup`
chỉ có dòng SAU khi learner đã khai một thứ gì đó, nên đo từ đó là đo từ một mốc chỉ tồn tại với
người đã bắt đầu làm - đúng những người ít cần khối dẫn đường này nhất.

Kiểm: `setup.test.ts` (trạng thái bốn mức, phép đếm ngày trọn, mốc hỏng, mốc ở tương lai) và
`setupRoutes.test.ts` (route có thật sự nối `learners.created_at` vào `buildSetup`) - sợi dây ấy
đứt thì mọi test khác vẫn xanh và `days_since_start` chỉ lặng lẽ là null.

### 57d. Gập được, và nhớ (vòng 2, 21.09.2026)

Cụp lại thì còn đúng một dòng, và dòng ấy vẫn mang con số `n of m done` - gập không phải là giấu,
cùng luật với các chặng ở `/ielts/setup` (§57a của SRC-860 vòng gập 20.09.2026).

Lựa chọn **nhớ lại** qua `localStorage`, khoá theo learner (`nemo12.ielts.setupCard.<learnerId>`):
một nút cụp mà mở trang sau lại bung ra thì nó không giải quyết được gì, và cái hỏng ấy không lộ
ra trong một lượt xem bằng mắt - nên nó có ca e2e riêng. Đọc và ghi đều bọc `try/catch`: cửa sổ ẩn
danh và máy chặn site data ném ngay ở lượt đọc, và một khối dẫn đường không đáng làm trắng trang
chủ.

### 57e. Thẻ bốn kỹ năng rộng nửa trang (vòng 3, 21.09.2026)

Bốn dòng ấy mỗi dòng chỉ có một con số, một icon và một chữ. Kéo hết chiều ngang màn hình thì
giữa chữ và mũi tên là một khoảng trống dài bằng cả màn, và mắt phải đi hết quãng ấy mới tới được
chỗ bấm - đúng thứ luật tối giản SRC-048 gọi là chữ loãng ra trong một khung quá rộng.

`sm:w-1/2` chứ không `w-1/2`: dưới 640px thì một nửa của một màn hẹp là một cột chữ vỡ. Căn trái
chứ không căn giữa, để thẻ thẳng mép với `Live class` ngay trên nó và với khối Learning Setup.

## 65. Bỏ hẳn ba chặng Starting Point · Diagnosis · Calibration (SRC-957, 22.09.2026)

### 65a. Learning Setup còn hai chặng

`Goal` (target band + test date + study context) và `Learning Plan` (các mốc). Không chặng nào bị
khoá nữa: mắt xích duy nhất còn lại là Starting Point chờ Goal, và chặng ấy đã bỏ. Khoá Learning
Plan theo Goal thì sai chiều — learner xem bản kế hoạch để CHỌN đích.

Study context **quay lại chặng Goal**. Ở §63 nó vừa chuyển sang Starting Point vì nó trả lời "con
đang ở đâu"; lý do ấy vẫn đúng, nhưng chặng ấy không còn, và một câu trả lời không có chỗ đứng thì
learner mất luôn đường khai nó.

### 65b. Tám trang con đi theo

`quiz` · `skills` · `assessment` · `reading` · `listening` · `writing` · `speaking` · `booking`.
Địa chỉ của chúng không còn nhận ở `pathToRoute`, nên link cũ đổ về Learning Setup thay vì thành
trang trắng. `IeltsSkillsCheck.tsx` (dựng ở SRC-950 cùng ngày) đã xoá; `WritingBlock` và
`SpeakingBlock` cũng vậy.

### 65c. Những gì KHÔNG bị xoá, và vì sao

| Còn nguyên | Lý do |
| --- | --- |
| Bảng `assessment_sessions`, `ielts_diagnostic_items`, `ielts_productions`, `slot_bookings` | Xoá dữ liệu không hoàn tác được, và chủ dự án không yêu cầu điều đó |
| Các endpoint `ielts-diagnostic`, `ielts-exam-quiz`, `ielts-productions`, slots | Trang Hồ sơ IELTS và Learner Model còn đọc bằng chứng từ đây |
| `readDiagnosticStrands`, `evidenceBySkill` | Bằng chứng theo kỹ năng vẫn nuôi Learner Model |
| `focus_skills`, sổ ba lần thi | Sống ở `/ielts/settings` và ở thẻ "Latest test" trang Goal |

Nói thẳng hệ quả: **không còn đường nào trên giao diện dẫn tới bài đo hay tới đặt lịch gặp thầy cô.**
Learner không làm được hai việc ấy nữa. Đó là điều chủ dự án chọn sau khi được hỏi rõ, không phải
một mất mát lọt qua.

### 65d. Hai chỗ suýt gãy theo

* **`/ielts/settings` ẩn mất sổ điểm.** Nó bày sổ chỉ khi `start_mode === "has_score"`, mà lối vào
  ấy khai ở chặng Starting Point. Bỏ chặng mà giữ điều kiện thì sổ điểm biến mất với TẤT CẢ mọi
  người. Nay sổ hiện cho mọi learner; ai chưa có điểm thì thấy một sổ rỗng, đúng như nó là.
* **Danh sách loại trừ trong `pathToRoute`.** Nó dài ra ở SRC-950 và SRC-952 để các khoá việc không
  nuốt mất địa chỉ mạch luyện. Nay chỉ còn ba khoá việc, không khoá nào trùng, nên danh sách ấy
  biến mất cùng tám trang con.

## 69. Bỏ trang Goal, và Learning Setup còn hai đường dẫn (SRC-961, SRC-962, 22.09.2026)

* `/ielts/setup/goal` đã bỏ. Mục tiêu, ngày thi và điểm hiện tại vẫn khai được ở `/ielts/settings`,
  nơi chúng đứng cạnh sổ ba lần thi thay vì đứng một mình trong một trang chỉ có chúng.
* Chặng 1 đổi tên thành **Learner Profile** (khoá `goal` giữ nguyên — nó là khoá của một bước ở
  `pathway.ts`, không phải một cái nhãn). "Goal" đứng trên một dòng nói về cách learner học là một
  cái tên nói sai nội dung của chính nó.
* Learning Setup bỏ hẳn cấu trúc chặng: gập ra gập vào, dấu xong, danh sách phần con. Cấu trúc ấy
  sinh ra khi trang có năm chặng và hơn chục việc; nay còn hai, và một cái khung năm-chặng bọc
  quanh hai dòng chỉ là khung.
* Trang Learning Plan đổi địa chỉ: `/ielts/plan-board` → **`/ielts/learning-plan`**. Địa chỉ cũ vẫn
  NHẬN VÀO nhưng không còn được sinh ra — một trang có hai địa chỉ là số liệu về nó bị chẻ đôi.
* `IeltsLatestTest.tsx` (ba lối vào "đã thi / tự đoán / không đoán") **ở lại nhưng hiện không có
  màn nào dẫn tới**. Ghi rõ trong đầu file: nếu chủ dự án chốt bỏ, xoá cả file, đừng để nó nằm lại
  thêm một vòng.

## Lịch sử quyết định

### Từ mục 57. Learning Setup trở lại hub, trong ba ngày đầu (SRC-945, 2026-09-21)

Chỉ đạo chủ dự án 21.09.2026: *"Trong 3 ngày đầu tiên sử dụng hệ thống NEMO IELTS, thì learner cần
nhìn thấy mảng Learning Setup. Learner cần biết với mỗi phần nhỏ trong Learning Setup, thì phần nào
xong rồi, phần nào làm dở, phần nào chưa xong."*

Chỉ đạo vòng hai cùng ngày: *"Learner có thể collapse cái Learning Setup card lại."* Khối đứng
trên cả bốn kỹ năng, nên với learner đang trong ba ngày đầu mà hôm nay chỉ muốn vào luyện, nó là
một màn chữ phải cuộn qua mỗi lần mở trang.

Chỉ đạo: *"Cho cái card ở dưới cùng màn hình (chứa link tới 4 skills), chiều ngang ngắn lại 50%
so với hiện nay."*

### Từ mục 65. Bỏ hẳn ba chặng Starting Point · Diagnosis · Calibration (SRC-957, 22.09.2026)

Chỉ đạo chủ dự án 22.09.2026: *"Bỏ cụm 2, 3, 4 vì chúng không cần thiết nữa."* Hỏi lại phạm vi và
chủ dự án chốt: **bỏ hẳn cả tính năng**, không phải chỉ giấu khỏi màn hình.

### Từ mục 69. Bỏ trang Goal, và Learning Setup còn hai đường dẫn (SRC-961, SRC-962, 22.09.2026)

> *"Cần bỏ trang này (GOAL), và bỏ link tới 'target band and test date'."*
> *"Màn hình này sẽ chỉ còn 2 links thôi, click là vào thẳng trang đó luôn, đó là: Learning Plan và
> Learner Profile. Với trang Learning Plan, hãy chỉnh URL."*
