Files
solution-erp/.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-w2-luoi-ghi-dia.md
2026-08-07 17:01:30 +07:00

301 lines
28 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.****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`**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`**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,672,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 -->