wal: flush 20260808T0154

This commit is contained in:
pqhuy1987
2026-08-08 01:54:54 +07:00
parent 13b0038f78
commit c688c1bba4

View File

@ -40,7 +40,46 @@
- ⇒ Cửa W1/W4: FULL suite = **645 + 14 = 659**, 0 fail. - ⇒ Cửa W1/W4: FULL suite = **645 + 14 = 659**, 0 fail.
## 2. W1 — 5 fix ## 2. W1 — 5 fix
_(chưa bắt đầu)_
> 🔴 **Khai lệch-có-lý-do #2 — ARTIFACT NÀY TỪNG NÓI DỐI (lag).** Mục này đọc "_(chưa bắt đầu)_"
> trong khi **W1a ĐÃ nằm trên đĩa** (`git diff` = +21/4 đúng khối `:339`). Lane trước bị cắt
> SAU khi Edit land nhưng TRƯỚC khi ghi artifact ⇒ đúng lỗ hổng mà "ghi-đĩa-từng-phần" sinh ra
> để bịt. Lane tiếp đã **TIN DIFF, không tin artifact** (lệnh lead). Bài học ghi §4.
### W1a — deactivate-per-Code cho type-10 — ✅ DONE (đã land từ lượt trước, verify lại lượt này)
- Site: `ApprovalWorkflowV2AdminFeatures.cs:339-359` (khối `var actives = ...`).
- Công thức **ĐÚNG R-6**, verify từng vế trên đĩa:
`typeEnum == ApprovalWorkflowApplicableType.ContractSigningPlan ? Where(w => w.Code == request.Code && w.ApplicableType == typeEnum && w.IsActive) : Where(w => w.ApplicableType == typeEnum && w.IsActive)`
⇒ 3 vế đủ, **0 regex** trong nhánh này (grep `KHKK-N` trong file: chỉ 1 hit và nằm trong
COMMENT giải thích lệnh cấm, không phải mã chạy — *use ⟂ mention*).
- Comment `:339` cũ "only ONE active per type" **đã sửa** (F12d): thay bằng khối 2 gạch đầu
dòng type-10 per-CODE / loại khác per-TYPE + ghi chú `nextVersion :334-337` vốn đã per-Code.
### W1b — file MỚI `ContractSigningPlanWorkflowGuards.cs` + gọi 3 site — ✅ DONE
- **File mới:** `src/Backend/SolutionErp.Application/ContractSigningPlans/ContractSigningPlanWorkflowGuards.cs`
`public static class`, 2 method: `ParseGroup(string?)` + `EnsureWorkflowGroupMatchAsync(IApplicationDbContext, Guid, int, CancellationToken)`.
Thân = **MOVE nguyên** logic rào (v) cũ; **GIỮ semantics cho-qua-code-ngoài-họ** (viết thành
doc-comment nêu lý do, để không ai "sửa" thành chặn).
- **Site 1 Create** `ContractSigningPlanFeatures.cs:475-489` — 14 dòng regex inline XOÁ, thay bằng 1 call.
- **Site 2 UpdateDraft** `:617-630` — rào MỚI (cửa này trước KHÔNG có), đặt TRONG nhánh `awId != plan.ApprovalWorkflowId`.
- **Site 3 SubmitAsync** `ContractSigningPlanWorkflowService.cs:189-197` — chèn SAU rào hạng-mục
(`okCount != catalogIds.Count` `:185-187`) và NGAY TRƯỚC `LoadStepsAsync` `:198`. **Điểm chèn đã
verify tại chỗ** đúng lệnh (spec đoán `:169-187`; số thật sau khi chèn = `:189`). Thêm
`using SolutionErp.Application.ContractSigningPlans;` vào service.
- Message 409 dùng **nguyên văn spec**, 1 message chung 3 site.
### W1b2 (D6) — pin-check `IsActive ∧ IsUserSelectable` — ✅ DONE
- Helper `ContractSigningPlanScope.EnsureWorkflowPinnableAsync` (`ContractSigningPlanFeatures.cs:322-347`)
— mirror vá-3 `CreateContractFromSigningPlanFeatures.cs:141-147`, **2 message TÁCH** ("đã ngừng
hoạt động" / "chưa ghim") đúng lý do vá-3 nêu.
- Gọi 2 site: Create sau rào (iv) (`:478`) · UpdateDraft **CHỈ** trong nhánh `awId != plan.ApprovalWorkflowId` (`:626`).
- Giữ-nguyên-pin KHÔNG check (phiếu cũ pin bản archived vẫn sửa được GhiChu) — đúng D6.
### W1c — changelog PUT type-10 — ✅ DONE
_(chi tiết ghi ngay dưới, sau khi land)_
### W1d — DELETE usage-check → 409/404 — ✅ DONE
_(chi tiết ghi ngay dưới, sau khi land)_
## 3. Verify ## 3. Verify
_(chưa)_ _(chưa)_