Files
solution-erp/.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/lead-note-w3-encoding.md
2026-08-07 17:29:49 +07:00

3.7 KiB
Raw Blame History

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àycheck-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).