HARNESS-AUDIT: 24Đ / 7T / 4KC — re-chạy 4 instrument · 98 số đối-chứng byte-exact   <!-- chốt @END :398 (vá F-5 ctx-audit: dòng-1 kẹt placeholder do #53 cắt trước bước đóng) -->

# harness-audit S189 (L15) — nấc 3/3 bộ-ba đồng-kiểm memory · con KIỂM

> Read-only · INFORM-only · propose-only. Single-writer = lead. Vai này KHÔNG Write/Edit lên corpus
> (file này nằm trong run-folder, không phải corpus).
> **Ghi artifact-first:** mỗi claim chấm xong APPEND ngay (phiên này #53 đã trúng 7 lượt return).
> **Quy-ước đơn-vị (khai 1 lần):** `B` = byte `wc -c` · `ký-tự` = `len(read())` · dòng = `wc -l`.

## §0 — PIN GATE (nghĩa-vụ (i)) — verify TỒN-TẠI TRƯỚC khi chấm

PIN lead truyền đích-danh: `.claude/workflows/runs/2026-08-10-S189-bookstart-open/`
**CẤM tự tìm "run mới nhất"** — vai KHÔNG chạy `ls -t`/glob-newest lần nào trong lượt này.

| phép | lệnh | kết quả | verdict |
|---|---|---|---|
| run-folder tồn tại | `test -d <pin>` | EXISTS | ✅ |
| eval-return non-empty | `test -s <pin>/harness-eval-return.md` | NON-EMPTY | ✅ |
| refine-return non-empty | `test -s <pin>/harness-refine-return.md` | NON-EMPTY | ✅ |

⇒ **GATE PASS** — vai được phép chấm. (Pin missing/rỗng ⇒ luật vai bắt TRƯỢT/từ-chối, KHÔNG ĐẠT-ảo.)

### §0.1 — TUẦN-TỰ (mtime-chain) — chứng vai chạy CUỐI, không song song

```
run.md                      2026-08-10 23:51:25   1.083 B
harness-eval-return.md      2026-08-11 00:16:00  47.119 B   <- nấc 1 đóng
harness-refine-return.md    2026-08-11 00:30:53  27.322 B   <- nấc 2 đóng
harness-audit-return.md     2026-08-11 00:33:20  (file này) <- nấc 3 MỞ SAU cả hai
```
⇒ **TUẦN-TỰ HELD.** 00:16 < 00:30:53 < 00:33:20, không chồng lấn. Vai chấm **bản cuối** của cả 2 nấc,
không phải bản cũ ⇒ không rơi vào bẫy "chấm artifact không-tồn-tại mà báo ĐẠT".

### §0.2 — INPUT-DRIFT: số THẬT của eval-return (lead yêu-cầu đo lại)

| nguồn | byte | dòng |
|---|---|---|
| brief lead (và brief con ĐỀ-XUẤT nhận) | 44.267 | 474 |
| **đĩa, vai đo `wc -c -l` lúc 00:33** | **47.119** | **501** |

⇒ **Số THẬT = 47.119 B / 501 dòng.** Lệch brief **+2.852 B / +27 dòng**. Nguyên nhân cơ-học **kiểm được**:
eval ghi artifact-first, §12 ERRATUM (`harness-eval-return.md:478-501`, 24 dòng) được APPEND **sau** khi lead lấy số.
Con ĐỀ-XUẤT khai đúng con số này ở `harness-refine-return.md:13` (**47.119 / 501**) ⇒ **khớp byte-exact với phép đo của vai**.

---

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

Vai **KHÔNG tin lời-khai**. 4 instrument chạy lại tươi trong lượt này.

### §1.0 — Kiểm mã TRƯỚC khi chạy (chứng không phá cửa-sổ-đo đóng băng Mirror C1)

`grep -n "Set-Content|Out-File|Add-Content|WriteAllText|Export-"` trên cả 5 script:

| script | hit ghi | phán |
|---|---|---|
| `scripts/measure-agent-memory.ps1` | **0** | thuần stdout ⇒ chạy an toàn |
| `scripts/memory-archive-gate.ps1` | **1** — `:224` `Set-Content $strikePath` | **nằm TRONG `if ($Apply)` `:223`** (vai đọc `:222-230`); chạy KHÔNG cờ ⇒ máy tự in `[A6] DRY-RUN: strike counters NOT persisted` ⇒ 0 ghi |
| `scripts/crystallized-backfill.ps1` | **0** | DRY |
| `scripts/nhip-no-probe.ps1` | **0** | zero-mutation |
| `scripts/mfe-eval.ps1` | **1** — `:231` `WriteAllText($statePath…)` | 🔴 **CÓ GHI** ⇒ vai **CỐ Ý KHÔNG CHẠY** (xem §1.5) |

⇒ **Claim §0 của con-ĐO về provenance 5 instrument: ĐẠT** — vai xác minh độc lập bằng chính phép grep,
và xác minh thêm phần con-ĐO **không** làm: đọc tận `:223` để chứng câu lệnh ghi **bị `$Apply` gác**.

### §1.1 🔴 RE-CHẠY `measure-agent-memory.ps1` — 29 vai × 5 cột đối chứng §1 con-ĐO

**Header khớp:** `soft_cap 30720` · `autoinject_cap 25600` · **29 agent** — 3/3 ĐẠT.

**27/29 dòng `l1_hot` BYTE-EXACT.** 🔴 **2 dòng LỆCH:**

| vai | con-ĐO §1 (`:49`,`:60`) | **vai re-chạy 00:34** | delta |
|---|---|---|---|
| `tooling-auditor` | 16.912 | **16.614** | **−298** |
| `score-count-auditor` | 2.330 | **2.565** | **+235** |

**Tổng do vai tự cộng lại = 445.461.** Con-ĐO cộng ra **445.524** (`:64`).
🔴 **Vai KHÔNG chấm TRƯỢT cho con số này** — kiểm số-học: `445.461 + 298 − 235 = 445.524` ⇒
**tổng của con-ĐO ĐÚNG TUYỆT ĐỐI với bảng của chính nó**. Lệch 63 B là do **VẬT đổi**, không do cộng sai.
⇒ **claim tự-cộng 445.524 = ĐẠT** (tránh đúng bẫy F14@S162: đo trên cây LIVE rồi báo sai cho con-ĐO).

**Cột L2 — chỗ KHÔNG nấc nào soi:** con-ĐO in `tooling-auditor l2v= 89904`; vai re-chạy ra **93.802** ⇒ **+3.898 B**.
(l2i 3.672 · l2g 18.760 khớp cả hai.) Xem §2 — đây là mảnh còn thiếu của tranh chấp #22.

### §1.2 🔴 RE-CHẠY `memory-archive-gate.ps1` (DRY) — đối chứng §4 con-ĐO

Tham số máy in: cap **25600** · low-water **21760 (0.85)** · keep-floor **5** · strike-need **2** ⇒ **4/4 khớp** `:162`.

PASS 1 — 29 dòng, **2 dòng `YES`**, nguyên-văn vai vừa nhận:
```
lead-gap-auditor   27639  YES  entries 8  strike 1  after-est ~25638  WARN keep-floor hit (5); cannot auto-drain - SPLIT/condense entries by hand
ring2-audit        26652  YES  entries 7  strike 2  after-est ~24928  PROPOSE archive (strike 2>=2): move 2 lowest-value (position tiebreak) -> curate L1->L2 by hand
```
⇒ **Trích-dẫn nguyên-văn của con-ĐO `:166-167` = BYTE-EXACT, 0 chữ sai, 0 số sai.**
Dòng `[D3 value-gate] 1 value-protected …` `:168` cũng khớp nguyên-văn.

PASS 2 — `A7 GATE PASS - total pointers 429, resolved 429, failed 0` ⇒ **khớp `:176`**.
Phân rã: cicd-monitor 112 · reviewer 57 · investigator-codebase 56 · harvest-curator 48 · implementer-frontend 44 ·
implementer-backend 43 · test-specialist 33 · tooling-auditor 20 · frontend-designer 9 · lead-gap-auditor 7 · ring1-audit 0 (N/A)
⇒ **11/11 số khớp `:179` byte-exact**; vai tự cộng lại **429 ✓**.
`ring1-audit` = `_INDEX.md + 2 archive file(s) -> N/A pointers 0` ⇒ khớp `:178`.

⇒ 🔴 **KẾT LUẬN NỀN: con-ĐO KHÔNG BỊA SỐ NÀO.** Mọi ô lệch đều truy được về **thay đổi trên đĩa giữa 2 tick**,
không phải về lời khai sai. (Xem §2 để biết chính xác vật nào đổi, lúc nào, do commit nào.)

### §1.3 — RE-CHẠY `crystallized-backfill.ps1` (DRY) — **13/13 số BYTE-EXACT** vs §5 con-ĐO
```
docs/STATUS.md 240251 · docs/HANDOFF.md 220577 · ACTIVE-MARKS.md 36153
migration-todos.md 90161 · gotchas.md 122892 · agents/README.md 62300 · TOTAL 772334
cap 380000 · tok RANGE [193084 .. 257445] · measured_headroom 122555 · target 210000 · expected_backfill 122555
```
Vai tự cộng lại 6 nguồn = **772.334 ✓**. §5.2 con-ĐO tự cộng **36.053 ✓**; `24.227/36.053 = 67,2% ✓`.

### §1.4 — RE-CHẠY `nhip-no-probe.ps1` — **dòng máy TRÙNG TỪNG KÝ-TỰ** với `:125` con-ĐO
```
NHIP-NO: kiem light 3/6 deep 1/1 OVERDUE:deep | tran-bo-nho 2 over-cap l2idx 0 over | run-chua-gom 1 | pull-cach 1 ngay | so-yc treo 6 / nhac2+ 3 (muc 22, gop 5 dong nhac-lai)
```
8/8 vế khớp, kể cả đuôi `(muc 22, gop 5 dong nhac-lai)` mà con-ĐO tố lead cắt mất.

### §1.5 — Vai CỐ Ý KHÔNG chạy `mfe-eval.ps1` (khai thẳng, không giấu)
Đây là instrument **DUY NHẤT có ghi** (`:231`). Con-ĐO chạy nó và để lại vết thứ 31 trong `.mfe-state.json`.
Vai **không chạy** ⇒ **§6.2 + §7 (MFE) của con-ĐO = KHÔNG CHẤM**, KHÔNG phải ĐẠT.
🔴 Lý do: chạy để "kiểm" sẽ **tự tay đẩy anchor lên bản ghi thứ 32** — tức **phá chính cửa-sổ-đo** vai được giao canh,
và làm trục A5 (anchor bất động) dài thêm 1 nhịp **do con KIỂM gây ra**. Vai chọn KHÔNG CHẤM thay vì ĐẠT-ảo.

---

## §2 🔴 PHÁN TRANH CHẤP #22 — con-ĐO nói "lỗi THƯỚC", con ĐỀ-XUẤT nói "VẬT đổi"

### §2.1 — Ba số, ba mốc thời-gian, TÁI DỰNG ĐƯỢC

| thời-điểm | phép | `tooling-auditor/MEMORY.md` | nguồn |
|---|---|---|---|
| 00:02:40 (commit `b1781712`) | `git show b1781712:…` | **16.854** | git blob |
| ~00:03 (trước 00:03:37) | `measure-agent-memory.ps1` — con-ĐO §1 | **16.912** | `:49` |
| 00:04:07 | `stat` mtime — ghi lần 2 | **16.614** | đĩa |
| ~00:04 | `memory-archive-gate.ps1` — con-ĐO §4 | **16.614** | `:167`-vùng |
| **00:34 (VAI RE-CHẠY)** | **`measure-agent-memory.ps1` — ĐÚNG CÁI INSTRUMENT BỊ CÁO** | **16.614** | §1.1 |
| 00:34 | `stat` ×3 liên tiếp | **16.614** | đĩa |

**Vết ghi cơ-học, có SHA:** commit `c610ed0d` (00:04:45, Stop-hook `wal: flush 20260811T0004`) chứa
`--numstat`: `MEMORY.md 18 ins / 11 del` **+** `archive/2026-08.md 6 ins / 0 del`.
mtime: `archive/2026-08.md` **00:03:37** → `MEMORY.md` **00:04:07**.

### §2.2 — PHÉP FALSIFY QUYẾT-ĐỊNH (thứ con ĐỀ-XUẤT KHÔNG làm)

Con ĐỀ-XUẤT tự khai `harness-refine-return.md:196`: *"Vai **KHÔNG chạy lại instrument của nấc-1**"* — nó chỉ dùng
`wc -c` · `stat` · `gate`. ⇒ Nó kết luận đúng **nhưng chưa hề thử bị-cáo**. Vai này thử:

> **Giả-thuyết cần phá:** *"`measure-agent-memory.ps1` in sai số / lệch chuẩn so với `memory-archive-gate.ps1`."*
> **Phép:** chạy lại **chính** `measure-agent-memory.ps1` trên **chính** file đó. Nếu thước hỏng ⇒ phải ra **16.912** lần nữa (hoặc một số ≠ gate).
> **Kết quả: ra `16.614` — TRÙNG TUYỆT ĐỐI với `gate`.** ⇒ **Giả-thuyết "lỗi thước" BROKE.**

Đường thứ 2 (độc lập, cơ-học): git blob `16.854` → đĩa `16.912` → git blob `16.614`. Số `16.912` là **trạng-thái quá-độ
KHÔNG BAO GIỜ ĐƯỢC COMMIT** (nằm lọt giữa 2 nhịp Stop-hook 00:02:40 và 00:04:45) ⇒ nó **có thật**, chỉ là git không tái dựng được.

### §2.3 🔴 CÂU PHÁN DỨT KHOÁT (lead dẫn lại cho anh)

> **Thước KHÔNG hỏng. Hai instrument đo cùng một file ra cùng một số khi đo cùng một lúc — vai KIỂM chạy lại đúng cái instrument bị cáo và nó ra `16.614`, khớp `memory-archive-gate` tới từng byte. Cái đổi là VẬT: `tooling-auditor` ghi diary của nó lúc 00:03:37 và 00:04:07, đúng vào khe giữa hai phép đo của con-ĐO (SHA `c610ed0d`).**

- **Con ĐỀ-XUẤT ĐÚNG** ở kết luận (Đ1 ĐẠT) — nhưng bằng-chứng của nó **thiếu một chân**: nó chưa từng thử bị-cáo. Vai này bù chân đó.
- **Con-ĐO SAI Ở NHÃN, ĐÚNG Ở RUỘT:** dòng `#22` bảng §9 `:380` dán nhãn `độ ổn-định của THƯỚC — REGRESSION` ⇒ **TRƯỢT**.
  Nhưng chính nó viết ở §10(3) `:426`: *"**Cả hai instrument đều đúng**; cái sai là giả-định cửa-sổ đo đóng băng"* ⇒ **ĐẠT**.
  ⇒ **Con-ĐO tự mâu-thuẫn giữa BẢNG và PROSE trong cùng một file.** Phần ai đọc bảng (lead, anh) là phần SAI.
- **Lớp đúng của #22 = `cửa-sổ-đo không đóng băng`, KHÔNG phải `thước hỏng`.** Khác biệt không phải chữ nghĩa: nhãn "thước hỏng"
  biện minh cho việc **vứt toàn bộ số của lượt**; nhãn đúng chỉ buộc **đóng dấu thời-điểm lên mỗi bảng** — và có thuốc.

### §2.4 🔴 MẢNH CẢ HAI NẤC ĐỀU BỎ SÓT — thao tác đó là DRAIN, không phải "ghi thêm" cũng không phải "compaction"

Cả 2 nấc chỉ nhìn **cột L1**. Vai đọc cột L2 của **cùng dòng đó**:

| cột | con-ĐO §1 `:49` | vai re-chạy | delta |
|---|---|---|---|
| `l1_hot` | 16.912 | 16.614 | **−298** |
| **`l2_verbatim`** | **89.904** | **93.802** | **+3.898** |
| `l2_index` / `l2_gist` | 3.672 / 18.760 | 3.672 / 18.760 | 0 / 0 |

⇒ Cùng một thao-tác: **L1 co 298 B, L2 nở 3.898 B** — đó là **curate/drain L1→L2**, đúng thứ tự cơ-học
(`archive/2026-08.md` ghi **trước** lúc 00:03:37, `MEMORY.md` ghi **sau** lúc 00:04:07).
- ⇒ con-ĐO `:191` *"đang **ghi diary** đồng thời"* — **ĐÚNG** (vai đó ghi thật, 2 file).
- ⇒ con ĐỀ-XUẤT Đ2 *"**CO LẠI**, không phải append… tín-hiệu **compaction/ghi-đè**"* — **đúng nửa, sai nửa**:
  đúng rằng L1 bị **ghi-đè** (18 ins/11 del), **sai** khi gọi đó là compaction — **3.898 B đã được APPEND, chỉ là append xuống L2.**

---

## §3 🔴 CHẤM E2 — CLAIM NẶNG NHẤT PHIÊN: đơn thuốc của máy có xoá thước của vai KIỂM không?

Vai **không tin lập-luận của ai** — vai **tái-dựng lại toàn bộ số học của máy** rồi mới phán.

### §3.1 — Tái-dựng máy tới mức in ra ĐÚNG con số của nó

Đọc mã: `:114 $bytes = (Get-Item $mem).Length` · `:116 $lines = Get-Content $mem` · `:153` entry = `^#{2,3}\s`
· `:178 $floorStart = $logCount - $keepFloor` · `:182-188` walk `k = 0 .. floorStart-1`, `:183` hard-skip value-protected
· `:186 $afterEst = $bytes - $movedBytes` · `:163 $b += ($lines[$li].Length + 2)  # +2 ~ CRLF est`.

🔴 **`:116` `Get-Content` KHÔNG có `-Encoding UTF8`** ⇒ PS 5.1 đọc ANSI ⇒ mỗi **byte** UTF-8 thành 1 char
⇒ `.Length` ≈ **byte** của dòng, rồi `+2` cho CRLF — nhưng cả 2 file đều **thuần LF** (`od -c` xác nhận, 0 cặp CRLF).
⇒ **máy phóng đại phần drain đúng +1 B mỗi dòng.**

**Kiểm bằng cách in ra số của máy:**

| vai | REAL byte pool drain | số dòng | +1/dòng | = movedBytes máy | `$bytes` − movedBytes | **máy in** |
|---|---|---|---|---|---|---|
| `ring2-audit` | 1.716 | 8 | +8 | **1.724** | 26.652 − 1.724 = **24.928** | **~24928** ✅ |
| `lead-gap-auditor` | 1.983 | 18 | +18 | **2.001** | 27.639 − 2.001 = **25.638** | **~25638** ✅ |

⇒ **Tái-dựng khớp TỪNG BYTE cả 2 dòng** ⇒ vai đã nắm đúng cơ-chế, phán tiếp được.

### §3.2 — CẤU TRÚC `ring2-audit/MEMORY.md` (26.652 B / 63 dòng) — đo, không suy

7 heading `^## ` tại dòng **24, 28, 32, 35, 40, 44, 49**. `keepFloor = 5` ⇒ `floorStart = 7 − 5 = **2**` ⇒ **pool drain = entry idx 0 và 1**.

| idx | dòng | tên entry | REAL B | value-protected? | trong pool drain? |
|---|---|---|---|---|---|
| **0** | 24 | **`## 🎯 Role baseline`** | 744 | **False** (0/10 pattern) | 🔴 **CÓ** |
| **1** | 28 | **`## 📅 Runs`** | 972 | **False** | 🔴 **CÓ** |
| 2 | 32 | `## 🔄 Curate trigger` | 147 | False | không (keep-floor) |
| 3 | 35 | `## S151` | 533 | False | không |
| 4 | 40 | `## S151-deep` | 372 | **True** (`guard` @`:42`) | không |
| 5 | 44 | `## S152` | 1.224 | False | không |
| 6 | 49 | `## S159` | 6.652 | False | không (keep-floor) |

**Bằng-chứng đóng từ chính máy:** máy in `move **2** lowest-value`. Nếu `Role baseline` **hoặc** `Runs` được value-protect thì
`:183 continue` sẽ bỏ nó ⇒ `moveCount` phải là **1** hoặc **0**. Máy in **2** ⇒ **cả hai đều KHÔNG được bảo vệ và cả hai ĐỀU nằm trong move-set.**

### §3.3 🔴 TRẢ LỜI THẲNG 2 CÂU LEAD HỎI

**(a) Thi hành đơn thuốc nguyên-văn có xoá `## 🎯 Role baseline` không? → CÓ. Chắc chắn. Chứng ở mức máy, không phải suy luận.**
- Move-set = đúng {`🎯 Role baseline`, `📅 Runs`} = 1.716 B.
- `Role baseline` là **khối hợp-đồng vai** — chính diary `ring2-audit/MEMORY.md:60` (bản ghi S182) tự viết:
  *"Role-baseline auto-inject đầu mỗi spawn = **nạp thước thiếu vạch TRƯỚC khi chấm**"* (vai đọc dòng 60, **trích khớp nguyên-văn** con ĐỀ-XUẤT).
- Heading `:24` tự khai verbatim 8.637 B **đã** xuống `archive/2026-08.md`; thứ còn ở L1 là **bản TÓM** = thước rút gọn.
  Drain nốt = **L1 của vai KIỂM không còn hợp-đồng nào**; nội-dung không bị huỷ (còn ở archive) nhưng **không còn được auto-inject**.
- ⇒ **E2 điểm 2 = ĐẠT**, và đạt ở mức mạnh hơn lập-luận của con ĐỀ-XUẤT (nó suy từ ngữ-nghĩa `keep_floor`; vai chứng bằng `floorStart=2` ∧ `moveCount=2` ∧ tái-dựng `24.928` byte-exact).

**(b) Có xoá bản ghi mới nhất (S186) không? → KHÔNG. Máy KHÔNG đụng tới nó.**
- `## S159` là **entry idx 6 = entry CUỐI** ⇒ nằm trọn trong `keep_floor 5` (giữ idx 2..6) ⇒ **không bao giờ vào move-set**.
- Sự-kiện con ĐỀ-XUẤT nêu là **ĐÚNG**: span `## S159` (dòng 49→63) chứa **S180 (`:58`) · S182 (`:60`) · S169 (`:62`) · S186 (`:63`)**,
  và S186 ghi ngày **2026-08-10** — vai đọc tận nơi, **4/4 tên và thứ-tự khớp con ĐỀ-XUẤT**.
- 🔴 **Nhưng suy-luận gắn vào thì TRƯỢT:** con ĐỀ-XUẤT xếp việc này thành lý-do thứ 3 để nói *"thi hành `PROPOSE` nguyên-văn sẽ gây hại"*.
  `PROPOSE` **không chạm** `S159`. Rủi-ro S186 là rủi-ro của **một người drain BẰNG TAY theo nhãn span** — thao-tác **khác**, không phải đơn thuốc của máy.
  ⇒ **đúng sự-kiện, gắn nhầm kết-luận.**

**⇒ CHỐT CHO LEAD: ĐỪNG thi hành `PROPOSE archive` nguyên-văn cho `ring2-audit`. Lý do đứng vững là (a), không phải (b).**

### §3.4 — 3 phát hiện E2 **không nấc nào có** (vai tự dựng)

1. 🔴 **Drain có làm được cũng chỉ là mỹ-phẩm.** Move-set REAL = **1.716 B = 6,4%** file ⇒ về **24.936 B**: dưới cap 25.600 nhưng
   **vẫn trên `low_watermark` 21.760 tới 3.176 B**. Vòng lặp `:187` thoát vì **cạn pool**, không vì chạm mức nước.
   ⇒ `ring2` sẽ **over-cap lại gần như tức thì** — đây là **cơ-chế** đằng sau lập-luận-theo-lịch-sử "attempt-2 sẽ tái diễn" của con ĐỀ-XUẤT.
2. 🔴 **60,1% file là vùng máy KHÔNG ĐỤNG ĐƯỢC, không phải vùng máy KHÔNG THẤY.** Đo: **16.008 B trên heading `##` đầu (dòng 24)** — khớp con ĐỀ-XUẤT byte-exact.
   Nhưng `:114 $bytes` = **trọn 26.652** ⇒ máy **có** cân đủ khối lượng; nó chỉ không thể **MOVE** phần không nằm trong span heading nào.
   ⇒ chữ *"máy không nhìn thấy"* của con ĐỀ-XUẤT **sai cơ-chế**; phát biểu đúng: ***"16.008 B nằm ngoài mọi entry ⇒ bất-khả-drain ở mọi mức strike"***.
3. 🔴 **Dòng trấn-an `[D3 value-gate]` là RỖNG trên chính ca này.** Máy in *"1 value-protected logical entry **HARD-SKIPPED from the drain set**"*.
   Vai truy: entry được bảo vệ là **idx 4 (`## S151-deep`, token `guard` ở `:42`)** — mà idx 4 **nằm trong keep-floor, chưa bao giờ là ứng-viên drain**.
   Vòng đếm `:210-211` chạy trên **toàn bộ** `logCount`, không phải trên pool drain. ⇒ **câu "đã hard-skip khỏi drain set" đọc thành "value-gate đã che chở move-set" trong khi move-set KHÔNG có gì được che chở.**
   Đây đúng lớp *"vắng-mặt trông giống ổn"* — **giáng xuống chính cái GUARD**.
4. 🔸 **Máy ĐÚNG LUẬT, spec mới là chỗ hở.** 10 pattern `value_protect` (`gotcha #`·`anti-pattern`·`recurring`·`lost-update`·`race`·`bai hoc`·`lesson`·`guard`·`root-cause`·`silent-fail`)
   **0/10 phủ khối hợp-đồng-vai** ⇒ máy rủ drain `Role baseline` là **thi hành đúng spec**. Con ĐỀ-XUẤT gọi *"máy CHĨA SAI CHỖ"* — hàm ý máy lỗi; đúng phải là **spec thiếu vạch**.
   🔴 Vai **KHÔNG đề-xuất thêm pattern** — sửa `memory-budget.json` = quyền cấp ngân-sách của owner (`reinject-ledger.md:5`). Nêu để owner quyết.

### §3.5 — Kiểm CHỐT-DỪNG `lead-gap-auditor`: phép tính "bất khả về số học"

Con ĐỀ-XUẤT E1: *"kể cả drain hết phần được phép, 25.638 > 25.600 ⇒ **thiếu 38 B** ⇒ bất khả về số học."*

| | số | nguồn |
|---|---|---|
| `$bytes` | 27.639 | máy + `wc -c` |
| pool drain = idx 0,1,2 (`floorStart = 8−5 = 3`), **0/8 entry value-protected** | | |
| movedBytes **máy** (đã cộng dư +1/dòng × 18 dòng) | 2.001 | tái-dựng khớp |
| `after-est` **máy** | **25.638** | máy in |
| **movedBytes THẬT (UTF-8, LF)** | **1.983** | vai đo |
| **after-drain THẬT** | **25.656** | 27.639 − 1.983 |

- ⇒ **KẾT LUẬN ĐẠT:** drain hết phần được phép **vẫn trên cap** ⇒ archive-theo-mức **bất khả** ⇒ chốt-dừng E1 đứng vững.
- ⇒ **CON SỐ TRƯỢT:** thiếu **56 B**, không phải 38 B. Con ĐỀ-XUẤT **chép thẳng `after-est` của máy mà không tái-dựng** — đúng bẫy xác-minh-vòng-tròn.
  🔸 Sai số lệch **hướng an-toàn** (thực tế **tệ hơn** máy nói) ⇒ kết luận **mạnh thêm**, không yếu đi.
- ⇒ **TRƯỢT thêm một vế cơ-chế:** con ĐỀ-XUẤT viết *"`after-est ~25.638` được tính trên **ảnh chụp thiếu 57%**"*. **Không đúng** — `:114 $bytes` là **trọn file 27.639**, đã gồm cả 15.890 B đó.
  Nguyên-nhân `after-est` lạc quan là `:163 +2 ~ CRLF est` trên file thuần-LF, **không phải** vùng-mù 57%.
  🔸 Số nền của nó thì **byte-exact**: vai đo **15.890 B = 57,5%**, heading `##` đầu ở **dòng 23** — khớp cả 3.

---

## §4 — CHẤM 5 ĐÍNH-CHÍNH con ĐỀ-XUẤT gửi ngược con-ĐO

| # | claim | verdict | bằng-chứng vai TỰ dựng |
|---|---|---|---|
| **Đ1** | #22 nhãn "lỗi THƯỚC" sai lớp | ✅ **ĐẠT** | §2 — vai re-chạy chính instrument bị cáo ⇒ **16.614** khớp gate. Con ĐỀ-XUẤT đúng, dù chân-kiềng thiếu (nó tự khai `:196` không chạy lại instrument) |
| **Đ2a** | "−298 B = **CO LẠI**, không phải append" (trên L1) | ✅ **ĐẠT** | `git show c610ed0d --numstat` = `18 ins / 11 del` trên `MEMORY.md` ⇒ **ghi-đè**, không phải nối đuôi |
| **Đ2b** | ⇒ nên KHÔNG phải "đang ghi diary" | ❌ **TRƯỢT** | con-ĐO `:191` viết **"đang ghi diary đồng thời"** — nó **chưa từng dùng chữ "append"**. Git chứng vai đó **ghi thật, 2 file, đúng trong khe đo** ⇒ đính-chính đánh vào chữ con-ĐO không nói |
| **Đ2c** | cơ-chế = "compaction/ghi-đè" | ❌ **TRƯỢT** | thật là **DRAIN L1→L2**: `l2v` **89.904 → 93.802 = +3.898 B** (§2.4). Có append — chỉ là append **xuống L2**. Cả 2 nấc đều bỏ sót cột này |
| **Đ3a** | `score-counter:4` và `tooling-auditor:7` đều **không có `Write`** | ✅ **ĐẠT** | đọc đúng 2 dòng đó: `:4 tools: Read, Grep, Glob, Bash` · `:7 tools: [Read, Grep, Glob, Bash, mcp__…]` — **số dòng chính xác, 0/2 có Write** |
| **Đ3b** | "toàn roster **25/30** không có Write ⇒ **83%**" | ❌ **TRƯỢT** | đo lại: `.claude/agents/*.md` = 30 file **nhưng 1 file là `README.md`, KHÔNG phải vai** (đúng "bẫy glob" mà diary `tooling-auditor` cảnh báo, và con-ĐO đã tôn trọng khi lấy mẫu-số **29**). Thật: **29 vai · 5 CÓ Write** (`frontend-designer`·`implementer-backend`·`implementer-frontend`·`office-document`·`test-specialist`) · **24 KHÔNG** ⇒ **24/29 = 82,8%**. Con ĐỀ-XUẤT **lệch cả tử lẫn mẫu (+1/+1)** nên % vẫn ~83 — **đúng nhờ hai lỗi triệt tiêu nhau**; và nó **âm thầm đổi mẫu-số 29→30** giữa báo cáo trong khi mọi số khác của cả 2 nấc dùng 29 |
| **Đ3c** | ⇒ trục #37 đo năng-lực đa-số roster không có ⇒ mẫu-số cần khai lại | ✅ **ĐẠT** | đứng nguyên ở **24/29** |
| **Đ4** | máy "11 sub có archive" ↔ đĩa **14 vai có archive NỘI-DUNG** (+1 dir rỗng = 15) | ✅ **ĐẠT byte-exact** | vai liệt 15 dir: 14 có nội-dung, `investigator-api/archive/` = **0 file / 0 B**. Gate PASS 2 in đúng **11** (chỉ vai có `_INDEX.md`). Vô-hình = `ctx-audit` 11.521 + `lead-stale-auditor` 8.581 + `ring2-audit` 8.771 = **28.873 ✓**; cộng `ring1` 6.761 = **35.634 ✓** — **cả 2 số của A1 khớp tuyệt đối** |
| **Đ5** | INPUT eval-return: brief `44.267/474` ↔ đĩa **47.119/501** | ✅ **ĐẠT byte-exact** | §0.2 — vai `wc -c -l` độc lập ra **47.119 B / 501 dòng**. Nguyên-nhân: §12 ERRATUM (24 dòng) APPEND sau khi lead lấy số |

🔸 **Cite-drift nhỏ (nêu, không tính TRƯỢT):** con ĐỀ-XUẤT neo cơ-chế gate ở `memory-archive-gate.ps1:249`; trên đĩa
`$indexPath = Join-Path …` ở **`:247`** và `if (-not (Test-Path $indexPath)) { continue }` ở **`:248`**. **Chữ trích đúng nguyên-văn, số dòng lệch 1.**

---

## §5 — FALSIFY-LOG (nghĩa-vụ (iii)) — mỗi phép ghi **phép thử cụ-thể**, không chỉ kết-luận

| # | giả-thuyết vai THỬ PHÁ | phép thử | kết |
|---|---|---|---|
| F1 | *"`measure-agent-memory.ps1` là thước hỏng"* | chạy lại **chính nó** trên **chính file** đó | 🔴 **BROKE** — ra 16.614 = khớp `gate`. Thước sạch |
| F2 | *"con-ĐO bịa/chép số §1"* | re-chạy measure, so **29 vai × 5 cột** | **HELD ngược** — 27/29 byte-exact; 2 ô lệch truy được về `c610ed0d`/`9694ae9a`. **0 số bịa** |
| F3 | *"con-ĐO cộng sai TỔNG 445.524"* | tự cộng ra 445.461, rồi hoàn nguyên `+298 −235` | **HELD** — tổng con-ĐO đúng tuyệt đối **với bảng của chính nó** |
| F4 | *"`Role baseline` được `value_protect` che, con ĐỀ-XUẤT báo động giả"* | duyệt 10 pattern trên trọn span idx 0 & 1 **+** đối chiếu `moveCount` máy in | 🔴 **BROKE** — 0/10 khớp, máy in `move **2**` ⇒ **cả 2 vào move-set**. Báo động THẬT |
| F5 | *"đơn thuốc của máy sẽ xoá bản ghi mới nhất S186"* | định vị `## S159` = idx 6 vs `floorStart = 2` | 🔴 **BROKE** — S159 trong keep-floor, **máy không đụng**. Sự-kiện đúng, kết-luận gắn sai |
| F6 | *"`after-est` của máy đáng tin, khỏi tái-dựng"* | dựng lại UTF-8 thật vs `.Length+2` | 🔴 **BROKE** — máy lạc quan **18 B** (lead-gap) / **8 B** (ring2). Con số 38 B của E1 phải là **56 B** |
| F7 | *"dòng `[D3 value-gate]` chứng move-set đã được che chở"* | truy entry được bảo vệ là idx nào vs `floorStart` | 🔴 **BROKE** — entry đó là idx 4, **chưa bao giờ là ứng-viên**. Câu trấn-an RỖNG trên ca này |
| F8 | *"con ĐỀ-XUẤT nói 25/30 — chắc đúng vì nó có trích 2 dòng thật"* | đếm lại `tools:` trọn 30 file, tách `README.md` | 🔴 **BROKE** — thật **24/29**. 2 dòng trích thì đúng, con số roster thì không |
| F9 | *"gate DRY vẫn có thể ghi lén `.archive-strikes.json`"* | đọc `:222-230` + `stat` file sau 2 lần chạy | **HELD** — lệnh ghi nằm trong `if ($Apply)`; mtime giữ nguyên **2026-08-07 11:10** |
| F10 | *"đĩa lệch git 63 B ⇒ có ai sửa lén ngoài commit"* | `grep -c $'\r'` = 0 ⇒ tưởng không CRLF; **đổi thước** sang `od -c` | 🔴 **BROKE giả-thuyết, VÀ bắt được thước hỏng thật**: `od` cho thấy `\r\n` rõ ràng — **`grep -c $'\r'` trong Git Bash là thước ÂM-GIẢ**. 63 B = 63 dòng CRLF, đúng lớp `i/lf w/crlf` mà `.gitattributes` tự khai 188 file |
| F11 | *"cửa-sổ đo đang đóng băng như lead nói"* | `git log` các commit `wal:` trong khe + so `measure` 2 lần | 🔴 **BROKE** — xem §6 |

---

## §6 🔴 SOÁT CONTAINMENT — và một đính-chính **gửi ngược LEAD**

Lead brief: *"cửa-sổ đo (Mirror C1) vẫn đang đóng băng… **agent-memory đều chưa chạm**."*

**Vai soát bằng `git log` các commit `wal:` (không chỉ working-tree, đúng bài E-2 của con-ĐO):**

| commit | giờ | file **agent-memory** bị nuốt | byte |
|---|---|---|---|
| `c610ed0d` | 00:04:45 | `tooling-auditor/MEMORY.md` (18 ins/11 del) **+** `tooling-auditor/archive/2026-08.md` (6 ins) | L1 **−298** · L2 **+3.898** |
| `9694ae9a` | 00:13:29 | `score-count-auditor/MEMORY.md` (+1 dòng) | **+235** (2.330 → 2.565) |

⇒ 🔴 **Vế "agent-memory chưa chạm" = TRƯỢT.** **2 file corpus đã đổi TRONG cửa-sổ**, và đó **chính xác là 2 ô** khiến bảng §1
của con-ĐO lệch khi vai re-chạy. Đóng-băng đúng cho **6 nguồn hotload của lead** (crystallized re-chạy ra **772.334 B y hệt**),
**không** đúng cho corpus agent-memory. **Hai mặt này phải khai riêng, không gộp thành một câu "chưa chạm".**

**Vết ghi của CHÍNH VAI NÀY (tự khai):**
- `git status --porcelain` sau lượt: `?? …/harness-audit-return.md` (file này) + ` M .claude/governance/.session-counter.json` (**không phải của vai** — vai 0 chạm).
- **0** chạm `.claude/agent-memory/**` · **0** chạm `memory-budget.json` · **0** chạy instrument có ghi (`mfe-eval.ps1` KHÔNG chạy, §1.5).
- 4 instrument đã chạy: 3 cái 0-write theo grep, 1 cái (`gate`) tự in `DRY-RUN: strike counters NOT persisted` + mtime `.archive-strikes.json` **không đổi** (vẫn 08-07 11:10) ⇒ **kiểm chứ không tin lời khai**.
- 🔴 **read-only của vai = chặn-THIẾU-tool, KHÔNG phải sandbox** — vai còn `Bash` = kênh-ghi-mở. Backstop THẬT vẫn là lead soát `git log`.

---

## §7 — BẢNG VERDICT PER-CLAIM (nghĩa-vụ (ii)) — **KHÔNG gộp verdict-tổng che claim TRƯỢT lẻ**

### 7A — claim của **con ĐO** (15)

| # | claim | neo | verdict |
|---|---|---|---|
| D1 | §0 provenance 5 instrument (measure/gate/crystallized/nhip-no 0-ghi · mfe ghi 1 file) | `:12-16` | ✅ **ĐẠT** |
| D2 | §1 bảng `l1_hot` 29 vai + header 3 tham-số | `:27-61` | ✅ **ĐẠT** (27/29 byte-exact; 2 ô stale-tại-tick, **không sai**) |
| D3 | §1 tự-cộng TỔNG **445.524** | `:64` | ✅ **ĐẠT** (hoàn nguyên khớp) |
| D4 | §1-bis ký-tự `lead-gap 24.118` · `ring2 23.078` | `:74-75` | ✅ **ĐẠT** byte-exact |
| D5 | §3 dòng `NHIP-NO` nguyên-văn 8 vế | `:125` | ✅ **ĐẠT** trùng từng ký-tự |
| D6 | §3-bis `l2_index` TỔNG `cicd-monitor` **23.588** | `:150` | ✅ **ĐẠT** |
| D7 | §4 tham-số gate 4/4 + **2 dòng `YES` nguyên-văn** | `:162,166-168` | ✅ **ĐẠT** byte-exact |
| D8 | §4 A7 **429/429 failed 0** + phân rã 11 số + tự cộng | `:176-180` | ✅ **ĐẠT** byte-exact |
| D9 | §4-bis + #22 **nhãn "độ ổn-định của THƯỚC — REGRESSION"** | `:380` | ❌ **TRƯỢT** — §2 |
| D10 | §5 crystallized 13 số + §5.2 tự cộng 36.053 / HANDOFF 67,2% | `:200-216,255` | ✅ **ĐẠT** byte-exact |
| D11 | §6.1 `.archive-strikes.json` 738 B · stale 08-07 11:10 · **26/29** · thiếu đúng 3 vai · vênh `ring2 1↔2` `inv-cb 1↔0` | `:267-271` | ✅ **ĐẠT** 5/5 vế |
| D12 | §9 meta-count **13+11+14 = 38**, phủ 1..38 **không trùng, không sót** | `:399-400` | ✅ **ĐẠT** — vai duyệt từng chỉ số |
| D13 | §12 E-1 `score-count-auditor` trôi trong lượt | `:484-485` | ✅ **ĐẠT** (measure: 2.330 → **2.565**) |
| D14 | §6.2 + §7 **MFE** (anchor 25 · per-role 163/165 · FIT) | `:274-328` | ⚪ **KHÔNG CHẤM** — vai cố ý không chạy instrument-có-ghi (§1.5) |
| D15 | §8 độ-giữ (control-dương `S1` 29/29 · nhãn S189) | `:337-349` | ⚪ **KHÔNG CHẤM** — không đo lại grep-nhãn |

### 7B — claim của **con ĐỀ-XUẤT** (16)

| # | claim | neo | verdict |
|---|---|---|---|
| R1 | §0 TICK 6 vật (27.639·26.652·24.975·24.473·16.614·21.308) | `:19-24` | ✅ **ĐẠT** 6/6 byte-exact |
| R2 | Đ5 INPUT **47.119 B / 501 dòng** | `:13,187` | ✅ **ĐẠT** byte-exact |
| R3 | Đ1 thước không hỏng, VẬT đổi | `:183` | ✅ **ĐẠT** (chân-kiềng thiếu, vai bù — §2.2) |
| R4 | Đ2a −298 B = ghi-đè trên L1 | `:184` | ✅ **ĐẠT** (`18 ins/11 del`) |
| R5 | Đ2b "không phải đang-ghi-diary" | `:184` | ❌ **TRƯỢT** — con-ĐO nói "ghi", không nói "append" |
| R6 | Đ2c cơ-chế = "compaction/ghi-đè" | `:184` | ❌ **TRƯỢT** — thật là **DRAIN L1→L2**, `l2v +3.898 B` |
| R7 | Đ3a 2 dòng `tools:` `:4` / `:7` đều không có Write | `:136-137` | ✅ **ĐẠT** byte-exact |
| R8 | Đ3b **"25/30 = 83% roster"** | `:141` | ❌ **TRƯỢT** — thật **24/29 = 82,8%**; đếm `README.md` làm vai + đổi lén mẫu-số 29→30 |
| R9 | Đ3c mẫu-số trục #37 cần khai lại | `:141,185` | ✅ **ĐẠT** |
| R10 | Đ4 **14 vai** archive nội-dung · **28.873 B** · **35.634 B** | `:72-73,186` | ✅ **ĐẠT** byte-exact |
| R11 | A1 cơ-chế `continue` bỏ qua vai không `_INDEX` | `:53-60` | ✅ **ĐẠT** nội-dung (cite `:249` → thật `:248`) |
| R12 | E1 **kết luận** archive bất-khả (drain hết vẫn > cap) | `:114` | ✅ **ĐẠT** |
| R13 | E1 **con số** "thiếu **38 B**" | `:114` | ❌ **TRƯỢT** — thật **56 B** (chép `after-est` không tái-dựng) |
| R14 | E1 "`after-est` tính trên **ảnh chụp thiếu 57%**" | `:115` | ❌ **TRƯỢT** cơ-chế (`$bytes` = trọn file); 🔸 số nền 15.890 / 57,5% / dòng 23 **ĐẠT byte-exact** |
| R15 | **E2 điểm 1-2** — 16.008 B trên `##` đầu (dòng 24) · pool drain = **`Role baseline` + `Runs`** | `:123-124` | ✅ **ĐẠT** — chứng ở **mức máy** (`floorStart=2` ∧ `moveCount=2` ∧ tái-dựng `24.928` byte-exact) |
| R16 | **E2 điểm 3** — span `S159` chứa S186 ⇒ *"thi hành `PROPOSE` nguyên-văn sẽ xoá bản ghi mới nhất"* | `:125` | ❌ **TRƯỢT** ở suy-luận (S159 idx 6 ∈ keep-floor, máy **không đụng**); 🔸 **sự-kiện ĐẠT byte-exact** (S180·S182·S169·S186, đúng thứ tự) |
| R17 | E3 sổ strike ghi 1 ↔ máy in 2 | `:129` | ✅ **ĐẠT** |
| R18 | B12 use⟂mention `grep -c "5 class"` = 3 hit đều MENTION | `:171` | ⚪ **KHÔNG CHẤM** — không đo lại |

### 7C — claim của **LEAD** trong brief (2)

| # | claim | verdict |
|---|---|---|
| L1 | 3 mục lead tự đo khớp: `harvest-curator` **21.308** · `reviewer` **24.473** · `measured` 30 row/`ef1d4fbb` | ✅ **ĐẠT** 2/2 số đo lại được (21.308 · 24.473 khớp measure). 🔸 vế "**30 row**" — measure in **29 agent**; vai **KHÔNG CHẤM** row-count của khối `measured` (không đọc budget rows), nhưng **nêu lệch 29↔30 để lead tự soát** |
| L2 | "cửa-sổ đo đóng băng — **agent-memory đều chưa chạm**" | ❌ **TRƯỢT** — §6: `c610ed0d` + `9694ae9a` đổi **2 file corpus** trong cửa-sổ |

---

### END — `HARNESS-AUDIT: 24Đ / 7T / 4KC — re-chạy 4 instrument · 98 số đối-chứng byte-exact`

🔴 **KHÔNG có verdict-tổng gộp.** 7 TRƯỢT nằm riêng từng dòng: D9 · R5 · R6 · R8 · R13 · R14 · R16 (+ L2 gửi ngược lead).
⚪ 4 KHÔNG CHẤM (D14 · D15 · R18 · vế row-count của L1) = **cận-dưới có khai**, KHÔNG được đọc thành "sạch".
🔸 **Nền chung, nói thẳng:** cả 2 nấc **không bịa số nào**. Mọi TRƯỢT đều là **nhãn / cơ-chế / mẫu-số**, không phải bịa dữ-liệu.

