# LEAD NOTE — mojibake trong `sub-w3-nghi-thuc.md` (khai thẳng, sửa MỘT PHẦN)

## Sự việc
`sub-w3-nghi-thuc.md` (26 KB) bị **mojibake ở nửa sau** — UTF-8 bị ghi như CP1252.
Bắt được lúc lead đọc verdict từ đĩa: `## Â§4 â€” (3) TIá»€N-KIá»‚M…` thay vì `## §4 — (3) TIỀN-KIỂM…`.

## Đo (2 chiều, có control-dương)
| phép | kết quả |
|---|---|
| `U+FFFD` (ký tự thay thế = **mất byte**) | **0** ⇒ 🟢 **KHÔNG mất chữ nào**, chỉ mã hoá hai lần |
| mojibake ban đầu | **1.278** dấu hiệu |
| sau 4 vòng sửa | **1.226** — cải thiện, **KHÔNG hội tụ** |
| 🟢 **control-dương** | `sub-w2-luoi-ghi-dia.md` cùng thư mục = **0 mojibake** ⇒ không phải lỗi toàn kho, chỉ riêng lượt ghi này |

## Vì sao không sửa hết được
Các dòng bị **TRỘN** — đoạn hỏng và đoạn lành xen kẽ **không có ranh sạch**. Thử 4 cách, đều chỉ vá một phần:
1. theo DÒNG + `cp1252` strict → 20 dòng, 52 fail (dòng chứa ký tự ngoài bảng ⇒ cả dòng fail).
2. theo DÒNG + đa codec (`cp1252`/`latin-1`/`cp1258`), chỉ nhận nếu **giảm** mojibake → +5.
3. bảng ngược cp1252 đầy đủ 256 byte, lặp 3 lớp → +1.
4. theo ĐOẠN CON liên tiếp, lặp 3 vòng → 1.278 → 1.226.

## 🔴 Quyết định: DỪNG, không sửa tiếp
- Mỗi vòng ghi lại file = **một lần rủi ro hỏng thêm**; lợi ích biên đang giảm nhanh, rủi ro thì không.
- **Nội dung ĐỌC ĐƯỢC bằng mắt** (mojibake khả nghịch với người đọc) và **0 byte mất**.
- Cố cho đẹp lúc này = tối ưu **hình thức của bằng chứng** trong khi **bản thân bằng chứng đã nguyên vẹn** — đúng kiểu Goodhart mà cả phiên này đi bắt.
- 🔸 **Đường sửa triệt để nếu cần sau:** nhờ chính W3 viết lại các §4-§6 (nó còn nội dung trong context), hoặc đọc bản gốc từ `git log -p` nếu có commit trước lúc hỏng. **Không cấp bách.**

## Gốc kỹ thuật
Bẫy **PowerShell 5.1**: `Set-Content`/`Add-Content` mặc định **ANSI codepage**, không UTF-8. W3 hẳn đã đổi sang append bằng PowerShell ở nửa sau (nửa đầu sạch).
SE **đã biết lớp này** — `check-email.md` cảnh báo *"CẤM `Get-Content -Raw` cho hash — PS 5.1 đọc UTF-8-no-BOM bằng ANSI → mojibake → false-tamper (S125)"*. Cùng bẫy, chiều **ghi** thay vì chiều **đọc**.

## 🔴 Lỗ hổng THẬT lộ ra — đáng giá hơn cả bản vá
**`artifact-integrity.ps1` (W2) KHÔNG bắt được ca này.** Nó đo **cấu trúc** (placeholder ở heading · tỉ lệ ruột/khung · tệp rỗng · nguồn-2) — **không đo MÃ HOÁ**.
File này qua hết mọi vị từ W2: có ruột (63 dòng), 0 placeholder, có nguồn-2, không rỗng. **Sạch theo mọi thước đang có, mà hỏng thật.**

⇒ **Lại đúng luật W1-a:** *"một artifact sạch **chính xác tới độ sâu máy của nó KIỂM**, không sâu hơn một nấc."* W2 kiểm cấu trúc ⇒ sạch cấu trúc; **mã hoá là nấc chưa ai kiểm**.

**Đề xuất vị từ V-5 (chưa cắm, ghi để W6 hoặc anh phán):**
```
V-5 mojibake: dem ('Â§','â€','Ã¡','á»','Äƒ') trong *.md; >0 => FLAG
     + control-duong: U+FFFD == 0 => "khong mat byte, sua duoc"
     + phan biet 2 nac: U+FFFD>0 = MAT DU LIEU (nang) ⟂ moji-only = SAI MA HOA (sua duoc)
```
🔸 **Rẻ, 1 dòng grep, 0 cấu hình** — cùng hạng với V-2 (vị từ mạnh nhất của W2).
🔸 **CẤM** gộp V-5 vào `LECH` của `naming-scan` — khác trục (tên ⟂ nội dung).
