Bỏ qua để đến nội dung

Practice Flow Screen Inventory

DomainsDOL EnglishUX1.233 words6 min read
activebyDOL Product Design
  • Chuẩn hóa danh sách màn hình cần triển khai cho area Practice Flow theo hướng flow-complete skeleton.
  • Chốt contract route/state trước, tránh mỗi entry source tự định nghĩa flow riêng.
  • Đảm bảo flow Attempt -> Result -> Impact Sync luôn nhất quán và không mất context quay lại.
  • Canonical routes:
    • /domains/dol-english/practice/attempt/:id
    • /domains/dol-english/practice/result/:id
  • Mọi route PRA đều là protected flow; guest chỉ thấy auth-required state rồi quay lại đúng route.
  • Required params tuân theo contract:
    • attempt: source_context, program, exercise_id, returnTo
    • result: source_context, program, exercise_id, returnTo + attempt_id trên path
  • returnTo không hợp lệ phải fallback deterministic về route hợp lệ gần nhất.
IDLayerScreenCanonical routeRequired statePriorityNotes
PRA-S01EntryEntry from Exercise Bank/domains/dol-english/practice/bank/:programId/:skillId -> /domains/dol-english/practice/attempt/:idPostP0Giữ source_context=self_study + returnTo bank
PRA-S02EntryEntry from Course Detail/domains/dol-english/courses/:courseId -> /domains/dol-english/practice/attempt/:idPostP0Giữ source_context=course + returnTo course
PRA-S03EntryAuth-required state at attempt route/domains/dol-english/practice/attempt/:idPreP0Login tại chỗ, retry cùng contract params
PRA-S04EntryAttempt contract validation gateSame attempt routePostP0Check required params trước khi render attempt
PRA-S05EntryAttempt invalid contract fallbackSame attempt route (invalid)Pre + PostP0Fallback về route hợp lệ + copy hướng dẫn
PRA-S06EntryAttempt loading/init stateSame attempt routePostP1Chuẩn bị metadata + session context
PRA-S07AttemptAttempt active stateSame attempt routePostP0Màn chính làm bài
PRA-S08AttemptTimed mode stateSame attempt route (mode=timed)PostP0Countdown + time-expired behavior
PRA-S09AttemptUntimed mode stateSame attempt route (mode=untimed)PostP1Không countdown, giữ contract như nhau
PRA-S10AttemptPause/exit confirm modalSame attempt route (modal)PostP1Giữ dữ liệu item đã trả lời
PRA-S11AttemptSubmit confirm stateSame attempt routePostP1Tránh submit nhầm
PRA-S12AttemptSubmit in-flight stateSame attempt routePostP0Lock thao tác trong lúc submit
PRA-S13AttemptSubmit failed retry stateSame attempt routePostP0Retry submit, không mất state phiên
PRA-S14AttemptSubmission success redirect/domains/dol-english/practice/attempt/:id -> /domains/dol-english/practice/result/:idPostP0Bắt buộc có attempt_id
PRA-S15ResultAuth-required state at result route/domains/dol-english/practice/result/:idPreP0Login tại chỗ, giữ params
PRA-S16ResultResult contract validation gateSame result routePostP0Check required params + attempt_id
PRA-S17ResultResult invalid contract fallbackSame result route (invalid)Pre + PostP0Fallback deterministic theo contract
PRA-S18ResultResult summary baselineSame result routePostP0Completion + score summary
PRA-S19ResultLM sync status panelSame result routePostP0Always-on sync: queued/done/failed_retrying
PRA-S20ResultVocabulary sync availableSame result routePostP0Chỉ khi có vocab_suggestion_payload hợp lệ
PRA-S21ResultVocabulary sync skippedSame result routePostP0Không payload thì skip nhưng không fail result
PRA-S22ResultSync pending/retry feedbackSame result routePostP1Hiển thị trạng thái retry nền
PRA-S23Result CTAReturn to previous contextSame result routePostP0Dùng returnTo đã sanitize
PRA-S24Result CTADo next exercise CTASame result routePostP1Điều hướng vào attempt tiếp theo
PRA-S25Result CTAOpen LM detail CTASame result routePostP1Xem thống kê sâu ở LM
PRA-S26Result CTAOpen Vocabulary suggestions CTASame result routePostP1Khi sync VOC có ý nghĩa cho user
PRA-S27GuardrailInvalid exercise fallback policyAttempt invalid exercise_idPre + PostP0Về bank/course gần nhất theo source context
PRA-S28GuardrailProgram mismatch recoveryAttempt/result routePre + PostP0Ưu tiên context từ source screen
PRA-S29GuardrailExpired/unsafe returnTo fallbackAttempt/result routePre + PostP0Fallback về landing/home hợp lệ
PRA-S30GuardrailLogout retains route contextCurrent PRA routeTransitionP0Không đổi route, chuyển sang auth-required state
PRA-S31GuardrailDeep-link direct access stateAttempt/result direct URLPre + PostP0Vẫn phải pass contract checks
PRA-S32AnalyticsPRA flow event instrumentation stateAttempt/result lifecyclePostP1Track entry_source, source_context, sync states
  1. P0 flow kernel: PRA-S01/S02 → S03/S04/S05 → S07/S08/S12/S13/S14 → S15/S16/S17/S18/S19/S20/S21/S23 → S27/S28/S29/S30/S31.
  2. P1 reliability + UX depth: PRA-S06/S09/S10/S11/S22/S24/S25/S26/S32.
  • Attempt/Result contract: đã map validation gate riêng cho cả hai routes.
  • Auth-first + returnTo: có state bắt buộc cho guest ở cả attempt/result.
  • Impact sync: LM always-on, Vocabulary conditional được tách riêng rõ ràng.
  • No dead-end: mọi route invalid đều có fallback policy.
  • Logout context retention: giữ route và chuyển về auth-required state.
  • PRA_Attempt_Flow.md đã có baseline active; vẫn cần ma trận variant sâu theo từng loại bài cụ thể ở phase implementation.
  • Chưa có mapping chuẩn giữa score_summary UI và công thức scoring engine theo từng dạng bài.
  • Chưa có acceptance matrix chính thức cho retry/offline/sync-failure behavior.
  • Chưa có concept docs riêng cho pre-login messaging tại attempt/result.
  1. docs/Shared/Shared Capabilities/Smart Search Platform/** (nếu tiếp tục mở rộng outside-in flow)
  • 2026-03-15: Chuẩn hóa route examples PRA sang canonical /domains/dol-english/* và route shape hiện hành :id.
  • 2026-02-21: Đồng bộ inventory với attempt baseline mới: bỏ ghi chú placeholder cho Attempt/Result, giữ open gaps ở mức variant matrix và acceptance matrix triển khai.
  • 2026-02-15: Khởi tạo inventory màn hình cho Practice Flow theo contract docs + runtime contract hiện tại, ưu tiên flow-complete skeleton.