TEST-K4A: IN-PROGRESS # Lane test K4a — test-after 49 row menu KHKK 8-nhóm (S166, 2026-08-01) Agent: test-specialist. Ghi-từng-mục TRONG LÚC LÀM (luật sống-còn bài K3 engine-exit). Mục nào chưa chạy = ghi tiêu-đề + "CHƯA ĐO", KHÔNG điền số dự-đoán. ## §0 — Trạng thái khởi động - [x] §0.1 ĐÃ đọc khuôn. Chốt harness: seeder là `private static` → REFLECTION. - `SeedMenuTreeAsync(ApplicationDbContext, ILogger)` — 2 tham số. - `SeedAllRolesReviewReadPermissionsAsync(ApplicationDbContext, RoleManager, ILogger)` — 3 tham số (site-2). - Khuôn invoke đã có sẵn ở `ContractCatalogTests.cs:459` (`InvokePrivateSeedAsync`, rm nullable) → dùng lại HÌNH, không chế fixture mới. Fixture = `IdentityFixture` (cần RoleManager cho site-2). - [x] §0.2 ĐÃ đọc BE đã land (git diff, chưa commit): - `MenuKeys.cs:72-84` — `KhkkGroupNumbers=[2..8]` · `KhkkLeafActions=[WfView,List,Create,Pending,Approved,Deleted]` · `KhkkGroupMenuKeys` = SelectMany(group → 6 leaf) · spread `.. KhkkGroupMenuKeys` vào `All:244`. - `DbInitializer.cs:2115-2157` — vòng seed 49 row menu (parent `KeHoachKyKet`, Order nhóm = n, leaf Order 1..6) + `:2235` labelBackfill `Khkk_G1` + `:2442-2446` site-2 `KhkkKeys().Concat(KhkkGroupMenuKeys)`. - Đếm BY-SOURCE `All` = 113 (tự cộng tay từng dòng initializer). **Chưa phải số ĐO** — sẽ đo runtime ở T1. - [x] §0.3 CHỒNG LẤN ĐÃ CÓ (không viết lại): `ContractCatalogTests.cs:445` T6 K1 assert `MenuKeys.All.Except(menuKeysInDb).Should().BeEmpty()` sau `SeedMenuTreeAsync` ⇒ invariant "49 key mới ĐỀU có menu-row" ĐÃ được test cũ phủ tự động (nó là phép thử của claim by-construction). Lane K4a KHÔNG nhân bản; thay vào đó đo cái test cũ KHÔNG đo: hình bộ sinh · đếm 56 row họ Khkk · idempotent ×2 · labelBackfill · grant site-2. - [ ] §0.4 Baseline suite Infra đo TƯƠI — ĐANG CHẠY (nền), chưa có số ## §1 — Test bộ sinh đúng hình — CHƯA VIẾT ## §2 — Test seed idempotent x2 — CHƯA VIẾT ## §3 — Test labelBackfill đổi-label-không-nhân-row — CHƯA VIẾT ## §4 — Test grant site-2 phủ leaf mới — CHƯA VIẾT ## §5 — Kết quả chạy filtered — CHƯA ĐO ## §6 — Kết quả full Infra — CHƯA ĐO