# W2 — GĐ-2: LƯỚI GHI ĐĨA + MỤC LỤC VẬT CHỨNG

> **Vai:** implementer-backend (WRITE lane) · **Phiên:** S180 · **Run:** `2026-08-07-S180-adap-upgrade-pack-phased`
> **Mô hình tự khai:** claude-opus-5, effort max.
> **Đầu vào ghim đích danh (đọc thật, không nghe kể):**
> - `.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-n3-lane-b-gd2.md` (13 khoản B-01..B-13 · 4 vị từ V-1..V-4 §3 · phép thử tay §2 · V-2 heading-scoped §7.2)
> - `wave-plan-S180.md:57-72` (W2 đủ 7 trường: GĐ · TC · 7 deliverable · acceptance · lớp restart · rủi ro · khối lượng)
> - `sub-w1a-mayd-octen.md:229-243` (§1c tổng kiểm kê **14 đoạn máy**, 0/14 tự thích nghi) · `:458` (§4 ràng buộc lane B)
> - `docs/governance/naming-standard.md` (W1 vừa ký) · `docs/governance/adap-upgrade-pack-tracking.md`
> - `broadcasts/inbox/ai_infra/2026-08-04-Governance-upgrade-pack-phased-phu-luc-spec-pitfall.md` §GĐ-2
>
> **Guard AS-17:** file này **append TỪNG PHẦN trong lúc làm**, KHÔNG dump-cuối. Phiên này 18 vai dính #53, cứu 18/18 nhờ ghi-đĩa-từng-phần.
> **Luật tự áp:** `KHÔNG ĐO ĐƯỢC` hợp lệ; bịa thì không. Mọi 0-hit kèm **control-dương**. Mọi tỉ lệ kèm **mẫu số + định nghĩa "đếm CÁI GÌ"**.

---

## §0 — Kế hoạch + ranh giới tự áp (ghi TRƯỚC khi gõ dòng mã nào)

**4 deliverable lead giao:**
1. `scripts/artifact-integrity.ps1` — 4 vị từ V-1..V-4, INFORM-only exit 0, luôn in mẫu số.
2. Fault-inject **3 chiều** (A hỏng-phải-kêu · B đúng-phải-im · A2 mất-tập-phải-kêu-cờ-riêng) + **ca chuẩn N1** (skeleton 7.049 B, 6/9 heading `[ĐANG ĐO]`).
3. Mục lục SỐNG cho `runs/` — đo `_ledger.md`/`README.md` sống hay chết; chết ⇒ dựng **derive-view** (sinh từ đĩa), KHÔNG sổ chép tay.
4. Khoản sàn **GĐ-2(v)** "Khai luôn điểm mù" — 1 đoạn văn vào `runs/README.md` C7.

**Ranh tự áp (từ lệnh lead + ràng W1a):**
- KHÔNG sửa: `docs/STATUS.md` · `docs/HANDOFF.md` · `CLAUDE.md` · `broadcasts/_index.md` · `docs/governance/naming-standard.md` · `docs/governance/adap-upgrade-pack-*.md` · `scripts/naming-scan.ps1`.
- KHÔNG lái mã thoát (exit code) — W3b sau khi anh chốt PA-2.
- `scripts/*.ps1` pure-ASCII (khuôn `naming-scan.ps1`).
- KHÔNG làm vỡ 14 đoạn máy `sub-w1a-mayd-octen.md` §1c — tôi **thêm** tệp mới, KHÔNG đổi tên/di chuyển vật đang có; mọi tệp mới phải hợp chuẩn W1.

**Thứ tự làm (ghi trước để người sau đếm lại được):** §1 đo nền → §2 chọn K cho V-1 bằng phân bố THẬT → §3 viết script → §4 fault-inject 3 chiều → §5 mục lục → §6 đoạn văn C7 → §7 chốt + mẫu số.

---

## §1 — Đo nền: tái lập ca N1 từ git (không nghe kể, rút bản thật)

```
git show c7248b5:.claude/workflows/runs/2026-08-07-S180-…/sub-invest-fitmap-S180.md | wc -c   → 7049
```
✅ **Khớp đúng 7.049 B lead đưa.** Bản hiện tại trên đĩa = 48.433 B.

| Phép đo | Skeleton (7.049 B) | Bản XONG (48.433 B) |
|---|---|---|
| `grep -cE '^#{1,6} '` (heading) | **10** | 16 |
| `grep -cE '\[(ĐANG ĐO\|CHỜ\|TODO\|PENDING)'` **thô** | **7** | **1** ← 🔴 dương-giả |
| `grep -cE '^#{1,6} .*\[(ĐANG ĐO\|…)'` **neo heading** | **6** | **0** ✅ |
| ruột/khung (fence-aware, xem §2) | **2,70** | 10,88 |

🔴 **Xác nhận lane B §7.2 bằng phép đo độc lập:** vị từ thô cho **1 dương-giả trên chính bản đã xong** — hit đó là **câu định nghĩa nhãn** ở `:5` (*"Mục nào chưa xong sẽ có nhãn `[ĐANG ĐO]`"*), tức lớp **citation-trap self-reference**. Neo vào **heading** khử sạch: 6 / 0. Con số 6 khớp đúng "6/9" của lead — **khai mẫu số**: lead đếm 9 = heading cấp `##`/`###` (bỏ dòng tiêu đề `#`); tôi đếm 10 = mọi heading. **Cùng một sự thật, hai đơn vị.**

**Phát hiện phụ, ngoài đề bài — báo không tự vá:** run-folder S180 chứa **thư mục `.claude/agent-memory/reviewer/` LỒNG BÊN TRONG** (8 tệp, **đã tracked/commit**). Duy nhất 1/90 run-folder có (`find .claude/workflows/runs -maxdepth 2 -name ".claude" -type d` → 1 hit). Đây đúng lớp `feedback_agent_cwd_relative_memory_misland` (S54: sub `cd` subdir ⇒ MEMORY Write rơi `<subdir>/.claude`). **Không thuộc 4 deliverable của tôi ⇒ KHÔNG chạm.** Nhưng máy tôi dựng phải biết: nó **quét phẳng depth-1** theo C1, nên 8 tệp này nằm ngoài tầm — và tôi cho máy **in tên** thay vì im (luật 4c của khuôn W1).

---

## §2 — Chọn K cho V-1: ĐO PHÂN BỐ TRƯỚC, cấm cảm tính

**Định nghĩa "đếm CÁI GÌ" (khai trước, vì cả bài phụ thuộc nó):**
- `head` = dòng khớp `^#{1,6} ` **và KHÔNG nằm trong khối mã** (fence ``` ``` ``` toggle). Không loại fence thì `# comment` trong khối bash bị đếm là heading ⇒ tệp nhiều mã bị đánh oan.
- `body` = mọi dòng **không rỗng** còn lại. 🔴 **Dòng bảng `|` VÀ dòng trích `>` VÀ dòng trong khối mã đều TÍNH LÀ RUỘT** — đây là chỗ lane B tự sửa ở §3 (bản nháp loại `^\|` khỏi tử số là sai).

**Phân bố THẬT (mẫu số khai 2 nấc, bẫy đơn-vị):**

| Tập | Mẫu số | p1 | p2 | p5 | p10 | p25 | p50 | p75 | p90 |
|---|---|---|---|---|---|---|---|---|---|
| **mọi `*.md` trong `runs/`** (đệ quy) | 747 tệp, **740** có head>0 | 1,6 | 2,0 | 2,44 | 3,0 | 4,33 | 6,23 | 8,33 | 11,25 |
| **họ `sub-*` + `*-return`** (tệp *phải có ruột*) | **446** có head>0 | 1,43 | 2,29 | **3,00** | 3,85 | 5,20 | 7,00 | 9,00 | 11,75 |

**7/747 tệp có 0 heading** ⇒ V-1 **KHÔNG ÁP DỤNG** (chia 0) — cả 7 đều là tệp ký-ức lạc ở §1. Máy phải in `KHONG-AP-DUNG`, không được đọc thành "sạch".

**Chi phí theo K, trên họ `sub-*` (mẫu số 446):**
`K=2 → 6` · `K=2,5 → 14` · **`K=3 → 20 (4,5%)`** · `K=3,5 → 32` · `K=4 → 47 (10,5%)`

🔴 **CHỌN: K = 3,00 = phân vị 5 của họ `sub-*`, đo 2026-08-07, mẫu số 446.** Và **PHẠM VI V-1 = chỉ họ `sub-*`/`*-return`**, không áp cho `*-synthesis.md`/`run.md`. Lý do có nguyên tắc, không phải chỉnh cho vừa ca:
- `runs/README.md:26` định nghĩa `sub-*` = *"full working detail 1 sub"* ⇒ **họ này mới có nghĩa vụ có ruột**. `*-synthesis.md` là **bản gom, ngắn là ĐÚNG** — 20 tệp thấp nhất của tập 747 gần như toàn synthesis nhỏ (312 B, 188 B…). Áp K cho chúng = **dương-giả có hệ thống ngay ngày đầu**, đúng thứ W1-b cảnh báo (*dương-giả ngày đầu là cách nhanh nhất để người ta tắt máy soi*).

🔴 **KHAI THẲNG chỗ V-1 YẾU — đây là kết luận quan trọng hơn cả con số K:**
Skeleton N1 ở **2,70**, tức **phân vị 3,6** của họ `sub-*` (16/446 tệp lịch sử còn thấp hơn nó). Nó lọt lưới K=3,00 **sát nút**: thêm ~3 dòng ruột là ratio vượt 3,0 và **V-1 tha**. ⇒ **V-1 KHÔNG phải lưới bắt ca N1; nó là lưới PHỤ.** Vị từ bắt ca N1 là **V-2** (6 hit, không cần ngưỡng nào). Tôi **không** hạ K xuống 2,7 cho vừa ca — đó là chỉnh thước theo ca đã biết (Goodhart), và nó sẽ mù với ca tiếp theo.
🔸 Hệ quả phải in ra: mỗi lần V-1 kêu, máy in kèm `K=3.00 (p5 ho sub-*, mau so 446, do 2026-08-07)` để người đọc biết **4,5% kho lịch sử cũng nằm dưới ngưỡng này** — con số cờ **không** đọc thành "hỏng".

---

## §3 — Máy đã dựng: `scripts/artifact-integrity.ps1`

**Vật:** `scripts/artifact-integrity.ps1` — 23.575 B. **Pure-ASCII đo bằng byte, có control 2 chiều:**
```
artifact-integrity.ps1   byte>127 = 0   (tong 23575)   <- dat
naming-scan.ps1          byte>127 = 0                  <- control AM (tep biet la sach)
naming-standard.md       byte>127 = 9238               <- control DUONG (thuoc con song)
```
🔴 **Bẫy thước bắt được tại chỗ:** lệnh đầu tôi dùng `grep '[^\x00-\x7F]'` cho **268 hit trên `naming-scan.ps1`** — tệp mà W1 đã chứng là 0 byte ngoài ASCII. **Control âm sai ⇒ hỏng THƯỚC, không phải hỏng tệp** (grep của Git Bash không nuốt escape `\x` trong ngoặc vuông). Đổi sang đọc byte thẳng bằng .NET mới ra số đúng. Ghi lại vì đây đúng bài `feedback_prod_db_verify_integrated_auth`: *mỗi phép đo kèm control dương; control sai = hỏng thước*.

**4 vị từ ⟂ 4 vị từ hub — khai ánh xạ, vì hai bộ tên KHÔNG trùng nhau:**

| Hub đòi | Cài bằng | Ghi chú |
|---|---|---|
| **VẮNG** | V-3 (2 nguồn) + kiểm `run.md`/`*-synthesis.md` | tên nêu trong `run.md` mà đĩa không có |
| **RỖNG** | nhánh 0-byte của V-1 | 🔴 0 byte ⇒ head=0 ⇒ **cấm rơi vào `KHONG-AP-DUNG`**, phải là cờ `RONG` |
| **CỤT** | **V-2 chính** (nhãn treo neo heading) + **V-1 phụ** (ruột/khung) | V-2 không cần ngưỡng, không cần cấu hình |
| **NÉN QUÁ TAY** | V-4 | so ký tự với bản trước **CÙNG ĐƠN VỊ** |

🔴 **Tôi chệch đề xuất lane B ở V-4, có lý do đo được — khai thẳng:** lane B (và lệnh lead) viết `git show HEAD~1:<file>`. **Tôi KHÔNG dùng `HEAD~1`.** Hook `wal:` chèn commit vào giữa (`0367daf wal: flush 20260806T2237` nằm ngay trong 5 commit gần nhất), nên `HEAD~1` **thường không phải bản trước CỦA TỆP ĐÓ** — phép so sẽ thành *so bản mới với chính nó*, và kết quả `1.0x` **trông y hệt một phép đo hợp lệ**. Tôi dùng `git log --format=%H -2 -- <file>` rồi lấy phần tử thứ 2 = **commit trước ĐÍCH DANH đã chạm tệp**. Đây đúng bài `feedback_absence_looks_like_clean` (+S177). Không đủ lịch sử ⇒ in `KHONG DO DUOC`, **không đoán**.

**Chệch thứ hai, cũng khai:** V-1 **chỉ áp họ `sub-*`/`*-return`**, không áp `*-synthesis.md`/`run.md` (§2). Lane B đề xuất áp chung.

**Bằng chứng máy có RĂNG NGAY trên kho thật — nó bắt nợ của chính phiên dựng ra nó:** cờ `VANG *-synthesis.md` trúng **cả hai run-folder S180** (`S180-bookend-open` · `S180-adap-upgrade-pack-phased`) — ~620 KB artifact, **0 bản gộp**. Lead tự chạy, xác nhận đúng. Đây là vị từ đo **đúng thứ cần đo**, không phải cờ trang trí.

🔴 **Tác dụng phụ đã lường TRƯỚC, không tự vá vì bị cấm chạm tệp:** `scripts/naming-scan.ps1:174` hard-code `-Expect 54` cho `scripts/`. Thêm `artifact-integrity.ps1` ⇒ 55 ⇒ dòng `[!] lech ky vong 54` sẽ bắn, và `TONG` 233 → 234.
- Baseline **TRƯỚC** khi tôi thêm tệp (đã chạy, dán nguyên): `mau so: 54 muc` — **không** có dòng `[!]`; `mau so TONG: 233`.
- Đây là **LỚP-5 (chép số tay) nằm ngay trong máy W1 vừa ký để chống LỚP-5**: chính `naming-standard.md` L3 cấm neo bằng số, mà máy soi của nó lại neo mẫu số bằng số hằng. **Mọi wave sau cũng sẽ bắn dòng này.** Tôi bị cấm sửa `naming-scan.ps1` ⇒ **báo, không vá** (kèm mốc: nó đã đúng lúc W1 ký, và hỏng đúng ở wave kế tiếp).

---

## §4 — FAULT-INJECT: ba chiều + ca chuẩn N1. Chạy thật, dán nguyên output.

**Cây tạm:** `scratchpad/sbx-w2/` — **git repo riêng** (bắt buộc, vì V-4 cần lịch sử git thật; không giả lập được bằng tệp phẳng). Kho thật **không bị chạm** (`-RepoRoot` trỏ cây tạm).
Vật cấy trong `2026-08-07-SBX-skeleton/`: `run.md` (nêu tên **6** artifact) · `sub-invest-fitmap-S180.md` = **bản 7.049 B rút thẳng từ `git show c7248b5:`** · `sub-empty-lane.md` = **0 byte** · `sub-good-lane.md` (vật ĐÚNG, có `[ĐANG ĐO]` **trong câu văn**) · `sub-nen-qua-tay.md` (nén, **không khai**) · `sub-nen-co-khai.md` (nén, **có khai nơi-đi**) · `invest-synthesis.md`.

### Chiều A — cấy vật HỎNG ⇒ phải FLAG từng cái. **4/4 BẮT.**
```
[RONG    ] sub-empty-lane.md          <- tep 0 byte
[CUT     ] sub-invest-fitmap-S180.md  <- V-2: 6/10 heading con nhan treo    <=== CA N1
[CUT     ] sub-invest-fitmap-S180.md  <- V-1: ruot/khung 2.7 < K=3 (body 27 / head 10)
[NEN     ] sub-nen-qua-tay.md         <- V-4: con 0.015x so voi f0c1fef (4195 -> 65 ky tu)
                                          VA so muc giam 60 -> 2, KHONG thay dong khai noi-di
[VANG    ] sub-lane-khong-bao-gio-ha-canh.md <- V-3: run.md co neu ten, DIA KHONG CO
```
🔴 **CA CHUẨN N1 = BẮT, và bắt bằng HAI vị từ độc lập** (V-2 `6/10 heading` + V-1 `2,70 < 3`). Con số **6** khớp đúng con số lead đưa. Ô nghiệm thu 4 của hub — thứ mà **0/5 máy SE hiện tại trượt** — **đóng được**.

### Chiều B — cấy vật ĐÚNG ⇒ phải IM. **0 dương-giả.**
- `sub-good-lane.md` chứa `[ĐANG ĐO]` **trong câu văn** (*"Muc nao chua xong se mang nhan `[ĐANG ĐO]`"*) ⇒ **máy IM TUYỆT ĐỐI**, không một dòng nào. Đây đúng ca **citation-trap** mà W1-b dính ở vòng vá đầu.
- **Control-dương bắt buộc cho claim "IM"** (im lặng và thước hỏng trông giống hệt nhau) — đổi **duy nhất 1 thứ**: dời đúng cái nhãn đó **vào heading** `## §3 — Ket luan [ĐANG ĐO]`:
```
doi vao heading  ->  [CUT(V-2)] sub-good-lane.md  <- 1/5 heading treo     (1 hit)
tra lai nguyen trang ->  grep -c good-lane = 0                            (0 hit)
```
⇒ **Thước SỐNG.** Im lặng ở trên là im lặng THẬT, không phải máy mù.
- `sub-nen-co-khai.md` (nén 0,04x **nhưng có khai** *"đã dời verbatim sang `archive/…` (moved-not-cut)"*) ⇒ **`NEN-MIEN`, không phải cờ**. Miễn-trừ **hiện hình** đúng chữ AS-19.
- 🔸 **Khai một vết bẩn của chính chiều B, không giấu:** `sub-nen-co-khai.md` vẫn nhận cờ `KHONG-KHAI` (V-3) — **đúng**, vì tôi tạo nó bằng `cp` mà quên thêm tên vào `run.md`. Đó là **dương THẬT**, không phải dương-giả. Và nó tỉ lệ ruột/khung **đúng 3,00**, tức **thoát V-1 sát nút** — thêm 1 dòng ruột nữa là nó bị đánh oan. **Bằng chứng thứ hai cho kết luận §2: V-1 độ phân giải kém, chỉ dùng làm lưới phụ.**

### Chiều A2 (anti-Goodhart) — làm CẢ TẬP biến mất ⇒ số 0 phải mất quyền đọc thành "sạch". **2/2 ĐẠT.**
```
A2-a  runs/ khong ton tai:
  CO : 0/0 vat
  [!] 0 co CHI co nghia khi mau so tren khac 0 VA so THIEU-TAP ben duoi = 0.
  THIEU-TAP : 1  <- dem TACH khoi so co tren. Moi tap vang lam mot phep do BIEN MAT.
     - [(goc)] thu muc runs/ vang mat

A2-b  thu muc luot chay CON nhung 0 vat .md:
  [2026-08-07-SBX-rong-tuot] FLAG THIEU-TAP: 0 vat .md
  CO : 0/0 vat  |  THIEU-TAP : 1
```
⇒ `THIEU-TAP` in **RIÊNG, cạnh** số cờ, **không cộng vào** nó. Không có nhánh `[skip]` im lặng nào.

**Mã thoát cả 4 lượt chạy: `EXIT=0`** — đúng hợp đồng INFORM-only. Không lái mã thoát (W3b, sau khi anh chốt PA-2).

---

## §5 — Mục lục `runs/`: ĐO trước, rồi mới dựng

**Nguồn-1 (đĩa):** `88` **THƯ MỤC** lượt chạy. `ls` cho `90` **ENTRY** — chênh 2 = `README.md` + `_ledger.md`. *(Bẫy đơn-vị thứ 9 của phiên; lane B đã bắt N1 dính đúng chỗ này.)* Mới nhất: `2026-08-07-S180-bookend-open`.

**Nguồn-2 (`_ledger.md`):** `15` dòng dữ liệu, ngày lớn nhất **2026-06-18**. Khoảng chết **06-18 → 08-07 = 50 ngày**.

🔴 **Đối chiếu bằng KHỚP TÊN, không bằng phép trừ — và ra số KHÁC lane B:**
```
thu muc CO dong trong so : 14/88
thu muc KHONG co dong    : 74/88
```
Lane B ghi **73** (= 88 − 15, suy từ số dòng). Số đúng là **74**, vì **15 dòng ↔ 14 thư mục**: `2026-06-18-mig54-pe-review` có **hai** dòng (bản gốc + `(R2)`). ⇒ *"số dòng sổ" ≠ "số thư mục được sổ phủ"* — **bẫy đơn-vị thứ 10**, và nó nằm ngay trong phép đo dùng để kết luận sổ đã chết. Kết luận của lane B **không đổi**; chỉ con số đổi.

**`README.md` có phải tầng-B không? KHÔNG.** Nó nhắc **7** tên thư mục lượt chạy, và cả 7 là **ví dụ minh hoạ C8/C1** (5 folder cũ giữ `sub-md/`+`harvest/` + 2 ví dụ FLAT), không phải mục lục. Control-dương: `grep -c 'run-id' README.md` = **11** ⇒ lệnh chạy đúng, README **là tầng-A (quy ước) đang sống**, không phải tầng-B.

⇒ **Phán quyết: tầng-B CHẾT** (nghỉ-hưu-CÓ-KHAI, nhưng chức năng mục lục = 0). **Dựng lại thành DERIVE-VIEW.**

**Vật:** `.claude/workflows/runs/_index.md` — **6.822 B, 88 dòng dữ liệu, 0 byte ngoài ASCII**, sinh bằng `artifact-integrity.ps1 -BuildIndex`. Header ghi thẳng **CẤM SỬA TAY / CẤM DÙNG LÀM NGUỒN** + lý do (sổ chép tay = nguồn-đôi, đúng bệnh đã giết `_ledger.md`) + câu **"tệp này KHÔNG được dùng làm nguồn-2"** (nó đọc thẳng đĩa ⇒ nó CHÍNH LÀ nguồn-1 — đúng cảnh báo lane B B-04). **KHÔNG đụng `_ledger.md`** (vật lịch sử, luật L1).

🟢 **Chứng KHÔNG làm vỡ máy cũ — đo trước/sau, cùng một lệnh:**
```
                          TRUOC                                   SAU
nhip-no-probe   kiem light 1/6 deep 14/15 | run-chua-gom 2   ->  Y HET (chuoi trung khop)
detectors       TOTAL FLAGS: 50 | dong cham runs/: 22        ->  TOTAL FLAGS: 50 | 22
```
Lý do cơ học (đọc mã, không đoán): `nhip-no-probe.ps1:163` duyệt `-Directory` ⇒ **tệp** ở gốc `runs/` vô hình với nó; `detectors:1102` lọc `^(sub-.+|.+-return)\.md$` ⇒ `_index.md` không khớp. **0/14 đoạn máy bị chạm.**

---

## §6 — Quét TOÀN KHO: hai lớp dương-giả tự lộ ra. Khai TRƯỚC khi vá.

Chạy trên 88 thư mục / **720 vật .md**:
```
CO : 294/720   CUT 21 | VANG 28 | KHONG-KHAI 245
THIEU-TAP : 35   (run.md khong neu ten tep nao => NGUON-2 rong)
```

🔴 **Lớp dương-giả 1 — `KHONG-KHAI` = 245/720 (34%).** Đây là *"có trên đĩa mà `run.md` không nêu tên"*. Vấn đề: **chưa từng có luật nào bắt `run.md` phải nêu tên tệp.** 245 cờ cho một luật không tồn tại = **dương-giả ngày đầu**, đúng thứ `naming-standard.md §8` gọi là *"cách nhanh nhất để người ta tắt máy soi"*.
🔸 **Nhưng con số ấy là CHỨNG NHÂN**, không phải rác: nó chứng minh **nguồn-2 mỏng tới mức nào**. ⇒ Xử theo phép thử *"cái mất đi là dương-giả hay chứng-nhân?"*: **hạ `KHONG-KHAI` từ CỜ xuống hạng mục ĐẾM RIÊNG kèm mẫu số** — y hệt cách `naming-scan.ps1` xử `MOT-LAN`. **Giữ số, bỏ cờ.** Không xoá thông tin nào.

🔴 **Lớp dương-giả 2 — `VANG` trỏ CHÉO lượt chạy.** Ví dụ `2026-06-18-h10-review/invest-synthesis.md`: `run.md` nêu tên đó vì `runs/README.md:39` (C2 bước 3) **BẮT** nó trỏ `input spec:` sang synthesis của **lượt chạy TRƯỚC**. Tệp có thật — **ở thư mục khác**. Máy tôi so trong **một** thư mục ⇒ đọc thành "vắng". **Đây là lỗi của máy, không phải nợ của kho.** ⇒ Vá đúng bản chất: phân giải tên trên **toàn cây `runs/`**; tìm thấy ở thư mục khác ⇒ **`TRO-CHEO`** (thông tin), không phải `VANG`.

🟢 **Hai cái KHÔNG được đụng — chúng là dương THẬT:**
- `run.md` **VẮNG** ở đúng **3** thư mục: `S117-pe-approve-minmax-range` · `S117-pe-luyke-finalize` · `S144-bootstrap` — **khớp CHÍNH XÁC 3 tên `wave-plan-S180.md:69` liệt**. Xác nhận độc lập.
- `*-synthesis.md` vắng ở **2** thư mục S180 — **khớp CHÍNH XÁC `run-chua-gom 2`** của `nhip-no-probe`. **Hai máy độc lập, cùng một con số** ⇒ vị từ đo đúng thứ cần đo.
- **21 cờ `CUT`** trên kho thật (toàn V-1, ratio 0,67–2,94). Đây là 4,5% đã báo trước ở §2 — **không bất ngờ, đã khai mẫu số từ đầu**.

### §6-bis — Sau khi vá 2 lớp: số TRƯỚC → SAU, và cái gì mất đi

```
                TRUOC          SAU        cai mat di la gi
CO tong          294            31        -
  CUT             21            21        (giu nguyen - khong dong toi)
  VANG            28            10        18 con tro CHEO hop le -> hang muc TRO-CHEO
  KHONG-KHAI     245             0        245 -> hang muc DEM RIENG, van in kem mau so
THIEU-TAP         35            35        (giu nguyen)
```
🔴 **Tự soi theo phép thử Goodhart *"cái mất đi là dương-giả hay CHỨNG-NHÂN?"*:**
- 18 `TRO-CHEO`: **dương-giả thuần** — tệp CÓ THẬT, chỉ nằm thư mục khác, và `README.md:39` **bắt** phải trỏ như vậy. Bỏ khỏi cột cờ là **sửa máy cho đúng**, không phải giấu.
- 245 `KHONG-KHAI`: **là chứng-nhân** ⇒ **KHÔNG xoá, chỉ đổi hạng mục.** Con số vẫn in mỗi lượt, vẫn kèm mẫu số `/720`, kèm câu *"chưa hề có luật bắt run.md nêu tên tệp"*. Ai muốn biến nó thành luật thì **vẫn còn nguyên con số để đứng lên**.
- 21 `CUT`: **không đụng một dòng** — đây là vị từ lõi, hạ nó mới là Goodhart.

🟢 **10 cờ `VANG` còn lại — soi từng cái, cả 10 đều là dương THẬT:**
- **3** thiếu `run.md`: `S117-pe-approve-minmax-range` · `S117-pe-luyke-finalize` · `S144-bootstrap` — **khớp chính xác 3 tên `wave-plan-S180.md:69`**.
- **2** thiếu bản gộp: 2 run-folder S180 — **khớp chính xác `run-chua-gom 2`** của `nhip-no-probe` (máy độc lập).
- **4** ở `2026-06-18-harness-audit-invest`: `run.md` nêu `sub-audit-{partA,partB,partC,h8hmw}.md`, **cả 4 chưa từng hạ cánh**. 🔸 **Khai công bằng, không thổi phồng:** đây **không phải phát hiện mới** — `runs/README.md:31` đã kể chuyện đó (*"1 auditor fail-no-StructuredOutput + 2 truncated"*). Cái mới là: **lời giải thích nằm ở README, KHÔNG nằm trong `run.md`** — nên với người chỉ mở lượt chạy đó ra đọc, 4 lane này **vô hình suốt 50 ngày**, và **0/5 máy cũ** nêu tên chúng. Đó đúng chức năng điểm-danh-2-nguồn: **biến nợ vô hình thành nợ CÓ TÊN**.
- **1** `S134/sub-reviewer-precommit.md` — nêu tên, không có, không giải thích ở đâu cả.

---

## §7 — Khoản sàn GĐ-2(v) "Khai luôn điểm mù" — đã viết

**Vật:** `.claude/workflows/runs/README.md` — thêm **1 gạch đầu dòng thứ 5** vào **C7 (CAVEAT trung-thực)**, đúng chỗ lane B chỉ (§1 B-09 điểm 3: *"chi phí ≈ 1 đoạn văn"*). C7: 4 → 5 gạch.

Nội dung đóng cả 3 vế hub đòi: **(v-1)** thừa nhận thành văn *"vật chứng sinh SAU khi vai chạy ⇒ vai không nằm trong phạm vi tự soi của chính nó"* — và nói rõ điều đó áp cho **cả `artifact-integrity.ps1` vừa dựng**, không tự miễn cho mình; **(v-2)** trỏ `closeout-sentinel` cặp vô-điều-kiện + `ring2-audit` **pin đích danh, cấm glob-latest**; **(v-3)** trỏ bookend `@open`.

🔴 **Và khai luôn chỗ (v-3) YẾU — tôi tự đo lại, không chép lane B:**
```
grep -cE 'run-folder|runs/' .claude/agents/lead-stale-auditor.md   -> 0
  control-duong cung tep:  grep -c 'FLAG'                          -> 4   (lenh chay dung)
grep -cE 'run-folder|runs/' .claude/agents/lead-gap-auditor.md     -> 1
  hit do la gi? :39 = dong MO TA lop `gap-incident-unrecorded`, KHONG phai chi thi doc run-folder
```
⇒ **Nhịp CÓ, chỉ thị KHÔNG.** Đoạn văn ghi thẳng câu *"tới khi nợ đó đóng, đừng ghi (v) là đã phủ trọn"* + giao nợ về **gói-B persona của W3** (đúng chỗ `wave-plan-S180.md:85` đã xếp). **Tôi KHÔNG tự sửa persona** — 2 tệp đó thuộc gói restart lớp B/C, sửa lẻ ở đây là ăn lẹm wave sau.

---

## §8 — CHỐT

### 8.1 — Không làm vỡ 14 đoạn máy: đo TRƯỚC/SAU, cùng lệnh
```
                TRUOC                                        SAU
nhip-no-probe   ...deep 14/15 ok | run-chua-gom 2 | ...  ->  chuoi TRUNG KHOP tung ky tu
detectors       TOTAL FLAGS: 50 | cham runs/: 22         ->  TOTAL FLAGS: 50 | 22
```
**0/14 đoạn máy bị chạm.** Cơ học: `nhip-no-probe:163` duyệt `-Directory` (tệp gốc `runs/` vô hình) · `detectors:1102` lọc `^(sub-.+|.+-return)\.md$` (`_index.md` không khớp).

### 8.2 — Tác dụng phụ ĐÃ DỰ BÁO rồi VERIFY (không phải phát hiện sau)
Dự báo ở §3, chạy lại sau khi land — khớp:
```
scripts/  mau so: 54 muc  (khong co dong [!])   ->   55 muc  [!] lech ky vong 54
TONG      233 ten                               ->   234 ten
```
`naming-scan.ps1:174` neo mẫu số bằng **số hằng** ⇒ **mọi wave sau đều bắn dòng này**. Đây là **LỚP-5 nằm trong chính máy W1 ký để chống LỚP-5** (`naming-standard.md` L3 cấm neo bằng số). **Tôi bị cấm sửa tệp đó ⇒ BÁO, không vá.**

### 8.3 — Đối chiếu 13 khoản lane B (mẫu số 13, khai từng dòng, cấm nén thành số tổng)

| Khoản | Trước W2 | Sau W2 | Bằng chứng |
|---|---|---|---|
| B-04 mục lục 2 tầng | tầng-B CHẾT | ✅ **ĐÓNG** | `_index.md` derive-view 6.822 B / 88 dòng |
| B-06 máy 4 vị từ | 2/4, sai tầng | ✅ **ĐÓNG** | 4 vị từ, fault-inject 3 chiều |
| B-08 điểm danh 2 nguồn | THIẾU trọn (không có vế phải) | ✅ **ĐÓNG** | V-3 đọc `run.md`, in TÊN không in số tổng |
| B-09 khai điểm mù (v) | 1 trọn + 2 nửa | ✅ **ĐÓNG** | C7 gạch thứ 5 (4→5) |
| B-13 đối chứng dương | **TRƯỢT (đã chạy)** | ✅ **ĐÓNG** | tệp 0 byte → `RONG`, chiều A |
| B-05 vai cấm sửa | ĐÃ-CÓ | giữ | không đụng |
| B-11 ghi trước khi bắn | ĐÃ-CÓ | giữ | không đụng |
| B-07 ba nhịp | 2/3 | 🟡 **NỬA** | máy chạy được ngay sau lượt đắt (`-RunId`) nhưng **chưa cắm vào cửa nào** |
| B-12 ghi ngay khi kết luận về | luật có, máy không | 🟡 **NỬA** | máy có rồi, **chưa tự động** |
| B-01 liệt từng cửa | NỬA | ❌ chưa | ngoài 4 deliverable |
| B-02 khuôn tối thiểu thành văn | NỬA (END-line ghost-wire) | ❌ chưa | ngoài 4 deliverable → W3 |
| B-03 `secrets_sweep` phủ `runs/` | THIẾU | ❌ chưa | rider-6, ngoài 4 deliverable |
| B-10 nghiêm trọng theo chi phí | THIẾU (đang ngược chiều) | ❌ chưa | rider, ngoài 4 deliverable |

⇒ **7/13 đứng** (5 đóng MỚI + 2 sẵn có) · **2 nửa** · **4 chưa chạm**.

### 8.4 — 6 ô nghiệm thu hub (mẫu số hub dùng để cấp nấc)
| Ô | Trước | Sau |
|---|---|---|
| 1 liệt từng cửa + đích ghi | nửa | nửa |
| 2 vai điểm danh cấm sửa | đạt | đạt |
| 3 máy 4 vị từ | **trượt** | ✅ **đạt** |
| 4 đối chứng dương (gài tệp rỗng → phải bắt) | **trượt** | ✅ **đạt** |
| 5 sổ tồn tại + **trần dung lượng khai** | nửa | 🟡 nửa — sổ dựng lại rồi, **trần chưa khai** |
| 6 điểm danh 2 nguồn, in chênh | **trượt** | ✅ **đạt** |

**1,5/6 → 4,5/6.** 🔴 `wave-plan-S180.md:69` đặt acceptance **6/6** — **tôi đạt 4,5/6, KHÔNG phải 6/6.** Ô 1 + ô 5 nằm ngoài 4 deliverable lead giao lượt này. **Không tick ô chưa chạy.**

### 8.5 — Tệp tôi động (chỉ 4; git status còn tệp khác là của lane W1/W0b, KHÔNG phải tôi)
`scripts/artifact-integrity.ps1` (mới, 25.489 B) · `.claude/workflows/runs/_index.md` (mới, 6.822 B) · `.claude/workflows/runs/README.md` (+1 gạch C7) · nhật ký này.
**KHÔNG chạm:** `STATUS.md` · `HANDOFF.md` · `CLAUDE.md` · `broadcasts/_index.md` · `naming-standard.md` · `naming-scan.ps1` · `adap-upgrade-pack-*.md` · `_ledger.md` (vật lịch sử, L1) · persona (gói-B W3).

<!-- END sub-w2-luoi-ghi-dia — VERDICT: 4/4 vi tu · fault-inject 3/3 chieu (A 4/4 bat · B 0 duong-gia co control-duong · A2 2/2 THIEU-TAP) · ca-N1 BAT bang 2 vi tu doc lap (V-2 6/10 heading + V-1 2,70<3) · muc luc DUNG LAI (derive-view) · 7/13 khoan dung + 2 nua · 6 o nghiem thu 1,5/6 -> 4,5/6 (KHONG 6/6) · 0/14 doan may vo · exit 0 -->

