wal: flush 20260801T0945
This commit is contained in:
@ -0,0 +1,40 @@
|
||||
IMPLFE-K4B: IN-PROGRESS
|
||||
|
||||
# Lane FE K4b — nối `?group=` + vá-3/5/6 (S166, 2026-08-01)
|
||||
|
||||
Nối finding-A của gate K4a ("`?group=` chết-lâm-sàng" = FLAG-2 lượt trước: leaf trỏ đúng URL nhưng KHÔNG ai đọc).
|
||||
SPEC PIN: spec-cụm2 vá 3 (queryKey 2 khoá) · vá 5 (`phase` derive thay mount-only) · vá 6 (Create preset từ URL) + K4b-7 (URL G1 mang `group=1`).
|
||||
|
||||
## §0 Kế hoạch đo trước khi gõ (khuôn S164/S166)
|
||||
- [ ] Đọc `KhkkListPage.tsx` TRỌN vùng state/query ×2 app — có mirror không (SHA)
|
||||
- [ ] Đọc `KhkkCreatePage.tsx` vùng state `approvalGroup` ×2 app
|
||||
- [ ] Grep staticMap 6 leaf G1 ở fe-admin (đề bài dặn: có thì mirror, không thì khai)
|
||||
- [ ] Xác nhận BE nhận `?group=` (K2 wire `[FromQuery(Name="group")]`) — Read-only
|
||||
|
||||
## §1 ĐO ĐĨA (ground truth) — TRƯỚC khi gõ
|
||||
|
||||
### 1.1 Baseline SHA (cả 2 page ĐANG mirror ×2 app ⇒ được phép `cp`)
|
||||
| file | sha256 trước K4b |
|
||||
|---|---|
|
||||
| `KhkkListPage.tsx` ×2 | `80ebd79dba1356e8f1512f798ab105eca312d84aae2744b7ed852ff667f60f3b` |
|
||||
| `KhkkCreatePage.tsx` ×2 | `677f4ab803b0b7ac73ede9b2d5871a3243f4cbe90153a218b320d642c6431268` |
|
||||
|
||||
### 1.2 🔴 TIỀN-ĐỀ ĐỀ-BÀI CẦN BẺ: vá-5 "derive thay useState" nguyên văn sẽ **GIẾT bộ lọc chip**
|
||||
`phase` KHÔNG chỉ đến từ URL — nó còn là state do người dùng bấm: `KpiCard onClick :153-156 setPhase(c.value)` (6 chip Tất cả/Soạn/Chờ/Đã/Trả lại/Từ chối). Comment `:11-12` khai rõ chủ đích: *"Chip lọc chỉ đổi STATE, KHÔNG ghi lại URL — giữ nguyên URL của leaf đang đứng nên menu không sáng nhầm"* (bài S155).
|
||||
⇒ Nếu làm `const phase = urlPhase` thuần thì `setPhase` mất chỗ đứng, **6 chip thành nút chết** — hỏng CÂM, build vẫn xanh.
|
||||
⇒ Giải đúng = **state override + reset theo danh tính URL** (khuôn React "adjust state during render", KHÔNG `useEffect`, không nháy 2 pass):
|
||||
`chipPhase: KhkkPhaseValue|null|undefined` — `undefined` = "chưa bấm chip, dùng URL"; `null` = "user chủ động chọn Tất cả" (2 nghĩa khác nhau, không gộp được). URL đổi ⇒ `chipPhase=undefined` + `page=1`.
|
||||
|
||||
### 1.3 🔴 BE `/deleted` KHÔNG nhận `group` (rào: không sửa BE)
|
||||
`ContractSigningPlansController.cs:59-66 ListDeleted(page, pageSize, search, sortDesc)` — **0 tham số group**, khác hẳn `List :42 [FromQuery(Name="group")] int? group`.
|
||||
⇒ `Khkk_G{n}_Deleted → /khkk/list?group=n&view=deleted` sẽ hiện phiếu xóa CỦA MỌI NHÓM. Không client-side lọc được vì `total`/phân trang do server đếm trên tập chưa lọc ⇒ lọc ở FE sẽ ra số trang nói dối. ⇒ Xử: **gửi `group` chỉ ở nhánh không-xóa** + **không để tiêu đề CLAIM nhóm ở màn đã-xóa** (không nói dối) + FLAG lane BE. Xem FLAG-1.
|
||||
|
||||
### 1.4 fe-admin CÓ 6 leaf G1 trong staticMap, nhưng `Khkk_WfView` ĐI ĐƯỜNG KHÁC
|
||||
`fe-admin/Layout.tsx:35` `Khkk_WfView → /system/approval-workflows-v2/ContractSigningPlan` (Designer), 5 leaf còn lại `:36-40` trỏ `/khkk/*` như fe-user.
|
||||
⇒ mirror `?group=1` cho **5 leaf**; `Khkk_WfView` admin **KHÔNG thêm** `group` (Designer không đọc tham số này — chính ghi chú K4a đã khai). Khai lệch, không mirror mù.
|
||||
|
||||
### 1.5 Xác nhận đường BE cho nhánh chính
|
||||
`List :42` `[FromQuery(Name="group")] int? group` → `ListContractSigningPlansQuery(..., group)` `:49`. ⇒ FE gửi `params.group` là ăn.
|
||||
|
||||
## §2 THỰC THI
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
TEST-K4A: DONE — 6/6 PASS · Infra 569→575 · Domain 45 · tổng 620 · 0 hồi quy · 0 prod-code touched
|
||||
TEST-K4A: DONE — 7/7 PASS (6 gốc + T7 finding-D) · Infra 569→576 · Domain 45 · tổng 621 · 0 hồi quy · 0 prod-code touched
|
||||
|
||||
# Lane test K4a — test-after 49 row menu KHKK 8-nhóm (S166, 2026-08-01)
|
||||
|
||||
@ -95,6 +95,30 @@ bộ lọc revoke thì suite vẫn xanh.
|
||||
- [x] §D.2 Chọn chỗ đặt: `KhkkGroupMenuSeedTests.cs` (file của lane K4a) — đã có sẵn mảng
|
||||
`Expected49` + 7 key nhóm 1 + harness seeder; đặt ở `AdminOnlyModulesRevokeTests.cs` sẽ phải
|
||||
chép lại danh sách 49 key (nguồn thứ 2 = nguy cơ lệch). Vẫn MIRROR khuôn 2-vế của file đó.
|
||||
- [ ] §D.3 Viết + chạy — CHƯA ĐO
|
||||
- [x] §D.3 ĐÃ viết `T7 Revoke_DoesNotTouch_KhkkGroups` (cuối `KhkkGroupMenuSeedTests.cs`).
|
||||
Kịch bản 1 lượt, 3 chiều phân biệt:
|
||||
1. seed menu THẬT + site-2 grant THẬT cho 3 role (Admin + Drafter + DeptManager);
|
||||
2. cấp tay 2 key **trong** tập ẩn (`Off_DanhBa`, `Personal`) cho cả 3 role = **CONTROL DƯƠNG**;
|
||||
3. tick thêm `CanCreate` cho `Khkk_G5_Create` (mô phỏng admin bật cờ ghi trên ma trận);
|
||||
4. chạy `RevokeTemporarilyHiddenModulesAsync`;
|
||||
5. **Vế 1** (control dương): 2 key kia của 2 role non-Admin về **false cả 4 cờ** ⇒ chứng
|
||||
revoker CÓ CHẠY (nếu đỏ = phép đo hỏng, không phải Khkk hỏng);
|
||||
**Admin giữ true** ⇒ chứng vế `RoleId != adminRoleId` còn sống;
|
||||
**Vế 2**: 56 key Khkk × 2 role = **112 row sống sót**, `CanRead` true, row KHÔNG bị xoá,
|
||||
cờ ghi đã tick vẫn true.
|
||||
Đếm bằng ĐƠN VỊ của sự cố thật (row sống sót) để thông điệp lỗi cùng ngôn ngữ Run #423.
|
||||
- [x] §D.4 **CHỨNG T7 CÓ RĂNG bằng PROBE VI-PHÂN** (không được chạm prod ⇒ không fault-inject
|
||||
vào `DbInitializer`): file tạm `ZzProbeTeethTemp.cs` dựng lại ĐÚNG hình câu truy vấn revoke
|
||||
(`:2554-2568`) + thêm **đúng 1 vế** `|| MenuKey.StartsWith("Khkk")` rồi đo trên DB thật.
|
||||
Kết quả ĐO: **trước = 112 row Khkk CanRead=true · sau bộ-lọc-bị-nới = 0** ⇒ đúng tập row mà
|
||||
T7 assert sẽ rơi hết ở thế giới hỏng ⇒ T7 phân biệt được 2 thế giới, KHÔNG phải assert đúng
|
||||
ở mọi thế giới. Probe chạy 1/1 PASS rồi **XOÁ**; verify 2 chiều: `git status -- tests/` chỉ
|
||||
còn 1 file `??` (KhkkGroupMenuSeedTests.cs) và suite = 569+**7** (không phải +8) ⇒ 0 dư lượng.
|
||||
|
||||
END sub-test-k4a — (tạm) 6/6 PASS, suite 620 — ĐANG THÊM test finding-D, chưa chốt
|
||||
## §9 — SỐ CHỐT (đo tươi, lần cuối, sau khi đã xoá probe)
|
||||
|
||||
- Filtered `~KhkkGroupMenuSeed`: **7/7 PASS**.
|
||||
- **Infra: 576 PASS / 0 FAIL** (baseline 569 + 7) · **Domain: 45 PASS / 0 FAIL**.
|
||||
- **Tổng suite = 621.**
|
||||
|
||||
END sub-test-k4a — VERDICT=7/7 PASS (+7 test, suite 621 = 45 Domain + 576 Infra, 0 hồi quy, 0 prod-code touched)
|
||||
|
||||
Reference in New Issue
Block a user