wal: flush 20260801T0937
This commit is contained in:
@ -1,17 +1,12 @@
|
||||
# Reviewer Agent — Persistent Memory
|
||||
|
||||
- **S166 (08-01) gate K4a 49-row menu KHKK 8-nhóm — PWF 4/0 blocker:** lõi ĐÚNG hiếm thấy (bộ-sinh 1 nguồn feed 3 phía `All`/seed-row/grant ⇒ khớp by-construction; 8/8 nhãn khớp TỪNG KÝ TỰ; suite **620/620 tôi tự chạy**). **Bài thu:** ① 🔴 **tham-số-trang-trí** — URL leaf mang `?group=n` mà `grep "get('group')"` ×2 app = **0 hit** ⇒ 7 nhóm × 6 leaf mở ra CÙNG nội dung, `WfView` hiện toàn bộ workflow type-10; *đo "route có tồn tại" là chưa đủ, phải đo **AI ĐỌC** từng param* (đối xứng ca S164 "tham-số-chết-vì-thiếu-tầng-UI", lần này chết ở tầng ĐỌC). ② **mỏ-neo tự-vô-hiệu ngay lúc land** — 2 comment mới trỏ dòng trong CHÍNH file đang sửa, sai đúng **+34 = kích thước khối vừa chèn** (tác giả tính trên bản trước khi chèn); cùng diff đó vừa DỌN lỗi y hệt ở BE (`1893`) ⇒ **mỏ neo trỏ vào file mình đang sửa phải đo SAU khi chèn**, hoặc bỏ số dùng grep-anchor. ③ **ô canonical sai đo-được bằng 1 curl** — STATUS ghi bundle `mySTlx42`/`CZAYiWWa`, live = `1yiNV4VH`/`DoULfmdT` (2 css KHỚP ⇒ chứng đo đúng site, không phải đo nhầm). ④ **bất-biến từng-vỡ-thật lại là bất-biến 0 test** (revoker không đụng `Khkk_*`; thêm 1 chữ vào filter thì 620/620 vẫn xanh, đúng kịch bản Run #423 mà chính comment dẫn lại) — khuôn có sẵn `Revoke_DoesNotTouch_PeModule`. ⑤ test gọi seeder LẺ qua reflection ⇒ chuỗi `SeedAsync` (grant→revoke→site-3) ngoài vùng test ⇒ **restart-thật KHÔNG được coi là đã phủ**. Tag `[s166, tham-so-trang-tri, moneo-tu-vo-hieu, o-canonical-sai-1-curl]` **Evidence:** `runs/2026-07-31-S164-4gd-khkk-fanout/sub-reviewer-gate-k4a.md`
|
||||
|
||||
- **S166 (08-01) vá F-1 ô-tích opt-out `applyLevelFinalize` KHKK — PWF 7 finding (3 MAJOR):** vá ĐÚNG kỹ thuật (mirror 2 app chứng bằng **blob-SHA in ngay trong `git diff` index-line** — rẻ hơn sha256 tay; body không rò field; cấp thường bất-biến từng bit). **Bài thu:** ① 🔴 **khuôn-nguồn có 2 tầng, chú-thích nói dối tầng dưới** — implementer trích ĐÚNG dòng JSX PE `:772-791` + nhãn "khuôn PE S96 default tick", nhưng `useState` PE `:61` = `false` (S97 owner **ĐẢO** sang opt-IN) và chính chú-thích PE `:769-771` cũng stale ⇒ **đo khuôn phải đo GIÁ-TRỊ KHỞI-TẠO, không đọc chú-thích**; tái phát S165 F-1 (đo sai tầng). ② **cây làm việc PHÌNH GIỮA LƯỢT REVIEW** — đo `git status` 2 lần cách ~40 tool-call: 5 file→7 file (+121 dòng K4a, `All` 64→113) ⇒ **verdict phải neo mốc đo + re-đo `--stat` TRƯỚC khi phát verdict**, nếu không lead commit ké code chưa qua cổng. ③ vắng-mặt-đọc-thành-sạch: `isApproved ⇒ mọi Bước 'Done'` ⇒ CEO chưa đụng vẫn "đã duyệt", dấu-vết duy nhất = THIẾU dòng "✓ ký". ④ **sợi-dây-1-argument** (projection `l.AllowApproverFinalize`) 0 test ⇒ xoá là control biến mất mà 614 test + tsc vẫn xanh. Tag `[s166, khuon-2-tang-chu-thich-noi-doi, cay-phinh-giua-review, sợi-day-1-argument]` **Evidence:** `runs/2026-07-31-S164-4gd-khkk-fanout/sub-reviewer-f1-checkbox.md`
|
||||
|
||||
- **[→ archive/2026-07.md @S166-curate] S164/S165 (07-31) gate K3 KHKK — PWF 8 finding/0 blocker:** **tham-số-chết-vì-thiếu-tầng-UI** (BE port đủ 3 tầng + seed cờ, panel gửi body literal 2 field ⇒ trạm CEO chết 8/8) — *claim "port khuôn X" phải đo TẦNG-CUỐI, ai GỬI tham số* · **sweep 2-cờ bất-đối-xứng** (FE gỡ 2 ô, BE gỡ 1 ⇒ tick bị nuốt im lặng) · lead cãi spec ĐÚNG khi có phép đo (`grep typeEnum` = 0 hit trong thân handler) · flake 1/3 lượt ⇒ "N/0 tươi" phải khai SỐ LƯỢT · DELTA STATUS chưa khai.
|
||||
- **[→ archive/2026-07.md — verbatim ĐÃ VERIFY moved-not-cut 4/4 @S166-curate] S164/S165 gate K3 · S164 gate K1 · S162 cây-4-folder · S161-W2 KHKK-CRUD (digest):** tham-số-chết-vì-thiếu-tầng-UI (đo TẦNG-CUỐI ai GỬI) · sweep 2-cờ bất-đối-xứng · flake ⇒ "N/0 tươi" phải khai SỐ LƯỢT · giá-trị lớn nhất ở GATE QUY-TRÌNH không ở mã · **ghost-policy** (grep policy, đừng suy từ "key đã vào All") · default-lấn-ngữ-nghĩa · im-lặng-về-độ-chính-xác-của-con-số ×3/diff · **#82 ngược chiều** (FE OR nhiều key LỎNG HƠN policy khớp-CHÍNH-XÁC-1-key ⇒ tự chuốc 403) · hợp-đồng FE↔BE VỠ 6 điểm mà tsc+build+574-test XANH (2 lỗi CHE NHAU) ⇒ so ROUTE+FIELD trên ĐĨA.
|
||||
|
||||
- **[→ archive/2026-07.md @S165-curate] S164 (07-31) gate K1 danh mục SP-002 (Mig 70) — PWF 9 finding/0 blocker:** giá-trị lớn nhất ở **GATE QUY-TRÌNH** không ở mã (commit gộp = vượt quyền owner; seeder 0 nhánh update) · 2 quyết-định hợp-lệ ghép nhau đẻ **ghost-policy** (4 policy, 0 endpoint tiêu thụ — đo `grep policy`, đừng suy từ "key đã vào All") · **default-lấn-ngữ-nghĩa** `IncludeInactive?`→`IsActive?` · DELTA đo được mà STATUS chưa khai.
|
||||
|
||||
- **[→ archive/2026-07.md @S165-curate] S162 (07-30) cây 4-folder GĐ (FE-only) — PWF 8 flag:** im-lặng-về-độ-chính-xác-của-con-số ×3 cùng diff · **#82 ngược chiều** (FE OR nhiều menu-key LỎNG HƠN policy khớp-CHÍNH-XÁC-1-key ⇒ tự chuốc 403) · nhãn ✓ không có phép đo.
|
||||
|
||||
- **[→ archive/2026-07.md @S162-curate] S161-W2 (07-29) KHKK CRUD 2-lane song song:** hợp-đồng FE↔BE VỠ 6 điểm mà tsc+build+574-test XANH (2 lỗi CHE NHAU) ⇒ so ROUTE+FIELD trên ĐĨA (lời-khai-lane = GIẢ ĐỊNH); list-bịt-detail-mở; INNER-join global-filter = picker vanish.
|
||||
|
||||
- **[→ archive/2026-07.md @S159/@S161/@S162-curate] S159-đợt5 · S161-W1 · S155-đợt2 (digest):** chú-thích-mang-SỐ phải chạy phép đếm · cookie-cutter phải soi CẢ phần bản gốc đã CHẶN · `tsc`+`noUnusedLocals` > grep cho claim 'đã cắt' · **HIGH nằm ở `git`** (mig UNTRACKED mà snapshot tracked ⇒ gate `git status --porcelain -- src tests | grep '^??'` RỖNG trước commit) · comment 'bên kia lo' = ĐI ĐỌC BÊN KIA · grep bằng TOKEN-SONG-SINH · `hợp-đồng-đứt-2-bờ` (FE khai cờ, BE DTO không có ⇒ nút chết mà build+test xanh) · re-đo đĩa TRƯỚC verdict · đổi-chiều-assert ≠ nới-assert.
|
||||
- **[→ archive/2026-07.md @S145/@S145b/@S155-curate · @S140] S145 4-lane · S143 · S139 · S134b · S133 · S146/S147/S152-D2 (digest):** bất-biến chia-đôi giữa 2 axis chỉ cross-cut sweep bắt · sweep CẢ numeric LẪN name-enum · `bằng-chứng-tự-huỷ-sau-squash` · re-measure acceptance từ git HEAD + no-self-exempt · insertion-only `grep '^-'`=0 · 'mọi nhánh set X' phải grep assignment-qua-BIẾN (#81) · `ExecuteDelete` ngoài transaction = mất dữ liệu · test đang KHOÁ chiều ngược CẤM nới assert · xanh-giả bắt bằng phép 2-thế-giới · 3 THƯỚC-HỎNG (md5 CRLF · `grep -c` citation-trap · `grep -iF` MSYS 0-hit im lặng).
|
||||
- **[→ archive/2026-07.md — verbatim, verify moved 5/5 @S166-curate] S159-đợt5 · S161-W1 · S155-đợt2 · S145-4lane · S143 · S139 · S134b · S133 · S146/S147/S152-D2 (digest gộp):** chú-thích-mang-SỐ phải chạy phép đếm · cookie-cutter soi CẢ phần bản gốc đã CHẶN · `tsc`+`noUnusedLocals` > grep cho claim 'đã cắt' · **HIGH nằm ở `git`** (gate `git status --porcelain -- src tests | grep '^??'` RỖNG trước commit) · comment 'bên kia lo' = ĐI ĐỌC BÊN KIA · grep bằng TOKEN-SONG-SINH · `hợp-đồng-đứt-2-bờ` · re-đo đĩa TRƯỚC verdict · đổi-chiều-assert ≠ nới-assert · bất-biến chia-đôi 2-axis chỉ cross-cut sweep bắt · `bằng-chứng-tự-huỷ-sau-squash` · re-measure acceptance từ git HEAD + no-self-exempt · 'mọi nhánh set X' phải grep assignment-qua-BIẾN (#81) · `ExecuteDelete` ngoài transaction = mất dữ liệu · test đang KHOÁ chiều ngược CẤM nới assert · xanh-giả bắt bằng phép 2-thế-giới · 3 THƯỚC-HỎNG (md5 CRLF · `grep -c` citation-trap · `grep -iF` MSYS 0-hit im lặng).
|
||||
|
||||
|
||||
> **Persistent diary cross-session.** Auto-injected first ~200 lines at spawn (L1 HOT).
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
GATE-K4A: IN-PROGRESS
|
||||
GATE-K4A: PASS-WITH-FLAGS 4
|
||||
|
||||
# Gate K4a — adversarial review wave K4a (49 row menu KHKK 8-nhóm)
|
||||
|
||||
@ -159,6 +159,80 @@ nhận, nhưng thứ được xác nhận là mốc K3, không phải trạng th
|
||||
`labelBackfill` đã đổi `Label` thành công. ⇒ khi nghiệm thu A5 phải đo `Label` **bằng SQL**, và nếu
|
||||
đo trên UI thì kiểm `DisplayLabel IS NULL` trước. Ghi ra đây để cicd không kết luận nhầm "backfill hỏng".
|
||||
|
||||
## Mục 8 — idempotent + revoker-proof: test đủ răng chưa?
|
||||
|
||||
**Đo tươi suite (chính tôi chạy, không tin lane):** `dotnet test SolutionErp.slnx` exit-0 —
|
||||
Domain **45/45**, Infrastructure **575/575**, **tổng 620 PASS / 0 FAIL**. Khớp đúng số STATUS `:6`
|
||||
ghi (620 = 45D+575I). Con số này có phép-kiểm-làm-nó-trượt và tôi đã chạy phép kiểm đó.
|
||||
|
||||
- **Site-2 `.Concat` chạy 2 lần — KHÔNG double-grant.** 3 lớp chặn, đọc trên đĩa:
|
||||
① `reviewKeys` kết thúc bằng `.Distinct()` (`:2480`) ⇒ trong 1 lượt không có key lặp;
|
||||
② nhánh key đã tồn tại: `existingRows.TryGetValue((role.Id, key), …)` → non-Pe `continue`
|
||||
(`:2497-2508`) ⇒ lượt 2 là no-op;
|
||||
③ backstop DB: `PermissionConfiguration.cs:26` `HasIndex(x => new { x.RoleId, x.MenuKey }).IsUnique()`
|
||||
⇒ nếu 2 lớp trên hỏng thì NỔ chứ không âm thầm nhân đôi. PASS.
|
||||
- **T3/T4 có răng cho phần chúng đo**: T3 seed ×2 rồi so `khkkAfter2.Equal(khkkAfter1)` + `totalAfter2
|
||||
== totalAfter1` (đếm TOÀN bảng, không riêng họ Khkk) ⇒ bắt cả nhân-row chỗ khác. T4 đo DB↔DB lấy
|
||||
nhóm 1 làm mốc + chốt trước "6 nhãn nhóm 1 phân biệt" (chống vacuous). T5 dùng ma-trận
|
||||
cùng-ruột-khác-1-biến (G1 có entry backfill tự lành / G2 không có entry giữ chữ hỏng) — đúng cách
|
||||
chứng CƠ CHẾ chứ không chứng kết quả. Đây là bộ test viết tốt hơn mức trung bình của repo.
|
||||
|
||||
🔴 **FLAG D (MAJOR) — bất-biến DUY NHẤT từng vỡ trên prod lại là bất-biến KHÔNG có test.**
|
||||
`RevokeTemporarilyHiddenModulesAsync` không đụng `Khkk_*` — tôi đã verify bằng mắt trên LINQ
|
||||
(`:2554-2567`, chỉ `Hrm`/`Off`/`Personal`) và comment vá-11 khai đúng. Nhưng:
|
||||
- Không test nào khoá điều đó. Thêm 1 chữ `|| p.MenuKey.StartsWith("Khkk")` vào bộ lọc ⇒ **620/620
|
||||
vẫn XANH**, còn thực tế 49 row CanRead vừa cấp bị lật sạch ở lần restart kế.
|
||||
- Đúng kịch bản đã xảy ra THẬT và được chính comment `:2558-2565` dẫn lại: Run #423, "447/494 row rơi,
|
||||
11/13 role về 0".
|
||||
- Khuôn có sẵn, rẻ: `AdminOnlyModulesRevokeTests.cs:188` `Revoke_DoesNotTouch_PeModule` — mirror thành
|
||||
`Revoke_DoesNotTouch_KhkkGroups` là xong.
|
||||
- T3/T4/T5/T6 đều gọi **từng seeder lẻ qua reflection**, không chạy chuỗi `SeedAsync` đầy đủ ⇒ **thứ
|
||||
tự** grant → revoke → site-3 hoàn toàn ngoài vùng test. Vì vậy acceptance A5 (restart API ×2 THẬT)
|
||||
**chưa thể thay bằng test** — giữ nguyên là việc bắt buộc của lane cicd, đừng tick sớm.
|
||||
|
||||
## Mục 9 — đụng key cũ? cây phình?
|
||||
|
||||
- **Va key: 0.** Đo bằng chính phép parse `All`: `duplicates: []`; 7 key nhóm 1 (`Khkk_G1`,
|
||||
`Khkk_WfView`…`Khkk_Deleted`) **không** nằm trong `All` (đúng chủ ý, T2 khoá bằng `NotContain`);
|
||||
giao của 49 key sinh với 7 key nhóm 1 = **∅**; họ `AwV2_KhkkN1..N8` (K3) tách namespace hoàn toàn
|
||||
(`AwV2_` ≠ `Khkk_`), 8/8 vẫn nguyên trong `All`.
|
||||
- **Kế thừa quyền: không lây.** `GetMyMenuTreeQuery` chỉ inherit từ 4 root (`Contracts`, `Workflows`,
|
||||
`PurchaseEvaluations`, `PeWorkflows`); `KeHoachKyKet` không có case ⇒ 49 key mới **không** thừa cờ
|
||||
từ root, đúng thiết kế "grant từng dòng" (khớp gotcha #85 — endpoint vẫn gate `KeHoachKyKet.*`).
|
||||
- **Cây phình (mốc CUỐI, re-đo sau khi lead vá STATUS):**
|
||||
- HEAD trôi 2 lần trong lượt review: `ce15c64` → `21908b4` → **`0cae243`**; cả 2 commit mới là
|
||||
`wal: flush`, đo `git diff --stat ce15c64..HEAD -- src fe-user fe-admin tests docs` = **RỖNG**
|
||||
⇒ không có mã nào lọt vào commit governance. OK.
|
||||
- `git diff --stat -- src fe-user fe-admin docs` = **7 file, +219 / −11** (6 code + `docs/STATUS.md`).
|
||||
- `git status --porcelain` = 10 M + 1 `??`. Trong đó **8 file thuộc commit K4a** (6 code + STATUS +
|
||||
file test untracked); **3 file KHÔNG thuộc**: `.claude/auto-memory/MEMORY.md`,
|
||||
`.claude/auto-memory/feedback_return_terminates_agent.md`, `.claude/governance/.session-counter.json`.
|
||||
- ⚠️ **Note E:** `git add -A` sẽ kéo 3 file governance vào commit mã. Add đích danh 8 file.
|
||||
- So mốc đầu (T0: 6 file code) → mốc cuối (7 file + test): phần thêm đúng bằng `docs/STATUS.md` mà
|
||||
coordinator đã báo trước ⇒ **không có phình lén**.
|
||||
|
||||
## VERDICT — PASS-WITH-FLAGS 4 (0 blocker)
|
||||
|
||||
Phần lõi K4a **đúng và đo được**: 49 key by-construction 3 phía (`All` · seed menu-row · grant site-2),
|
||||
`|All| = 113` / `Policies = 452` khớp logic sinh, 8/8 nhãn khớp TỪNG KÝ TỰ với bảng owner đã soát,
|
||||
0 va key, idempotent 3 lớp, revoker không đụng, suite **620/620 PASS đo tươi**. Không có gì trong diff
|
||||
chặn phép đo prod A4/A5. Không kiến nghị sửa mã — dưới đây là vấn đề + tiêu chí nghiệm thu.
|
||||
|
||||
| # | Mức | Vấn đề | Tiêu chí đóng |
|
||||
|---|---|---|---|
|
||||
| A | MAJOR | `?group=n` **không code nào đọc** (`get('group')` 0 hit ×2 app) ⇒ 7 nhóm mới × 6 leaf mở ra **cùng một nội dung**; `WfView` hiện TOÀN BỘ workflow type-10 chứ không riêng `KHKK-N{n}`. Chính spec đã tiên đoán (`sub-invest-fable-b2-cum2.md:9` "silent-wrong, không lỗi build") | Lead/owner dispose tường minh như FLAG-3, ghi rõ wave nào nối (K4b đọc `group` → params API; K4c lọc WfView) và **không deploy ra người dùng trước khi nối**, hoặc chấp nhận có văn bản |
|
||||
| B | MAJOR | 2 mỏ neo MỚI trong `fe-user/Layout.tsx` sai đúng +34 dòng = kích thước khối vừa chèn: `TRANSIENT_QUERY_KEYS (:311)` → thật `:345`; `MenuLeaf :342` → thật `:376`. Cùng lớp lỗi mà vá-13 vừa dọn ở BE | Sửa 2 số, hoặc bỏ số dùng mỏ neo grep (như BE đã làm: `grep existingItems.TryGetValue`) |
|
||||
| C | MAJOR | `docs/STATUS.md:479` ghi bundle admin `mySTlx42` / user `CZAYiWWa`, **đo live cùng lượt = `1yiNV4VH` / `DoULfmdT`** (2 css khớp ⇒ đo đúng site). Ô canonical sai ngay lúc commit | Thay bằng 2 hash vừa đo, hoặc ghi thẳng "chưa đo lại sau `7a903cf`" thay vì để hash chết ở ô canonical |
|
||||
| D | MAJOR | Bất-biến "revoker không đụng `Khkk_*`" — thứ **đã vỡ thật trên prod** (Run #423, 447/494 row rơi, chính comment `:2558-2565` dẫn lại) — **không có test**. Thêm 1 chữ vào bộ lọc revoke thì 620/620 vẫn xanh | Thêm `Revoke_DoesNotTouch_KhkkGroups` mirror khuôn sẵn có `AdminOnlyModulesRevokeTests.cs:188` |
|
||||
| E | NOTE | 3 file `.claude/**` (auto-memory ×2 + `.session-counter.json`) đang dirty cùng cây | Add đích danh 8 file (6 code + `docs/STATUS.md` + file test), KHÔNG `git add -A` |
|
||||
|
||||
Ghi chú độc lập: A5 (restart API ×2 THẬT) **không** được coi là đã phủ bởi T3/T4 — 4 test đều gọi
|
||||
từng seeder lẻ qua reflection, chuỗi `SeedAsync` (grant → revoke → site-3) chưa từng chạy trong test.
|
||||
|
||||
END sub-reviewer-gate-k4a — VERDICT=PASS-WITH-FLAGS 4 (A `?group=` chết-lâm-sàng · B 2 mỏ-neo tự-vô-hiệu ·
|
||||
C ô bundle canonical sai đo-được · D bất-biến-từng-vỡ không test) · 0 blocker · suite 620/620 đo tươi ·
|
||||
All=113/Policies=452 đo độc lập · nhãn 8/8 khớp từng ký tự
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -80,4 +80,21 @@ land vào repo. Đã kiểm: `git diff --stat -- src/` vẫn đúng 42/79 dòng
|
||||
3. **Số canonical cần đổi kèm K4a:** `MenuKeys.All` ĐO runtime = 113 ⇒ `docs/STATUS.md` row
|
||||
`Menu keys` = 113 · `Policies` = 452. (T2 sẽ ĐỎ nếu 2 số này drift khỏi mã.)
|
||||
|
||||
END sub-test-k4a — VERDICT=6/6 PASS (+6 test, suite 620 = 45 Domain + 575 Infra, 0 hồi quy)
|
||||
## §D — RESUME gate K4a, finding D (MAJOR): bất-biến "revoker KHÔNG đụng `Khkk_*`"
|
||||
|
||||
Lệnh lead: +1 Fact `Revoke_DoesNotTouch_KhkkGroups`. Lý do: ca ĐÃ VỠ THẬT trên prod
|
||||
(Run #423 — 447/494 row rơi, 11/13 role về 0; gotcha #84) mà hiện 0 test ⇒ thêm 1 chữ vào
|
||||
bộ lọc revoke thì suite vẫn xanh.
|
||||
|
||||
- [x] §D.1 Đọc PREDICATE THẬT từ mã (`DbInitializer.cs:2554-2568`), không theo prompt:
|
||||
`RoleId != adminRoleId && (MenuKey.StartsWith("Hrm") || MenuKey.StartsWith("Off")
|
||||
|| MenuKey == Personal) && (bất kỳ cờ nào đang true)` → set cả 4 cờ = false.
|
||||
🔴 **Bẫy vacuous-pass phát hiện khi đọc mã:** `:2546-2551` — **Admin role chưa seed ⇒ revoker
|
||||
RETURN SỚM, no-op**. Test không seed Admin sẽ XANH vì revoker CHƯA TỪNG CHẠY, chứ không
|
||||
phải vì `Khkk_*` được tha. Bắt buộc seed Admin + có **control dương**.
|
||||
- [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
|
||||
|
||||
END sub-test-k4a — (tạm) 6/6 PASS, suite 620 — ĐANG THÊM test finding-D, chưa chốt
|
||||
|
||||
Reference in New Issue
Block a user