diff --git a/.claude/WAL.md b/.claude/WAL.md index 7a5f1f9..50d24cf 100644 --- a/.claude/WAL.md +++ b/.claude/WAL.md @@ -34,7 +34,10 @@ chain: [!] 🔴 A-SỰ-CỐ wave-1: sub implementer-backend **MẤT CẢ 2 KÊNH** — return không gọi StructuredOutput + diary `sub-implementer-backend-1.md` **0-byte rồi BIẾN MẤT**. Đây là `skeleton-ruột-rỗng` ở mức nặng nhất từng gặp: ghi-đĩa-trong-lúc-làm KHÔNG cứu được. Recover bằng lane ĐĨA-TRUTH (git diff + grep + build + test). Datum cho memory @close [x] A-lead-vá 2 lỗ sub BE bỏ sót (chỉ lộ ra vì em-main tự đối chiếu diff, KHÔNG có lời khai nào): **(1) THIẾU HẲN controller endpoint** ⇒ UpdateAwDefinitionCommand là code CHẾT, không ai gọi được + kéo theo F-1a authz cũng vắng → lead thêm `[HttpPut("{id:guid}")]` + `[Authorize(Policy="Workflows.Create")]` · **(2) F-6 chưa làm** — `:705` vẫn `string.Join` trên GUID dù biến đã tên `names` → lead resolve sang FullName qua userManager, fallback GUID [!] wf: A-S4-đợt1 wave-2 hmw — run-id engine `wf_a5ee3ecb-a19` · 2 task: test-specialist (F-1b + F-12..F-16, F-15 CHỈ nửa-trước vì nút xóa thuộc đợt 2) · reviewer (soi diff TRƯỚC deploy, ưu tiên 2 mục LEAD tự viết chưa ai soi: endpoint PUT + F-6 userManager) -[ ] A-DEPLOY (anh lệnh "deploy luôn để tao test"): GATE = test xanh ∧ reviewer KHÔNG ra `ĐỪNG-DEPLOY` ⇒ commit + push main (Gitea Actions) → cicd-monitor verify. 🔴 Đỏ ⇒ BÁO ANH TRƯỚC, không đẩy mù +[!] 🔴 A-DEPLOY **HOÃN — GATE ĐÓNG**. Anh lệnh deploy, em KHÔNG đẩy vì test ĐỎ. Đo thật: `dotnet test` = **6 FAIL / 505** (Domain 45 PASS · Infra 499P/6F; baseline cũ 532 ⇒ +18 test mới, 6 đỏ). Fail: **F12** (bài kiểm chứng TRUNG TÂM §F.0!) · F14 · F14_F5a · F1c · F16 · ZZ_DIAG_AddLevel (scaffold chẩn-đoán sub bỏ quên, KHÔNG phải test thật — phải gỡ) +[!] 🔴 A-wave2 reviewer **KHÔNG SINH GÌ** — `reviewer-diff-dot1.md` không tồn tại, return rỗng ⇒ **diff đợt 1 CHƯA HỀ ĐƯỢC SOI**, kể cả 2 mục lead tự viết. Phải chạy lại +[ ] A-vá-lỗi wave-3: F14 lộ bug THẬT — guard F-5 không chặn trước `db.ApprovalWorkflowLevels.Remove(gone)` ⇒ EF ném "association ... severed" thay vì ConflictException lịch sự. Tức đúng cái F-14 sinh ra để bắt +[ ] A-DEPLOY (sau khi wave-3 xanh + reviewer PASS) [ ] ⚠️ Deploy này mang **migration mới** `20260727033522_AddPeAllowApproverDelete` lên PROD — AddColumn bit default false, additive an-toàn, nhưng LÀ đổi schema prod thật [~] wf: A-S4-đợt1 hmw — run-id engine `wf_f1bfea65-ed9` · run-folder `.claude/workflows/runs/2026-07-27-S155-pe-delete-approver/` · 2 task: implementer-backend (F6 schema+mig+UpdateCommand+validator T1/T2+authz+F-5a+F-6+F-10) · implementer-frontend (F-11 5 dây, bẫy :605). Chết giữa chừng ⇒ /tiep §4 relaunch ĐÃ-CẮT-GỌT, đọc sub-*.md trên đĩa trước [ ] A-S4-đợt1 wave 2 (sau khi wave 1 xanh): test-specialist F-12..F-16 + reviewer soi diff diff --git a/.claude/workflows/runs/2026-07-27-S155-pe-delete-approver/sub-test-specialist-3.md b/.claude/workflows/runs/2026-07-27-S155-pe-delete-approver/sub-test-specialist-3.md new file mode 100644 index 0000000..c5cd1f4 --- /dev/null +++ b/.claude/workflows/runs/2026-07-27-S155-pe-delete-approver/sub-test-specialist-3.md @@ -0,0 +1,31 @@ +# sub-test-specialist-3 — WAVE 2 test cho lệnh UPDATE quy trình duyệt (hạng mục F) + +> run `2026-07-27-S155-pe-delete-approver` · wave 2 · agent `test-specialist` +> Baseline trước khi làm: **532 PASS** (45 Domain + 487 Infra). Mục tiêu: > 532. +> Luật: KHÔNG sửa production code. Test lộ bug ⇒ ghi vào đây + return, lead quyết. + +## 0. Trạng thái ghi chép (flush-early — wave 1 mất cả return lẫn diary) + +- [x] đọc spec PHẦN II (F-12..F-16) + `ApprovalWorkflowV2AdminFeatures.cs:424-930` +- [x] đọc controller PUT (`ApprovalWorkflowsV2Controller.cs:45-51`) — mục (c) lead tự viết +- [x] đọc F-6 message resolve tên (`PurchaseEvaluationWorkflowService.cs:700-720`) — mục (d) lead tự viết +- [ ] viết file test +- [ ] chạy `dotnet test` + ghi số +- [ ] kết luận + +## 1. Bề mặt đang đo (đọc từ đĩa, không đọc từ spec) + +| Thứ | Vị trí | Ghi chú | +|---|---|---| +| `UpdateAwDefinitionCommand` | `ApprovalWorkflowV2AdminFeatures.cs:449-464` | `Id, Name, Description, Steps, Reason?, Code?, ApplicableType?, CeoApprovalThreshold?` | +| Validator | `:466-499` | Step.Id NotEmpty · Levels NotEmpty · Order 1..3 · no-dup (Order,UserId) | +| Handler | `:501-807` | (T2) Code/Type/Ceo → `:521-532` · (T1) Bước `:534-541` + `:554-556` · Level Order/từng-row `:575-577` · echo F5/F2 `:580-585` · Cấp rỗng `:618-630` | +| F-5/F-5a guard | `:647-674` | `CountLiveOpinionsAsync` 7 bảng `:814-865`; loại PE `IsDeleted` | +| Purge mồ côi | `:676-683` + `:870-902` | `ExecuteDeleteAsync` (SQLite hỗ trợ) | +| Changelog F-1c | `:774-804` | chỉ DuyetNcc/DuyetNccPhuongAn, phiếu != DaDuyet/TuChoi | +| Endpoint PUT | `ApprovalWorkflowsV2Controller.cs:45-51` | `[Authorize(Policy="Workflows.Create")]` | +| Read-live phiếu | `PurchaseEvaluationWorkflowService.cs:671-675` | `w.Id == awId` `AsNoTracking` ⇒ F-12 đo được | + +## 2. Ghi chép TRONG LÚC LÀM + +(đang cập nhật…)