# harness-audit — S192 @open (phiên-LOGIC L16) — trio nấc 3/3 (con KIỂM)

Ngày 2026-08-13. Repo `D:\Dropbox\CONG_VIEC\SOLUTION\SOLUTION_ERP`.
Vai: **verify spec-conformance + RE-DỰNG số memory-health**. KHÔNG chấm diff-code (`reviewer`), KHÔNG soi lead-surface (2 vai H24), KHÔNG harvest-op (`harvest-curator` H2).
🔴 **Ghi TỪNG verdict NGAY khi phán xong** (chống #53 — phiên này 8/9 vai garble). File này ghi bằng đường TUYỆT ĐỐI, append dần.

---

## §0 — PIN GATE (nghĩa-vụ (i), làm TRƯỚC mọi phép chấm)

| kiểm | lệnh | kết quả |
|---|---|---|
| `test -d` run-folder PIN | `.claude/workflows/runs/2026-08-13-S192-bookend-open/` | **TỒN TẠI** |
| `test -s` nấc-1 | `harness-eval-return.md` | **non-empty, 39.311 B** — khớp pin **byte-exact** |
| `test -s` nấc-2 | `harness-refine-return.md` | **non-empty, 22.467 B** — khớp pin **byte-exact** |

⇒ **PIN GATE PASS.** Không tự đi tìm "run mới nhất" (`ls -t`/glob) — chấm đúng folder lead PIN đích danh.

### 0b — TUẦN TỰ: chứng bằng mtime-chain (không tin lời khai)

```
harness-eval-return.md    2026-08-13 02:58:09
harness-refine-return.md  2026-08-13 03:14:10
(lượt của tôi bắt đầu)    2026-08-13 03:17:01
```
⇒ **eval → refine → audit, đúng thứ-tự, 0 chồng lấn.** Nếu tôi chạy song song thì tôi đang chấm bản cũ ⇒ verdict vô nghĩa. **HELD.**

### 0c — CỬA SỔ ĐO có bị trôi giữa lượt không? (bài F14@S162 / S189)

`ls` toàn bộ `*/MEMORY.md`: mtime mới nhất = **02:52:20** (`score-count-auditor`). `git log --since 02:30 -- .claude/agent-memory` = 3 commit `wal:` (02:41, 02:48, 02:53), **0 commit sau 03:01 chạm corpus**.
⇒ **Cây corpus ĐỨNG YÊN từ 02:52 tới giờ tôi đo (03:17)** ⇒ tôi và nấc-1 đo **cùng một cây**, TRỪ 2 file nấc-1 đã tự khai trôi (`score-counter` 02:41:38, `score-count-auditor` 02:52:20) — nấc-1 chạy `measure` TRƯỚC 02:41:38 nên số của nó cho 2 vai đó là số **tiền-trôi**. Đây là **caveat đã khai**, không phải bịa.

---

## §1 — RE-CHẠY INSTRUMENT (nghĩa-vụ (iv)) — bảng đối-chứng BYTE-EXACT

**Trước khi chạy, tôi grep write-verb bằng bộ động-từ RỘNG HƠN nấc-2** (`Move-Item|Set-Content|Out-File|Add-Content|Remove-Item|New-Item|WriteAllText|AppendText`):

| script | write-verb | tôi có chạy? |
|---|---|---|
| `measure-agent-memory.ps1` | **0 hit** — output ra stdout | ✅ CHẠY |
| `crystallized-backfill.ps1` | **0 hit** | ✅ CHẠY |
| `nhip-no-probe.ps1` | **0 hit** | ✅ CHẠY |
| `memory-archive-gate.ps1` | **1 hit** `:224`, gated `if ($Apply)` `:223` | ✅ CHẠY **DRY-RUN** |
| `mfe-eval.ps1` | **1 hit** `:231 [System.IO.File]::WriteAllText($statePath…)` | ⛔ **CỐ Ý KHÔNG CHẠY** (§4) |

### 1a. `memory-archive-gate.ps1` — DRY-RUN, exit 0 — **17/17 ô khớp BYTE-EXACT**

md5 `.archive-strikes.json` **trước = sau** = `51e3757b627ea0a8d0be8b73e43404c2` ⇒ DRY-RUN **thật sự không ghi** (chứng bằng hash, không bằng lời khai).

| ô | nấc-1 cite | tôi re-chạy | khớp |
|---|---|---|---|
| `lead-gap-auditor` bytes / entries / strike | 29.295 / 9 / 1 | 29.295 / 9 / 1 | ✅ |
| `ring2-audit` bytes / entries / strike | 29.268 / 9 / 2 | 29.268 / 9 / 2 | ✅ |
| `lead-stale-auditor` bytes / entries / strike | 27.154 / 8 / 1 | 27.154 / 8 / 1 | ✅ |
| resolve `lead-gap` + `ring2` | `WARN keep-floor hit (5); cannot auto-drain` | y nguyên | ✅ |
| resolve `lead-stale` | `WATCH (strike 1<2)` | y nguyên | ✅ |
| `[D3 value-gate]` 3 vai | 2 · 1 · 1 | 2 · 1 · 1 | ✅ |
| `[A6] DRY-RUN: strike counters NOT persisted` | có | có | ✅ |
| A7 tổng | **432 / 432 / failed 0** | **432 / 432 / failed 0** | ✅ |
| A7 số sub | 12 | 12 (đếm tay từ output) | ✅ |
| `ring1-audit` A7 | `pointers 1 resolved 1` | `pointers 1 resolved 1` | ✅ |
| `lead-stale-auditor` A7 | `pointers 1 resolved 1` | `pointers 1 resolved 1` | ✅ |
| cap/low-water/keep-floor/strike-need | 25600 / 21760 / 5 / 2 | y nguyên | ✅ |
| `ring5-audit` | `2474 no 2 entries strike 0 - ok` | y nguyên | ✅ |
| `score-counter` (gate) | 4.115 | 4.115 | ✅ |
| roster | 29 | 29 (đếm tay) | ✅ |
| **số dòng `PROPOSE`** | 0 | **0** | ✅ |
| over cap 25.600 | 3 vai | **3 vai** (chỉ 3) | ✅ |

### 1b. `measure-agent-memory.ps1` — exit 0, 29 agent — khớp l1 **29/29**, nhưng **cột KHỚP-BASELINE lệch**

Mọi giá-trị l1/l2 nấc-1 cite tôi tái dựng **byte-exact** (`cicd` l2_index 24.568 · `lead-gap` l2_index 1.362 · `lead-stale` 223 · `ring1` 682 / l2_verbatim 6.761 · `cicd` l2_verbatim 277.739 · `l1_over_30kb` 0/29 · over-cap 3/29 = đúng 3 tên). **Xem TRƯỢT-1 ở §2.**

---

## §2 — VERDICT PER-CLAIM (ghi ngay khi phán xong)

### C1 · `measured` freshness "10/29 khớp · 19/29 lệch" — 🔴 **TRƯỢT (số) / ĐẠT (caveat)**

**Tôi re-dựng: 8/29 khớp · 21/29 LỆCH.** Không phải 10/19.

Tôi đã thử **8 cách đọc** để xem có cách nào cho ra 10 không (**falsify chính phép đếm của tôi**):

| cách đọc | ra |
|---|---|
| l1 exact, cây HIỆN TẠI | **8** |
| l1 exact, cây **ĐÓNG BĂNG tại lúc nấc-1 chạy** (`git ls-tree af6f7625` 02:40) | **8** |
| cả 4 trường (l1+l2×3) exact | 8 |
| l1 sai-số ≤1% / ≤2% | 8 / 8 |
| l1 sai-số ≤5% | 9 |
| l2_verbatim exact | 24 |
| l2_index exact | 25 |

⇒ **KHÔNG cách đọc nào ra 10.** Tập khớp (8 tên, đích danh): `ctx-curator` · `database-agent` · `database-reviewer-style` · `frontend-designer` · `investigator-api` · `office-document` · `ring4-audit` · `ring5-audit`.

**Chống bẫy F14 (S162):** tôi KHÔNG chấm trên cây live. Dựng lại cây tại **6 commit `wal:`** (02:40 → 02:58) bằng `git ls-tree -r -l`; tại **mọi** trạng-thái cây trong cửa sổ nấc-1 chạy, `score-counter` = 3.322 (=cite nấc-1 ✓) và `score-count-auditor` = **2.565** — mà baseline là **2.330** ⇒ **row này đã LỆCH sẵn từ trước khi nấc-1 đo**, không phải do trôi sau.
**Baseline không đổi giữa lượt:** `memory-budget.json` mtime **08-10 21:04**, commit cuối chạm nó `ef1d4fbb 08-10 21:30` ⇒ nấc-1 và tôi đọc **cùng một baseline**. Loại xong giả-thuyết "hai bên đọc hai baseline".
**Falsify phép đọc baseline của tôi:** grep thô trên JSON xác nhận `score-count-auditor l1_hot 2330` · `reviewer 24473` · `cicd-monitor 24322` ⇒ parse của tôi không lệch khoá.

🔴 **Hệ quả về HƯỚNG:** nấc-1 viết *"S191 đo 9/29 khớp — kỳ này **10/29**, gần như đứng yên"* — đọc thành **+1 (khá lên)**. Số thật **8/29** ⇒ **−1 (xấu đi)**. Sai số nhỏ nhưng **lệch về phía có lợi cho bảng của chính mình**.

✅ **Vế caveat = ĐẠT:** lead hỏi *"nấc-1 có tự khai caveat đó không?"* — **CÓ**, `harness-eval-return.md:37` in đậm: *"19/29 cột delta trong bảng này — **kể cả cột tôi vừa đưa** — đang so với số đã trôi."* Caveat có thật, tự nhận, không né. Chỉ có điều con số đúng phải là **21/29**, tức **caveat còn áp rộng hơn nấc-1 tưởng**.

⚠️ **Kèm 1 lỗi tự-mâu-thuẫn trong chính nấc-1:** §3d cảnh báo *"con `harness-refine` nếu trích 3.322 sẽ trích một số **đã chết trong chính phiên này**"* — nhưng nấc-1 **vẫn giữ 3.322 (+40,4%) làm ô "lệch lớn nhất"** ở §1b **và** ở trục #12 của bảng tổng, không gắn cờ. Số đúng cuối lượt là **4.115 = +73,9%**. (Cả 2 số đều ĐÚNG tại thời điểm đo — `+40,4%` byte-exact tại 02:40 — nên đây là lỗi **không truyền đính-chính**, không phải bịa.)

### C9 · `ES-1`: chạy `-Apply` = **0 byte nội dung** — ✅ **ĐẠT (nền chắc hơn nấc-2 trình)**

Nấc-2 grep 5 động-từ ra 1 hit `:224`. Tôi grep **8 động-từ** (thêm `New-Item|WriteAllText|AppendText`) ⇒ **vẫn đúng 1 hit `:224`**, đích `$strikePath` (`:38` = `.claude\agent-memory\.archive-strikes.json`). `:127 if ($Apply) { $strikes[$sub] = $cur }` xác nhận. Header `:6-7` + `:26` trích **nguyên văn đúng từng chữ** (tôi đọc lại `sed -n '1,45p'`): `:26` = `-Apply   (records strikes; STILL no file moves)`.
🔴 **Chứng mạnh nhất không phải grep mà là HASH:** md5 `.archive-strikes.json` **giống hệt trước/sau** khi tôi chạy DRY-RUN ⇒ nhánh không-Apply không chạm file thật.

🔴 **NHƯNG phương-pháp của nấc-2 BROKE (dù kết luận HELD):** áp **đúng bộ 5 động-từ đó** lên `mfe-eval.ps1` ⇒ ra **1 hit** — nhưng đó là hit trong **comment** `:222`; write THẬT của `mfe-eval` là `:231 [System.IO.File]::WriteAllText`, **nằm ngoài bộ 5 động-từ**. ⇒ Bộ grep của nấc-2 là **máy đẻ âm-tính-giả**: đúng cho script này, sẽ **kết luận sai "0 write"** cho script dùng `WriteAllText`. Kết luận giữ, **thước phải siết**.

### C10 · `D2` — nấc-2 BÁC cảnh báo lead *"ring2 PROPOSE strike 2/2"* — ✅ **ĐẠT**

Re-chạy của tôi: **0 dòng `PROPOSE`** trong toàn bộ output (grep cả file). `ring2-audit` in `strike 2` nhưng resolve = `WARN keep-floor hit (5)`.
Cơ-chế nấc-2 nêu **đúng source**: `:198 if ($warnValue) → :200 elseif ($warnFloor) → :202 elseif ($cur -ge $strikeNeed) {PROPOSE} → :204 else {WATCH}` ⇒ `warnFloor` **đứng trước** nhánh PROPOSE trong chuỗi `if/elseif` ⇒ chạm strike 2 vẫn **không phát move-set**. Trích `:197-206` khớp đúng vùng.
⇒ **Bác ĐÚNG, và bác đúng cách**: nấc-2 không nói "lead sai", nó nói *"luật cấm vẫn đứng, kỳ này không có vật để cấm"* — giữ luật, bỏ ca. Đây là phân biệt **ca ⟂ luật**, không phải né.

### C11 · `D4` — *"3/29 over cap"* quá lời 1/3; trục ký-tự chỉ **2/29** — ✅ **ĐẠT (số byte-exact) + 1 CẢNH BÁO VỀ THƯỚC**

Tôi đo ký-tự **độc lập** và ban đầu ra lệch 16–38 ký-tự/file so nấc-1. Truy ra nguyên nhân, **không đổ cho nấc-1**:

| vai | ký-tự (scalar Unicode) | ký-tự astral | scalar+astral | **nấc-1 cite** | lệch |
|---|---|---|---|---|---|
| `lead-gap-auditor` | 25.560 | 34 | **25.594** | 25.594 | **0** |
| `ring2-audit` | 25.253 | 38 | **25.291** | 25.291 | **0** |
| `lead-stale-auditor` | 23.839 | 26 | **23.865** | 23.865 | **0** |
| `reviewer` | 22.293 | 16 | **22.309** | 22.309 | **0** |
| `harvest-curator` | 23.062 | 24 | **23.086** | 23.086 | **0** |

⇒ Nấc-1 đếm theo **đơn-vị mã UTF-16** (.NET/PowerShell `.Length`, emoji = 2). **5/5 ô khớp BYTE-EXACT** sau khi tôi dùng đúng quy-ước. **Nấc-1 không sai một ký-tự nào.**
- `lead-stale` **dưới** đường cắt: nấc-2 nói **1.121** ⇒ 24.986 − 23.865 = **1.121** ✅ byte-exact.
- **Đếm 2/29 over ký-tự**: đúng dưới **CẢ HAI** quy-ước (5 file duy nhất >24.986 B, ký-tự lần lượt 25.560/25.253/23.839/22.293/23.062 ⇒ đúng 2 vai over) ⇒ kết luận **bền với đổi quy-ước**.

🔴 **CẢNH BÁO (không phải bác — số đúng, nhưng nền thước phải khai):** ngưỡng **24.986 có 0 nguồn canonical trong repo** — `grep -rn "24986"` toàn bộ `*.ps1`/`*.json` = **0 hit**, control-dương `25600` = **2 hit** ⇒ grep sống. Trong khi `autoinject_cap_bytes 25600` **có** canonical (budget) và **được 2 script đọc**. ⇒ D4 đang dùng ngưỡng **KHÔNG canonical** để hạ một REGRESSION từ 3 xuống 2, đối lại ngưỡng **CÓ** canonical. Nấc-1 **có khai** chỗ này (`§0` caveat 5: *"số LEAD dán, chưa instrument nào đọc"*); **nấc-2 không khai** — nó gọi trục ký-tự là *"trục gây hại thật"* mà không nói số 24.986 không tồn tại ở đâu trong repo. Đây là **quyền owner chốt đơn-vị**, tôi cố ý KHÔNG đề-xuất đổi.

### C2 · HCV về-sổ **9/11, 2 thủng** — ✅ **ĐẠT (byte-exact)** · 🔴 **no-self-exempt: TÔI LÀ 1 TRONG 2 LỖ, tôi xác nhận**

**Đo độc lập, không mượn số ai:**

| bước | kết quả |
|---|---|
| file trong `runs/2026-08-13-S191-bookend-close/` | **13** |
| trong đó **mang tên vai** (8 `sub-*` + 3 `*-return`) | **11** |
| không mang tên vai (`run.md`, `bookend-close-synthesis.md`) | 2 |
| vai có `S191` trong diary | **9** |
| **vai THỦNG** | **2** = `ring5-audit` · `harness-audit` |

⇒ **9/11 — trùng khớp nấc-1 tuyệt đối**, kể cả 2 tên lỗ.

**Control-dương cho mỗi 0-hit** (luật: 0-hit cấm rời tay khi chưa có control):

| vai | `S191` | `S19x` | control `S1xx` | diary bytes | mtime |
|---|---|---|---|---|---|
| `ring5-audit` | **0** | **0** | **2 dòng / 3 match** | 2.474 | **08-10 04:02** |
| `harness-audit` (**TÔI**) | **0** | **0** | **16 dòng / 40 match** | 20.934 | **08-11 12:24** |

🔴 **NO-SELF-EXEMPT — tôi tự xác nhận tôi thủng:** `.claude/agent-memory/harness-audit/MEMORY.md` mtime **08-11 12:24** ⇒ **không bị chạm trong suốt cửa-sổ S191** (01:32→02:10 ngày 08-13), dù `runs/…S191…/harness-audit-return.md` (**8.191 B**, 02:10) chứng minh **vai tôi CÓ chạy và CÓ trả bài**. Việc chạy xong không đồng nghĩa về sổ. **Claim nói tôi thủng là ĐÚNG; tôi không hạ nhẹ nó.**
*(Chú: control của nấc-1 ghi `S1xx` = 16 / 2 hit — đúng **byte-exact** theo quy-ước đếm DÒNG `grep -c`; tôi đếm MATCH ra 40 / 3. Lại là khác quy-ước, **không phải sai số** — cùng lớp với ký-tự UTF-16 ở C11.)*

#### C2-bis · **BA MẪU SỐ 11 ⟂ 12 ⟂ 11/13 — ai đúng?** → **cả ba đều đúng SỐ HỌC; chúng trả lời BA CÂU HỎI KHÁC NHAU. Cái sai là ở H2, và `ring1-audit` bắt đúng.**

| nguồn | mẫu-số | tử | phạm-vi (điều nó thực sự đo) | tôi tái dựng |
|---|---|---|---|---|
| **nấc-1** | **11** | 9 | artifact **mang tên vai NẰM TRONG run-folder S191** | ✅ **khớp — tôi đếm ra đúng 11** |
| **H2** (`harvest-curator`) | **12** | 10 | 11 **+ `cicd-monitor`** (chạy trong cửa-sổ S191, file nằm ở run-folder **S190**, 12.147 B mtime 01:29:30) — **nhưng LOẠI `ctx-verifier`** với lý do *"đã về sổ nên không tính"* | ✅ số học nhất-quán (9+1)/(11+1) |
| **`ring1-audit`** | **13** | 11 | áp **cùng một luật** cho cả hai chiều: 11 + `cicd-monitor` + `ctx-verifier` | ✅ số học nhất-quán (9+2)/(11+2) |

🔴 **Phán:** **H2 sai về PHƯƠNG-PHÁP, `ring1-audit` đúng.** H2 dùng luật *"đừng lấy run-folder làm cột-A duy nhất"* để **THÊM một vai THỦNG** tìm thấy ngoài folder, rồi **BỎ một vai ĐẠT** cũng tìm thấy ngoài folder. Lọc bất-đối-xứng theo **kết-quả** ⇒ mẫu-số không còn là mẫu-số. (Chiều lệch: 10/12 = 83,3% **thấp hơn** 11/13 = 84,6% ⇒ H2 lệch về phía **báo động**, không phải phía tô hồng — nhưng vẫn là lỗi.)
✅ **Nấc-1 xử lý chỗ này ĐÚNG và đáng ghi:** nó **từ chối mượn "10/12"** và nói rõ *"hai phép đếm khác nhau, trộn vào là tái phạm lỗi trừ hai số khác phép đo"* (`harness-eval-return.md:302`) — đúng bài §1d của chính nó. Khai phạm-vi rồi ở trong phạm-vi = **hợp lệ**.
🔴 **Điều BA MẪU SỐ ĐỀU ĐỒNG Ý — và đó mới là thứ load-bearing: SỐ LỖ = 2, y hệt nhau, hai tên y hệt nhau.** Tranh mẫu-số làm tỉ-lệ nhúc nhích 83%↔85%; **nó không đụng được vào sự thật 2 vai không ghi gì.** Cãi mẫu-số mà quên chỗ đó là **rời tập-đo**.

🔴 **Và chính nấc-2 đang trộn 2 quy-ước trong MỘT câu:** §5 liệt 6 ratio; 5 cái đầu (`harvest-curator` 1,0982 · `lead-stale` 1,1378 · `reviewer` 1,1416 · `lead-gap` 1,1446 · `ring2` 1,1573) tính trên ký-tự **UTF-16** của nấc-1 — tôi tái dựng khớp cả 5; nhưng ratio **của chính nó** `1,1624` = 21.274/**18.302** là **scalar**, còn UTF-16 phải là **18.325** (23 astral) ⇒ ratio đúng 1,1609. Lệch không đổi kết luận (nó dư ~6.6K ký-tự dưới đường cắt), nhưng: **A1 của nấc-2 là action "3 LUẬT ĐỌC SỐ" mà luật số 1 là ĐƠN-VỊ** — và nó vi phạm đúng luật đó ngay trong bảng trình A1.

### C3 · phủ instrument trục về-sổ **0/5** — ✅ **ĐẠT (5/5 chân tự kiểm)**

Tôi kiểm **từng chân** chứ không tin bảng:

| # | instrument | `ring5-audit` hiện ra sao | tôi verify bằng | thấy thủng? |
|---|---|---|---|---|
| 1 | `measure-agent-memory` | `l1_hot 2.474` = baseline **2.474** ⇒ **delta 0** | ✅ RE-CHẠY — và `ring5-audit` **nằm trong tập KHỚP 8 vai** của tôi ⇒ máy xếp nó vào cột **"khớp = tốt"** | **KHÔNG** |
| 2 | `mfe-eval` | **N/A** (`den=0`) | ✅ **TÁI DỰNG bộ trích mẫu-số bằng tay** (không chạy script — xem §4) | **KHÔNG** |
| 3 | `memory-archive-gate` | `2474  no  2 entries  strike 0  - ok` | ✅ RE-CHẠY — in **nguyên văn** đúng chuỗi đó | **KHÔNG** |
| 4 | `crystallized-backfill` | không có mặt | ✅ RE-CHẠY — chỉ 6 nguồn doc, **0 dòng agent** | **KHÔNG (ngoài trục)** |
| 5 | `nhip-no-probe` | folder S191 có `bookend-close-synthesis.md` **5.549 B** ⇒ đếm **ĐÃ GOM** | ✅ đọc source `:155-181`: DUAL-ACCEPT chỉ hỏi *"có `*-synthesis.md` non-empty?"* — **đo CÓ-FILE, không đo VỀ-SỔ** | **KHÔNG** |

🔴 **Tái dựng chân #2 — tôi viết lại bộ trích mẫu-số của `mfe-eval` bằng Python từ chính config trong budget** (`mfe.sub_denominator.denom_header_anchors` + `content_word_min`), **KHÔNG chạy script** (nó ghi file):

| trục | tôi tái dựng | nấc-1 cite | khớp |
|---|---|---|---|
| role N/A | **6** | 6 | ✅ |
| **tên 6 vai N/A** | `back-end-reviewer-style`·`database-reviewer-style`·`front-end-reviewer-style`·**`ring5-audit`**·`score-count-auditor`·`score-counter` | y hệt | ✅ **6/6 đúng tên** |
| role có điểm | **23** | 23 | ✅ |
| **DENOMINATOR tổng** | **165** | 165 | ✅ **byte-exact** |
| `implementer-backend` mẫu-số | **18** | 17/**18** | ✅ |
| `implementer-frontend` mẫu-số | **13** | 12/**13** | ✅ |

*(Bẫy tôi tự sập rồi tự sửa: lần dựng đầu tôi ra **15 N/A** vì Python `in` **phân biệt hoa-thường** còn PowerShell `-match` thì **KHÔNG**. Sửa sang case-insensitive ⇒ khớp 6/23/165 tuyệt đối. Ghi lại để không ai tưởng nấc-1 sai.)*

⇒ `ring5-audit` **thật sự có `den=0`** ⇒ nằm ngoài coverage **do CẤU-TRÚC role-file**, không phải máy hỏng. **4 màu xanh + 1 ngoài-trục trên một vai chưa ghi chữ nào suốt 3 phiên** — claim đứng vững.

### C4 · Goodhart anchor — ✅ **ĐẠT CẢ HAI VẾ**

**Vế 1 — "thước ĐÚNG, `c3` là cột Strikes":** ✅ **ĐẠT**
- Header `error-ledger.md:68` = `| Guard | Counters | Tier | Strikes | Verified | Net |` ⇒ **c0=Guard · c1=Counters · c3=Strikes · cLAST=Net**, **6 ô/row** — đúng từng chữ như nấc-1 khai.
- Parser `mfe-eval.ps1:125` = `if ($c[3] -match '(\d+)') { $strikesTotal += [int]$matches[1] }   # Strikes col` ✓ trích nguyên văn.
- 🔴 **Tôi TỰ CỘNG LẠI từ bảng nguồn (16 row `:70-85`), không nhìn số của nấc-1:**
`2+5+3+1+2+1+0+2+1+1+2+1+1+1+1+1` = **25** ⇒ **khớp máy VÀ khớp chuỗi cộng của nấc-1 theo ĐÚNG THỨ TỰ TỪNG SỐ HẠNG** (kể cả ô `—` không-chữ-số ở row `:76` ra 0).
⇒ **Nấc-1 đảo lại giả-thuyết "thước hỏng" của lead là ĐÚNG.** Không có lỗi đọc cột.

**Vế 2 — "cái hỏng là `rca_entries` 14→16 KHÔNG CÓ CỬA ĐI VÀO":** ✅ **ĐẠT**
- `.mfe-state.json`: **33 entry** ✓ · `DISTINCT strikes_total` = **{25}** (đúng 1 giá trị) ✓ · `DISTINCT rca_entries` = **{14, 16}** ✓ · đầu `2026-07-25 23:55` → cuối `2026-08-13 02:43` = **18,12 ngày** ✓ (nấc-1 ghi 18,1) · `warn_baseline` = **25** ✓.
- `RCA_entries` = **16** ✓ (`grep -c '^### E-0'` = 16, chạy tới `E-016`).
- 🔴 **"Không có cửa" — tôi kiểm bằng phép mạnh hơn nấc-1:** grep **mọi** script đụng `error-ledger` ⇒ 2 file. `mfe-eval.ps1` chỉ **ĐỌC** (`:53 $ledgerPath`, 2 write-verb đều trỏ `.mfe-state.json`). `governance-detectors.ps1` có **1 hit write-verb duy nhất ở `:1588` — NẰM TRONG COMMENT**, còn `$c13LedgerPath` (`:2141`) chỉ dùng với **`Test-Path`** (`:2144`). ⇒ **0 script nào ghi `error-ledger.md`** ⇒ cột `Strikes` chỉ tiến khi **người gõ tay**.
- Nhánh cảnh báo `:215 elseif ($strikesTotal -gt $warnBase -and $fits)` ⇒ cần `>25` mới kích ⇒ **18 ngày không ai gõ = không bao giờ kích**. Đúng lớp *"guard dựng mà không ai gọi"*.

### C5 · 2 lỗi nấc-1 TỰ BẮT — **THẬT, không diễn** (✅ ĐẠT phần kiểm được · ⚪ 1 mảnh KC)

**(a) `l2_index` = MAIN+rotated ⟂ MAIN** — ✅ **ĐẠT, xác nhận bằng 4 phép độc lập:**

| kiểm | kết quả |
|---|---|
| `cicd-monitor/archive/_INDEX.md` (MAIN) | **10.662 B** ✓ |
| `_INDEX-2026-H1.md` (rotated) | **13.906 B** ✓ |
| tổng | **24.568** = đúng `l2_index` máy in ✓ |
| `measure` source `:20` | `if ($_.Name -like '_INDEX*.md')` ⇒ **gộp rotated** ✓ (trích nguyên văn đúng) |
| `nhip-no-probe` source `:145` | `Join-Path $mem.FullName 'archive\_INDEX.md'` ⇒ **CHỈ MAIN** ✓ |
| cap `l2_index` | **20.480** canonical trong budget `:65` ✓ |
| **phép trừ ngây thơ** 24.568/20.480 | **119,96%** ⇒ **REGRESSION giả CÓ THẬT trong tầm với** ✓ (khớp đúng số nấc-1 tự trích dẫn từ bản nháp hỏng) |
| đỉnh MAIN đúng: `reviewer` 13.941/20.480 | **68,07%** ✓ byte-exact |

⇒ Bẫy **có thật** (một tên trục, hai phép đo), phép sửa **đúng tuyệt đối**, và đường sai **thật sự dẫn tới 119,96% = REGRESSION bịa**. Nấc-1 không dựng bù nhìn.

**(b) chuỗi headroom thiếu 4 mốc giữa do regex trượt `160.924`** — ✅ **ĐẠT, chứng bằng đĩa:**

| giá trị | tìm dạng **CHẤM** | tìm dạng **TRƠN** |
|---|---|---|
| `153.117` | **4 file** | **0 file** |
| `137.780` | **2 file** | **0 file** |
| `131.496` | **4 file** | **0 file** |
| `174.463` | 7 file | 1 file |
| `160.924` | 14 file | 1 file |

⇒ Regex chỉ bắt chữ-số-trơn sẽ **mất trắng 3/4 mốc giữa** (0 hit). Lời khai "suýt tính đạo hàm trên chuỗi 12 mốc" **được đĩa xác nhận**, không phải kể công.

⚪ **Mảnh KHÔNG-CHẤM-ĐƯỢC (khai thẳng, không cho ĐẠT cho đẹp):** tôi **không thể** chứng nấc-1 *thực sự đã viết bản nháp sai rồi mới sửa* — đó là tường thuật nội-tâm, không có vết trên đĩa. Tôi chỉ chứng được **3 điều kiểm được**: bẫy có thật · phép sửa đúng · đường-sai dẫn tới kết-luận sai cụ-thể. Đủ để bác giả-thuyết "diễn", **không đủ** để chứng trình-tự thời-gian.

### C7 · `①` reinject = 0 vì **0 mục ĐỊNH DANH**; `ES-5` `-Detail` là cửa duy nhất — ✅ **ĐẠT (source, byte-exact)**

| kiểm | kết quả |
|---|---|
| `grep -n "MISS" mfe-eval.ps1` | **đúng 2 hit**: `:32` (comment khai cờ) + **`:288`** (`Write-Host "        MISS: {0}"`) ⇒ **1 lệnh in MISS duy nhất trong cả script** |
| lệnh đó nằm trong nhánh nào | **`:284 elseif ($Detail) {`** ⇒ **không `-Detail` thì KHÔNG THỂ có dòng MISS** |
| `grep -n '\$Detail'` | 3 hit: `:32` khai param · `:284` nhánh duy nhất tiêu thụ |
| comment `:285-286` | *"name the missing item so the **reinject lane** acts per-item instead of re-deriving the matcher by hand"* ⇒ **trích nguyên văn đúng**, và nói thẳng lane ① là khách hàng |
| `:294` dòng N/A | `N/A (no numbered anti-pattern / NEVER block in role-file to extract)` ⇒ khớp đúng chuỗi nấc-1 trích |
| `:299` dòng per-role | dòng `{hit}/{den} = {pct}%` ⇒ khớp caveat "MISS `:288` vs role `:299` lệch dòng" của nấc-1 |

⇒ **Chuỗi nhân-quả nấc-2 dựng được SOURCE xác nhận trọn:** nấc-1 chạy **không** `-Detail` ⇒ 0 dòng MISS ⇒ **0 mục có tên** ⇒ lane ① của nấc-2 **không có vật per-item để thao tác** ⇒ `①=0` là **hệ quả của INPUT thiếu cờ**, không phải nấc-2 lười. Quy trách nhiệm về **lead (người gõ lệnh nấc-1)** là **đúng địa chỉ**.
⚪ Vế *"tái phát phát hiện S173, truyền đúng 1 lần @S185 rồi rơi lại"* = **KC** — lịch-sử phiên nằm ở diary/run cũ, tôi không tái dựng trong lượt này; cơ-chế thì đã ĐẠT.

### C6 · chuỗi headroom 21 mốc / 0 đảo chiều / KHÔNG tăng tốc — ✅ **ĐẠT (mọi kết-luận)** · 🔴 **TRƯỢT (đếm mốc: thiếu mốc thứ 22)**

**Số học — tôi tính lại toàn bộ, 8/8 byte-exact:**

| trục | nấc-1 | tôi tái dựng |
|---|---|---|
| đảo chiều (tăng hoặc bằng) | **0** | **0** ✓ |
| span S127→S192 | 28 ngày | 28 ✓ |
| delta toàn chuỗi | −107.879 | −107.879 ✓ |
| tốc độ toàn chuỗi | **−3.853**/ngày | −3.852,8 ✓ |
| S127→S153 | −4.087 | −4.087,4 ✓ |
| S153→S173 | −3.305 | −3.304,5 ✓ |
| S173→S192 | −4.245 | −4.245,0 ✓ |
| S188→S192 | −2.777 | −2.777,3 ✓ |
| "cuối nhỉnh hơn đầu ~3,9%" | 3,9% | 3,86% ✓ |
| target hụt | −95.777 | 95.777 ✓ |
| hotload +68,3% | +323.636 | +323.636 = +68,3% ✓ |
| STATUS+HANDOFF 59,4% | 473.785 | 473.785 = 59,4% ✓ |

🔴 **FALSIFY thật sự (lead yêu cầu đích danh): "có giá trị headroom nào trên đĩa mà nấc-1 BỎ SÓT, đủ phá đơn-điệu không?"**
Tôi quét **toàn đĩa** (`runs/` + `docs/` + `agent-memory/`) mọi số dạng headroom trong dải 100.000–240.000 ⇒ ra **24 giá trị**. Trừ đi 21 mốc của nấc-1 còn **3**:
- `199.332` = **cận dưới dải tok** `[199.332..265.777]` — không phải headroom ✓ loại
- `210.000` = **target owner** — không phải phép đo ✓ loại
- 🔴 **`208.230` = HEADROOM THẬT, phiên S140 (2026-07-18)** — nguồn `docs/changelog/sessions/2026-07-18-1300-S140-nam-vong-dong-session-model.md:8`: *"bảng M.B headroom **208.230** (upper-bound)"*.

**Hệ quả — tách đôi rành mạch:**
- ✅ **Đơn-điệu HELD:** chèn vào đúng chỗ ⇒ 222.102 (07-16) → **208.230** (07-18) → 200.490 (07-22) → … ⇒ **vẫn 0 đảo chiều**, chuỗi thành **22 mốc / 18 phiên**. Kết-luận lớn **không suy suyển**.
- ✅ **"KHÔNG tăng tốc" MẠNH LÊN:** cửa sổ S127→S140 = **−6.936 tok/ngày = NHANH NHẤT toàn chuỗi**, rồi S140→S144 tụt còn **−1.935**. Tức giai-đoạn **cháy nhanh nhất nằm ở ĐẦU**, còn gần đây chậm hơn ⇒ luận điểm "rò đều, không phải sụp" **được củng cố**, không bị lật.
- 🔴 **TRƯỢT phần đếm:** "**21 mốc / 17 phiên**" sai — thật là **≥22 mốc / ≥18 phiên**.
- 🔴 **Và lỗi này là LỚP KHÁC với lỗi nấc-1 tự bắt:** nấc-1 vá **ĐỊNH-DẠNG** (`160.924` chấm ⟂ trơn) nhưng **không vá PHẠM-VI** — nó tự khai luật *"ngày = run-folder sớm nhất trên đĩa chứa số đó"*, tức **corpus = run-folder**. Mốc S140 sống trong `docs/changelog/sessions/`, **ngoài corpus**. Vá cái sàng, quên cái rổ.

**🔸 Ba nguồn (nấc-1 · `ring2-audit` · tôi) — KHỚP, không chọi:**
`ring2-audit:300` tự kiểm `(95.777 − 75.427)/75.427 = **26,98%**` ⇒ xác nhận "+27%" là **% tăng của KHOẢNG HỤT so target**, KHÔNG phải gia-tốc; và chốt *"cửa sổ gần nhất S188→S192 là CHẬM NHẤT (−2.777/ngày) ⇒ không có bằng chứng tăng tốc"*. Tôi tính độc lập: **−2.777,3 đúng là chậm nhất** trong 5 cửa sổ. ⇒ **3/3 nguồn cùng kết luận**; `ring2` còn bắt thêm rằng chuỗi 3-mốc của `lead-gap` **bỏ 2 mốc trung gian** (S186 · S188) — cùng đúng lớp "khoảng GỘP nhiều kỳ". **0 chọi.**

### C8 · `③ archive = 0` do chốt-dừng per-LỚP FIRE cả 3 vai — ✅ **ĐẠT: đúng luật chống-Goodhart, KHÔNG né việc**

Tôi chấm bằng **4 phép thử "né việc"**, cả 4 đều bác giả-thuyết né:

| phép thử | kết quả |
|---|---|
| **(1) Luật có TRƯỚC hay chế ra lượt này?** | **CÓ TRƯỚC.** Diary `harness-refine/MEMORY.md` ghi kỷ-luật chốt-dừng xuyên **S168 · S172 · S173** (`:3` *"5 chot-dung FIRE → escalate cua-LEAD"*). Bài học tự rút ở `:5`: *"chốt-dừng tiền-đăng-ký bắt HÌNH THỨC, không bắt BỐI CẢNH ⇒ **nổ ra escalate kèm bối cảnh, đừng nổ ra phán quyết**"* — ES-2 làm **đúng y** khuôn đó |
| **(2) Máy có nói action ấy vô ích không?** | **CÓ — máy tự khai.** Re-chạy của tôi in cho `lead-gap`+`ring2`: `WARN keep-floor hit (5); **cannot auto-drain** - SPLIT/condense entries by hand`. Đề ③ lúc này = đề một việc **chính công cụ tuyên bố không làm được** |
| **(3) Có bằng chứng action ấy gây HẠI không?** | **CÓ, tôi tự verify.** Source `:182-188` duyệt pool **theo VỊ TRÍ** (`for k=0; k<floorStart`), `floorStart = logCount − keepFloor`. Kiểm `ctx-audit/MEMORY.md`: **14 heading**, **pos 0 = S173 (08-05)** · **pos 5 = S153 (07-26)** — **khớp byte-exact claim E4 của nấc-2**, và thứ tự 14 mục nó liệt **trùng khít** bản tôi trích. ⇒ máy sẽ rút **tháng 8 TRƯỚC**, để lại **tháng 7**. "Thuốc thành độc" là **có thật**, không phải tu-từ |
| **(4) Có giấu vấn-đề đi không?** | **KHÔNG.** ES-2 nêu đủ số (#13 · 3/3 keep-floor · #18 strike 2=need 2) + **chia chủ 3 lane** (cap=owner · quy-ước diary=lead · auto-drain=tooling), và ES-3 nêu **điều-kiện gỡ** (`:177-178` sắp theo NGÀY). Vấn-đề **to hơn** sau lượt này, không nhỏ đi |

⇒ Đây là **đúng hình dạng chống-Goodhart**: không hạ flag-count bằng cách khuấy L1 cho đẹp bảng; giữ nguyên cờ, đẩy lên đúng người có quyền. Nếu nó đề ③ lần nữa **mới** là né — né bằng cách tỏ ra bận.
⚠️ **Cái giá phải khai (nấc-2 khai chưa đủ đậm):** hệ quả thực-tế là **3 vai tiếp tục over-cap và lượt này không ai làm gì**. Đúng luật ≠ vô hại. Điều này chỉ chấp nhận được **vì** ES-2/ES-3 có địa chỉ chủ; nếu kỳ sau escalate không được nhận, chốt-dừng sẽ biến thành **cái tủ để cất việc**.

### C12 · 16 BÁC + 5 NHƯỜNG — ✅ **ĐẠT: 0 mục né-việc trá hình; nhường ĐÚNG LÀN**

**Tôi soi 16 BÁC bằng 1 câu hỏi: "mục này bác vì ĐO ĐƯỢC là không nên làm, hay bác vì ngại làm?"** Chọn 5 mục **rủi ro né cao nhất** để kiểm tận đĩa:

| BÁC | kiểm của tôi | phán |
|---|---|---|
| **#7** reinject 2 mục MFE MISS @S185 | **Tái lập grep byte-exact:** `integration testing` trong `implementer-backend` = **0** (control `test` = **11**) · `30 min` trong `implementer-frontend` = **0** (control `trivial\|refuse` = **2**) ⇒ đúng từng số | **không né** — có control-dương, điều-kiện lật chưa xảy ra |
| **#9** mọi action lên headroom/hotload | Re-chạy `crystallized-backfill`: **6/6 nguồn** là `docs/*` + `.claude/governance` + `.claude/agents` — **0 file thuộc agent-memory corpus** ⇒ thật sự ngoài lane | **không né** — đúng ranh |
| **#13** archive **chính diary mình** | Gate re-chạy: `harness-refine 21274 no 10 entries strike 0 - ok` ⇒ **0 trigger thật** | **không né** — nó tự soi mình bằng đúng thước soi người, **không tự miễn trừ** |
| **#15** dựng instrument mới đo trục về-sổ | Việc này là **lane tooling** (viết script), không phải 4-lớp corpus; nó escalate thay vì nuốt | **không né** — nhưng đây là mục **sát ranh nhất**; nếu escalate rơi, trục #29 sẽ vĩnh viễn không ai đo |
| **#16** promote luật vào diary `harness-eval` | Kiểm: nấc-1 **đã tự nêu** ở `§0` caveat 5 (*"nên in CẢ HAI cột, không trộn"*) **và đã in đủ 2 cột** ⇒ promote = trùng | **không né** — tránh nghi-thức rỗng |

⇒ **Không tìm thấy mục nào "bác cho nhẹ việc".** Dấu hiệu ngược lại còn mạnh: nấc-2 **tự nhận sai 2 lần có bằng chứng** (D3 gỡ lệnh cấm `-Apply` của chính nó; D5/E3 đổi B6 từ *BÁC* sang *CÓ ĐIỀU KIỆN*) — và **cả 2 lần đều KHÔNG rút về 0**, mà thay bằng phát biểu **hẹp hơn + kiểm được**. Đó là hành vi ngược hẳn với né.

**5 NHƯỜNG — đúng làn hay đẩy việc?** Kiểm từng trục:

| nhường | tôi kiểm | phán |
|---|---|---|
| **N1** headroom/hotload → LEAD | 6/6 nguồn là hot-feed, 0 agent-memory (đã đo) | ✅ **đúng làn** |
| **N2** 8 spawn-record → H2 `harvest-curator` | harvest-integrity là turf H2 theo ranh-trục đứng sẵn; nấc-2 **không tái đo, không nhận là số của mình** | ✅ **đúng làn** (tôi cũng nhường, cùng lý do) |
| **N3** nhịp + sổ yêu-cầu → lead/H24 | `light 6/6` + `deep 1/1` + sổ = **session-surface**, đúng thứ ranh-sắc cấm cả nó lẫn tôi | ✅ **đúng làn** |
| **N4** đo lại số → nấc-1 | Đúng phân vai (nấc-2 không đo) | ✅ **đúng làn** |
| **N5** chấm lượt này → **tôi** | Đúng — và **tôi đã chấm, kể cả claim nói chính tôi thủng** | ✅ **đúng làn** |

🔴 **Nhưng 1 cảnh báo CẤU-TRÚC phải nói (không phải lỗi của nấc-2):** 5 nhường + 6 escalate = **11 trục rời khỏi tay nấc-2 trong MỘT lượt**, tất cả đổ về **lead**. Mỗi cái riêng lẻ đúng làn; **cộng lại thì lead thành nút cổ chai duy nhất**, và không có máy nào đếm "escalate đã nhận / chưa nhận". Đây **cùng hình dạng** với `strikes_total` (C4) và `absent ≡ 0` (§3b nấc-1): **đường đi ra thì có, đường đi vào thì không ai canh.** Tôi nêu, **không đề-xuất** (ngoài trục của tôi).

---

## §3 — FALSIFY-LOG (nghĩa-vụ (iii)) — mỗi dòng = **phép thử PHÁ** cụ thể, không phải kết luận

| # | tôi thử PHÁ điều gì | phép thử cụ thể | kết |
|---|---|---|---|
| 1 | "chấm nhầm run cũ" | `test -d`/`test -s` pin + so byte 39.311/22.467 + **mtime-chain** 02:58 < 03:14 < 03:17 | **HELD** |
| 2 | "cây corpus trôi ⇒ tôi và nấc-1 đo 2 cây" | dựng lại **6 commit `wal:`** bằng `git ls-tree -r -l` (02:40→02:58) | **HELD** (trôi đúng 2 file, nấc-1 đã tự khai) |
| 3 | "10/29 khớp có thể đúng theo cách đọc nào đó" | thử **8 cách đọc** (exact/≤1%/≤2%/≤5%/4-trường/l2 riêng) × **2 cây** (nay + đóng băng) | 🔴 **BROKE** — 0/8 ra 10; thật là **8/29** |
| 4 | "hai bên đọc 2 baseline khác nhau" | mtime `memory-budget.json` 08-10 21:04 + `git log` commit cuối `ef1d4fbb` 08-10 | **HELD** (cùng baseline) |
| 5 | "phép đọc baseline của TÔI mới sai" | grep thô trên JSON đối chiếu 5 khoá (`2330/24473/24322/13340/2474`) | **HELD** (parse tôi đúng) |
| 6 | "ký-tự nấc-1 bịa" (tôi đo lệch 16–38) | đếm **astral char** từng file ⇒ `scalar+astral` = cite nấc-1 **5/5 khớp 0 lệch** | **HELD** (nấc-1 đúng, **tôi** sai quy-ước) |
| 7 | "ngưỡng 24.986 có canonical" | `grep -rn 24986` toàn `*.ps1`/`*.json` = **0**; control-dương `25600` = **2 hit** | **HELD** (0 nguồn — thước treo) |
| 8 | "DRY-RUN vẫn ghi lén" | **md5 `.archive-strikes.json` trước = sau** | **HELD** (không ghi) |
| 9 | "bộ grep write-verb của nấc-2 đủ kín" | áp **đúng bộ 5 động-từ đó** lên `mfe-eval.ps1` — nơi write thật là `WriteAllText` | 🔴 **BROKE** (kết luận đúng, **thước hở**) |
| 10 | "`strikes_total=25` là đọc nhầm cột" | đọc header `:68` + **tự cộng lại 16 row** `:70-85` | **HELD** (= **25**, khớp từng số hạng) |
| 11 | "có script nào ghi `error-ledger`" | grep 2 file; `governance-detectors` hit **nằm trong comment `:1588`**, `c13LedgerPath` chỉ `Test-Path` | **HELD** (0 cửa ghi máy) |
| 12 | "`N/A` của MFE là máy hỏng" | **tái dựng bộ trích mẫu-số bằng Python** từ config budget ⇒ 6 N/A **đúng tên** · 23 scored · **denom 165** | **HELD** (den=0 thật) |
| 13 | "chuỗi headroom có mốc phá đơn-điệu" | quét **toàn đĩa** dải 100K–240K ⇒ 24 giá trị; lòi **`208.230` (S140)** nấc-1 sót | 🔴 **BROKE nửa**: **đếm mốc SAI (21→22)**, nhưng **đơn-điệu HELD** (0 đảo chiều) |
| 14 | "grep bằng-chứng của nấc-2 không tái lập được" | chạy lại 2 cặp grep+control của B7 | **HELD** (0/11 · 0/2 byte-exact) |
| 15 | "E4 vị-trí-đảo là tu-từ" | trích **14 heading** `ctx-audit` ⇒ pos0=**S173 (08-05)**, pos5=**S153 (07-26)** | **HELD** (đúng byte-exact) |
| 16 | "chốt-dừng là cớ chế ra để né" | grep diary `harness-refine` ⇒ kỷ-luật có từ **S168/S172/S173** + máy tự khai `cannot auto-drain` | **HELD** (luật có trước) |
| 17 | **"tôi tự tha cho mình"** (no-self-exempt) | tự grep diary CỦA TÔI: `S191`=0 · `S19x`=0 · control `S1xx`=16 dòng · mtime **08-11 12:24** | **HELD** — **tôi thủng thật, tôi xác nhận** |

**3 BROKE** = 3 chỗ tôi phá được: **#3** (số 10/29 sai) · **#9** (thước grep của nấc-2 hở) · **#13** (thiếu mốc thứ 22).

---

## §VERDICT — **HARNESS-AUDIT: 10Đ / 3T / 2KC**

| # | claim (chủ) | verdict | lý do 1 dòng |
|---|---|---|---|
| C1 | `measured` 10/29 khớp · 19/29 lệch (**nấc-1**) | 🔴 **TRƯỢT** (số) / ✅ ĐẠT (caveat) | thật **8/29 · 21/29** — 8 cách đọc × 2 cây đều không ra 10; caveat "so với số đã trôi" thì **có thật** và còn áp **rộng hơn** nấc-1 tưởng |
| C2 | HCV về-sổ **9/11, 2 thủng** (**nấc-1**) | ✅ **ĐẠT** | tôi đếm độc lập: 13 file → **11 mang tên vai** → **9 về sổ**, 2 lỗ **đúng tên**; control-dương đủ |
| C2b | mẫu-số **12** (**H2 `harvest-curator`**) | 🔴 **TRƯỢT** | lọc **bất-đối-xứng**: THÊM `cicd-monitor` (thủng, ngoài folder) nhưng BỎ `ctx-verifier` (đạt, cũng ngoài folder) ⇒ `ring1-audit` đúng, nhất quán là **11/13**; **cả 3 mẫu-số đều ra ĐÚNG 2 LỖ** |
| C3 | phủ instrument trục về-sổ **0/5** (**nấc-1**) | ✅ **ĐẠT** | 5/5 chân tự kiểm: delta-0 · den=0 · `ok` · vắng mặt · `*-synthesis.md` tồn-tại; tái dựng MFE ra **6/23/165** khớp tuyệt đối |
| C4 | Goodhart: thước ĐÚNG ⟂ hỏng ở **không có cửa vào** (**nấc-1**) | ✅ **ĐẠT cả 2 vế** | tự cộng 16 row = **25**; `{25}` bất động 33 entry / **18,12 ngày**; **0 script ghi `error-ledger`** (hit duy nhất nằm trong comment) |
| C5 | 2 lỗi TỰ BẮT (**nấc-1**) | ✅ **ĐẠT** · 1 mảnh **KC** | bẫy thật (24.568/20.480 = **119,96%**) + 3/4 mốc chỉ tồn tại dạng **chấm** (plain = 0 file); **KC**: trình-tự "nháp sai rồi sửa" không có vết đĩa ⇒ không chấm |
| C6 | chuỗi 21 mốc / 0 đảo chiều / không tăng tốc (**nấc-1**) | ✅ ĐẠT (kết-luận) / 🔴 **TRƯỢT** (đếm) | 12/12 số dẫn xuất byte-exact & **0 đảo chiều HELD**; nhưng sót **mốc 22 = `208.230` (S140)** nằm ngoài corpus run-folder ⇒ **≥22 mốc/18 phiên**; chèn vào còn **củng cố** "không tăng tốc" (cửa sổ đầu **−6.936/ngày** = nhanh nhất) |
| C7 | `①`=0 vì 0 mục ĐỊNH DANH; `ES-5` `-Detail` (**nấc-2**) | ✅ **ĐẠT** · 1 vế **KC** | `MISS` chỉ có **1 lệnh in** (`:288`) nằm trong **`:284 elseif ($Detail)`** ⇒ thiếu cờ = **bịt lane ①** thật; **KC**: vế lịch-sử "tái phát S173 / truyền 1 lần @S185" |
| C8 | `③`=0 do chốt-dừng per-LỚP FIRE (**nấc-2**) | ✅ **ĐẠT** | 4/4 phép thử né đều bác: luật có từ **S168/S172/S173** · máy tự khai `cannot auto-drain` · hại **verify được** (pos0=S173 08-05 rút trước S153 07-26) · vấn-đề **to hơn** sau lượt, không bị giấu |
| C9 | `ES-1` `-Apply` = **0 byte nội dung** (**nấc-2**) | ✅ **ĐẠT** | grep **8 động-từ** vẫn 1 hit `:224`; `:6-7`/`:26` trích đúng từng chữ; **md5 trước=sau** là chứng mạnh hơn grep |
| C10 | `D2` bác *"ring2 PROPOSE 2/2"* (**nấc-2**) | ✅ **ĐẠT** | re-chạy: **0 dòng PROPOSE**; `warnFloor` chặn trước `PROPOSE` trong chuỗi `if/elseif :198-206` — **giữ luật, bỏ ca** là phân biệt đúng |
| C11 | `D4` *"3/29"* quá lời; ký-tự chỉ **2/29** (**nấc-2**) | ✅ **ĐẠT** | 5/5 ô ký-tự nấc-1 khớp **byte-exact** theo UTF-16; `lead-stale` dưới đường cắt **đúng 1.121**; đếm 2/29 **bền với cả 2 quy-ước** — kèm cảnh báo: ngưỡng ký-tự **0 canonical**, còn `25600` thì có |
| C12 | 16 BÁC + 5 NHƯỜNG (**nấc-2**) | ✅ **ĐẠT** | 5 mục rủi ro cao nhất đều **đo được là không nên làm** (grep B7 tái lập byte-exact; #13 tự soi mình 0-trigger); 5/5 nhường **đúng làn** — kèm cảnh báo cấu-trúc: **11 trục dồn về lead, 0 máy đếm escalate-đã-nhận** |

**Tổng: 10 ĐẠT · 3 TRƯỢT · 2 KHÔNG-CHẤM-ĐƯỢC.**
🔴 **KHÔNG gộp verdict-tổng** (bài meta-count S119): 3 TRƯỢT là **C1 · C2b · C6**, không cái nào bị "MIXED" che. 2 KC là **mảnh trình-tự C5** và **vế lịch-sử C7** — tôi **từ chối cho ĐẠT** để bảng đẹp.

### Nhận xét khép (trên số, không phải cảm tưởng)

- **Nấc-1 sai 2 chỗ, cả 2 đều là ĐẾM về chính bảng của mình** (`10/29` và `21 mốc`) — trong khi **mọi số ĐO bằng máy đều byte-exact 100%** (tôi re-chạy 4 instrument, không lệch một byte). Đây **đúng khuôn `meta-count self-coverage blind-spot`**: đo giỏi, đếm-về-mình lệch. Và cả 2 lần đều lệch về phía **nghe khá hơn thực tế** (10>8 đọc thành "cải thiện"; 21 mốc đọc thành "đã quét đủ").
- **Nấc-2 không có lỗi số nào tôi bắt được**; điểm yếu của nó là **thước** (bộ grep write-verb hở · trộn 2 quy-ước ký-tự ngay trong bảng trình A1 về ĐƠN-VỊ) — sai lớp nhẹ hơn, nhưng đúng vào chỗ nó đang thuyết giảng.
- **Trục nặng nhất kỳ này không đổi chủ:** 2 vai thủng về-sổ mà **0/5 instrument thấy** — và **cả 3 mẫu-số đang cãi nhau (11/12/13) đều ra ĐÚNG 2 lỗ**. Cãi mẫu-số làm tỉ-lệ nhích 83%↔85%; nó **không đụng được** vào sự thật 2 vai không ghi gì. **Tôi là một trong hai.**

---

## §4 — CONTAINMENT (bằng chứng, không phải lời hứa)

- **Tôi ghi đúng 1 file** = chính file này, **đường TUYỆT ĐỐI** `D:\…\runs\2026-08-13-S192-bookend-open\harness-audit-return.md`. **0 dir rỗng `.claude/agent-memory/harness-audit/` tương-đối theo cwd** (bẫy 5 vai trước).
- 🔴 **Tôi CỐ Ý KHÔNG chạy `mfe-eval.ps1`** dù lead đề cử — vì `:231 WriteAllText` **ghi `.mfe-state.json`** (nấc-1 chạy đã +185 B, history 32→33). Thay vì chạy, tôi **tái dựng bộ trích mẫu-số bằng Python** và ra **6 N/A đúng tên · 23 scored · denom 165** khớp tuyệt đối ⇒ **verify được mà không thêm một entry rác nào vào state**. Re-dựng > re-chạy khi công cụ có tác-dụng-phụ.
- **4 instrument đã re-chạy** (`measure` · `memory-archive-gate` DRY-RUN · `crystallized-backfill` · `nhip-no-probe`) — **vượt mức ≥2** lead yêu cầu; **3/4 là read-only tuyệt đối** (0 write-verb), cái thứ 4 chứng bằng **md5 trước=sau**.
- ⚠️ **`git status` KHÔNG đủ backstop** — Stop-hook nuốt file vào commit `wal:`. Lead soi **`git log` các commit `wal:` sinh sau 03:17**. Đầu lượt tôi thấy `M .claude/governance/.session-counter.json` + `M …/sub-ring2-audit-S192.md` — **của vai khác, không phải tôi**. Cuối lượt: `M .session-counter.json` (không phải tôi) + `?? harness-audit-return.md` (**của tôi, đúng 1 file**).

### 🔴 4b — Bẫy "dir rỗng theo cwd" TÁI HIỆN kỳ này, tôi đo được và khai

Lead cảnh báo 5 vai trước đẻ dir rỗng `.claude/agent-memory/<tên-mình>/` tương-đối theo cwd. **Kỳ này nó lại xảy ra** — nhưng **KHÔNG do tôi ghi**:

```
.claude/workflows/runs/2026-08-13-S192-bookend-open/.claude/agent-memory/harness-audit/
  → mtime 2026-08-13 03:25:46 (GIỮA lượt tôi) · find -type f = 0 FILE · rỗng hoàn toàn
```

- Đây là **scaffold do harness tự tạo** (chính brief của tôi khai *"This directory already exists"*), **không phải sản phẩm của một lệnh Write nào của tôi** — tôi ghi **duy nhất** file return bằng **đường tuyệt đối**, và `find -type f` trong cây đó ra **0**.
- 🔴 **`git status` MÙ với nó** — đúng như lead nói: git **không track thư mục rỗng**, nên cây 3 tầng này **không hiện một dòng nào** trong `git status`. Muốn thấy phải dùng `find … -type d`.
- ⇒ **Backstop cho lớp lỗi này không phải `git status` mà là `find`.** Ghi lại vì đây là **lần thứ 6** cùng một hiện tượng, và **nguyên nhân là scaffold chứ không phải kỷ-luật ghi của các vai** — trách vai là trách nhầm chỗ.

