# W1 — LANE b/2: KÝ CHUẨN ĐẶT TÊN + DỰNG MÁY SOI (G1-M1 + G1-M4)

- **Phiên:** S180 · **Vai:** implementer-backend · **Ngày:** 2026-08-07
- **Chế độ ghi:** GHI ĐĨA TỪNG PHẦN, append ngay khi xong mỗi mục (chống #53 — phiên này 17 vai dính, cứu 17/17 nhờ lối này).
- **Đầu vào ĐÃ ĐỌC TRỌN (4/4, trước khi gõ dòng mã đầu tiên):**
  1. `sub-w1a-mayd-octen.md` — 500 dòng / 44.914 B. 14 đoạn máy · 11 vỡ-câm · 11 ràng buộc R1-R11.
  2. `docs/governance/adap-upgrade-pack-fitmap.md` — dòng GĐ-1 = `áp dụng`, scope **22/24 khoản** (trừ `G1-B2` vai giữ chuẩn → P4; `G1-B7` siết mã thoát → W3b/P1).
  3. `docs/governance/adap-upgrade-pack-tracking.md` — GĐ-1 nấc *đã đồng ý*; mở khoá nấc kế = W1 ra đủ {chuẩn · sổ đổi tên · máy soi}.
  4. `broadcasts/inbox/ai_infra/2026-08-04-…-phu-luc-spec-pitfall.md` **§GĐ-1** (`:93-137`) — sàn (i)-(v), 6 bẫy, 6 ô nghiệm thu.
- **Luật tự áp:** mọi 0-hit kèm control-dương · mọi con số kèm mẫu số + đơn vị · `KHÔNG ĐO ĐƯỢC` hợp lệ, bịa thì không · **KHÔNG ĐỔI TÊN GÌ** trong wave này · bác lane a nếu sai thì nói thẳng.

---

## §0 — LUẬT THIẾT KẾ NHẬN TỪ LANE a (ràng buộc mọi thứ dưới đây)

> **"Một nhóm tên 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."**

Bốn ca hậu thuẫn (lane a §3.1, tôi dùng lại, KHÔNG đo lại): N1 ép *thành-viên* → sạch thành-viên 26/26/26 · N6 ép *hình-dạng* thư mục → sạch 12/12 nhưng tệp bên trong **7 họ** · N9 ép *tiền-tố* → sạch 12/12 nhưng nấc-2 **8 họ** · N5 **0 máy → 40,3%** dù `CLAUDE.md:151` thành văn nhiều tháng.

⇒ Hệ quả thi công: **mỗi mục chuẩn tôi ký PHẢI khai NẤC + trỏ MÁY ép đúng nấc đó.** Mục nào không có máy ⇒ ghi thẳng `CHƯA CÓ MÁY — mô tả, không cưỡng chế`, KHÔNG ký sâu hơn.

*(Các mục dưới append dần — mục nào chưa xuất hiện = chưa làm xong.)*

---

## §1 — RE-GROUND TỪ ĐĨA TRƯỚC KHI KÝ (không tin bảng lane a, đo lại)

### 1.1 — Tập 231 tên: **XÁC NHẬN 7/7 ô, tổng khớp tuyệt đối**

| Tập | Đơn vị | Lane a khai | Tôi đo lại | Khớp |
|---|---|---|---|---|
| `.claude/agents/*.md` | tệp | 27 | **27** | ✅ |
| `.claude/agent-memory/*/` | thư mục | 26 | **26** | ✅ |
| `.claude/commands/*` | mục | 19 | **19** | ✅ |
| `scripts/*` | mục cấp-1 | 53 | **53** | ✅ |
| `.claude/sessions/**` | tệp | 90 | **90** | ✅ |
| `docs/governance/*` | mục cấp-1 | 15 | **15** | ✅ |
| `.claude/hooks/*` | tệp | 1 | **1** | ✅ |
| **TỔNG** | | **231** | **231** | ✅ 27+26+19+53+90+15+1 |

🔸 **Khai một chỗ tôi CỐ Ý không nới:** `.claude/sessions/` còn **12 thư mục** phiên (`session-<N>`) ngoài 90 tệp. Đưa vào sẽ thành 243 và làm trôi mẫu số đã thoả thuận. Tôi **giữ 231** và cho máy **in tường minh** dòng *"12 thư mục phiên: NGOÀI tập, đã có `detectors:1639` ép, đo được 12/12 sạch"* — visible, không phải `[skip]` câm (R6).

### 1.2 — 23 chỗ lệch "còn nguyên": **XÁC NHẬN VẬT, BÁC CÁCH PHÂN LOẠI** (chi tiết §3.3)

Đo đủ 4 cụm: 5 sổ HOA-GẠCH ✓ · 16 script tiền-tố `s<n>-`/`plan-` ✓ (liệt đủ 16 tên) · `pause-S146-20260722T2328.md` ✓ · `closed.md` ✓. **Cộng 1 vật lane a bỏ sót:** `resume-S146-20260722T2334.md` — tệp mốc phiên thứ **2** ngoài mọi họ tiền-tố (lane a §N6 có LIỆT nó ở ô "lẻ: 2" nhưng **không đưa vào bảng lệch §3.2**, nên cột lệch thiếu 1).

Đối chứng họ tệp mốc phiên (mẫu số **90 tệp**): `_tiep` 24 · `_pause` 22 · `_snapshot` 14 · `_context-s` 11 · `_end` 10 · `_mind-s` 6 · `pause` 1 · lẻ 2 = **90** ✓ khớp lane a từng ô.

### 1.3 — Lane a §5 khai 3 chỗ CHƯA ĐO — tôi đo nốt 2 chỗ, ra **1 phát hiện MỚI**

- **§5.2 `settings.json` chưa đọc toàn tệp** → đọc trọn (15 dòng). Khối `hooks` đúng như lane a: **1 neo tên duy nhất** `wal-flush.ps1` ở `:9`.
  🔴 **NHƯNG lane a bỏ sót `:2`:** `"autoMemoryDirectory": "D:/Dropbox/.../SOLUTION_ERP/.claude/auto-memory"` — **đường dẫn TUYỆT ĐỐI**, neo cùng lúc **tên thư mục `auto-memory`** VÀ **vị trí gốc của cả kho**. Đổi tên thư mục ⇒ ký-ức-tự-động rơi im lặng. ⇒ **R3 có 2 vật, không phải 1.**
- **Neo SỐ DÒNG `wal-flush.ps1:13`** → đo được **21 trích dẫn** trong `*.md` (control-dương: thước ra 21 ≠ 0). Trong đó **2 neo SỐNG ngoài run-folder**: `.claude/commands/tiep.md:23` (tệp lệnh = **lớp C**, restart bắt buộc) + `docs/governance/session-model-se-draft.md:4`. 19 còn lại nằm trong run-folder đã đóng băng. `$paths` xác minh **đúng ở dòng 13**. ⇒ R4 có bằng chứng định lượng.
- **§5.3 chưa quét `commands/` + `agents/`** → **CHƯA ĐO, tôi không nhận** (ngoài scope W1: đó là kiểm kê máy = việc lane a; nhận thêm = ăn lẹm). Ghi vào mục nợ.

### 1.4 — 3 mục tiêu vá: xác minh **3/3 đúng vị trí**

- `scripts/memory-selfimprove-audit.ps1:298` = `-Filter 'sub-*.md'` ✅ (bản vá nguồn để mirror: `governance-detectors.ps1:1101-1102` `Where-Object { $_.Name -match '^(sub-.+|.+-return)\.md$' }`, chú thích ca thật `:1091-1096`).
- `.claude/workflows/hmw.js:33` = `(11 class: 5 view-* + 6 gap-*)` ✅ — **lane a ĐÚNG `:33`**; 🔸 `wave-plan-S180.md:49` ghi *"vùng `:36-40`"* = **trôi**, dùng số của lane a.
- Bất-biến `agents/<role>.md` ≡ `agent-memory/<role>/`: 27−1(README) = 26 ⟂ 26 thư mục ✅ khớp hôm nay, **0 nguồn chung, 0 máy** ⇒ đúng như lane a khai.

### 1.5 — Ràng buộc kỹ thuật cho máy soi: **`.ps1` PURE-ASCII** (gotcha #30)

Đo 3 script: `governance-detectors.ps1` · `memory-selfimprove-audit.ps1` · `wal-flush.ps1` → **0/0/0 dòng chứa byte ngoài ASCII in-được**. Control-dương cùng thước trên `adap-upgrade-pack-tracking.md` = **58** ⇒ thước sống, 0 là 0 thật. ⇒ `naming-scan.ps1` **buộc viết pure-ASCII** (tiếng Việt không dấu), 0 ngoại lệ.

---

## §2 — LƯỢT CHẠY THẬT TRÊN KHO SỐNG (output nguyên văn)

Lệnh: `powershell.exe -NoProfile -ExecutionPolicy Bypass -File scripts/naming-scan.ps1` · **mã thoát = 0** (đúng hợp đồng INFORM-only).

```
=== naming-scan.ps1 - MAY SOI TEN (tang bo may) ===
RepoRoot : D:\Dropbox\CONG_VIEC\SOLUTION\SOLUTION_ERP
Che do   : INFORM-only. LUON exit 0 ke ca khi co co (lai ma thoat = W3b, sau P1=PA-2).
Chuan    : docs/governance/naming-standard.md
Tap do   : 231 ten vat-bo-may, 0 mien tru VUNG (khong quet 1.545 tep .md - bay-4).

--- NHOM: vai  [.claude/agents]
  mau so: 27 tep
  OK 26/27 | LECH 0/27 | MIEN-theo-luat 1/27
    [MIEN   ] README.md  <- quy uoc pho quat (luat L4)

--- NHOM: nhat-ky-vai  [.claude/agent-memory]
  mau so: 26 thu muc
  OK 26/26 | LECH 0/26 | MIEN-theo-luat 0/26

--- NHOM: lenh  [.claude/commands]
  mau so: 19 tep
  OK 19/19 | LECH 0/19 | MIEN-theo-luat 0/19

--- NHOM: kich-ban  [scripts]
  mau so: 54 muc (tep + thu muc)
  OK 52/54 | LECH 1/54 | MIEN-theo-luat 1/54
    trong OK: 5/54 theo PEP-8 (*.py snake_case - DUNG, khong phai troi)
    trong OK: 16/54 MOT-LAN (tien to s<n>-/plan- = kich ban mot lan, HOP LE)
    [MIEN   ] __pycache__  <- vat sinh tu dong (luat L4)
    [LECH   ] master-import-data.generated.md  <- kich ban khong-phai-.py phai kebab; xem naming-standard.md section 8
    [PEP8   ] parse_forms.py  <- PEP-8: *.py snake_case la DUNG
    [PEP8   ] parse_workflow.py  <- PEP-8: *.py snake_case la DUNG
    [MOT-LAN] plan-b-run-verify.ps1  <- kich ban mot lan thuoc phien/ke hoach - HOP LE, dem rieng
    [MOT-LAN] plan-b-verify-prod.sql  <- kich ban mot lan thuoc phien/ke hoach - HOP LE, dem rieng
    [MOT-LAN] plan-ca-run-perms.ps1  <- kich ban mot lan thuoc phien/ke hoach - HOP LE, dem rieng
    [MOT-LAN] plan-ca-verify-menu.ps1  <- kich ban mot lan thuoc phien/ke hoach - HOP LE, dem rieng
    [MOT-LAN] plan-ca-verify-menu.sql  <- kich ban mot lan thuoc phien/ke hoach - HOP LE, dem rieng
    [MOT-LAN] plan-ca-verify-perms.sql  <- kich ban mot lan thuoc phien/ke hoach - HOP LE, dem rieng
    [MOT-LAN] plan-r-backup.sql  <- kich ban mot lan thuoc phien/ke hoach - HOP LE, dem rieng
    [MOT-LAN] plan-r-cleanup.sql  <- kich ban mot lan thuoc phien/ke hoach - HOP LE, dem rieng
    [MOT-LAN] plan-s-wipe-all-workflows.sql  <- kich ban mot lan thuoc phien/ke hoach - HOP LE, dem rieng
    [MOT-LAN] plan-t5-final-cleanup.sql  <- kich ban mot lan thuoc phien/ke hoach - HOP LE, dem rieng
    [MOT-LAN] s59-rename-workitems-pmh.sql  <- kich ban mot lan thuoc phien/ke hoach - HOP LE, dem rieng
    [MOT-LAN] s59-wipe-demo-workitems.sql  <- kich ban mot lan thuoc phien/ke hoach - HOP LE, dem rieng
    [MOT-LAN] s59-wipe-testing-data.sql  <- kich ban mot lan thuoc phien/ke hoach - HOP LE, dem rieng
    [MOT-LAN] s85-wipe-uat-data.sql  <- kich ban mot lan thuoc phien/ke hoach - HOP LE, dem rieng
    [MOT-LAN] s89-delete-test-users.sql  <- kich ban mot lan thuoc phien/ke hoach - HOP LE, dem rieng
    [MOT-LAN] s91-wipe-golive.sql  <- kich ban mot lan thuoc phien/ke hoach - HOP LE, dem rieng
    [PEP8   ] session_ctx.py  <- PEP-8: *.py snake_case la DUNG
    [PEP8   ] session_scaffold.py  <- PEP-8: *.py snake_case la DUNG
    [PEP8   ] stamp_verify.py  <- PEP-8: *.py snake_case la DUNG

--- NHOM: moc-phien  [.claude/sessions]
  mau so: 90 tep
  OK 87/90 | LECH 3/90 | MIEN-theo-luat 0/90
    [LECH   ] closed.md  <- FORK dau-dong-phien: _end la ho chuan. detectors:1660 THA bang -or => doi sang ten thu BA thi phien da dong bi doc la DANG MO, co khong bao gio ban
    [LECH   ] pause-S146-20260722T2328.md  <- FORK ho cu: _pause-* la ho chuan. session_ctx.py:349-358 THA (doc ca 2 glob) => fork song mai neu khong ai goi ten
    [LECH   ] resume-S146-20260722T2334.md  <- tep moc phien moi BUOC BAT DAU bang _ ; xem naming-standard.md section 5

--- NHOM: so-governance  [docs/governance]
  mau so: 16 muc (tep + thu muc)
  OK 11/16 | LECH 4/16 | MIEN-theo-luat 1/16
    [LECH   ] BROADCAST-OUT-SOLUTION-ERP-2026-05-29-INFRA-RETRO.md  <- VAT LICH SU (thu da gui, mang ngay) - GIU NGUYEN theo luat L1, nhung phai duoc LIET TEN: no la chung nhan nhom nay co 2 ho
    [LECH   ] BROADCAST-OUT-SOLUTION-ERP-2026-05-29.md  <- VAT LICH SU (thu da gui, mang ngay) - GIU NGUYEN theo luat L1, nhung phai duoc LIET TEN: no la chung nhan nhom nay co 2 ho
    [LECH   ] BROADCAST-OUT-SOLUTION-ERP-2026-06-01.md  <- VAT LICH SU (thu da gui, mang ngay) - GIU NGUYEN theo luat L1, nhung phai duoc LIET TEN: no la chung nhan nhom nay co 2 ho
    [LECH   ] RAG-AUDIT-RESPONSE-2026-05-29.md  <- VAT LICH SU (thu da gui, mang ngay) - GIU NGUYEN theo luat L1, nhung phai duoc LIET TEN: no la chung nhan nhom nay co 2 ho
    [MIEN   ] README.md  <- quy uoc pho quat (luat L4)

--- NHOM: hook  [.claude/hooks]
  mau so: 1 tep
  OK 1/1 | LECH 0/1 | MIEN-theo-luat 0/1

--- BAT BIEN: .claude/agents/<role>.md  ==  .claude/agent-memory/<role>/ ---
  mau so: 26 vai (tep persona, tru README) / 26 thu muc nhat ky
  khop   : 26/26
  vai THIEU thu muc nhat ky : (danh sach rong)
  nhat ky THUA (khong co persona): (danh sach rong)

--- NGOAI TAP 231 (khai tuong minh - KHONG phai [skip]) ---
  thu muc phien: 12/12 dat hinh dang ^session-<so>$
  CO CHU DICH nam ngoai tap 231: giu mau so 231 da thoa thuan, va nhom nay DA co may ep
  (governance-detectors.ps1:1639 + session_ctx.py:133 + 2 ban session-scaffold).

=== TONG ===
  mau so TONG        : 233 ten vat-bo-may
    goc 231 (do 2026-08-07 TRUOC wave W1) = 27 vai + 26 nhat ky + 19 lenh + 53 kich ban
                                          + 90 moc phien + 15 so + 1 hook
    +2 vat chinh W1 de ra: scripts/naming-scan.ps1 va docs/governance/naming-standard.md
    => 233 sau W1. Khai ro de khong ai doc 233 thanh 'kho phinh ra' (bay-6: so do giua chung).
  OK                 : 222/233
    trong do PEP-8   : 5/233  (*.py snake - DUNG theo luat ngon ngu, khong phai troi)
    trong do MOT-LAN : 16/233  (kich ban mot lan - HOP LE, tin hieu ton kho chu khong phai vi pham)
  MIEN theo luat L4  : 3/233  (in ten o tung nhom - mien tru im lang va loi im lang trong giong het nhau)
  LECH               : 8/233

  Danh sach LECH (tung ten - cam nen thanh khoang):
    - [kich-ban] master-import-data.generated.md
    - [moc-phien] closed.md
    - [moc-phien] pause-S146-20260722T2328.md
    - [moc-phien] resume-S146-20260722T2334.md
    - [so-governance] BROADCAST-OUT-SOLUTION-ERP-2026-05-29-INFRA-RETRO.md
    - [so-governance] BROADCAST-OUT-SOLUTION-ERP-2026-05-29.md
    - [so-governance] BROADCAST-OUT-SOLUTION-ERP-2026-06-01.md
    - [so-governance] RAG-AUDIT-RESPONSE-2026-05-29.md

  Ma thoat: 0 (INFORM-only theo hop dong muc 1). Co o tren KHONG lai ma thoat.
  Lai ma thoat thuoc wave W3b, sau khi chu du an chot phan loai co theo PA-2.
```

### §2b — Đọc kết quả lượt chạy thật

| Ô | Số | Mẫu số | Ghi chú |
|---|---|---|---|
| OK | 222 | /233 | gồm 5 PEP-8 + 16 MỘT-LẦN |
| MIỄN theo luật L4 | 3 | /233 | 2 `README.md` + `__pycache__` — **in tên từng vật**, không im |
| **LỆCH** | **8** | /233 | liệt đủ 8 tên, xem dưới |
| TẬP VẮNG MẶT | 0 | /7 tập | cả 7 tập đều tồn tại |
| Bất biến vai ⟂ nhật ký | 26/26 khớp | | 0 thiếu, 0 thừa |
| Ngoài tập (khai tường minh) | 12/12 | thư mục phiên | đạt `^session-<số>$` |
| **Mã thoát** | **0** | | đúng hợp đồng INFORM-only |

**8 tên LỆCH (từng tên, cấm nén thành khoảng):**
1. `master-import-data.generated.md` *(scripts/)* — 🔸 **ứng viên DƯƠNG-GIẢ, cần lead phán**: `.generated.md` là hậu tố có nghĩa. Tôi **giữ cờ** thay vì tự miễn, vì tự miễn là đúng nước đi Goodhart mà phiên này đang chống. Nhưng nó cũng là phát hiện thật: một tệp **dữ liệu `.md`** đang nằm trong thư mục **máy móc**.
2. `closed.md` · 3. `pause-S146-20260722T2328.md` · 4. `resume-S146-20260722T2334.md` *(tệp mốc phiên — 2 fork + 1 vô-họ)*
5-8. `BROADCAST-OUT-…-INFRA-RETRO.md` · `BROADCAST-OUT-…-2026-05-29.md` · `BROADCAST-OUT-…-2026-06-01.md` · `RAG-AUDIT-RESPONSE-2026-05-29.md` *(vật lịch sử, giữ theo L1 nhưng phải bị gọi tên)*

---

## §3 — FAULT-INJECT: 3 CHIỀU, cây tạm `-RepoRoot` (happy-path KHÔNG tính)

Cây tạm dựng đủ **7 tập** (mẫu số nhỏ 12 tên) để có **baseline SẠCH thật** trước khi cấy.

| Chiều | Cấy gì | Kỳ vọng | Đo được | Đạt |
|---|---|---|---|---|
| **BASELINE** | cây sạch | LỆCH 0 | `LECH 0/12` · `khop 1/1` · exit 0 | ✅ |
| **A — cấy tên LỆCH** | `BadRole_Name.md` (vai) · `Bad_Script.ps1` (ps1 hoa+gạch dưới) · `closed.md` (fork) | **phải KÊU cả 3** | `LECH 4/15` — gọi đúng **4 tên**: `BadRole_Name.md` · `Bad_Script.ps1` · `closed.md` · **+`[bat-bien] BadRole_Name`** (vai không có thư mục nhật ký — bắt được **hệ quả thứ hai** mà tôi không cố ý cấy) | ✅ |
| **B — cấy tên ĐÚNG** | `beta-role.md`+thư mục nhật ký · `good_module.py` (PEP-8) · `s99-one-off.sql` (một-lần) · `_snapshot-3.md` | **phải IM** | `LECH 0/17` · `khop 2/2` · `PEP-8 2/17` · `MOT-LAN 1/17` — **0 dương-giả** | ✅ |
| **A2 — đổi tên cả TẬP** | `mv .claude/commands → commands-RENAMED` | **phải KÊU**, cấm `[skip]` câm | `FLAG THIEU-TAP` + dòng *"Day KHONG phai [skip]… mau so = 0/19 ky vong"* + **bộ đếm riêng `TAP VANG MAT: 1`** đứng cạnh `LECH 0/16` ⇒ **không đọc nhầm 0 thành "sạch"** | ✅ |

🔴 **Vì sao chiều A2 quan trọng nhất:** đây đúng lớp lỗi phiên này đã có **2 ca thật** — `spawn-model-audit` mù đường Task vẫn in `TOTAL FLAGS: 0`, và H24-2 nuốt 4 khối carry vẫn in `[ok]`. Máy này **không thể** rơi vào ca đó: tập vắng làm bộ đếm `TAP VANG MAT` bật, và số 0 bên cạnh **mất quyền được đọc là "sạch"**.

**Mã thoát giữ 0 ở CẢ 4 lượt** (kể cả lượt có 4 cờ) ⇒ hợp đồng INFORM-only đứng vững; lái mã thoát vẫn để nguyên cho W3b.

---

## §4 — BA VÁ KÈM (R11): 3/3 LAND + verify

### Vá 1 — `.claude/workflows/hmw.js:33` · BỎ SỐ, trỏ khoá cấu hình

- **Làm:** xoá cụm chép-cứng số lớp, thay bằng câu trỏ `memory-budget.json → lead_self_audit.flag_classes` + giải thích **vì sao đếm lướt bị hụt** (lớp `view-claim-broader-than-sample` nằm cuối mảng, ngoài cụm `view-*` liền kề).
- 🔴 **KHÔNG sửa 11→12** — đúng chỉ thị B1: sửa số là để nó thối lại.
- **Verify:** `grep -c "11 class"` = **0** (trước vá = **1**). Control-dương cùng tệp: `flag_classes` = 1 · `VALID_ROLES` = 8 ⇒ thước sống, 0 là 0 thật. `node --check` **OK**.
- 🔴 **TỰ BÁO MỘT LẦN TÔI SUÝT TÁI PHẠM:** bản vá ĐẦU của tôi **trích nguyên văn** cụm cũ trong lời giải thích ⇒ `grep` vẫn ra **1**, tức tôi **tái tạo đúng mẫu đang gỡ, qua đường TRÍCH DẪN**. Đúng lớp *citation-trap self-reference* (doc mô tả anti-pattern thì chứa chính mẫu đó). Sửa vòng 2: mô tả **không** tái tạo chuỗi. Bài học chuyển giao: **vá một mẫu-chuỗi thì lời giải thích cũng nằm trong tập đo.**

### Vá 2 — `scripts/memory-selfimprove-audit.ps1:298` · mirror bản vá S159

- **Làm:** `-Filter 'sub-*.md'` → `Where-Object { $_.Name -match '^(sub-.+|.+-return)\.md$' }` + 8 dòng chú thích trỏ ca thật S159 và trỏ `naming-standard.md §12` (3 chỗ phải sửa cùng lúc). Sửa luôn chuỗi thông điệp `:301` cho khớp bộ lọc mới.
- 🔸 **ĐÍNH CHÍNH mô tả của lead:** brief ghi *"S159 nới thành `(sub|harness)-*`"*. Đĩa **không phải vậy** — bản vá S159 thật là `^(sub-.+|.+-return)\.md$` (`governance-detectors.ps1:1101-1102`). Bộ ba lọt lưới qua nhánh **`.+-return`**, KHÔNG qua tiền tố `harness-`. Tôi mirror **regex thật**, vì mirror theo diễn giải sẽ đẻ **bản sao thứ 3 lệch nhau** — đúng bệnh mà §12 đang cảnh báo.
- **Verify KHÔNG-GÃY** (máy `/session-end` đang sống): chạy thật → `EXIT=0` · **0** dòng lỗi PowerShell (control-dương: 5 hit `eval` ⇒ output thật) · 36 dòng output bình thường.
- **Verify CÓ RĂNG** (fault-inject `-RepoRoot` cây tạm, run-folder chỉ chứa 3 tệp `*-return.md` — dựng lại đúng ca S159):

| Chiều | Đo được |
|---|---|
| **trước-vá** (glob cũ trên cùng folder) | **0** ⇒ máy sẽ in *"no sub-\*.md … proxy N/A"* = **mù im lặng**, đúng bệnh |
| **sau-vá** | **3** ⇒ in `3 sub-md but 0 synthesis` + `GAP:MED` — **nhìn thấy 3 lane đắt nhất** |
| **không dương-giả** | cấy thêm `ghi-chu-phu.md` (ngoài mọi họ) ⇒ đếm vẫn **3**, không phải 4 ✅ |

- 🔸 Trên run-folder S180 hiện tại, cũ ⟂ mới **đều = 12** (folder này có 0 tệp `-return.md`) ⇒ **lượt chạy live KHÔNG chứng minh được răng**; răng chỉ chứng minh được bằng fault-inject ở trên. Control-dương cho biết họ này có thật: **38** tệp `*-return.md` trên toàn `runs/`.

### Vá 3 — Khai bất-biến `agents/<role>.md` ≡ `agent-memory/<role>/`

- **Làm:** ghi vào `naming-standard.md` **§1** (mô tả + hệ quả 2 máy khi lệch: `mfe-eval.ps1:264-267` loại vai khỏi phép đo kèm lời giải thích sai sự thật · `detectors:1109` xếp `$unmapped` liệt-không-cờ) và **§12** (bảng "3 chỗ, không nguồn chung").
- 🟢 **NÂNG CẤP ngoài yêu cầu:** lane a khai bất biến này *"2 chỗ, 0 nguồn chung, **0 máy**"*. Nay nó **CÓ MÁY** — `naming-scan.ps1` kiểm **2 chiều** (vai thiếu nhật ký / nhật ký thừa không persona). Đã chứng minh bằng fault-inject chiều A: cấy `BadRole_Name.md` ⇒ máy bật thêm dòng `FLAG vai THIEU nhat ky` mà tôi **không cố ý cấy**.
- **Verify kho thật:** 26/26 khớp, 0 thiếu, 0 thừa.

### Quét CÙNG-LỚP sau vá (luật "được-chỉ-1-chỗ ⇒ grep cùng-lớp")

Quét `[0-9]+ class` ngoài run-folder: **2 hit trong `scripts/`** = **dương-giả** (`+-1/2 class`, `armed-at-0 class` — không phải số lớp). **Trong persona: 3 site CÒN SỐNG** — `lead-stale-auditor.md:39` + `:41` ("5 class", thật 6) · `ring2-audit.md:4` ("5 class `view-*`").

🔴 **NGOÀI SCOPE W1 — đã có chủ: wave W3 gói-B persona.** Nhưng bàn giao kèm **một cảnh báo**: `wave-plan-S180.md:85` kê việc đó là *"`5 class view`→**6**"* — tức **đổi số**, đúng LỚP-5 mà vá-1 vừa gỡ. Làm vậy nó sẽ thối lại. **Đề nghị W3 đi đường của vá-1: BỎ SỐ, trỏ `lead_self_audit.flag_classes`.**

---

## §5 — ĐỐI CHIẾU 11 RÀNG BUỘC R1-R11 (tự chấm, lệnh chạy được)

| R | Nội dung | Ở đâu | Verify |
|---|---|---|---|
| R1 | phụ lục 14 đoạn máy | PHỤ LỤC A | `grep -cE '^\| M-[0-9]+ \|'` = **14** ✅ |
| R2 | số chỗ sửa đồng thời (4·3·3·5) | §12 | 4 dòng, liệt **từng chỗ**, cấm nén khoảng ✅ |
| R3 | tên neo NGOÀI kho mã | §11 | **3 vật** (lane a khai 1; +`settings.json:2`, +4 path thân hook) ✅ |
| R4 | CẤM "giữ nguyên số dòng" | §0 L3 (`:45`) | kèm định lượng **21 trích dẫn** `wal-flush.ps1:13`, 2 neo SỐNG ✅ |
| R5 | mỗi nhóm khai NẤC + có máy | §1-§10 | `grep -c "NẤC muốn sạch"` = **11** (10 nhóm + bảng L0) ✅ |
| R6 | máy TỪ CHỐI, cấm 3 lối câm | script hợp đồng (4) | chứng bằng fault-inject A2: `THIEU-TAP` + bộ đếm riêng ✅ |
| R7 | quét 231 tên, luôn in mẫu số | script hợp đồng (2)(3) | chạy thật: 233 (=231+2 vật W1, **khai rõ**) ✅ |
| R8 | tập hợp lệ nhật ký chứa **cả 5 họ** | §6 | `grep -cE '^\| \([a-e]\) \|'` = **5** ✅ |
| R9 | miễn trừ theo ngôn ngữ | §0 L4 | 3 loại; máy **in tên từng vật miễn** ✅ |
| R10 | khai 2 xung đột | §14 | `grep -cE '^### XĐ-[12]'` = **2** ✅ |
| R11 | 3 vá kèm | §4 | 3/3 land + verify 2 chiều ✅ |

**11/11.** Phạm vi chạm: đúng **5 tệp** (2 đẻ mới + 2 vá + nhật ký). **0 tệp cấm bị sửa** (`STATUS`/`HANDOFF`/`CLAUDE.md`/`adap-upgrade-pack-*`). **0 tên bị đổi.**

## §6 — CHƯA ĐO / CẦN LEAD

1. 🔸 `master-import-data.generated.md` — **ứng viên dương-giả**, tôi giữ cờ thay vì tự miễn (tự miễn = nước đi Goodhart). Lead phán: nhận `.generated.md` là hậu tố hợp lệ, hay coi đây là *tệp dữ liệu nằm nhầm thư mục máy móc*?
2. 🔴 **`CLAUDE.md:151` sai với 59,7% đĩa** (nợ N-1) — W1 **bị cấm sửa** `CLAUDE.md`. Cần lead/chủ dự án mở đường; đến lúc đó `:151` phải đọc là *khuôn khuyến nghị*, KHÔNG phải vị từ kiểm kho.
3. 🔴 **W3 đừng sửa "5 class"→"6"** (`wave-plan:85`) — đó là LỚP-5. Đi đường vá-1: bỏ số, trỏ khoá. 3 site: `lead-stale-auditor.md:39`+`:41` · `ring2-audit.md:4`.
4. **KHÔNG ĐO ĐƯỢC:** mã thoát thật khi `wal-flush.ps1` bị đổi tên (cần đổi tên cây tạm + chạy hook + đọc `$LASTEXITCODE`) — nợ N-4.
5. **CHƯA ĐO:** `.claude/commands/*.md` (19) + `.claude/agents/*.md` (27) neo tên gì bên trong — đó là **kiểm kê máy** (việc lane a), nhận thêm ở W1 là ăn lẹm — nợ N-5.
6. Máy soi **chưa cắm cổng** (chạy tay) — cắm `session-end` = W3 (gom restart); lái mã thoát = W3b sau PA-2. Ô nghiệm thu *"vai giữ chuẩn"* = **NGOÀI scope** theo fit-map, chờ **P4**.

---

**END sub-w1b-chuan-ten — VERDICT: chuẩn 11/11 ràng buộc (10 nhóm tên ⊇ 6 nhóm sàn hub) · máy soi 233 tên / 8 lệch / 0 tập vắng / exit 0 · fault-inject 4 lượt 3 chiều ĐẠT (baseline sạch → cấy-lệch KÊU 4 → cấy-đúng IM 0 → mất-tập KÊU THIEU-TAP) · 3/3 vá land + verify · 3 ràng buộc/mô-tả bị BÁC có bằng chứng · 0 tên bị đổi · 0 tệp cấm bị chạm.**
