# B6 — VERIFY LOCAL ④ (lead đo trực tiếp qua dev-server, 2026-08-12 ~20:40)

> Môi trường: BE `dotnet run` :5443 (LocalDB `SolutionErp_Dev`, seeder idempotent) + fe-user Vite
> :8081 (8080 bị OS reserve — đổi port, proxy /api giữ) + fe-admin :8082. Đăng nhập = token API
> bơm localStorage (không gõ credential vào form). `window.confirm` override `()=>true` cho phép
> đo mutation W5 — KHAI. Sau đo: 3 server đã stop. Noise Dev có sẵn: SlaExpiryJob ERR
> auto-approve 6 HĐ V1 hết SLA (transition adjacency legacy) — pre-existing, không dính wave.

## Kết quả per-ô (SỐ THẬT từ DOM/API/DB)

| Ô | Phép đo | Kết quả | Verdict |
|---|---|---|---|
| W1(i) bug A | `?type=3&ct=1` → accordion | nhóm **01 mở**, 6 nhóm kia đóng (trước fix: mở 03) | ✅ |
| W1(i) control | `ct=6` / `ct=7` | nhóm **06** / **07** mở đúng | ✅ |
| W1(ii) bug B | `?type=1&phase=9&view=approved` → className 6 leaf | CHỈ "Đã duyệt" mang `bg-brand-50 font-semibold…` highlight; leaf khác text-slate | ✅ |
| W1(iii) slice | codes hiện trên trang matrix | `ct=1`→[HD-TP] · `ct=6`→[HD-NT-NCC] · `ct=7`→[HD-NT-DV] (token gạch-nối — mapping sống) | ✅ 4/7 mã đo mẫu |
| W1(iii) control rác | `ct=99` | KHÔNG lọc — 8 mã hiện (7 HD-* + QT-HD-V2-001) ⇒ chứng `ct=1` vắng QT-HD-V2-001 là **vắng-vì-lọc** | ✅ |
| W2 layout | `/my-contracts?type=1` DOM 3 panel | trái = Select "Tất cả loại HĐ"+7 option + CÂY (Năm→dự án→gói→4 GĐ) · giữa detail · phải DANH-SÁCH | ✅ |
| W2(ii) chọn tại chỗ | click item list | URL Ở LẠI `/my-contracts?type=1&id=7d047e08…` + detail mở panel giữa | ✅ |
| W2(vii) HĐ ngoài-gói | list phải | 2 HĐ type-1 hiện đủ dù cây "Duyệt Hợp đồng 0" mọi gói | ✅ |
| W2 leaf-cây GĐ3 | click leaf HĐ TRÊN CÂY | **DEFERRED-TO-DEPLOY (Đ-7)** — Dev 0 leaf GĐ3 (HĐ dev đều ngoài-gói; cơ chế `?id=` đã chứng qua list-click cùng đường onSelect) | ⏸ khai |
| W3 | `?type=4&pendingMe=1` | Ở LẠI trang + chip "Đang duyệt — đến lượt tôi" + ô tìm disabled + chú thích hiện + network gọi **`GET /api/contracts/inbox`** thật | ✅ |
| W3 so-số 2 chiều | user đến-lượt vs không | **DEFER** — admin không phải approver V2 (inbox rỗng = đúng control "user ngoài luồng 0 dòng"); ca đến-lượt cần user duyệt thật | ⏸ khai |
| W4(i) | sidebar admin | **17 leaf đủ**: 2 NCC + 8 KHKK + **7 "QT Duyệt HĐ — {TP/GK/NCC/DV/MB/NT-NCC/NT-DV}"** | ✅ |
| W4(ii) | `/system/approval-workflows-v2/HdTP` | title "Quy trình duyệt (Mới): HĐ Thầu phụ" + khoá mã HD-TP | ✅ |
| W5 nửa-ÂM | HĐ DaPhatHanh(9) detail | nút "Xóa hợp đồng" **ẨN** | ✅ |
| W5 nửa-DƯƠNG | HĐ Nháp(2) `a79dd579` | nút **HIỆN** → click+confirm → **list VẮNG** + **màn Đã-xóa CÓ** + DB: changelog **đúng 1 dòng Action=3/PhaseAtChange=2/UserName=Administrator/ContextNote=null** + `IsDeleted=1, DeletedBy=admin` | ✅ end-to-end |

**Dev-data mutation có khai:** HĐ demo `a79dd579` ([DEMO] Thi công móng FLOCK01) nay soft-deleted
trong `SolutionErp_Dev` — bằng chứng sống ở màn "Đã xóa"; un-delete = 1 UPDATE nếu cần.

## Kết luận

**5/5 wave hành-vi SỐNG trên môi trường chạy thật.** 2 ô DEFER có khai (leaf-cây GĐ3 + so-số
pendingMe) — cả hai cần DỮ LIỆU (HĐ thuộc gói · user đến-lượt), không phải nghi vấn CODE; sẽ tự
có khi UAT prod sau deploy.
