Compare commits

...

2 Commits

Author SHA1 Message Date
f622218d83 [CLAUDE] Docs: memory verify-deploy them 2 bai do duoc tu S178 (hash CI != local, marker phai phan biet)
Bo sung vao feedback_verify_deployed_artifact_byte_level.md — CUNG mot bai
"chon DUNG thu de neo", 2 ca do duoc trong cung mot dot ship:

1. Hash bundle CI != hash dist LOCAL cua CUNG mot commit.
   Do that: 99370de build local ra C1x59woX/Cn2Ctxap, CI deploy ra CZzRTDJS/D1cL-UbV.
   => CAM neo "da deploy" vao hash-khop-local: neo vay thi deploy THANH CONG van bi
   doc thanh that bai. Neo dung 2 ve: (a) hash DOI so prod cu + (b) byte-level noi
   dung kem control duong. dist local chi dung lam doi-chung CO-CHUOI-HAY-KHONG,
   khong dung lam moc danh-tinh.

2. Marker phai PHAN BIET DUOC, khong thi control duong cung cuu khong noi.
   Go placeholder 'Ghi chu (tuy chon)…' cua KHKK, do bundle ra 2 => trong y het
   "go khong an". That ra PeWorkflowPanel + HardCopiesPage dung ban KHONG co dau '…'.
   Marker dung = ban CO '…' (0/0); ban khong-'…' thanh control duong (2/2).
   => Truoc khi dat ky-vong =0, grep xem CON AI DUNG chuoi do. Day la lan thu 4
   cung lop trong 2 cua-so lien tiep.

Docs-only => path filter CI skip, khong deploy.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 22:37:11 +07:00
fd25ef4b8b wal: flush 20260806T2230 2026-08-06 22:30:47 +07:00
2 changed files with 11 additions and 8 deletions

View File

@ -1,16 +1,12 @@
# WAL — auto-generated, không sửa tay # WAL — auto-generated, không sửa tay
updated: 2026-08-06 | session: S178 (phiên-LOGIC L11, window 6) | branch: main updated: 2026-08-06 | session: S178 (phiên-LOGIC L11, window 6) | branch: main
goal: **ĐIỂM DỪNG SẠCH** — cửa-sổ UAT màn KHKK đóng trọn: 6 đợt ship + **6/6 deploy VERIFIED** 2-vế ×2 app, 0 việc dở. Engine `SỬA-6` vẫn treo NGUYÊN, chưa vá điểm nào. goal: cửa-sổ 6 (S178) — UAT màn KHKK chạy tiếp: **đợt-7 `99370de` đã push, ĐANG chờ deploy verify 2-vế ×2 app**. Engine `SỬA-6` vẫn treo NGUYÊN, chưa vá điểm nào. 🔴 `_mind` **99,67% trần** (dư 163B) ⇒ phải nén MIND-2+3 TRƯỚC `/pause` kế (`ctx-verifier` cờ-2).
chain: chain:
- [x] nối mạch /tiep @S178: Sàn-3 **2/5** tín-hiệu MẠNH kêu (① 2 orphan-run · ⑤ ORPHAN-L) · tick 51→52 · **3 LỆCH** ground-truth (residual đã bị hook commit · cửa thư tái-dựng ĐƯỢC · ORPHAN-L lệch -1 CỐ-HỮU do PAUSE-3 kép) · `_tiep-5.md` cân sổ - [x] nối mạch /tiep @S178: Sàn-3 **2/5** tín-hiệu MẠNH kêu (① 2 orphan-run · ⑤ ORPHAN-L) · tick 51→52 · **3 LỆCH** ground-truth (residual đã bị hook commit · cửa thư tái-dựng ĐƯỢC · ORPHAN-L lệch -1 CỐ-HỮU do PAUSE-3 kép) · `_tiep-5.md` cân sổ
- [x] **đợt-1 `530af22`** (`B-m_oxS2`·`IsXERmML`): bỏ `(N dòng)` + cột STT + mã `<dự án> - <chi tiết>`. **Mig 72** + backfill (cố ý KHÔNG lọc `IsDeleted`). Mig 72 = dòng đầu `__EFMigrationsHistory` prod · backfill đo THẬT 7 dòng / 5 có hạng mục / **5/5 có mã** - [x] 🧊 **đợt-1..6 cửa-sổ 5 NÉN thành con-trỏ** (đã ship + 6/6 deploy VERIFIED, chi-tiết sống ở `_context-s-11.md` PAUSE-6 mục (1) + 6 commit): `530af22`·`b346b41`·`cd79d1c`·`4704aaf`·`1fa079d`·`ca9208f`. Mốc bundle cuối cửa-sổ 5 = `BG-xXFql`·`DyRJmp0R`. **Mig 72** + backfill 5/5 có mã · test **645/645** · gotcha **#82** vá lệch 2 tầng
- [x] **đợt-2 `b346b41`** (`DbWf4jNk`·`BqrZMtfo`): "Hạng mục (dự án)" → header mục 2 (NGOÀI ternary `lines.length===0`) · nút thêm vào `tbody` - [x] **đợt-7 `99370de`** (S178 — anh: *"giữ lại chỗ chọn hạng mục - số tiền - thêm hủy thôi, bỏ luôn chỗ ghi chú luôn"*): GỠ ô Ghi chú CẢ 2 chỗ (dòng đã có + dòng thêm) · dọn `addNote` + `note` khỏi 2 mutation · vá chú-thích `:556` trỏ vào chính ô vừa gỡ. 🔴 **SUÝT DÍNH BẪY CHUỖI DÙNG CHUNG LẦN 4**: `Ghi chú (tùy chọn)` ở dist = 2 KHÔNG phải gỡ hỏng — `PeWorkflowPanel:869` + `HardCopiesPage:371` cùng dùng; chuỗi phân biệt KHKK là bản **CÓ dấu `…`**. Nguồn 2→0 · dist 0/0 · control dương 2/2. Thao tác append-theo-STT anh mô tả ĐÃ đúng sẵn (`onSuccess setAddFor(null)`+`invalidate`, BE `OrderBy(CreatedAt)`)
- [x] **đợt-3 `cd79d1c`** (`gymC4mU_`·`BKyJyauY`): gỡ 2 nút góc phải · header chỉ còn mã đậm · nút **+** từng dòng · **allow-list xoá +`TraLai`** = VÁ LỆCH 2 TẦNG (gotcha #82) · +1 test CHỨNG CÓ RĂNG (stash vá→FAIL, trả vá→PASS) · **645/645**
- [x] **đợt-4 `4704aaf`** (`8z75Zyyu`·`Bfwi0T6c`): gộp panel "Thêm hạng mục" thành **1 DÒNG của bảng**. KHÔNG "+ đẻ dòng trống inline" vì unique 3-cột CỐ Ý không lọc NULL ⇒ dòng trống thứ 2 cùng NCC đụng dòng gốc
- [x] **đợt-5 `1fa079d`** (`Cx8NQ8lS`·`BYHa3JR8`): gỡ chú-thích "Thêm cho: NCC" + gỡ vẻ-khối-riêng + dọn `addFor.supplierName` gán-mà-không-đọc. 🔴 2 câu trả lời của anh MÂU THUẪN — chọn hướng làm CẢ HAI khớp, đã khai
- [x] **đợt-6 `ca9208f`** (`BG-xXFql`·`DyRJmp0R`): bỏ khung ô nhập DÒNG ĐÃ CÓ (ghost), GIỮ khung dòng thêm. 🔴 `:554``:685` class GIỐNG HỆT ⇒ sửa kèm ngữ-cảnh, KHÔNG replace-all; đối chiếu sau sửa: 2 ô còn khung đều ở dòng thêm
- [x] 🔴 **4 phép đo của LEAD hỏng rồi tự bắt + 1 vượt trần sổ**: ① dò thư quét `../AI_INFRA…` (repo không ở đó ⇒ `all=0` là RỖNG-VÌ-HỎI-SAI-CHỖ) · ② `HEAD~1` ≠ commit-trước-của-mình (hook `wal:` chèn giữa ⇒ so bản mới với CHÍNH NÓ) · ③ đọc DLL sai heap + lệch khung UTF-16 + quoting `\"` không phải PowerShell · ④ kỳ-vọng chuỗi=0 sai **3 lần** (`STT`·`Giá đề xuất`=6·`bg-brand-50/40`=12) vì đều DÙNG CHUNG · ⑤ WAL phình 73/40. **CONTROL DƯƠNG cứu cả 4** - [x] 🔴 **4 phép đo của LEAD hỏng rồi tự bắt + 1 vượt trần sổ**: ① dò thư quét `../AI_INFRA…` (repo không ở đó ⇒ `all=0` là RỖNG-VÌ-HỎI-SAI-CHỖ) · ② `HEAD~1` ≠ commit-trước-của-mình (hook `wal:` chèn giữa ⇒ so bản mới với CHÍNH NÓ) · ③ đọc DLL sai heap + lệch khung UTF-16 + quoting `\"` không phải PowerShell · ④ kỳ-vọng chuỗi=0 sai **3 lần** (`STT`·`Giá đề xuất`=6·`bg-brand-50/40`=12) vì đều DÙNG CHUNG · ⑤ WAL phình 73/40. **CONTROL DƯƠNG cứu cả 4**
- [x] `/pause` @PAUSE-6: `_pause-6.md` + `_context` PAUSE-6 (🔴 lead chèn NHẦM ĐẦU FLOW — `_context` là mới-nhất-ở-CUỐI, NGƯỢC `_mind`; đã sửa) + MIND-7 (`ctx-curator` bắt **7 điểm**, vá đủ, máy `dat=11 TRUOT=0`) + nén MIND-1 (51.260B→48.884B) + `_snapshot-1` `e1942a5` - [x] `/pause` @PAUSE-6: `_pause-6.md` + `_context` PAUSE-6 (🔴 lead chèn NHẦM ĐẦU FLOW — `_context` là mới-nhất-ở-CUỐI, NGƯỢC `_mind`; đã sửa) + MIND-7 (`ctx-curator` bắt **7 điểm**, vá đủ, máy `dat=11 TRUOT=0`) + nén MIND-1 (51.260B→48.884B) + `_snapshot-1` `e1942a5`
- [!] 🔴 **residual-write:** `ctx-curator` GHI 2 tệp `.claude/agent-memory/ctx-curator/` (G-015). 🔴 **ĐÃ ĐỔI TRẠNG-THÁI @S178:** hook nuốt vào `ee21056``porcelain` nay RỖNG, giữ/revert giờ cần **revert-commit** chứ không discard nữa (đúng bẫy timing `session-start.md:285`) - [!] 🔴 **residual-write:** `ctx-curator` GHI 2 tệp `.claude/agent-memory/ctx-curator/` (G-015). 🔴 **ĐÃ ĐỔI TRẠNG-THÁI @S178:** hook nuốt vào `ee21056``porcelain` nay RỖNG, giữ/revert giờ cần **revert-commit** chứ không discard nữa (đúng bẫy timing `session-start.md:285`)
@ -30,7 +26,8 @@ chain:
next: vá **SỬA-1** (4 site, ba-chấm → hai-chấm `porcelain` lọc `??`) → SỬA-5a → 2/3/4/5b/5c/6a/6b → re-review next: vá **SỬA-1** (4 site, ba-chấm → hai-chấm `porcelain` lọc `??`) → SỬA-5a → 2/3/4/5b/5c/6a/6b → re-review
verify: verify:
- `curl -s https://admin.solutions.com.vn/ | grep -oE 'index-[A-Za-z0-9_-]+\.js'`khác `index-BG-xXFql.js` = đợt SAU đã tới (mốc S177 đợt-6 = `ca9208f`; eoffice `index-DyRJmp0R.js`) - `curl -s https://admin.solutions.com.vn/ | grep -oE 'index-[A-Za-z0-9_-]+\.js'`mốc CŨ (trước đợt-7) = `BG-xXFql`·`DyRJmp0R`; dist local của `99370de` = **`C1x59woX`·`Cn2Ctxap`** ⇒ prod khớp 2 hash này = đợt-7 ĐÃ TỚI
- 🔴 đo đợt-7 phải dùng chuỗi **`Ghi chú (tùy chọn)…` CÓ dấu `…`** (đích 0). Bản KHÔNG dấu `…` = **control dương phải CÒN 2** (`PeWorkflowPanel:869`+`HardCopiesPage:371` dùng chung — đừng đọc thành gỡ hỏng)
- `grep -rn 'origin/main\.\.\.HEAD' .claude/agents/ | wc -l`**4** = SỬA-1 CHƯA vá (đích: 0) - `grep -rn 'origin/main\.\.\.HEAD' .claude/agents/ | wc -l`**4** = SỬA-1 CHƯA vá (đích: 0)
- `ls -d .claude/agent-memory/*-reviewer-style 2>/dev/null | wc -l`**0** = SỬA-5a chưa làm (đích: 3) - `ls -d .claude/agent-memory/*-reviewer-style 2>/dev/null | wc -l`**0** = SỬA-5a chưa làm (đích: 3)
- 🔴 residual-write ctx-curator: `porcelain` NAY VÔ DỤNG (hook nuốt) ⇒ đo bằng `git log --name-only origin/main..HEAD | grep ctx-curator` → có = chưa revert (đích: đã quyết giữ/revert) - 🔴 residual-write ctx-curator: `porcelain` NAY VÔ DỤNG (hook nuốt) ⇒ đo bằng `git log --name-only origin/main..HEAD | grep ctx-curator` → có = chưa revert (đích: đã quyết giữ/revert)

View File

@ -5,6 +5,7 @@ metadata:
node_type: memory node_type: memory
type: feedback type: feedback
originSessionId: 67157d21-1ead-475d-9a50-cf7f07468583 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). 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).
@ -12,3 +13,8 @@ Khi user UAT báo "fix chưa ăn / vẫn thấy UI cũ" SAU khi đã deploy (cic
**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"). **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]]. **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]].