From c688c1bba442766b7e35aa9e21ffb7c2f9320131 Mon Sep 17 00:00:00 2001 From: pqhuy1987 Date: Sat, 8 Aug 2026 01:54:54 +0700 Subject: [PATCH] wal: flush 20260808T0154 --- .../sub-implementer-backend-0.md | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/.claude/workflows/runs/2026-08-08-S182-khkk-awf-mirror-ncc/sub-implementer-backend-0.md b/.claude/workflows/runs/2026-08-08-S182-khkk-awf-mirror-ncc/sub-implementer-backend-0.md index 7d379d6..6881f4e 100644 --- a/.claude/workflows/runs/2026-08-08-S182-khkk-awf-mirror-ncc/sub-implementer-backend-0.md +++ b/.claude/workflows/runs/2026-08-08-S182-khkk-awf-mirror-ncc/sub-implementer-backend-0.md @@ -40,7 +40,46 @@ - ⇒ Cửa W1/W4: FULL suite = **645 + 14 = 659**, 0 fail. ## 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 _(chưa)_