# RUN — W2 KHKK: CRUD phiếu nháp + căn cứ b.8-9 + FE 3 page ×2 app (S161, 2026-07-29)

> Wave 2/6 dry-run toàn trình. Spec: `../2026-07-29-S160-khkk-dryrun-plan/spec-wave-w2-crud-nhap-29-07-2026.md`. W1 ĐÃ SHIP (`a8027c0`, cicd PASS 6/6 — synthesis `../2026-07-29-S161-khkk-w1-schema/w1-synthesis.md`).
> **Gate 5-anchor: PASS 5/5 @S161** (flatten-trap :427-439 · guard+snapshot :53-62 · guard-type-trọn :258-267 · staticMap-comment content-found @:2215 [drift từ 2207 do commit W1 — neo content] · `KeHoachKyKet ∈ All:180` THẬT).
> ⚠️ Lệch phát hiện @gate: entity comment W1 "gen mã lúc Submit" ≠ spec W2 "gen lúc CREATE" (acceptance POST trả maKeHoach) — **SPEC THẮNG**, worker sửa comment entity cùng lượt.

## taskList snapshot

| # | Stage | Vai / cách | Trạng thái |
|---|---|---|---|
| 1 | Đợt-1a BE: mega-file `ContractSigningPlanFeatures.cs` (Create+auto-Lines+MaKeHoach@CREATE · UpdateDraft · Get/List/pendingMe+inbox-precompute · Dossier UPSERT/DELETE · Attachments · DELETE allow-list · picker PE-chờ-lập-KH) + `ContractSigningPlansController` authz 2-tầng per-action | hmw `implementer-backend` | [x] `wf_6f0aad26-229` lane-0 chết #53 sau §7 NHƯNG sub-md **16.5KB ghi-từng-mục TRỌN** (tự mở 5 anchor + grep-cùng-lớp 3 site comment + 15 endpoint policy 15/15 + **4 quyết D1-D4 khai-lead-phân-xử → lead DUYỆT cả 4**) · build lead 0W/0E |
| 2 | Đợt-1b FE: `pages/khkk/` 3 page + types ×2 app + 4-place mirror (routes + staticMap re-point 6 leaf khỏi coming-soon + menuKeys) + build ×2 + SHA-pair | hmw `implementer-frontend` | [x] lane-1 chết #53 sau MUC-1+cp (SHA-pair 4/4) → **lead solo đuôi**: Layout ×2 re-point 6 leaf (WfView 2 app 2 đường: user=alias matrix?type=10 whitelist+10 · admin=Designer deep-link) + fe-admin App routes + root KeHoachKyKet→/khkk/list; menuKeys place-3 SKIP-có-khai (0 consumer). Build ×2 PASS + coming-soon **0/0** |
| 3 | Đợt-2: test-specialist (≥2 test PIN: `ContractSigningPlansController_EveryWriteEndpoint_HasAuthorizePolicy` + `CreateContractSigningPlan_FromNonApprovedPe_Throws`) | hmw `test-specialist` | [!] `wf_7490179a-70b` ĐANG CHẠY nền |
| 4 | Lead: build ×2 + suite + acceptance §③-B sweep | lead | [x] build BE 0W/0E ×2 lượt · suite **574/0** ×2 lượt (trước + SAU 12 fix) · FE ×2 PASS + **marker trong RUỘT bundle 1/1/1** (chứng build thật — 466ms rolldown-warm) · SHA-pair 4/4 giữ |
| 5 | Reviewer adversarial (CRUD endpoints POST/PUT/DELETE — bắt buộc) | `reviewer` | [x] **PWF 12 finding (3 CRIT · 5 MAJ · 4 MIN)** — Trục-1 đứt-2-bờ VỠ NẶNG 6 điểm (route picker · peId · dossier planId · PUT-vs-POST · peTenGoiThau · winnerSupplierNames — **2 lỗi che nhau F-1/F-6**; "lời-khai bên-kia-sẽ-khớp = giả định, không phải phép đo") + F-8/F-9 security detail+download 0-rào (PE twin CÓ — thụt chuẩn S89) → **11 FIXED + 1 GIỮ (F-10 kế thừa khuôn PE)**; vai chết #53 sau Trục-4 → lead đo nốt Trục 5 (test ĐỘNG ĐẠT) + 6 (boundary 0-diff ĐẠT) + 7 (tự-kiểm khai bias) + verdict on-behalf. `sub-reviewer-3.md` END+TOTAL=12 |
| 6 | Commit + push + cicd (3-chân-kiềng + 2-bearer NẾU có tài khoản non-Admin — nv.test KHÔNG tồn tại prod, xem w1-synthesis tồn-2) | lead + `cicd-monitor` | [!] commit **`6cbc6ad`** (20 file +5.020/−23, F-0 gate ĐẠT) PUSHED → cicd spawn nền (6 phép: CI 574 · 0-mig MIGTOP giữ · menu 142 · marker `approved-pe-awaiting-plan` 2 app · smoke KHKK GET · CỜ giữ) |

**Tồn W2:** F-10 upload/delete-attachment no-owner-check = lỗ CHUNG khuôn PE — bịt ĐỒNG BỘ 2 module 1 đợt riêng (cần anh gật vì đụng PE đang chạy prod).

## Ràng buộc mang theo
- 🔴 CẤM copy phần DUYỆT của Proposal (bẫy flatten :427-439 — OR-of-N thành AND; duyệt = W3 con-trỏ-đôi mirror PE).
- 🔴 Guard workflow-type copy TRỌN :258-267 (cả nhánh NotFound), đổi đích `ContractSigningPlan=10`.
- 🔴 Authz 2 tầng (#82): class `[Authorize]` + per-action `Policy="KeHoachKyKet.{Action}"` — grep ≥4.
- 🔴 409-khoá-vĩnh-viễn: DELETE allow-list mở NGAY W2 (M6) + tạo-lại-sau-TuChoi/xóa được (#57).
- 🔴 FE 4-place ×2 app SHA-pair; 6 leaf hết coming-soon (grep = 0 cả 2 app).

## Stages
(cập nhật theo tiến độ)
