--- name: feedback-absence-looks-like-clean description: "Vắng-mặt trông giống ổn — slot-index tái-dụng xoá im-lặng, phép trích rỗng đọc thành sạch; vá xong phải grep lại bằng lệnh KHÁC" metadata: node_type: memory type: feedback originSessionId: 55aae6bd-8d74-4018-a203-343da07d3618 modified: 2026-08-06T08:31:35.632Z --- **Ba ca cùng một lớp, đo được @S146 (2026-07-22/23) — "cái BỊ MẤT không tự tố-giác".** **(1) Slot-index tái-dụng = xoá im-lặng.** Owner nói *"còn lại xử lý hết xong rồi session-end"*; lead ghi đúng vào `WAL` slot `[7]` = uỷ-quyền commit+push. Sau đó lead thêm mục mới và **tái-dụng `[7]`** ⇒ dòng cũ **biến mất, 0 hit toàn repo**. Hệ-quả: lead **hỏi lại 3 lượt** đúng thứ owner đã trả lời, ngay dưới khối tên *"ghi đè, KHÔNG hỏi lại"*. 🔴 Khác **đổi giá-trị** (còn thấy giá-trị cũ để grep) — **đè slot thì không còn gì để grep**. Và **máy MÙ hoàn-toàn**: không detector nào biết `[7]` từng là thứ khác. **Why:** WAL **ghi-đè toàn-file** ⇒ mất-mát không đi qua diff-review từng dòng. **How to apply:** khối đánh số (`[n]`, checklist, enum) **CHỈ TĂNG index, CẤM tái-dụng**. Đối-chứng mất-mát trong WAL = `git show :.claude/WAL.md`. Catch-layer duy nhất = vai soi **CÁI THIẾU** ([[feedback_meta_count_selfcoverage_blindspot]]). **(2) Phép trích rỗng ⟂ không có gì.** Vá 6 site theo danh-sách người khác liệt → **vá 5 sót 1**. Cơ-chế: `grep -oE '.{50}consent.{80}'` đòi **đúng 50 ký-tự TRƯỚC** match; match ở offset ~30 ⇒ **0 match ⇒ RỖNG** ⇒ đọc thành *"dòng này sạch"*. Đúng phải `.{0,60}`. 🔴 Nguy hơn bẫy `grep -c` (đã có trong [[feedback_resume_premise_reverify]]): `grep -c` trả **`0` — một con SỐ**, nhìn là biết đang đếm; cửa-sổ hỏng trả **rỗng**, **trông y hệt sạch**. **How to apply:** **vá xong PHẢI tự grep lại bằng lệnh KHÁC lệnh đã dùng để tìm** (khác mẫu, khác cửa-sổ). Vá-theo-danh-sách mà không tự-verify = đời-3 của cùng lớp lỗi. **(3) Ghost-wire soi được 2 CHIỀU.** Trước giờ chỉ canh *khai-có-mà-không-chạy*. @S146 gặp chiều ngược: `tiep.md` PROSE khai *"`closed.md` CHƯA wire"* trong khi **MÁY ngay phía trên đã đọc `closed.md` thật** — **wired-but-declared-unwired**, và nằm đúng dưới nhãn *"chống ghost-wire H18"*. **Why:** khai-chưa-xong cho thứ đã xong khiến người sau đi vá cái đã lành, và làm mất niềm tin vào chính lưới đó. **How to apply:** khi lật một cơ-chế sang "đã wire", grep **mọi surface khai nó chưa wire** — cùng kỷ-luật [[feedback_cardinality_change_grep_consumers]]. **(4) `HEAD~n` KHÔNG phải "commit trước của mình" — đo @S177 (2026-08-06), sập THẬT 1 lần.** Verify deploy cần đối-chứng trước/sau, lead chạy `git show HEAD~1:` vs `git show HEAD:` ⇒ **y hệt nhau**. Đọc thẳng thành *"không có gì đổi ⇒ deploy hỏng?"*. Thật ra Stop-hook `wal-flush.ps1` auto-commit ở **turn-boundary** nên `HEAD` = `wal: flush`, còn `HEAD~1` = **chính commit vừa tạo** ⇒ phép so **bản mới với chính nó**. 🔴 Cùng lớp: **hai vế bằng nhau trông như một phép đo hợp-lệ**, không có gì kêu. Khác ca (2) ở chỗ output không rỗng mà *khớp* — còn dễ tin hơn. **How to apply:** trong repo có hook auto-commit, **CẤM `HEAD~n`** cho mọi phép so trước/sau — dùng **SHA đích danh** (`git log --oneline` lấy đúng commit sản-phẩm, bỏ qua `wal:`). Cùng gốc với luật đã có ở [[project_h22_wal_session_continuity]] (hook 4-path) và điểm-mù Sàn-3: hook làm *"cây sạch"* và *"HEAD~1"* đều mất nghĩa. Bonus S177: bundle prod CŨ cũng không dùng làm đối-chứng được (deploy dọn `dist` ⇒ URL cũ trả ~900B SPA-fallback, grep ra 0 mọi chuỗi = lại một *rỗng đọc thành sạch*) — xem [[feedback_prod_db_verify_integrated_auth]]. 🔸 **Neo chung cả 4:** thứ *có mặt sai* thì grep ra; thứ *vắng mặt* thì **không**. Nên với xoá/đè/rỗng/so-nhầm-mốc, **bằng-chứng phải đến từ NGUỒN KHÁC** (git history theo SHA · lệnh khác · người khác), không từ chính bề-mặt đang soi.