- gotcha #86: 2-push-sat -> Gitea auto-CANCEL run dau (CANCELLED != fail; verifier doc run CUOI cua range) + cheatsheet 34 + STATUS row 86 - H24-DEEP 11-FLAG: F-4 CLAUDE-mig 70/71 + module-row 69,71 · F-5/F-6 HANDOFF segment S163->S168 + NEXT-em disposition · F-9 cicd-monitor bo literal baseline 5 site (B1 tro STATUS, an tu restart) · F-10 bo-neo-phase 3 site · F-11 governance README lat nhan · F-8 KHONG-AP theo ring2-bac (slot 59 giu song) - STATUS: :6 header S168 7/8-wave + 639-test + gotcha-86 + counter-42 · :472 Tests cell 639 (45D+594I) · :473 Gotchas 86 · :479 bundle RgvHZkPH/D65FJPGd #442 - HANDOFF: segment moi S163->S168 + slot (63) GD3 2-quyet + 4-slot-dong (54)(56)(57)(58) + slot (59) phan-xu ring2 + carry re-stamp - orphan harvest: bookend-open-synthesis.md (S163, 10/10 verdict verbatim-tu-dia) + h24-deep-synthesis.md (S166, disposition tung dong F1-F11 + ring2 INFORM 1-6) - spec-cum1: dinh-chinh PUT-Conflict theo phan gate-K3 (khoi @S168, chu goc giu) - run.md S164: ledger 8 row (K3-fix + F1/K4ab/K5K4c/K6/K7/GD3/K8) + Stage B4 7/8 (ctx-verifier co-2) - diary ctx-verifier + ctx-curator: seed 3 luot L9 moi vai (on-behalf, nguon verbatim _context/_mind) · tally #53: su-kien L9 per-window, tong GIU 72-can-duoi (chot @closeout L9) - /tiep S168: tick 41->42 CLEAN · mind-check 11D/0T · ctx-verifier CO-11-co (co (7)(9) va lien) · _tiep-5 + verdict-vao-bien-nhan Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
6.8 KiB
SPEC CỤM-1 FINAL — K1 + K2 + K3 (lead kết tinh sau B2-r, @S164)
① Đề bài
K1 master-data danh mục (86 row) · K2 phiếu mang hạng-mục + nhóm + freeze-răng · K3 8 workflow nhóm + port-finalize + designer. Nguồn NỀN = sub-invest-fable-b2-cum1.md (33KB, 17 test) — 12 VÁ dưới đây THẮNG khi xung đột (từ B2-r 3 lane: sub-reviewer-c1-l{1,2,3}.md — 41 finding, hội tụ cross-lane).
② 12 vá (build ĐỌC CẢ nền LẪN vá)
- 🔴 [3-lane hội tụ] Menu key PHẢI VÀO
MenuKeys.All— nền khaiContractCatalog+ 8AwV2_KhkkN*"ngoài All" ⇒ 0 permission row ⇒ sidebar chết (loop grantDbInitializer.cs:2058nguồn = All; khuôn THẬT: 5 leaf catalog hiện hànhMenuKeys.cs:168+ 3 leaf AwV2:182đều TRONG All). Fix: cả 9 key VÀO All + KHAI drift dạng DELTA per-wave (B3-A1 — cấm neo tuyệt-đối vì thứ tự ship: K1 = +1 key/+4 policy · K3 = +8 key/+32 policy; mỗi commit kèm lệnh đếm lạiMenuKeys.Allthực tế + cập nhật 2 row STATUS, đừng Goodhart giữ-số-đứng-yên). Acceptance += "login Admin THẤY leaf trong sidebar ×2 app" + 1 test seed-grant. - 🔴 [L1-F5] GỠ phương án (i) tại site
:342— nền đọc NGƯỢC comment (WorkflowService.cs:36-43mô tả NGUỒN COPY và khẳng định KHKK CỐ Ý không có site gán-qua-BIẾN;:342nằm trongReturnOrRejectAsyncchỉ nhận TraLai/TuChoi literal — DaDuyet unreachable qua đó). GIỮ phương án (ii): test khóa khẳng định điều đó. Cấm "sửa" :342. - 🔴 [L2-H2] K3 thêm việc (d): sweep cụm ép-false —
grep -rn "AllowApproverFinalize|AllowApproverSkipToFinal"toàn src + fe-*: gỡ đủ CREATE ép-false server-sideApprovalWorkflowV2AdminFeatures.cs:380-381+ PUT Conflict:591-594/:605-610+ FElevelFlagsPayloadApprovalWorkflowsV2Page.tsx:247-258(earlyFinalizeLocked :638) — không chỉ note:151-152. Test mới: "tạo version qua CreateCommand type-10 GIỮ được cờ".🔄 ĐÍNH-CHÍNH @S168 (thi-hành phán gate-K3 —
sub-reviewer-gate-k3.md; spec ĐÓNG-BĂNG nên đính-chính bằng khối này, KHÔNG sửa chữ gốc): site PUT Conflict:591-594/:605-610KHÔNG GỠ — đó là luật versioning CHUNG mọi type (409 khi sửa version đang tham-chiếu), lead GIỮ là ĐÚNG; vá-3 liệt nhầm nó vào cụm ép-false. Phần còn lại của vá-3 (CREATE ép-false:380-381server-side + FElevelFlagsPayload— riêng type-10 GIỮ ép-false + FE disable ô theo phán F-2 gate-K3) đã xử @K315349e8. - 🔴 [L2-H3]
KhkkCreatePage×2 app PHẢI SỬA (mâu thuẫn nền: command +ApprovalGrouprequired nhưng page ghi "KHÔNG-ĐỔI") — body POST thêmapprovalGroup+ picker nhóm. Acceptance += "tạo phiếu nhóm 2 TỪ UI ×2 app" (curl-only không đủ). - 🔴 [L2-M6/L1-F6] Chốt nhất quán
CatalogEntryId: auto-gen line lúc tạo phiếu được mồi null NHƯNG submit-guard CHẶN null (mọi line phải gán hạng mục trước trình) + validator line-mới-qua-API bắt buộc có. DoD "line khác nhóm → 409" phải chạy trên phiếu CÓ line thật (chống PASS-bằng-tập-rỗng). - [L2-M4] Kéo
phase-guard line-edit sau DaDuyettừ K4b VỀ K2 — ΣFeatures.cs:709-711tính LIVE, soft-delete line làm số phiếu-đã-duyệt trôi; freeze chưa kín nếu guard nằm cụm-2. - [L2-M5/L1-F13] Mig 71 BỔ SUNG item 6 = cột
EndedByLevelFinalize(K2.a hiện chỉ 1-5) + tên mig phản ánh (vdAddKhkkApprovalGroupCatalogAndFinalizeRuntime) + khai ghost-window K2→K3 (cột nằm im tới khi K3 land). - [L1-F8] Bảng consumer +=
Features.cs:712-713Σ ProposedAmount (nền sót — list có 2 Σ) + quyết: list thêm Σ Approved sau freeze để list/detail không lệch số. - [L1-F7] Chứng NULL-unique vá lại: unique cũ bị DROP trong chính Mig 71 — mắt xích thật chặn 2-line-NULL-cùng-(Plan,Supplier) phải nêu ĐÚNG (submit-guard vá-5 + backfill line cũ gán từ header-group; đừng dựa index đã chết).
- [L1-F9/L2-M2] Sửa nhãn IgnoreQueryFilters: số đúng = "0 hit trong
DbInitializer.cs" (toàn src/Backend = 29 hit/5 file — claim "duy nhất"/"0-hit" là sai lây từ comment code); đơn thuốc seed:2970thiếu IgnoreQueryFilters vẫn ĐÚNG. - [L1-e] Roster: acceptance đo DANH TÍNH — K3.e += mục "mở workflow nhóm N, danh sách người duyệt KHỚP bảng đội hình từng người" + xử 2 cặp gần-trùng (
truong.levstring.levstruong.nguyen·thanh.lethanh"Lê Thanh Bình" vsbinh.le"Lê Văn Bình") bằng đối chiếu dept + chức danh trên bản LIVE, không match tên trần; dept-lookup:185thêm null-guard. - [L1-F3/F4] Trích dẫn
:44-46ĐỦ + khai supersede: nguyên văn có "chủ dự án phán 'PHÁ VỠ' @S155" — spec PHẢI khai K3 = ĐẢO phán quyết cũ theo lời owner @S164, kèm việc (e): sửa comment:36-43/:44-46+ 2 lệnh tự-kiểm:292-293dán PR + cập nhậtKhkkWorkflowPanel.tsx:8×2 app + HANDOFF:77. ✅ [OG-9 CHỐT @S164] anh xác nhận TƯỜNG MINH: "đúng, chỗ budget chốt chặn là a Chương… vậy bài toán trần budget xem như đóng" ⇒ đảo "PHÁ VỠ" @S155 hợp lệ — K3 (a)-(e) HẾT CHẶN. Kèm: NĐUQ = human-gate VĨNH VIỄN (không còn wave enforce-máy nào; xóa mọi ý "opt-in sau").
③ Checklist final cụm-1
- K1: 7 mục nền + "Admin thấy leaf sidebar ×2 app" + test seed-grant + drift DELTA khai cùng commit.
- K2 (+B3-A6): nút "Tạo thêm cho nhóm khác" (OG-7 UI-hướng-1) CHỦ = K2, site picker/PE-flow
ContractSigningPlanFeatures.cs:1201-1202+ PE-detail — acceptance TỪ UI: PE có phiếu → thấy phiếu + nút phụ, bấm → form preset nhóm khác → 201. - K3 (+B3-B3 câu-ranh): fe-admin
resolvePathnới CHỈ họAwV2_KhkkN*— CẤM nới họKhkk_*(fe-admin thiếu WorkflowMatrixViewPage; phép-âm: grep route Khkk_ fe-admin = 0). - K2: 8 mục nền + submit-guard null-CatalogEntryId (test ÂM trên phiếu có line) + phase-guard line-edit + Σ×3 nhất quán + Mig-71 6 item + 3-file + backfill=1 + UI tạo-phiếu-nhóm-2 ×2 app + bảng 18 consumer (17 nền + :712-713).
- K3 (SAU OG-9): 6 mục nền + sweep ép-false ≥4 site + test giữ-cờ-qua-CreateCommand + đo danh tính roster + comment/panel/HANDOFF cập nhật + verify LIVE trước seed.
- Mọi wave: test ≥590+k khai k · cicd PASS · BE-only smoke API (#77 chỉ khi FE-ship).
END spec-cum1-final — nền 17 test + vá: ~5 test mới · 1 OG mới (OG-9) · 2 blocker menu/ép-false đã đóng đường.