Files
solution-erp/.claude/workflows/runs/2026-07-29-S159-tong-quan-pipeline-menu/cicd-verify-a2bbcb9.md
2026-07-29 14:25:17 +07:00

9.6 KiB
Raw Blame History

cicd-verify a2bbcb9 — S159 ĐỢT-4 "danh sách toàn trình: 7 FLAG reviewer fix + nhãn 'Bảng cứng'"

Ghi-TỪNG-MỤC-trong-lúc-làm (chống #53). File = SẢN PHẨM CHÍNH; return chỉ tóm tắt. Đợt-1 b5799fc PASS 9/9 · đợt-2 1a47a61 PARTIAL 8/9 · đợt-3 2a72695 PASS 9/9 — 3 file cũ KHÔNG chạm. Bắt đầu: 2026-07-29 ~13:52+07 · cicd-monitor (READ-only)


M1 — Push + phạm vi · PASS

git log -1 → a2bbcb91c37de3d79a61809fd903d918e7d9f105
             [CLAUDE] FE-User: dot-4 danh sach toan trinh - 7 FLAG reviewer fix
             + nhan 'Bang cung' (owner ve)   ·  2026-07-29 13:51:07 +0700
git log origin/main..HEAD → EMPTY (đã push)

Range 2a72695..a2bbcb9 = 9 file; 2 file CODE (7 file còn lại .claude/**, ignored):

File code +/ ghi chú
fe-user/src/pages/UserDashboardPage.tsx +1043 / 337 redesign list toàn trình + 7 FLAG fix
src/Backend/…/Persistence/DbInitializer.cs +9 / 1 label-only

⚠️ Tự-đính-chính nhẹ so với brief: brief ghi "1050+/338", số thật --numstat = 1043/337. Không đổi bản chất (FE-user 1 file + BE label-only).

fe-admin KHÔNG có file nào trong diff ⇒ admin bundle có thể rotate HOẶC frozen — cả hai đều lành tính (#69 TWO-MODE). Sẽ ĐO rồi mới nói, không phán trước.

DbInitializer đúng là label-only (đọc diff):

- tree.Add(("Hdc_" + code, label,                    MenuKeys.HopDongCung, hdcOrder++, "FileText"));
+ tree.Add(("Hdc_" + code, label + " - Bảng cứng",   MenuKeys.HopDongCung, hdcOrder++, "FileText"));
+ ["Hdc_ThauPhu"] = "01. HĐ Thầu phụ - Bảng cứng",   ×7 (labelBackfill)

Không đụng revoker / reviewKeys / grant ⇒ không có rủi ro mới cho durability, nhưng vẫn sẽ đo lại (M6).

M2 — Migration VẮNG là ĐÚNG · PASS

git diff --name-only 2a72695..a2bbcb9 -- '*Migrations*'  →  0

Mig giữ 68 / 89 bảng.

📌 BASELINE TRƯỚC RESTART (đo 13:52+07, run #425 đang running, pool CHƯA recycle)

Phép đo TRƯỚC restart
38-key set min=13 max=13 keys=38
Skeleton Khkk_+Hdc_ permission rows 156
Hdc_* MenuItems có hậu tố (Label LIKE '%-%') 7 (prod đã SQL cùng ngày)

Bundle trước deploy: admin js CC1pGE1F css DWDbm5As · user js DeAg7MWm css BQIZ-rUe — khớp CHÍNH XÁC baseline hậu-đợt-3 ⇒ baseline hợp lệ.

🔎 M3-pre — Marker kỳ vọng, đếm trên SOURCE (chốt trước khi soi bundle)

UserDashboardPage.tsx (63.124 B):

Chuỗi source vai trò dự đoán bundle
chưa có thông tin ở giai đoạn này 1 dương 1
đã sinh hợp đồng 1 dương 1
Không tìm thấy 3 dương ≥1
HĐ ĐANG SOẠN 0 ÂM (KPI cũ bỏ) 0
Tổng giá trị nháp 0 ÂM (KPI cũ bỏ) 0
chưa tới 2 ⚠️ ÂM (DOT_TEXT cũ đã thay) 0

⚠️ BẪY ĐÃ GỠ TRƯỚC (nếu không soi sẽ báo FAIL oan): chưa tới grep ra 2 trên source, nhưng cả 2 đều nằm trong COMMENT giải thích lý do FLAG-2:

L343: // [FLAG-2 reviewer đợt-4] 'chưa tới' là lời KHẲNG ĐỊNH sai với chấm PHÍA TRƯỚC
L344: // giai đoạn hiện tại (HĐ ở GĐ3 thì GĐ1/GĐ2 là quá khứ, không phải "chưa tới").
L345:   none: 'chưa có thông tin ở giai đoạn này',      ← chuỗi THAY THẾ (code thật)

⇒ occurrence-CODE = 0; minifier strip comment ⇒ bundle phải = 0. (Đúng mẫu comment-strip đã học ở đợt-1 — so bundle với occurrence-CODE, không với grep-source thô.)

M4 — Poll terminal · PASS

  • id=538 · run_number=425 · head_sha a2bbcb91 · created 13:51:15 → status=success 13:56:55
  • Duration 5m40s (đợt-1 5m59s · đợt-2 5m44s · đợt-3 5m56s) — ổn định, dưới ngưỡng.

M4b — Test gate · 562 EXACT

Passed! - Failed: 0, Passed:  45, Skipped: 0, Total:  45, 159 ms - SolutionErp.Domain.Tests.dll
Passed! - Failed: 0, Passed: 517, Skipped: 0, Total: 517, 1m27s  - SolutionErp.Infrastructure.Tests.dll

Failed! ×0 ⇒ 562. Giữ nguyên — đúng kỳ vọng (FE + label BE, không đụng test). Regression-guard đợt-3 (StillHiddenKeys / ReopenedKeys) nằm trong 517 này và vẫn xanh.

M5 — Bundle · PASS (đo 13:57:23, sau status=success)

App asset TRƯỚC SAU KQ
user js DeAg7MWm CLfAftby ROTATE (điều kiện bắt buộc)
user css BQIZ-rUe B6bUSFBt ROTATE
admin js CC1pGE1F CC1pGE1F FROZEN — lành tính, xem dưới
admin css DWDbm5As DWDbm5As FROZEN — lành tính

🔑 Admin FROZEN = #69 mode-B, KHÔNG phải deploy hỏng — và tao chứng minh được, không đoán:

ADMIN index-CC1pGE1F.js  ct=application/javascript  size=1.678.733  LM=13:55:31+07

Last-Modified 13:55:31 nằm TRONG cửa sổ deploy (13:51:15→13:56:55) ⇒ file ĐÃ được ghi lại trong lần deploy này (deploy copy dist\* vô điều kiện), chỉ là Vite dựng ra byte y hệtfe-admin 0-file-thay-đổi ⇒ content-hash không đổi. Size trùng khít đợt-3 (1.678.733). ⇒ Đây là "re-ship nội dung giống hệt", không phải "bundle cũ kẹt lại". Brief dặn "ghi nhận, không phán sai" — kết luận: lành tính, nhất quán với diff.

USER index-CLfAftby.js  ct=application/javascript  size=1.601.698  LM=13:56:28+07 (in-window)

Control âm 2 tầng: hash CŨ DeAg7MWm hash bịa đều trả 200 nhưng ct=text/html 876 B ⇒ bundle đợt-3 đã biến mất khỏi đĩa = chứng ghi-đè thật.

M3 — Byte-marker bundle USER · PASS (3 dương / 3 âm)

Chuỗi bundle kỳ vọng KQ
chưa có thông tin ở giai đoạn này 1 dương
đã sinh hợp đồng 1 dương
Không tìm thấy 10 dương
chưa tới 0 ÂM
HĐ ĐANG SOẠN 0 ÂM
Tổng giá trị nháp 0 ÂM

🔑 Dự đoán comment-strip ĐÚNG: source có chưa tới ×2 (đều trong comment L343-344), bundle ra 0 — xác nhận lại quy tắc "so bundle với occurrence-CODE, không với grep-source thô". Nếu đọc grep-source thô sẽ báo FAIL oan cho một control vốn ĐÚNG. ⚠️ Không tìm thấy bundle=10 > source=3: chuỗi phổ thông, xuất hiện ở module khác nữa (empty-state dùng chung). Là marker DƯƠNG nên "≥1" đủ kết luận; không dùng nó làm phép đếm-chính-xác.

M6 — RESTART-DURABILITY lần 2 · PASS (chứng bền qua ≥2 restart)

Bước 0 — chứng minh có restart THẬT (giữ khuôn đợt-3):

Bằng chứng Giá trị
Dòng ĐẦU log solution-erp-20260729.log 13:56:39.193 +07:00 [INF] Applying migrations...
w3wp StartTime (mới nhất trong cửa sổ) 13:56:33

Deploy xoá logs/ ⇒ log mở lại lúc 13:56:39 = boot mới, DbInitializer (seeder + revoker) đã chạy. Mọi số dưới đo SAU mốc này.

Phép đo TRƯỚC restart (13:52) SAU restart (13:57) KQ
38-key set 13/13/38 min=13 max=13 keys=38 · totcr=494/494 GIỮ
Skeleton Khkk_+Hdc_ perms 156 156
Hdc_* nhãn có hậu tố %-% 7 7
Root menu 12
3 root ẩn Hrm/Off/Personal IsVisible 0 / 0 / 0
Control ÂM Hrm%/Off%/Personal non-Admin canread 0 0 revoker CÒN SỐNG
Control Pe% 197 / 185

🎯 Đây là restart thứ 2 liên tiếp sau khi gỡ nhánh S92 (#424 rồi #425). Grant 38-key giữ 494/494 cả hai lần ⇒ không phải "may một lần". Control âm vẫn 0 ⇒ fix không phải do vô hiệu hoá cả revoker (chống Goodhart, giữ đủ 3 chân kiềng của đợt-3).

M7 — Smoke · PASS 4/4

/health/live 200 Healthy · /health/ready 200 Healthy · admin 200 · eoffice 200

VERDICT: PASS — 9/9

# Mục KQ
1 Push + range 2 file code (1043/337 + 9/1 label-only)
2 Migration VẮNG là ĐÚNG
3 Run #425 success 5m40s
4 Test gate 562 (45+517, 0 fail)
5 Bundle user rotate DeAg7MWmCLfAftby (+css)
6 Admin FROZEN — chứng minh lành tính bằng LM in-window + size trùng (#69 mode-B)
7 3 marker DƯƠNG trong bundle user
8 3 control ÂM VẮNG (chưa tới / HĐ ĐANG SOẠN / Tổng giá trị nháp) + hash-cũ text/html
9 Durability lần 2: 38-key 494/494 · skeleton 156 · Hdc nhãn 7 · root 12 · control âm 0 · Pe 197/185

Không có cờ đỏ. Không khuyến nghị rollback.

Baseline mới: user js CLfAftby / css B6bUSFBt · admin giữ js CC1pGE1F / css DWDbm5As (frozen hợp lệ) · gate 562 · Mig 68 / 89 bảng · menu root 12 · 38-key 13/13 · skeleton 156.

Ghi cho arc S159 (4 đợt)

đợt-1 PASS 9/9 → đợt-2 PARTIAL 8/9 (bắt regression revoker ăn 447/494 row) → đợt-3 PASS 9/9 (đóng regression, chứng bằng 3 chân kiềng) → đợt-4 PASS 9/9 (tái xác nhận durability qua restart thứ 2).