# CI/CD verify — `761d818` (W6 KHKK — đường ống HĐ V2, BE-only 0-mig) > Agent: cicd-monitor · Session S161 W6 · Bắt đầu: 2026-07-29 (giờ VN) > Ghi TỪNG MỤC ngay khi có bằng chứng (chống #53 garble — file này là SẢN PHẨM CHÍNH, return chỉ là tóm tắt). --- ## STAGE 1 — Push + path-filter (DONE) - **Commit:** `761d8183f365c68d2fca13ab27f2ee810fdbc30e` - **Ngày giờ commit:** `2026-07-29 23:27:19 +0700` - **Subject:** `[CLAUDE] App+Infra+Tests: W6 KHKK — duong ong HD V2 (view per-HD 3-site + inbox V2+ADMIN + guard trinh +PMH)` - **Unpushed (`git log origin/main..HEAD`):** RỖNG ⇒ đã push xong. - **Diff stat:** 3 file, +811 / −6 | File | +/− | |---|---| | `src/Backend/SolutionErp.Application/Contracts/ContractFeatures.cs` | +142/−… | | `src/Backend/SolutionErp.Infrastructure/Services/ContractWorkflowService.cs` | +15/−… | | `tests/SolutionErp.Infrastructure.Tests/Application/ContractV2PipelineTests.cs` | +660 (file MỚI) | - **Path-filter (gotcha #41, 7-glob):** cả 3 file nằm dưới `src/Backend/**` + `tests/**` ⇒ KHÔNG khớp glob nào trong `paths-ignore` ⇒ **CI PHẢI chạy**. (soi TỪNG file, không suy từ tổng) - **0-mig proof (lớp 1/3 — repo):** `git diff 761d818~1 761d818 -- '*Migrations*'` → **RỖNG** ⇒ commit không đụng migration. - **0-FE proof (lớp 1/2 — repo):** `git diff 761d818~1 761d818 -- 'fe-admin/*' 'fe-user/*'` → **RỖNG** ⇒ 0 file FE đổi ⇒ theo #69 TWO-MODE, bundle rotate-or-frozen đều hợp lệ; ship-proof = Last-Modified in-window. **STAGE 1 = PASS.** --- ## STAGE 2 — Gitea Actions poll - **Run matched theo `head_sha` (KHÔNG theo run_number):** `761d8183` → **Run #430, id=543** - **created_at:** `2026-07-29T23:27:28+07:00` (t+9s sau commit-time 23:27:19 ⇒ đúng run của push này) - Poll iter 1-5: `running` (updated_at bò 23:28:17 → 23:30:48) _(chờ `completed` — ghi tiếp)_ --- ## PRE-DEPLOY BASELINE (đo TRƯỚC khi pool recycle — dùng làm vế so delta) ### P-A. FE bundle snapshot (PRE) | App | JS | CSS | |---|---|---| | admin.solutions.com.vn | `index-BPWQQe4q.js` | `index-KS0kL7bG.css` | | eoffice.solutions.com.vn | `index-DV3fEpOw.js` | `index-Cpp9Qc7C.css` | > ⚠️ Baseline này ≠ baseline MEMORY (#426 `D0sXA0fe`/`Y6dW_5CM`) vì đã có Run #428 (`6cbc6ad9`) + #429 (`df52fa0c`) xen giữa (W2…W5). Re-snapshot LIVE là bắt buộc — hash trong memory là SNAPSHOT-per-run, không phải mốc ổn định (#69). ### P-B. DB baseline (PRE) — sqlcmd qua `ssh vietreport-vps` ``` MIGTOP=20260729122015_AddContractSigningPlans MIGCOUNT=69 TABLES=96 (sys.tables WHERE is_ms_shipped=0) MENUS=142 (MenuItems) ``` ### P-C. Cờ KeHoachKyKet (PRE) — `Permissions` (⚠️ cột là `Permissions.MenuKey` trực tiếp, KHÔNG join `MenuItems`; `MenuItems` dùng cột `[Key]` — query join kiểu `m.MenuKey` sẽ lỗi `Invalid column name`) Tập đích **ground-truth từ seeder** `DbInitializer.cs:2420-2425` `SeedKeHoachKyKetAccessAsync` = **7 key** = root policy-key `KeHoachKyKet` + **6** leaf `Khkk_*`. `Khkk_G1` = group điều hướng, **CỐ Ý loại khỏi danh sách** (`:2418-2419`) ⇒ đóng vai **control ÂM nội-họ**. | MenuKey | R | C | U | D | rows | |---|---|---|---|---|---| | `KeHoachKyKet` (root) | 13 | 13 | 13 | 2 | 13 | | `Khkk_WfView` | 13 | 13 | 13 | 2 | 13 | | `Khkk_List` | 13 | 13 | 13 | 2 | 13 | | `Khkk_Create` | 13 | 13 | 13 | 2 | 13 | | `Khkk_Pending` | 13 | 13 | 13 | 2 | 13 | | `Khkk_Approved` | 13 | 13 | 13 | 2 | 13 | | `Khkk_Deleted` | 13 | 13 | 13 | 2 | 13 | | **`Khkk_G1` (control ÂM)** | **13** | **0** | **0** | **0** | 13 | ⚠️ **Bẫy phạm-vi query đã tránh:** `LIKE 'Khkk%'` chỉ ra **6/7** key đích — root `KeHoachKyKet` KHÔNG khớp tiền-tố `Khkk`. Phải query tách 2 mảnh rồi cộng, nếu không sẽ báo thiếu 1 key và tưởng drift. --- ## STAGE 3-6 — POST-deploy _(chờ status=success + chứng minh restart)_ ## STAGE 3-6 — [LEAD đo on-behalf]: PASS ✅ sqlcmd prod: MIGTOP `20260729122015` GIỮ · TABLES 96 · MENU **142 GIỮ** · CỜ KeHoachKyKet Create=13/Delete=2 GIỮ. Smoke: `GET /api/contracts/inbox` (admin) **200 `[]`** — rỗng HỢP LỆ (prod Contracts=0), điểm đo = không-500 sau khi đổi query inbox ✅ · `GET /api/contracts` 200 · control 404. END cicd-verify 761d818 — **VERDICT=PASS** (Stage 1-2 cicd [CI success · gate 587 delta +7 · restart chứng đến-giây] + Stage 3-6 lead 2-nguồn)