wal: flush 20260731T1733

This commit is contained in:
pqhuy1987
2026-07-31 17:33:30 +07:00
parent 003ce99faf
commit a46a0a27a6
3 changed files with 64 additions and 5 deletions

View File

@ -42,11 +42,16 @@ chain:
deploy-KHỎE (run #435 · gate-CI 609 tách-phần · Mig71 prod-top+restart-proof · bundle 4/4 rotate · deploy-KHỎE (run #435 · gate-CI 609 tách-phần · Mig71 prod-top+restart-proof · bundle 4/4 rotate ·
smoke 6/6 ?group= wired; mục-4 backfill/Σ = CHÂN-LÝ-RỖNG prod-0-phiếu — đo lại khi K8 đẻ phiếu thật. smoke 6/6 ?group= wired; mục-4 backfill/Σ = CHÂN-LÝ-RỖNG prod-0-phiếu — đo lại khi K8 đẻ phiếu thật.
cicd #53 return-garble tiếp, artifact trọn) cicd #53 return-garble tiếp, artifact trọn)
[!] wf: K3-BE p2 ĐANG CHẠY (p1 wf_a04124a7 = engine-process-exit 0-delta-0-artifact; LEAD tự chạy bước-0: [!] K3 CHẺ NHỎ sau 2 lượt engine-process-exit (p1 wf_a04124a7 + p2 Agent — cả 2 0-delta-0-artifact;
prod = localhost\SQLEXPRESS [ghi lại — localhost/tcp:1433 đều fail], QT-DN-V2-001 LIVE 1-active+2- bài: task-đọc-nhiều-trước-Write chết, task-hẹp-Write-sớm sống). Bước-0 LEAD: prod=localhost\SQLEXPRESS,
archived type-1, ROSTER 3-trạm PRO→CCM→CEO 11 người ghi nguyên văn sub-implbe-k3.md §0, vá-11 danh- QT-DN-V2-001 LIVE, ROSTER 3-trạm 11 người @sub-implbe-k3.md §0, chuong.phan giữ cờ.
tính phân giải bằng dept, chuong.phan = giữ cờ finalize; p2 seed từ bảng verified — khi ssh). ĐANG CHẠY: nhịp-1-BE lane (seed 8 wf + 8 MenuKeys — đã append §1 kế-hoạch + khai L1-không-khuôn-type-10
Song song: cicd-K2 verify nền. Sau BE: K3-FE + K3-test → gate K3 → push →mirror-ContractV2 + L2-ép-false-không-cản-seeder) ∥ K3-FE lane (resolvePath AwV2_KhkkN* + gỡ khóa
Designer + panel ×2). XONG LEAD-SOLO: nhịp-2 port finalize (branch mirror PE :866-876 + opt-out
applyLevelFinalize 3-tầng interface/service/controller + comment (a)(b) supersede-S155 + 2 test-callsite
ct:) + nhịp-3 (gỡ CREATE ép-false :380 [GIỮ PUT-Conflict — luật versioning CHUNG, spec vá-3 liệt nhầm,
lệch KHAI chờ gate soi] + rào (v) pin-đúng-nhóm regex KHKK-N[1-8]). Sau 2 lane: build+test → K3-test
hẹp → gate K3 → commit-push → cicd → /pause (mandate mới)
[ ] 🔴 MANDATE MỚI (owner in-turn @S165 ~17:3x: "xong nốt thì /pause rồi những đầu việc tiếp theo để [ ] 🔴 MANDATE MỚI (owner in-turn @S165 ~17:3x: "xong nốt thì /pause rồi những đầu việc tiếp theo để
lần tiep sau làm tiếp") — SUPERSEDE "chạy 1 mạch": XONG NỐT K3 (BE p2 đang chạy → FE + test song song lần tiep sau làm tiếp") — SUPERSEDE "chạy 1 mạch": XONG NỐT K3 (BE p2 đang chạy → FE + test song song
→ gate K3 → commit-push → cicd verify) rồi /pause. K4a→K4b→K5→K4c→K6→K7→K8 = lần /tiep sau. → gate K3 → commit-push → cicd verify) rồi /pause. K4a→K4b→K5→K4c→K6→K7→K8 = lần /tiep sau.

View File

@ -37,3 +37,28 @@ K3-BE: IN-PROGRESS — bước-0 XONG (lead), §1-8 p2 đang chạy
KHKK-N1..N8 mirror ĐÚNG cấu trúc này (3 Steps × Levels như bảng), resolve user theo EMAIL. KHKK-N1..N8 mirror ĐÚNG cấu trúc này (3 Steps × Levels như bảng), resolve user theo EMAIL.
(§1-8 p2 ghi tiếp bên dưới) (§1-8 p2 ghi tiếp bên dưới)
---
# §1 [p2] KẾ HOẠCH (ghi TRƯỚC khi code — 3 dòng)
1. **A**`DbInitializer.cs`: thêm `SeedKhkkGroupWorkflowsAsync(db, userManager, logger)` (UNGATED, đặt sau
cụm 4 seeder WorkflowApps V2 ở `InitializeAsync`), mirror khuôn `SeedSampleContractWorkflowV2Async`; resolve
11 email → dict 1 lượt, rồi loop N=1..8 tạo `KHKK-N{n}` (type-10) 3 Steps × Levels theo roster §0.
2. **B**`MenuKeys.cs`: +8 const `AwV2_KhkkN1..N8` + vào `All` (ràng buộc T6: key ∈ All BẮT BUỘC có menu-row)
`DbInitializer.SeedMenuTreeAsync`: +8 row con dưới `ApprovalWorkflowsV2` (order 3..10), idempotent per-Key.
3. **C**`dotnet build SolutionErp.slnx` (0W/0E) + `dotnet test SolutionErp.slnx` full (baseline 609/0) + đếm
`MenuKeys.All` bằng lệnh máy → ghi DELTA.
**Đo TRƯỚC khi sửa (baseline, lệnh máy chạy ở §4):** `MenuKeys.All` hiện = ? (đo ở §4, không đoán).
🔴 **2 lệch phát hiện lúc khảo sát (khai ngay, KHÔNG tự quyết):**
- **L1 — "vùng seed workflow type-10 hiện có (W3 S161)" KHÔNG TỒN TẠI.** `grep ContractSigningPlan
DbInitializer.cs` = **0 hit** (chỉ có `SeedKeHoachKyKetAccessAsync` = seed *quyền*, không phải workflow).
⇒ Không có khuôn type-10 để mirror; tôi mirror khuôn gần nhất **cùng lớp** = `SeedSampleContractWorkflowV2Async`
(`:226`) / `SeedSampleProposalWorkflowV2Async` (`:276`) — cùng cách dựng `ApprovalWorkflow + Steps + Levels`.
- **L2 — `AllowApproverFinalize` bị ÉP `false` server-side cho type-10 ở đường Designer.**
`ApprovalWorkflowV2AdminFeatures.cs:380-381`: `AllowApproverFinalize = typeEnum != ...ContractSigningPlan && l.…`
(W1 S161 F-8 containment). Seeder ghi entity TRỰC TIẾP nên **không bị chặn**, nhưng nếu admin bấm "tạo version
mới" qua Designer thì cờ rơi về false. Tôi vẫn set `true` theo lệnh (OG-3/OG-9) + ghi comment đúng câu lead
giao; **nhịp sau cùng wave** port nhánh service + (nếu owner chốt) gỡ ép-false ở `:381`.

View File

@ -0,0 +1,29 @@
K3-FE: IN-PROGRESS — build ×2 · SHA-pair (chưa chốt)
# sub-implfe-k3 — K3-FE 3 việc FE (Layout AwV2_KhkkN*, gỡ khóa duyệt-sớm KHKK, comment supersede Panel)
> Artifact chống #53 — đổ liên tục từng việc. Dòng-1 = verdict (cập nhật cuối).
> Run: 2026-07-31-S164-4gd-khkk-fanout · role: implementer-frontend · lượt K3
## §0 — Trạng thái mở lượt (đo đĩa TRƯỚC khi gõ, bài học S164/K2)
- `fe-admin/src/components/Layout.tsx:170-176``awV2Match` whitelist hiện: `'DuyetNcc' | 'DuyetNccPhuongAn' | 'Contract'`. Chưa có nhánh KhkkN. ✔ khớp đề-bài.
- `Khkk_*` staticMap ĐÃ CÓ SẴN 6 dòng (`:35-40`, từ W2 S161) — đề-bài "CẤM nới họ Khkk_" ⇒ đọc là **cấm THÊM dòng mới**, 6 dòng cũ giữ nguyên byte.
- `fe-admin/src/pages/system/ApprovalWorkflowsV2Page.tsx` 1368 dòng. Lock KHKK sống ở **4 cụm**: `:151` note-const · `:242-259` `levelFlagsPayload(e, lockEarlyFinalize)` + 2 call-site `:783/:815` · `:633-638` `earlyFinalizeLocked` · `:1281-1329` render (banner + 2 checkbox `disabled`/`checked` ép false + 2 `title`). ⇒ gỡ lock = đụng CẢ 4, không phải 3.
- `KhkkWorkflowPanel.tsx:6-9` — câu cần supersede nguyên văn: *"KHÔNG 2 đường kết-thúc-sớm (AllowApproverFinalize / CeoApprovalThreshold — anh phán «PHÁ VỠ» S155; W1 đã rào ở Designer type-10)"*.
- Baseline SHA-pair Panel ×2 = `2B64144EF6E8567D6997C0E19B9686C083080216510A4CD8DA6157A80F584817` (khớp đề-bài `2b64144ef6e8`). ✔
- `tsconfig.app.json:19-21` = `noUnusedLocals` + **`noUnusedParameters`** true ⇒ KHÔNG được để param `lockEarlyFinalize` mồ côi; phải xoá param + sửa 2 call-site.
## §1 — VIỆC 1 Layout.tsx `AwV2_KhkkN{1..8}` — DONE
- `fe-admin/src/components/Layout.tsx:177-182` (+8 dòng, chỉ INSERT, 0 xoá): thêm nhánh
`if (/^KhkkN[1-8]$/.test(code)) return '/system/approval-workflows-v2/' + code` **BÊN TRONG** khối
`awV2Match` sẵn có, đặt SAU whitelist 3 code cũ ⇒ 3 code cũ đi đường cũ, 0 đổi hành vi.
- Regex `^KhkkN[1-8]$` neo 2 đầu ⇒ `KhkkN0`/`KhkkN9`/`KhkkN12` KHÔNG khớp (rơi về `return null`, đúng ý "n=1..8").
- **Phép-âm (đề-bài yêu cầu) — PASS:** `git diff -U0 | grep -E "^\+ *Khkk_[A-Za-z]+: *'"` = **0 hit**.
Kèm **control dương**: cùng regex quét cả file = **6 hit** (6 dòng `Khkk_*` cũ) ⇒ mẫu CÓ RĂNG, 0-hit là
0-hit thật chứ không phải regex trượt. Dòng `Khkk_` duy nhất trong diff là **comment** (mention, không
phải route) ghi rõ lý do CẤM nới.
- `git diff --stat` = `1 file changed, 8 insertions(+)`.
## §2 — VIỆC 2 gỡ khoá duyệt-sớm KHKK (đang chạy)