# harness-audit — trio nấc 3/3 (con KIỂM) — S186

> Lượt-trả-1 dính **#53** (31 tool-call); mẩu garble **chứa 2 finding** (thước bold-marker hỏng + neo `:97` không phải `:98`) ⇒ giữ. Dưới = lượt-trả-2.

**VERDICT: `HARNESS-AUDIT: 34Đ / 9T / 3KC`** — **~90 ô đối chứng, 87 khớp byte-exact**; 3 lệch **đều truy được cơ-chế**.

## 🔴 `DON-VI-PHAN-XU` — **KÝ-TỰ. 2 vai bị cắt thật.** con-ĐO SAI, con-ĐỀ-XUẤT ĐÚNG

`reviewer` **27.013 ch = 108,1%** · `harvest-curator` **25.348 ch = 101,4%**.
**Nền chứng 3 chân:**
1. Chỉ **char/1024** rơi vào cửa sổ render "24.8KB"; **3 cách kia trượt**.
2. `reviewer/MEMORY.md:97` phát biểu thẳng: *"hook đếm **KÝ TỰ** còn `wc -c` đếm **BYTE** — tiếng Việt đa-byte ⇒ 2 số lệch nhau là bình thường"*.
3. 🔑 **Phép VI-SAI-BIỆT của chính audit (không nấc nào chạy):** byte-hypothesis dự đoán **3 vai spawn** phải bannered (harvest 28.071 · lead-gap 25.454 · ring1 25.261 B); char-hypothesis dự đoán **1**. **Quan sát = 1.** lead-gap spawn 2 lượt + ring1 spawn 2 lượt = **4 cơ hội im lặng**.

🟡 **Chỗ audit KHÔNG chắc, khai thẳng:** hook nằm **NGOÀI repo** (0 hit `scripts/`+config) ⇒ **không ai đọc được source chân lý**; ngưỡng nằm đâu đó **[24.986 … 25.000] ký-tự**. Nhưng **dân-số 2 BỀN** với cả khoảng đó lẫn cả 2 quy-ước KB — vai thứ 3 (`ctx-audit` 23.055) cách mép **1.931 ký-tự**.
🔴 **"2" là CẬN DƯỚI:** `impl-be` 22.633 + `lead-gap` 22.226 chỉ cần **+2.350 ký-tự** là qua vạch.

## TRƯỢT — con ĐO (4)
| claim | thật |
|---|---|
| `.archive-strikes.json` "26 row = 0" | **24 row = 0** (26 TỔNG − 2 row nó vừa kể) — **off-by-2 đúng 2 dòng nó vừa đặt tên** = lỗi meta-count lớp S173/S119. Substantive claim vẫn đúng |
| ngầm định ledger phủ hết roster | ledger **26 key / 29 vai** ⇒ **3 vai (`score-counter`·`score-count-auditor`·`ring5-audit`) KHÔNG CÓ ROW** ⇒ **vắng-mặt đọc thành strike=0**. 🔴 **Không nấc nào nêu** |
| "`ring2` 24.859 … đều > ~24.986" | **24.859 < 24.986** — 🔴 **SAI SỐ HỌC ngay trong đơn-vị của chính nó** ⇒ "7 vai" là **6** kể cả khi chấp nhận byte |
| headline `OVERCAP-HARM` = 7/29 | **sai 2 tầng ĐỘC LẬP**: 7→6 (số học) rồi 6→2 (đơn-vị) |
> 🟢 `eval` **KHÔNG bịa số nào** — 7/7 byte tái dựng chính xác. Nó sai **ĐƠN-VỊ** và sai **SỐ HỌC** — hai lỗi khác hẳn bịa.

## TRƯỢT — con ĐỀ-XUẤT (5, đều minor/truy được)
| claim | thật |
|---|---|
| tỉ số byte/char "**corpus** VN 1,107–1,16" | đó là range của **7 vai nó đo**. Corpus 29 vai = **1,0349–1,2285** ⇒ **lệch hướng AN TOÀN** (range rộng hơn ⇒ luận điểm *"không byte-cap cố-định nào đúng"* **MẠNH HƠN nó tưởng**) |
| "`autoinject_cap` 25.600 B = AN TOÀN" | 🔴 **tự mâu thuẫn trong cùng đoạn** (2 dòng sau tuyên "không byte-cap nào đúng"). Số: break-even ratio **1,0246**; min quan sát **1,0349** ⇒ biên chỉ **1,0%**. File thuần-ASCII ở đúng cap = 25.600 ký-tự ⇒ **BỊ CẮT**. ⇒ **an toàn HÔM NAY, không an toàn về CẤU TRÚC** |
| "≈26.500 ký-tự" | là **một ĐIỂM** ứng ratio 1,159 (của reviewer), không phải khoảng. Thật = **25.006–29.684**. Kết luận không đổi |
| "Grep **toàn repo**" | không phải — sót `docs/gotchas.md:965` + `sessions/2026-05-28-s35-*`. 🔑 **Bỏ sót này làm YẾU chính nó**: `gotchas.md:965` là **nhân-chứng ĐỘC LẬP THỨ 2** (*"MEMORY size warning 24.6KB exceeds 24.4KB"*) |
| neo `reviewer/MEMORY.md:98` | trích **nguyên văn ĐÚNG**, neo **SAI 1 dòng** — sống ở **`:97`**. Lớp `unverified-label`: **số đúng, neo trôi** |
> ✅ `soft_cap_bytes` 30.720 **NGUY HIỂM — ĐÚNG và bền hơn refine trình**: 30.720 B → **25.006–29.684 ký-tự qua CẢ 4 tỉ số quan sát** ⇒ **TRÊN đường cắt với 29/29 vai**. Break-even 1,2295 vs max quan sát 1,2285 — **hở đúng 20 ký-tự**.

## RE-CHAY — 5 số / 4 instrument độc lập
1. `memory-archive-gate.ps1` full → ctx-audit 26695/3 entry/WARN keep-floor · harvest ~27224 · reviewer ~30982 · **A7 429/429/0** — **KHỚP eval 100%**
2. `measure-agent-memory.ps1` → 29 vai, sum **450.467** — KHỚP
3. python decode-UTF8 codepoint **29 vai** → **KHỚP refine 7/7 BYTE-EXACT**
4. `.archive-strikes.json` → khớp phần thực chất, **LỆCH "26 row = 0"** (thật 24)
5. A1 stub 6 dòng → **7.511 B** vs refine **7.505** — **LỆCH 6 B**, truy về quy-ước `\n` (refine dùng **2 quy-ước trong 1 return**: không-newline ở A1, có-newline ở A2). **Decision-impact NIL**

## FALSIFY — **2 BROKE vào chính audit**
- 🔴 **BROKE (tự)** — *"grep `đếm KÝ TỰ` = 0 hit ⇒ refine BỊA verbatim"*: chuỗi thật là `đếm **KÝ TỰ**`, **bold marker chen giữa ⇒ 0-hit GIẢ**. Probe lỏng thứ 2 bắt ra `:97` ngay. 🔑 **Suýt kết tội bịa-đặt oan bằng chính lỗi `.{50}x` đã ghi trong auto-memory.**
- 🔴 **BROKE (tự)** — citation-test: token bắt được **cũng nằm ở HEAD <24.986 B** ⇒ **haystack tự-khớp, chứng minh 0**; token DUY-NHẤT-ở-đuôi = **0 hit toàn run-folder** ⇒ phép **INCONCLUSIVE**, audit **KHÔNG tính vào chứng cứ**.
- **HELD** — *"24.8KB trùng char chỉ là trùng hợp"*: byte 28.071 lệch char **10,7%**, cửa sổ render 24.8 chỉ rộng **±0,2%**; liệt cả 4 cách diễn giải, **đúng 1 trúng** ⇒ **không trùng hợp**.
- **HELD** — *"banner đo thứ KHÁC"*: `harvest-curator/` chỉ có MEMORY.md + `archive/`; **không file nào và không tổ hợp nào** rơi vào [25.344, 25.446) B.
- **HELD** — *"file đổi sau khi banner in"*: mtime **08-09 22:17**, spawn 08-10 13:22 ⇒ **đứng yên xuyên banner**.
- **HELD** — *"eval bịa số"* / *"refine bịa 2.733 B"* / *"verdict tổng gộp che TRƯỢT lẻ"* — cả 3 bác được (liệt **9 TRƯỢT + 3 KC từng dòng**, không gộp).

## 🔴 `A2-BAY-NHAN` — **XÁC NHẬN byte-exact, bẫy nguy hiểm nhất phiên**
`## S159` ở **dòng 52**, file hết **dòng 64**, **0 heading chen giữa** ⇒ span nuốt trọn **dòng 62 = S182 (961 B)** + **dòng 63 = S185 (1.770 B)**. `961+1+1.770+1 = 2.733 B` — **khớp refine TUYỆT ĐỐI**. mtime `ctx-audit/MEMORY.md` = **2026-08-10 04:04 = HÔM NAY**.
⇒ Ai (người **hay máy**) drain *"entry S159 cũ từ 2026-07-29"* sẽ **archive MẤT bản ghi S182 + S185 của hôm nay**.
🔴🔴 **Nguy hiểm GẤP ĐÔI:** `keep_floor` bảo *"giữ 5 entry mới nhất"* nhưng máy **chỉ THẤY 3** ⇒ **cơ chế an toàn theo tuổi bị VÔ HIỆU bởi chính lỗi cấu trúc này**.
⇒ **A2(a) (gắn `##`) PHẢI làm TRƯỚC A2(b). Không được đảo.**

## `A1-MAT-0-TT` — **ĐẠT, nền chắc hơn refine trình**
Control-âm `@S999-zzz` = **0/0** ✓ · `@S182|@S180` = **8 dòng** ✓ · `@S166|@S167|@S168` = **5 dòng**, refine khai **4** ⇒ **lệch 1 hướng BẢO THỦ** (khai ít hơn bằng chứng nó có). ⚠️ refine **không nêu pattern đã dùng** ⇒ probe **không tái lập được** = **khuyết tật thật**.
🔑 **Chỗ dựa MẠNH HƠN mà refine bỏ lỡ:** **A7 gate máy đã resolve `reviewer` 57 pointer / 57 / 0 failed** — **chứng MÁY, không phải grep tay**.
⚠️ Trình-tự `reviewer:96` (**append archive TRƯỚC → probe token lấy từ THÂN BÀI → mới cắt**) là **BẮT BUỘC** — tiền lệ cut-not-moved **×5**.

## `TU-BAC-THAT-HAY-DIEN` — **THẬT, 4 dấu hiệu không diễn được**
1. Nó **VỨT urgency** (*"vai đang bị cắt"* — thứ duy nhất làm action nghe kêu) và giữ lý do **KHÔ HƠN**; **diễn thì làm ngược**.
2. Số tự-bác **kiểm được và đúng** (23.055 < 24.986 ✓ audit tái dựng).
3. Nó tự-bác bằng **CHÍNH cái thước vừa dùng để lật con-ĐO** ⇒ **áp luật lên mình cùng lượt**, không phải luật một chiều.
4. Lý do thay vào **ĐẮT HƠN để dựng** (phải đọc source `memory-archive-gate.ps1:143` + đếm byte trên heading) — **diễn thì không ai chọn đường tốn hơn**.
⚠️ 1 vết: không hạ nhãn ưu-tiên A2 sau khi urgency chết — nhưng trigger mới **tự đứng được**, không đổi verdict.

## KC (3)
hook cắt là code **NGOÀI repo** ⇒ không đọc được nguồn chân lý · crystallized/hotload **nhường `lead-gap-auditor`** theo N1 · `mfe-eval.ps1` **không re-chạy** lượt này (**KHÔNG suy ĐẠT**).

---

# 🔬 LEAD chạy tiếp `GIT-RECONSTRUCTION` (audit để KC + khuyến nghị chạy ngay)

**Kết quả: đường audit đề xuất ĐÓNG VỀ CẤU TRÚC — nhưng phân xử được bằng đường KHÁC.**

`git show d8c107c8~1:` → **26.803 B / 24.265 ch**: byte/1024 = 26,17 · byte/1000 = 26,80 · char/1024 = 23,70 · char/1000 = 24,27 ⇒ **KHÔNG cách nào trúng cửa sổ 24.9**.

Truy lịch sử size (12 commit) giải thích vì sao:
| commit | ngày | byte | char |
|---|---|---|---|
| `9c3b87d3` | 08-05 22:16 | **26.803** | **24.265** |
| `d8c107c8` | 08-07 13:57 | **12.131** | 11.210 |
⇒ rewrite xảy ra ở `d8c107c8` (khớp *"rewrite <17.1KB"*), và **giữa 2 commit KHÔNG có commit nào khác chạm file** ⇒ **đỉnh thật lúc banner nổ KHÔNG BAO GIỜ được commit** (bị viết đè trước turn-boundary kế).
🔴 ⇒ *"phép rẻ nhất còn lại"* **đóng về CẤU TRÚC**, không phải xui một lần: **trạng thái kích hoạt banner CHÍNH LÀ trạng thái bị rewrite trước khi có commit.**

**Nhưng lập luận ĐƠN-ĐIỆU phân xử được:** giữa 2 commit **không có lần curate nào** (curate = chính cú rewrite) ⇒ lúc banner nổ **byte ≥ 26.803**. Banner khai **24.9 KB**:

| giả thuyết | 24.9 KB quy ra | file lúc đó | verdict |
|---|---|---|---|
| **BYTE** | 25.498 B (/1024) · 24.900 B (/1000) | **≥ 26.803 B** | 🔴 **MÂU THUẪN — BÁC** |
| **KÝ TỰ** | 25.498 ch · 24.900 ch | 24.265 ch, cần mọc **+635…+1.233** | ✅ **NHẤT QUÁN** |

⇒ **Giả thuyết BYTE bị BÁC ở nhân-chứng thứ 3; KÝ-TỰ đứng.** Cộng 4 đường độc lập: cửa-sổ-render (harvest) · `reviewer:97` · vi-sai-biệt (audit) · đơn-điệu-git (lead).

🟡 **Giả định phải khai:** lập luận dựa vào *"file chỉ mọc giữa 2 lần curate"*. Có lần co không để lại commit thì hở. **KHÔNG nâng thành "đã chứng minh"** — **E1 vẫn cần** để hết cận-dưới.
