Feature Tag Matrix — MiniApp V2 (2026-02-27)
Mục tiêu: gắn tag trạng thái kỹ thuật cho từng feature miniapp_v2 để đội dev ưu tiên triển khai từ mock → production. Scope:
miniapp_v2/miniapp(consumer app), đối chiếu với backendv2và spec v3 mới.
1) Tag Dictionary
1.1 Spec/Design Tags
SPEC_STRONG: Spec đã rõ requirement + acceptance + rollout.SPEC_GAP: Spec chưa đủ chi tiết để implement an toàn.LEGACY_PARITY_OK: Đã cover parity cần thiết từ legacy.LEGACY_NOT_TARGET: Feature legacy nằm ngoài scope phase hiện tại.
1.2 Backend Readiness Tags
BE_READY: Có endpoint + contract đủ dùng cho production flow.BE_PARTIAL: Có endpoint chính nhưng còn thiếu action/contract phụ.BE_CONTRACT_GAP: Chưa có contract endpoint rõ cho behavior hiện tại của FE.BE_MOCK_ONLY: FE hiện chỉ chạy mock data/in-memory.BE_GUARD_RISK: Manifest cảnh báo guard/permission chưa chắc chắn, cần verify code truth.
1.3 Frontend/Test Tags
FE_READY: UI flow đã đủ màn hình/trạng thái chính.FE_PARTIAL: UI có nhưng còn thiếu xử lý edge-case hoặc coupling mock.TEST_GAP: Chưa có contract/E2E coverage theo mức go-live.OBS_GAP: Chưa chuẩn hóa telemetry/monitoring cho feature.
2) Matrix
| Feature Key | Feature | Routes / Surface | Spec Tag | Backend Tag | FE Tag | Test Tag | Current Tags | Priority | Next Action |
|---|---|---|---|---|---|---|---|---|---|
| MA.AUTH.001 | Tenant Zalo Login Bootstrap | App init, auth gate | SPEC_STRONG | BE_PARTIAL | FE_PARTIAL | TEST_GAP | SPEC_STRONG,BE_PARTIAL,FE_PARTIAL,TEST_GAP | P0 | Chốt bootstrap contract tenantId/appInstanceId, implement real auth adapter + refresh race handling |
| MA.AUTH.002 | Protected Route Resume | /orders, /addresses, /vouchers, /notifications, /news/saved | SPEC_STRONG | BE_READY | FE_READY | TEST_GAP | SPEC_STRONG,BE_READY,FE_READY,TEST_GAP | P0 | Thêm E2E resume-action sau login |
| MA.AUTH.003 | Auth Gate Modal (Global) | Overlay modal across protected actions | SPEC_STRONG | BE_PARTIAL | FE_PARTIAL | TEST_GAP | SPEC_STRONG,BE_PARTIAL,FE_PARTIAL,TEST_GAP | P0 | Chuẩn hóa modal auth (resume/cancel/retry), tránh pending-action chạy lặp |
| MA.CAT.001 | Catalog Home Feed | / | SPEC_STRONG | BE_READY | FE_READY | TEST_GAP | SPEC_STRONG,BE_READY,FE_READY,TEST_GAP,BE_GUARD_RISK | P0 | Cắm real API cho categories/products/news; verify permission guard thực tế |
| MA.CAT.002 | Category Listing/Filter | /categories, /category/:id | SPEC_STRONG | BE_READY | FE_READY | TEST_GAP | SPEC_STRONG,BE_READY,FE_READY,TEST_GAP | P1 | Chuẩn hóa server-side filter/sort để giảm lệch FE filter local |
| MA.CAT.003 | Product Detail | /product/:id | SPEC_STRONG | BE_READY | FE_READY | TEST_GAP | SPEC_STRONG,BE_READY,FE_READY,TEST_GAP | P1 | Map chuẩn payload stock/price/variant từ BE DTO |
| MA.SEARCH.001 | Product Search + Suggestion | /search | SPEC_STRONG | BE_PARTIAL | FE_READY | TEST_GAP | SPEC_STRONG,BE_PARTIAL,FE_READY,TEST_GAP,OBS_GAP | P1 | Tách suggestion/trending API rõ; chuẩn hóa search telemetry event schema |
| MA.CART.001 | Cart Sync | /cart | SPEC_STRONG | BE_READY | FE_PARTIAL | TEST_GAP | SPEC_STRONG,BE_READY,FE_PARTIAL,TEST_GAP,BE_MOCK_ONLY | P0 | Thay in-memory cart bằng /v2/ecommerce/carts/* adapter + sync strategy |
| MA.CHK.001 | Checkout Submit | /checkout | SPEC_STRONG | BE_READY | FE_PARTIAL | TEST_GAP | SPEC_STRONG,BE_READY,FE_PARTIAL,TEST_GAP,BE_MOCK_ONLY | P0 | Chuyển create order sang endpoint thật, thêm error normalization |
| MA.CHK.002 | Checkout Success State | /checkout (success state) | SPEC_STRONG | BE_PARTIAL | FE_PARTIAL | TEST_GAP | SPEC_STRONG,BE_PARTIAL,FE_PARTIAL,TEST_GAP | P0 | Bổ sung idempotent guard + success navigation contract + order code binding |
| MA.VCH.001 | Voucher Wallet | /vouchers | SPEC_STRONG | BE_PARTIAL | FE_READY | TEST_GAP | SPEC_STRONG,BE_PARTIAL,FE_READY,TEST_GAP | P1 | Chốt API list voucher theo user/tenant |
| MA.VCH.002 | Voucher Validate/Apply | /checkout | SPEC_STRONG | BE_READY | FE_READY | TEST_GAP | SPEC_STRONG,BE_READY,FE_READY,TEST_GAP | P0 | Lock race-condition apply + revalidate trước submit |
| MA.ORD.001 | Order List | /orders | SPEC_STRONG | BE_READY | FE_READY | TEST_GAP | SPEC_STRONG,BE_READY,FE_READY,TEST_GAP,BE_GUARD_RISK | P0 | Map query pagination/filter vào BE thật, thêm contract tests |
| MA.ORD.002 | Order Detail | /order/:id | SPEC_STRONG | BE_READY | FE_READY | TEST_GAP | SPEC_STRONG,BE_READY,FE_READY,TEST_GAP | P0 | Kiểm tra mapping timeline/status notes từ BE domain |
| MA.ORD.003 | Order Actions (cancel/retry/confirm/reorder) | /order/:id | SPEC_STRONG | BE_CONTRACT_GAP | FE_PARTIAL | TEST_GAP | SPEC_STRONG,BE_CONTRACT_GAP,FE_PARTIAL,TEST_GAP | P0 | Chốt endpoint/action map: cancel reason, payment retry URL, confirm received |
| MA.ADDR.001 | Address CRUD + Default | /addresses, checkout picker | SPEC_STRONG | BE_CONTRACT_GAP | FE_READY | TEST_GAP | SPEC_STRONG,BE_CONTRACT_GAP,FE_READY,TEST_GAP,BE_MOCK_ONLY | P0 | Định nghĩa và implement address API v2 chính thức + unique default rule |
| MA.ADDR.002 | Address Picker Modal | /checkout (sub-flow) | SPEC_STRONG | BE_CONTRACT_GAP | FE_PARTIAL | TEST_GAP | SPEC_STRONG,BE_CONTRACT_GAP,FE_PARTIAL,TEST_GAP,BE_MOCK_ONLY | P0 | Đồng bộ chọn địa chỉ trong checkout với API thật, bỏ lệch local/server |
| MA.ADDR.003 | Address Form Modal + Location Cascade | /checkout, /addresses (sub-flow) | SPEC_STRONG | BE_CONTRACT_GAP | FE_PARTIAL | TEST_GAP | SPEC_STRONG,BE_CONTRACT_GAP,FE_PARTIAL,TEST_GAP,BE_MOCK_ONLY | P0 | Dùng GET /v2/admin/mdm/locations làm source chuẩn + map code->label cho city/district/ward |
| MA.NOTI.001 | In-app Notifications | /notifications, home badge | SPEC_STRONG | BE_PARTIAL | FE_READY | TEST_GAP | SPEC_STRONG,BE_PARTIAL,FE_READY,TEST_GAP,BE_GUARD_RISK | P1 | Verify guard chain cho /v2/content/notifications/in-app* và chốt unread-count/read idempotent |
| MA.NEWS.001 | News Feed | /news | SPEC_STRONG | BE_CONTRACT_GAP | FE_READY | TEST_GAP | SPEC_STRONG,BE_CONTRACT_GAP,FE_READY,TEST_GAP | P1 | Tách read API public miniapp (không yêu cầu CMS_VIEW nội bộ) + filter/sort/paging chuẩn |
| MA.NEWS.002 | News Detail + Related | /news/:slug | SPEC_STRONG | BE_CONTRACT_GAP | FE_READY | TEST_GAP | SPEC_STRONG,BE_CONTRACT_GAP,FE_READY,TEST_GAP,OBS_GAP | P1 | Bổ sung by-slug + related endpoints; hiện tại controller chỉ có GET :id |
| MA.NEWS.003 | News Search | /news/search | SPEC_STRONG | BE_CONTRACT_GAP | FE_READY | TEST_GAP | SPEC_STRONG,BE_CONTRACT_GAP,FE_READY,TEST_GAP | P1 | Bổ sung query search contract (q) thay vì chỉ filter status/category |
| MA.NEWS.004 | News Bookmark | /news/saved | SPEC_STRONG | BE_CONTRACT_GAP | FE_PARTIAL | TEST_GAP | SPEC_STRONG,BE_CONTRACT_GAP,FE_PARTIAL,TEST_GAP,BE_MOCK_ONLY | P1 | Tạo bookmark API server-side theo user |
| MA.REV.001 | Product Reviews / Write Review | /product/:id/reviews, /write-review/:orderId/:productId | SPEC_STRONG | BE_CONTRACT_GAP | FE_READY | TEST_GAP | SPEC_STRONG,BE_CONTRACT_GAP,FE_READY,TEST_GAP | P2 | Chốt review API contract + policy verified-purchase |
| MA.SUP.001 | Support Center | /support | SPEC_STRONG | BE_PARTIAL | FE_READY | TEST_GAP | SPEC_STRONG,BE_PARTIAL,FE_READY,TEST_GAP | P2 | Nối CMS/contact config thay hardcoded content |
| MA.SUP.002 | Contact Support Channels | /support (contact actions) | SPEC_STRONG | BE_CONTRACT_GAP | FE_PARTIAL | TEST_GAP | SPEC_STRONG,BE_CONTRACT_GAP,FE_PARTIAL,TEST_GAP | P1 | Bổ sung config tenant-aware hotline/chat/email + SDK fallback |
| MA.SUP.003 | Support Category Pages | /support/:category | SPEC_STRONG | BE_CONTRACT_GAP | FE_PARTIAL | TEST_GAP | SPEC_STRONG,BE_CONTRACT_GAP,FE_PARTIAL,TEST_GAP | P1 | Triển khai route category + article list động theo CMS |
| MA.SUP.004 | Q&A Center | /question-and-answer | SPEC_STRONG | BE_CONTRACT_GAP | FE_PARTIAL | TEST_GAP | SPEC_STRONG,BE_CONTRACT_GAP,FE_PARTIAL,TEST_GAP | P1 | Thiết kế contract tab all/mine + auth gate cho mine scope |
| MA.SUP.005 | Send Question | /send-question | SPEC_STRONG | BE_CONTRACT_GAP | FE_PARTIAL | TEST_GAP | SPEC_STRONG,BE_CONTRACT_GAP,FE_PARTIAL,TEST_GAP | P1 | Implement form submit + moderation lifecycle + rate-limit handling |
3) Summary by Tag
3.1 High-risk (P0 + backend chưa chắc)
MA.AUTH.001MA.AUTH.003MA.CART.001MA.CHK.001MA.CHK.002MA.ORD.003MA.ADDR.001MA.ADDR.002MA.ADDR.003
3.2 Mock-only hotspots
MA.CART.001MA.CHK.001MA.ADDR.001MA.ADDR.002MA.ADDR.003MA.NEWS.004
3.3 Guard verification needed
MA.CAT.001MA.ORD.001MA.NOTI.001
4) Go-live Gate (recommended)
- Gate-1: Toàn bộ P0 không còn tag
BE_MOCK_ONLYhoặcBE_CONTRACT_GAP. - Gate-2: Mỗi P0 có contract test + 1 E2E path pass.
- Gate-3: Không còn
BE_GUARD_RISKchưa verify ở flow có mutation. - Gate-4: Traceability update đồng bộ
FEATURE_STATUS_MATRIX.md+WORKITEM_BOARD.md.
5) Source References
- Core spec mới:
02_SPECS/core/miniapp.md - Gap closure spec:
02_SPECS/core/miniapp_v2_mock_completion_specs.md - Backend manifest:
05_GENERATED/backend_api_manifest.md - UI routes:
miniapp_v2/miniapp/src/App.tsx