# 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…)
