wal: flush 20260727T1350

This commit is contained in:
pqhuy1987
2026-07-27 13:50:59 +07:00
parent d21b554f29
commit 0aa8557650
2 changed files with 299 additions and 1 deletions

View File

@ -63,7 +63,12 @@ chain:
[x] ✅ **A-ĐỢT-2 FE XONG** (sau 1 lần resume) — `tsc -p tsconfig.app.json` **SẠCH cả 2 app** · **hợp-đồng NỐI ĐỦ 2 CHIỀU**: `by-approver` **6 hit** · `/deleted` **4 hit** · **md5 mirror KHỚP** `eb55781a…` ×2 · `Layout.tsx` ×2 map `Approved``?phase=7` / `Deleted``?deleted=1`; fe-admin CỐ Ý không có `WfView` (giữ quyết định (c)). ⇒ **KHÔNG lặp lại F3 đợt 1**
[x] ✅ **A-ĐỢT-2 test XONG + lead vá T26****561 PASS / 0 FAIL** (45 Domain + 516 Infra, +10 test). `test-specialist` giữ T26 ĐỎ CÓ CHỦ Ý (đúng luật: bug production, không nới assert) + grep-cùng-lớp xác nhận site duy nhất + tự dọn file chẩn-đoán (khác agent đợt 1 bỏ quên `ZZ_DIAG`)
[x] 🔴 **BUG T26 + cách vá (đáng ghi memory)**: `Add(changelog)` rồi `Remove(pe)` ⇒ EF chạy cascade client-side **NGAY tại `Remove()`** (`CascadeDeleteTiming.Immediate`) ⇒ **DETACH** changelog đang `Added` ⇒ SaveChanges ghi **0 row IM LẶNG**. Đo: `stateAfterAdd=Added → stateAfterRemove=Detached → rowsInDb=0`. Trớ trêu: phiếu KHÔNG bị xóa thật (interceptor đổi Deleted→Modified = xóa MỀM) ⇒ **cascade hành động theo một vụ xóa KHÔNG BAO GIỜ xảy ra**. **Lead vá = ĐẢO THỨ TỰ** (`Remove` TRƯỚC, `Add` SAU) — rẻ hơn cả 3 hướng sub đề (2×SaveChanges+transaction · `CascadeDeleteTiming.Never` · set tay IsDeleted)
[!] wf: A-ĐỢT-2 reviewer — spawn TRỰC TIẾP `a64f...` soi diff đợt 2 trước deploy; ưu tiên: vá-đảo-thứ-tự của lead (chưa ai soi, hỏi có đúng trên SQL Server không chứ không chỉ SQLite) · 3 bẫy `IgnoreQueryFilters`/IDOR/D3 · guard per-NGƯỜI · labelBackfill
[x] 🔴 **A-ĐỢT-2 reviewer bắt HIGH `policy-blocks-approver`** — ĐO trên DB: approver thật `binh.le@…` vai `CostControl` `CanDelete=0`**403 ngay tầng policy**, chưa chạm 3 rào handler; FE gate CÙNG quyền ⇒ **không thấy nút, không thấy lỗi** (gotcha #44). 2 seeder KHÔNG BAO GIỜ nâng `CanDelete` (`:2139-2140` chỉ Read/Create · `:2538` skip-if-exists) ⇒ restart bao nhiêu lần cũng vô ích. **Đây là LẦN 3 cùng lớp lỗi "cơ chế đúng, dữ liệu không có"** — lead chữa triệu-chứng H1 đợt 1 (tách 2 đường) mà KHÔNG hỏi lại "ai đang có quyền trên đường MỚI"
[x] **A-owner chốt (14)**: phương án **(b) BỎ policy theo vai, giữ 3 rào nghiệp vụ**. Lý: cờ F6 = admin tick ĐÍCH DANH từng người ⇒ chặt hơn quyền theo vai; handler có `ICurrentUser` + ném Forbidden ⇒ đúng khuôn controller ("class any-auth, handler fine-grained")
[x] A-lead land 3 sửa (2 ĐẦU, chống sót read-site): (1) gỡ `[Authorize(Policy)]` khỏi `DeleteByApprover` + chú thích dài · (2) gỡ `can(...,'Delete')` khỏi FE gate + dọn 3 khai thừa, **re-mirror md5 `7cd6bbfe…` ×2** · (3) T25 viết lại ĐẢO CHIỀU (`Should().BeNull()`) + **đổi tên** `RequiresDeletePolicy``MustStayPolicyFree` (tên cũ nói dối sau khi đổi spec). Đo: **561 PASS/0 FAIL** · tsc 0 lỗi ×2
[x] A-lead vá chú-thích LOW-1 reviewer bắt đúng: bản đầu viết "thêm changelog SAU khi state đã đổi" — SAI một nhịp (lúc `Add()` phiếu VẪN `Deleted`); cơ-chế thật = **cascade tức thời đã xong tại `Remove()` khi chưa có con nào để gỡ**
[!] wf: A-ĐỢT-2 reviewer RESUME lần 2 — đã báo nó 3 thay đổi giữa lượt (mục-tiêu-di-động), xin verdict trên trạng-thái HIỆN TẠI
[~] wf: A-ĐỢT-2 reviewer — spawn TRỰC TIẾP `a64f...`; ưu tiên: vá-đảo-thứ-tự của lead (chưa ai soi, hỏi có đúng trên SQL Server không chứ không chỉ SQLite) · 3 bẫy `IgnoreQueryFilters`/IDOR/D3 · guard per-NGƯỜI · labelBackfill
[~] A-ĐỢT-2 test cũ: 516 total, 1 FAIL = `T26_Delete_WritesChangelogWithDeleteAction_AndCarriesReasonWhenProvided`. Handler CÓ ghi `ChangelogAction.Delete` (`PeSoftDeleteFeatures.cs:126-131`) ⇒ đỏ ở chi-tiết khác (nghi phần mang LÝ DO). `test-specialist` còn chạy (testhost lock ⇒ build báo MSB3027 = **KHÔNG phải lỗi mã**), chờ nó khai
[~] wf: A-ĐỢT-2 W1-bis — 2 spawn TRỰC TIẾP song song (KHÔNG qua hmw): `implementer-frontend` làm phần chính FE (`sub-d2-fe-3.md`) · `test-specialist` viết 10 test T21-T26 (`sub-d2-test-4.md`)
[~] wf: A-ĐỢT-2 W1 hmw — run-id `wf_55f6201f-a52` · anh lệnh "làm tiếp luôn" 2026-07-27 (KHÔNG chờ UAT đợt 1). 2 task SONG SONG: BE (xóa-by-approver + list /deleted + menu seed + changelog + 10 test) · FE (nút xóa panel + 3 mục menu + màn Đã xóa + md5-mirror)