# 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 `/.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:`. **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 -- ` 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).