# CI/CD Monitor — archive 2026-08

> L2 archive. Moved byte-exact from L1 `MEMORY.md` khi vượt soft-cap. Con-trỏ ở `_INDEX.md`.

---

- **S167 (08-01) `aaed699` K7 bridge KHKK→HĐ 13 file cross-stack (4 BE + 6 FE ×2 + 3 test, 0-mig) — PARTIAL 4/6+1** (gate **639=45+594** Δ+17 · Mig GIỮ 71 · tables 97 · bundle `Ig1R5tAh→RgvHZkPH` + `DFOCQ2ks→D65FJPGd`). 🔴 **BÀI TO NHẤT — PUSH-ĐÈ NUỐT DEPLOY (đề-xuất gotcha #86): run #441 của `aaed699` bị CANCELLED lúc 3m02s** vì lead push `628132c` đè ⇒ Gitea cancel-in-progress. K7 ship được **CHỈ NHỜ MAY**: `628132c` có chạm `fe-*/src/**` nên đẻ run #442. **Nếu commit-2 rơi trọn `paths-ignore` (docs/memory-only) ⇒ run-1 cancelled + run-2 skip ⇒ code KHÔNG BAO GIỜ lên prod, mà bảng Actions trông vẫn lành + `git log` đã push.** ⇒ **LUẬT: sau 2 push liên tiếp, verify "run cuối có head_sha == TIP" VÀ "TIP ⊇ commit code" (`git merge-base --is-ancestor`), CẤM đọc "có run xanh" là xong.** 🔑 **KIỂM-TRA-TIỀN-ĐỀ marker trước khi tin 0-hit (nâng cấp K6, suýt FAIL-OAN lần 3)**: `file` báo bundle **"ASCII text"** ⇒ nghi `\u`-escape → **bác bỏ bằng ĐO** (`grep -c -F 'Hợp đồng'`=4 trên bundle PRE); nghi **code-split** (page nằm lazy-chunk thì 0-hit vô nghĩa) → bác bỏ bằng ĐO (index.html chỉ 2 asset · 0 ref `"./x-<hash>.js"`). Cả 2 nghi đều SAI nhưng **phải đo mới được quyền kết luận**. 🔑 **CONTROL DƯƠNG = chuỗi bản TIỀN-commit của CHÍNH file đang sửa** (4/4 =1 ở cả 2 bundle) — chứng "file có trong bundle + grep có răng" rẻ hơn mọi cách khác. 🔑 **Admin = control idempotent SẴN CÓ, miễn phí**: seeder chạy 3 role báo **2 upgraded** (không phải 3) ⇒ nhánh no-op ĐÃ thực thi thật trên prod (code `if(changed) upgraded++`) ⇒ chứng idempotent ở tầng-row **dù chỉ có 1 restart**. ⚠️ log lần-2 sẽ **IM LẶNG** (guard `if(added>0||upgraded>0)`) — đừng đọc thành hồi-quy. ⚠️ **`appcmd list wp` map PID→pool là BẮT BUỘC**: PID 7680 start cùng cửa-sổ nhưng là `vietreport-admin` (dự án KHÁC) — đọc vội tưởng pool ta restart 2 lần. ⚠️ **`nv.test` login 401** ⇒ tầng-2 #82 của Drafter CHƯA đo live; **CẤM lấy Admin-qua-được để tuyên grant đã ăn** (Admin có bypass, không tách được công của row). Evidence `runs/2026-07-31-S164-4gd-khkk-fanout/sub-cicd-verify-k7.md`. Tag `[run-442, push-de-nuot-deploy, ancestry-proof, tien-de-marker, control-duong-tien-commit, admin-control-idempotent, appcmd-map-pid]`

- **S167 (08-01) `1c6d77a` K6 admin thu-gọn menu `ADMIN_HIDDEN_KEYS` 12-key (FE-admin 1 file, 0-mig) — PASS 5/5** (#440 6m29s · gate **622=45+577** delta 0 · Mig GIỮ 71 · tables 97 · menu 200/perm 2221 đứng im). 🔴 **BÀI TO NHẤT: 0-hit marker SAI 2 LẦN LIÊN TIẾP do CƠ-CHẾ REGEX, cả 2 lần trông y hệt "code không ship" ⇒ suýt FAIL-OAN.** (a) **rolldown/Vite 8 minify string → BACKTICK** (`new Set([\`PurchaseEvaluations\`,…])`), regex neo `["']` không bao giờ khớp; (b) vá xong truyền pattern-chứa-backtick qua biến trong `"…"` → shell nuốt, `grep -cE` gãy (`Unmatched (`) trả **0 gần như im lặng** trong vòng lặp. ⇒ **LUẬT: marker chuỗi trên bundle dùng `grep -F` fixed-string + LUÔN trích byte thật `.{90}X.{90}` TRƯỚC khi kết luận vắng-mặt.** 🔑 **KỸ THUẬT MỚI — COUNT-DELTA**: literal đã có từ K4a ⇒ *có/không* = 0 bit, nhưng *số lần xuất hiện* PRE→POST đo được: **12/12 key đều +1**; ngoại lệ duy nhất `Workflows` **+2** giải-thích-được (substring ⊂ `PeWorkflows`) ⇒ thành kiểm-tra-nhất-quán MIỄN PHÍ. 🔑 **LOG CI IN THẲNG `dist/assets/index-<hash>.js <size>`** = nhân chứng THỨ 4 độc lập curl, khớp LM prod **tới từng giây** ⇒ rẻ nhất để phân biệt **FROZEN-lành-tính** (eoffice: LM 11:14→**12:00:41** đổi + log in CÙNG hash `DFOCQ2ks` = rebuild deterministic) với bundle-kẹt (LM cũ). 🔑 **2-TẦNG #82 đo bằng SỐ**: `/api/menus` trả **12/12 key bị ẩn** ⇒ ẩn client KHÔNG thu quyền. Marker-ÂM display-only: route `/purchase-evaluations` **68→68** nguyên vẹn. Evidence `runs/2026-07-31-S164-4gd-khkk-fanout/sub-cicd-verify-k6.md`. Tag `[run-440, 0-hit-gia-2-lan, grep-F, count-delta, frozen-lanh-tinh, log-CI-nhan-chung-4]`

- _(**08-01 `e202393` S166 K5+K4c FE-only — PASS 5/5**: #439 6m16s, gate **622=45+577** (+1 = đúng 1 Fact mới). 🔑 marker differential 4/4 element-wise (K5 vào CẢ 2 app · K4c CHỈ eoffice) + Δsize cùng chiều = nhân chứng ⟂ grep. 🔴 **recipe đếm mig trong MEMORY có FALSE-NEGATIVE**: `grep -v Snapshot` ăn nhầm `AddPeApprovedBudgetSnapshot` (Mig 67) → phải neo đuôi `Designer\.cs$|ModelSnapshot\.cs$`; ưu tiên **set-diff repo↔prod 2 chiều** thay khớp-tổng. ⚠️ **bar "FE route 200" KHÔNG CÓ RĂNG** với SPA-fallback (POS ≡ NEG byte-identical 876B). verbatim → `runs/…/sub-cicd-verify-k5-k4c.md`)_

- _(**08-01 `88e7ecf` S166 K4a+K4b — PASS 7/7**: #438, gate 621=45+576, menu 151→**200**, perm 1584→**2221**. 🔑 **PHỦ 2 RUN 1 LƯỢT ⇒ delta khép kín**. 🔑 **MỐC PRE ĐỀ BÀI SAI, bắt bằng ĐO** (lead giao 143⇒192, đo LIVE ra 151 → truy phạm-vi thay vì hô drift) — **mốc PRE lão hoá sau MỖI deploy**. 🔑 phân rã 49+588 khớp cơ-chế 2-site skip-existing (588=49×12 role). ⚠️ **PERM row ≠ policy**. 🔑 A5 restart ×2 thật + **soi ĐIỀU KIỆN log trong source TRƯỚC khi đọc im-lặng** (`if (added>0)`). 🔴 **marker lead gợi ý BỊ BÁC BẰNG ĐO** (`Kết cấu` có sẵn ⇒ 1/1 = 0 bit). verbatim → `runs/…/sub-cicd-verify-k4ab.md`)_

