---
name: verify-deployed-artifact-byte-level
description: "UAT \"fix chưa ăn\" sau deploy → verify bundle prod byte-level (cache≠deploy); incognito = golden test"
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 67157d21-1ead-475d-9a50-cf7f07468583
  modified: 2026-08-06T15:36:33.098Z
---

Khi user UAT báo "fix chưa ăn / vẫn thấy UI cũ" SAU khi đã deploy (cicd verify bundle rotate), ĐỪNG đoán cache-vs-deploy — **verify artifact prod BYTE-LEVEL**: `curl -s $BASE/` lấy `/assets/index-<hash>.js` → `curl` file đó → `grep -ao` string-fix-mới + string-cũ. Fix-present + old-gone = deploy OK → **100% client-cache** (KHÔNG deploy-fail). **incognito window (Ctrl+Shift+N) = golden-test** (không cache → OK = chắc-chắn cache). SPA Vite: index.html `Cache-Control:no-cache` + JS hash-immutable = ĐÚNG chuẩn; cache-lag do tab-SPA-mở/browser-giữ-index.html, KHÔNG do server (nếu grep `serviceWorker|workbox` = 0).

**Why:** S96 anh Chương "bó tay rồi" — checkbox opt-out không hiện sau Ctrl+F5+logout. Verify byte-level: prod `0MU-kb4N` CHỨA "BỎ tick"/"Đã BỎ tick", chuỗi cũ "✅ static" MẤT → xác nhận cache 100%. Tiết-kiệm giờ debug sai-hướng + trấn-an team ("server có fix rồi, do cache máy").

**How to apply:** deploy-claim + UAT-báo-chưa-ăn → (1) curl-grep bundle prod tìm marker-fix, (2) bảo user incognito, (3) CHỈ nghi deploy-fail khi marker VẮNG khỏi bundle. Xem gotcha #77. Liên [[feedback_root_cause_over_symptom]].

**+S178 — 2 bổ-sung ĐO ĐƯỢC, cùng một bài "chọn ĐÚNG thứ để neo":**

1. 🔴 **Hash bundle CI ≠ hash `dist` LOCAL của CÙNG commit.** Đo thật: `99370de` build local ra `C1x59woX`·`Cn2Ctxap`, CI deploy ra `CZzRTDJS`·`D1cL-UbV`. ⇒ **CẤM neo "đã deploy" vào hash-khớp-local** (neo vậy thì deploy THÀNH CÔNG vẫn đọc thành thất bại). Neo đúng 2 vế: *(a)* hash **ĐỔI** so prod cũ + *(b)* **byte-level nội-dung** kèm control dương. Có (a)+(b) rồi thì lệch hash local là vô hại — dist local chỉ dùng làm **đối-chứng có-chuỗi-hay-không**, không dùng làm mốc danh-tính.
2. 🔴 **Chọn chuỗi marker phải PHÂN BIỆT ĐƯỢC, nếu không control dương cũng cứu không nổi.** Ca S178: gỡ placeholder `Ghi chú (tùy chọn)…` của KHKK, đo bundle ra **2** ⇒ trông y hệt "gỡ không ăn". Thật ra `PeWorkflowPanel`+`HardCopiesPage` dùng chuỗi `Ghi chú (tùy chọn)` **không có dấu `…`**. Marker đúng = bản CÓ `…` (0/0), còn bản không-`…` thành **control dương** (2/2). ⇒ Trước khi đặt kỳ-vọng `=0`, **grep xem còn ai dùng chuỗi đó** — đây là lần thứ 4 cùng lớp, xem [[feedback_absence_looks_like_clean]] + [[feedback_claim_stronger_than_work]].
