# harness-eval — S192 @open (phiên-LOGIC L16) — trio nấc 1/3 (con ĐO)

Ngày 2026-08-13. Repo `D:\Dropbox\CONG_VIEC\SOLUTION\SOLUTION_ERP`. Vai: **INFORM-only, propose-only** — ĐO + PHÁN TRÊN SỐ, KHÔNG đề-xuất action (đó là `harness-refine`), KHÔNG chấm spec (đó là `harness-audit`), KHÔNG đụng harvest-op (đó là `harvest-curator`).

## §0 — CAVEAT ĐỌC TRƯỚC (bắt buộc, chống overclaim)

1. **Mọi số dưới đây do máy VỪA in trong lượt này.** Không số nào lấy từ trí-nhớ/diary/phiên trước. Chỗ nào không chạy được ⇒ ghi `KHÔNG-ĐO-ĐƯỢC + lý do`, KHÔNG ghi `N/A` trống (bài S168/S172: nhãn `N/A` sai loại).
2. **Vai này lượt này CÓ tool Write** (khác role-baseline "read-only"). Đã ghi **đúng 1 file** = chính file này, theo lệnh lead. `read-only` = thiếu tool, KHÔNG phải sandbox; **Bash vẫn là kênh-ghi-mở**.
3. **`git status` KHÔNG đủ làm backstop** — Stop-hook auto-commit nuốt file vào commit `wal:` ⇒ lead phải soi `git log` các commit `wal:` sinh sau lượt này (bài S173/S189).
4. **`mfe-eval.ps1` GHI 1 file** `.claude/agent-memory/.mfe-state.json` (khai trong chính budget: `mfe.honest_caveats.read_only_scope`). Tôi chạy nó theo lệnh lead và **khai delta state trước/sau** thay vì im lặng.
5. **Cột "ký-tự"**: ngưỡng ≈**24.986 ký-tự** là **số LEAD dán**, chưa instrument nào trong `scripts/` đọc con số đó. Cột byte mới là cột có canonical (`autoinject_cap_bytes` 25600 / `soft_cap_bytes` 30720 trong `memory-budget.json`). Bài S186: **sai ĐƠN-VỊ ≠ bịa số** — nhưng vẫn sai; nên in CẢ HAI cột, không trộn.
6. **Verdict phán TRẠNG-THÁI, không phán NGUYÊN-NHÂN.** "Tăng sau harvest" là kỳ-vọng; "vượt cap" là trạng-thái. Hai chuyện khác nhau.

---

## §1 — `scripts/measure-agent-memory.ps1` (CHẠY TƯƠI, exit 0, 29 agent)

Baseline = khối `measured` trong `.claude/agent-memory/memory-budget.json` (re-sync gần nhất tự khai `S188 2026-08-10 FRESH re-sync bang MAY`).

**Mẫu-số:** máy in **29 agent** · khối `measured` có **29 row** · **0 orphan hai chiều** (0 row budget thiếu máy, 0 agent máy thiếu row).

### 1a. Phủ baseline — HEALTHY

| trục | số máy | baseline | verdict |
|---|---|---|---|
| phủ `measured` | 29/29 | 29 row | **HEALTHY** (S186 19/29 · S188 19/29 · S191 29/29 — giữ nguyên mức đã sửa) |

### 1b. Độ TƯƠI của baseline — REGRESSION

| trục | số máy | verdict |
|---|---|---|
| row KHỚP ĐĨA chính xác | **10/29** | **REGRESSION** |
| row LỆCH đĩa | **19/29** | (S191 đo `9/29 khớp` — kỳ này 10/29 khớp, gần như đứng yên) |
| lệch lớn nhất | `score-counter` **+40,4%** (2.366 → 3.322) | |
| lệch âm lớn nhất | `cicd-monitor` **−28,4%** (24.322 → 17.423) | |

🔴 **Hệ quả bắt buộc khai:** **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.** Đây KHÔNG phải lỗi mới; nó là lỗi đã bắt ở S186/S188/S191 và vẫn còn.

🔴 **Đảo chiều đáng chú ý:** `cicd-monitor` l1 **GIẢM 6.899 B** và `ring1-audit` **GIẢM 3.975 B** — hai row giảm duy nhất trong 29. Giảm ≠ tự động tốt: nó nghĩa là **có gì đó đã rời khỏi L1**; instrument này không nói được rời-đi-đâu (curate hay mất).

### 1c. Trần L1 — REGRESSION (byte) / MIXED (ký-tự)

Cap canonical: `autoinject_cap_bytes` = **25.600** · `soft_cap_bytes` = **30.720**.

| vai | l1 BYTE (máy) | vs cap 25.600 | ký-tự (máy) | vs 24.986 (số LEAD) |
|---|---|---|---|---|
| `lead-gap-auditor` | **29.295** | **OVER +3.695** | 25.594 | OVER +608 |
| `ring2-audit` | **29.268** | **OVER +3.668** | 25.291 | OVER +305 |
| `lead-stale-auditor` | **27.154** | **OVER +1.554** | 23.865 | dưới (−1.121) |
| `reviewer` | 25.469 | dưới **131 B** | 22.309 | dưới |
| `harvest-curator` | 25.352 | dưới **248 B** | 23.086 | dưới |

- **`l1_over_30kb` = false 29/29** ⇒ **0 vai vượt soft_cap 30.720**.
- **Over `autoinject_cap` (byte): 3/29** — khớp đúng con số `tran-bo-nho 3` lead đã đo.
- **Over ngưỡng ký-tự lead dán: 2/29.** 🔴 S191 đo trục này ra **0 over theo ký-tự**; kỳ này **2** ⇒ **trục ký-tự đảo từ sạch sang bẩn**. Đơn-vị đổi thì verdict đổi — đây chính là lớp lỗi S186 tôi tự dính.
- **2 vai đứng sát mép** (`reviewer` còn 131 B, `harvest-curator` còn 248 B) ⇒ chỉ cần một entry ngắn là thành 5 vai over.

**Verdict trục 1c: REGRESSION** — 3 over cap byte, và trục ký-tự vừa đảo chiều xấu 0→2.

### 1d. L2 — MIXED

| trục | số máy | baseline `measured` | delta |
|---|---|---|---|
| `cicd-monitor` l2_index (**trục = MAIN + rotated**) | **24.568** | 23.588 | **+980** |
| `cicd-monitor` l2_verbatim | 277.739 | 264.257 | +13.482 |
| `lead-gap-auditor` l2_index | 1.362 | 1.234 | +128 |
| `lead-stale-auditor` l2_index | **223** | 0 | **+223 (row MỚI có số lần đầu)** |
| `ring1-audit` l2_index | **682** | 0 | **+682 (row MỚI)** |
| `ring1-audit` l2_verbatim | **6.761** | 0 | **+6.761 (row MỚI)** |

🔴 **ERRATUM TỰ BẮT NGAY TRONG LƯỢT NÀY — đúng cái bẫy tôi vừa cảnh báo ở §0:** bản nháp đầu của mục này tôi viết *"l2_index 24.568 = 119,96% cap ⇒ MAIN vượt cap ⇒ REGRESSION"*. **SAI** — tôi trừ hai số thuộc **hai phép đo khác nhau**. Kiểm bằng đĩa + đọc chính source:

```
scripts/measure-agent-memory.ps1:20
    if ($_.Name -like '_INDEX*.md') { $index += $_.Length }   # S167 split: rotated _INDEX-<period>.md stays in the l2_index axis (not verbatim)
```

- `cicd-monitor/archive/_INDEX.md` (**MAIN** — file BỊ cap) = **10.662 B** = **52,1%** cap 20.480 ⇒ **KHÔNG over**.
- `cicd-monitor/archive/_INDEX-2026-H1.md` (**rotated** — `split_rule_S167` khai **no cap**) = **13.906 B**.
- 10.662 + 13.906 = **24.568** ✓ khớp đúng số máy in ⇒ trục `l2_index` của `measure` = **TỔNG hai file**; cap chỉ áp MAIN.

⇒ Probe in `l2idx 0 over` (§5) **là ĐÚNG**, không phải điểm mù. **Đỉnh MAIN thật hiện nay = `reviewer` 13.941 = 68,07% cap** (không phải cicd).
🔴 **Bài giữ lại:** cùng một tên trục (`l2_index`) mang **hai phép đo khác nhau** giữa `measure` (tổng) và `nhip-no-probe` (MAIN). Trừ thẳng hai số cùng tên ⇒ ra **REGRESSION giả**. Bắt được vì kiểm đĩa TRƯỚC khi phát; phát luôn thì đó đã là một REGRESSION bịa.

**Verdict trục 1d: HEALTHY** — 0 file MAIN vượt cap (đỉnh 68,07%); 3 row L2 có số lần đầu. Tổng L2 phình là **kỳ-vọng của tier cold no-cap**, không phải trạng-thái xấu.


---

## §2 — `scripts/mfe-eval.ps1` (CHẠY TƯƠI, **exit 0**, 29 role row)

🔴 **Khai trước:** MFE **GHI 1 file** `.claude/agent-memory/.mfe-state.json` — đây là hành-vi được khai sẵn trong budget (`mfe.honest_caveats.read_only_scope`), không phải ghi lén. Tôi snapshot trước/sau: **6.060 B → 6.245 B (+185)**, `history` **32 → 33** entry. S185 CỐ Ý không chạy nó vì lý do này; kỳ này lead yêu cầu chạy nên tôi chạy + khai số.

### 2a. LEAD lane — HEALTHY

| trục | số nguyên-văn máy in | verdict |
|---|---|---|
| DENOMINATOR | **38 items** (marks 11 + AS 15 + net-guards 5 + net-recurring-gotchas 7; raw trước dedup: 11+15+16+8) | — |
| Coverage-FIT | span **30.945 B** ⇒ **~7.736 – 10.315 tok** / cap **380.000** = **2,71% worst-case** | **PASS** |
| age-band | marks parse được ngày = **11**; **>30d mà vẫn Active = 6 → KEPT** (status-driven, age-blind) | FLAG-only, đúng thiết-kế |

### 2b. Goodhart anchor — 🔴 **REGRESSION (loại: thước ĐÚNG nhưng KHÔNG BAO GIỜ nhận được tín-hiệu)**

Máy in nguyên-văn: `error-ledger: strikes_total=25  RCA_entries=16  AS-classes=15` · `warn-baseline=25 last_run_strikes=25`.

🔴 **Lead nghi "thước hỏng / đọc nhầm cột" — tôi ĐÃ KIỂM, và KHÔNG PHẢI.** Trình tự kiểm:

1. Đọc parser `scripts/mfe-eval.ps1:125` → `if ($c[3] -match '(\d+)') { $strikesTotal += [int]$matches[1] }   # Strikes col`.
2. Dump **cấu-trúc ô đúng như parser thấy** trên `docs/governance/error-ledger.md` §Active-Guards: header ra `c0='Guard' c1='Counters' c3='Strikes' cLAST='Net'` ⇒ **c3 ĐÚNG LÀ cột Strikes**, 6 ô/row, không lệch cột.
3. **Tự cộng lại độc-lập** (không dùng số của MFE): `2+5+3+1+2+1+0(no-digit)+2+1+1+2+1+1+1+1+1` = **25** ⇒ **tái dựng khớp tuyệt đối**.

⇒ **Kết luận đảo lại giả-thuyết của lead: `strikes_total=25` là số ĐÚNG, đọc từ đúng cột, cộng đúng.** Không có lỗi thước. (Trước đây tôi từng dính đúng lớp lỗi ngược lại ở S186 — nên lần này kiểm trước khi phán.)

**Nhưng cái ĐÁNG BÁO nằm chỗ khác — và nó nặng hơn "thước hỏng":**

| trục | số máy | ý nghĩa |
|---|---|---|
| `strikes_total` | **25**, **bất động 33/33 entry** trong `history` | từ `2026-07-25 23:55` → `2026-08-13 02:43` = **18,1 ngày / 33 lần chạy / 0 lần đổi** |
| `DISTINCT strikes_total` toàn `history` | **{25}** — đúng 1 giá trị duy nhất | |
| `DISTINCT rca_entries` toàn `history` | **{14, 16}** — **CÓ đổi** (14 → 16) | |
| `RCA_entries` hiện tại | **16** (E-001…E-016, đếm khớp) | |

🔴 **Đây là điểm mù thật:** trong đúng cửa-sổ mà `strikes_total` đứng im 25, **sổ VẪN lớn lên trên trục khác** — `rca_entries` 14→16, và commit gần nhất chạm chính file đó là `23a7a668 2026-08-13 "S191 ĐÓNG L15 — ring5 lật nhãn tự-ý-bỏ (**RCA tái phạm**)"`. Tức **có tái-phạm được ghi nhận**, nhưng nó vào sổ dưới dạng **section `### E-0NN` mới** (làm `rca_entries` tăng) chứ **KHÔNG** làm tăng con số trong **cột `Strikes` của bảng Active-Guards** — mà cột đó mới là thứ `strikes_total` cộng.

⇒ Nhánh cảnh-báo `GOODHART-WARN` (điều-kiện `$strikesTotal -gt $warnBase`, `mfe-eval.ps1:215`) **về mặt vận-hành gần như không thể kích**, vì đường-ghi vào cột `Strikes` là **thủ-công** và thực tế 18 ngày qua không ai ghi. Đây đúng lớp *"guard dựng mà không ai gọi"* — máy chạy, đọc đúng, in đúng, nhưng **tín-hiệu không có cửa nào đi vào**.
🔴 **Ranh-giới tôi KHÔNG bước qua:** tôi **không** kết luận "phải nối tự-động E-### vào cột Strikes" — đó là **đề-xuất action**, việc của `harness-refine`. Tôi chỉ nêu tín-hiệu.

### 2c. SUB lane — per-role coverage — MIXED

Tự cộng bằng máy (meta-count là chỗ tôi từng ngã S151/S153/S159 — nên cộng bằng lệnh, không cộng bằng đầu):
`roles_scored=23  numerator=163  denominator=165  pct=98.79%`

| trục | số máy |
|---|---|
| role có điểm | **23/29** |
| role **N/A** (`no numbered anti-pattern / NEVER block in role-file to extract`) | **6/29** — `back-end-reviewer-style` · `database-reviewer-style` · `front-end-reviewer-style` · `ring5-audit` · `score-count-auditor` · `score-counter` |
| role đạt **100%** | **21/23** |
| role **KHÔNG** 100% | `implementer-backend` **17/18 = 94%** · `implementer-frontend` **12/13 = 92%** |
| tổng | **163/165 = 98,79%** |

- 🔴 **`N/A` ở đây KHÔNG phải "không đo được vì máy hỏng"** — máy in kèm **lý do cấu-trúc**: role-file 6 vai đó không có khối anti-pattern đánh số / khối `NEVER` để rút mẫu-số. Đó là **mẫu-số RỖNG**, và guard từ chối chấm trên mẫu-số rỗng là **làm ĐÚNG** (cùng lớp với `ring1-audit A7 N/A` @S191). Nhưng hệ quả phải nói thẳng: **6/29 vai nằm NGOÀI mọi phép đo coverage** — con số "98,79%" chỉ nói về 23 vai còn lại.
- ⚠️ **Caveat kế thừa S188, vẫn áp:** dòng "MISS-có-tên" render ở `mfe-eval.ps1:288` vs `:299` từng lệch dòng ⇒ đọc thẳng sẽ **quy sai vai**. Kỳ này **máy không in dòng MISS nào**, nên không có gì để quy sai — nhưng caveat chưa được gỡ.

**Verdict §2: MIXED** — LEAD-lane FIT PASS + sub-coverage 98,79% (HEALTHY) ⟂ Goodhart-anchor bất động 33 run/18,1 ngày trong khi sổ vẫn lớn trên trục RCA (REGRESSION) + 6/29 vai ngoài tầm đo.

---

## §3 — `scripts/memory-archive-gate.ps1` (CHẠY TƯƠI, **DRY-RUN**, exit 0)

Tham số máy tự in: `cap 25600 (autoinject_cap)` · `low-water 21760 (ratio 0.85)` · `keep-floor 5 (A5)` · `strike-need 2 (A6)`.

### 3a. PASS 1 — over-cap planner — REGRESSION

**3 sub over-cap** (khớp đúng `tran-bo-nho 3` lead đo, và khớp đúng §1c của tôi — **2 instrument độc-lập ra cùng tập vai**):

| sub | bytes | entries | strike (máy in) | resolve (nguyên-văn) |
|---|---|---|---|---|
| `lead-gap-auditor` | **29.295** | 9 | **1** | `WARN keep-floor hit (5); cannot auto-drain - SPLIT/condense entries by hand` |
| `ring2-audit` | **29.268** | 9 | **2** | `WARN keep-floor hit (5); cannot auto-drain - SPLIT/condense entries by hand` |
| `lead-stale-auditor` | **27.154** | 8 | **1** | `WATCH (strike 1<2): re-run; propose only after 2 consecutive over-cap` |

- **`ring2-audit` đã CHẠM ngưỡng** `strike 2 = strike_need 2` ⇒ là vai DUY NHẤT đủ điều-kiện A6 để được PROPOSE, **nhưng** cả 3 vai đều `keep-floor hit` ⇒ **không vai nào auto-drain được**; máy nói thẳng phải tách/cô-đọng bằng tay.
- `[D3 value-gate]` hard-skip: `lead-gap-auditor` **2** entry value-protected · `lead-stale-auditor` **1** · `ring2-audit` **1**. Máy tự khai giới hạn: *"9-token grep = lower-bound; em-main must value-scan the WHOLE proposed set"*.
- **`[A6] DRY-RUN: strike counters NOT persisted`** ⇒ số strike ở trên là **DỰ PHÓNG**, chưa xuống đĩa.

### 3b. `.archive-strikes.json` — 🔴 **REGRESSION, xác nhận cả 3 nghi vấn lead nêu**

Nội dung file (đọc verbatim, **26 khoá**) — mtime **2026-08-07 11:10** (6 ngày trước).

| câu hỏi lead | trả lời bằng số |
|---|---|
| còn **stale** không? | **CÒN.** mtime 08-07, trong khi 3 vai đang over-cap hôm nay. Lý do cơ-chế: gate mặc định **DRY-RUN không ghi**; file chỉ tiến khi ai đó chạy `-Apply`. |
| còn **thiếu row** `score-counter` / `score-count-auditor` / `ring5-audit`? | **CÒN THIẾU CẢ 3.** File có **26 khoá** / roster **29** ⇒ **3 vai vắng mặt**, đúng 3 tên lead nêu. |
| **vắng-mặt có đọc thành strike 0** không? | **CÓ — xác nhận bằng source**, không phải suy đoán: `scripts/memory-archive-gate.ps1:121` → `$prev = if ($strikes.ContainsKey($sub)) { [int]$strikes[$sub] } else { 0 }`. Khoá vắng ⇒ `$prev = 0`, **không phân biệt được với "đã đo và bằng 0"**. |
| vênh `ring2` **1 ↔ 2**? | **KHÔNG phải vênh — là ngữ-nghĩa `lưu` vs `dự-phóng`.** Source `:122-126`: over-cap ⇒ `$cur = $prev + 1`; sạch ⇒ `$cur = 0`. Đĩa lưu `ring2-audit: 1`, run này over-cap ⇒ in **2**. Cùng luật: `lead-gap` 0→1, `lead-stale` 0→1, `investigator-codebase` đĩa **1** nhưng nay dưới cap ⇒ in **0** (sẽ reset nếu `-Apply`). ⇒ **tôi BÁC giả-thuyết "vênh"**; nhưng hệ quả thật vẫn xấu: **đĩa và màn hình lệch nhau ở 4/29 vai** và chỉ đồng bộ khi có `-Apply`. |

🔴 **Điểm mù cấu-trúc đáng ghi:** ba vai vắng khoá (`score-counter`, `score-count-auditor`, `ring5-audit`) hiện đều **dưới cap** nên hậu-quả bằng 0 *lúc này*. Nhưng cơ-chế `absent ≡ 0` nghĩa là **ngày chúng vượt cap, strike vẫn khởi từ 0** và không ai biết chúng chưa từng được đếm. Đây là **vắng-mặt trông giống ổn** — đúng lớp lỗi đã có tên trong sổ.

### 3c. PASS 2 — A7 archive-integrity — ✅ **HEALTHY (đảo chiều tốt)**

```
A7 GATE PASS  -  total pointers 432, resolved 432, failed 0
```

- **12 sub có archive**, cả 12 đều `PASS`, **failed 0**.
- **Baseline:** `429/429` (số ghi kỳ trước — **nhãn provenance: đây là số DIARY/brief, KHÔNG phải số máy kỳ này**). Delta **+3 pointer**, vẫn `failed 0` ⇒ **HEALTHY**.
- ⭐ **Trục S191 ĐÃ ĐÓNG:** kỳ trước `ring1-audit` khai `A7 N/A` vì `_INDEX` kiểu bảng có **0 token `substring:"`** ⇒ guard B2 từ chối PASS trên mẫu-số rỗng. Kỳ này máy in `[ring1-audit] _INDEX.md + 2 archive file(s) -> PASS pointers 1 resolved 1 failed 0` và `[lead-stale-auditor] ... pointers 1 resolved 1` ⇒ **2 archive từng nằm NGOÀI 429 nay đã vào trong tập đo**. Đây là **trục hết mù thật**, không phải số đẹp lên.

### 3d. 🔴 Số TRÔI GIỮA LƯỢT — 1/29 (tái hiện lớp S159/S173)

`score-counter`: `measure-agent-memory` in **3.322 B** · `memory-archive-gate` in **4.115 B** — **hai instrument, cùng một lượt của tôi, lệch 793 B**.

Không phải instrument sai. Kiểm đĩa: `.claude/agent-memory/score-counter/MEMORY.md` = **4.115 B, mtime 2026-08-13 02:41:38** ⇒ **file được ghi CHÈN GIỮA hai lệnh của tôi**. 28/29 vai còn lại khớp byte-exact giữa 2 instrument.
⇒ **Bài giữ:** *đo trước/sau một tick = hai số khác nhau*; con số duy nhất an-toàn là con số kèm mtime. Con `harness-refine` nếu trích 3.322 sẽ trích một số **đã chết trong chính phiên này**.

**Verdict §3: MIXED** — A7 432/432 đảo chiều tốt + ring1 hết mù (HEALTHY) ⟂ 3 sub over-cap không auto-drain được + state-file stale 6 ngày thiếu 3 row (REGRESSION).

---

## §4 — `scripts/crystallized-backfill.ps1` (CHẠY TƯƠI, exit 0) — 🔴 **REGRESSION (trục nặng nhất kỳ này)**

### 4a. Số máy VỪA in

| trục | số nguyên-văn | baseline | delta |
|---|---|---|---|
| hotload TOTAL (LIVE byte-measure, UTF8) | **797.330 B** | — | — |
| tok RANGE [low..high] | **[199.332 .. 265.777]** tok | — | khớp đúng số lead dán |
| `measured_headroom` | **114.223 tok** (cap − tok_high, worst-case) | target **210.000** | **thiếu −95.777** |
| `expected_backfill` | **114.223 tok** — `min(target,headroom)=headroom => headroom binds (target exceeds room)` | — | — |
| precondition | **MET** (target>0 AND headroom>0) | — | — |

Phân rã 6 nguồn hotload (máy in): `STATUS.md` **246.501** · `HANDOFF.md` **227.284** · `gotchas.md` **134.931** · `migration-todos.md` **90.161** · `agents/README.md` **62.300** · `ACTIVE-MARKS.md` **36.153**.
⇒ **STATUS + HANDOFF = 473.785 B = 59,4% toàn bộ sàn hotload.**

### 4b. Chuỗi đầy đủ — dựng lại BẰNG MÁY, có ngày (🔴 sửa lỗi của chính tôi trong lượt này)

🔴 **Tôi đã suýt tái phạm đúng lỗi S173.** Vòng dựng chuỗi đầu tôi ra **12 mốc** — rồi quét lại toàn corpus bằng regex bắt **cả hai định-dạng số** (`160924` **và** `160.924` — dấu chấm phân cách nghìn làm grep trượt sạch) thì lòi thêm **9 mốc**, trong đó **4 mốc nằm GIỮA chuỗi** (`174.463` S158 · `153.117` S169 · `137.780` S182 · `131.496` S186). Nếu tôi tính đạo hàm trên chuỗi 12 mốc thì mọi "bước" đều là **khoảng GỘP nhiều kỳ** — đúng cái làm S173 ra **sai DẤU đạo hàm**.

**Chuỗi 21 mốc** (ngày = run-folder **sớm nhất trên đĩa** chứa số đó):

| # | phiên | ngày | headroom |
|---|---|---|---|
| 1 | S127 | 07-16 | 222.102 |
| 2-3 | S144 | 07-22 | 200.490 → 199.759 |
| 4 | S150 | 07-25 | 190.437 |
| 5 | S151 | 07-25 | 187.693 |
| 6 | S152 | 07-25 | 184.502 |
| 7 | S153 | 07-26 | 181.228 |
| 8 | S154 | 07-26 | 176.696 |
| 9-10 | S158 | 07-28 | 174.463 → 172.247 |
| 11 | S162 | 07-30 | 165.767 |
| 12 | S163 | 07-30 | 160.924 |
| 13-14 | S169 | 08-01 | 153.117 → 152.968 |
| 15 | S173 | 08-05 | 148.183 |
| 16 | S182 | 08-07 | 137.780 |
| 17 | S185 | 08-09 | 134.573 |
| 18 | S186 | 08-10 | 131.496 |
| 19-20 | S188 | 08-10 | 125.828 → 122.555 |
| 21 | **S192** | **08-13** | **114.223** ← **MÁY VỪA IN** |

### 4c. Trả lời thẳng câu lead: **chuỗi CÓ thật sự đơn-điệu**

Máy đếm: **số lần đảo chiều (tăng hoặc bằng) = 0** trên cả 21 mốc.
⇒ **Claim "đơn-điệu giảm" của các phiên trước ĐỨNG VỮNG** — và nay mạnh hơn: không phải "13+ mốc" mà là **21 mốc / 17 phiên / 28 ngày, 0 lần đảo chiều**. Kể cả 4 cặp cùng-phiên (S144, S158, S169, S188) cũng giảm trong nội bộ cặp.

### 4d. Tốc độ — KHÔNG tăng tốc; xấp xỉ tuyến tính ~4K tok/ngày

| cửa sổ | delta | ngày | tốc độ |
|---|---|---|---|
| **toàn chuỗi** S127→S192 | **−107.879** | 28 | **−3.853 tok/ngày** |
| S127→S153 (đầu) | −40.874 | 10 | −4.087 tok/ngày |
| S153→S173 (giữa) | −33.045 | 10 | −3.305 tok/ngày |
| S173→S192 (cuối) | −33.960 | 8 | **−4.245 tok/ngày** |
| S188→S192 (gần nhất) | −8.332 | 3 | −2.777 tok/ngày |

🔴 **Đính chính một cách đọc dễ sai:** khoảng **122.555 → 114.223 (−8.332)** **KHÔNG phải "một bước"** — nó bắc qua **S189, S190, S191** (S191 @close **không sinh số headroom nào**, đã kiểm: 0 giá trị mới trên đĩa). Gọi nó là "bước kỳ này" là lặp lại lỗi S173.
⇒ **Kết luận đúng về gia-tốc: KHÔNG có bằng chứng tăng tốc.** Cửa sổ cuối (−4.245/ngày) chỉ nhỉnh hơn cửa sổ đầu (−4.087/ngày) ~3,9%, và cửa sổ gần nhất còn **chậm hơn** (−2.777/ngày). Đây là **suy giảm đều**, không phải sụp đổ — nhưng đều **theo một hướng duy nhất**, và đó mới là vấn đề.

### 4e. Vì sao headroom giảm — khai TRẠNG-THÁI, không phán NGUYÊN-NHÂN

Headroom = `cap 380.000 − tok_high(hotload)`. Cap **không đổi**. Nên headroom giảm ⟺ **hotload phình**. Mốc hotload đọc được trên đĩa: **473.694 B** (S127) → **538.529** → **576.921** → **616.610** (S158) → **745.511** (S186) → **797.330 B** (hôm nay) ⇒ **+323.636 B / 28 ngày**.
⇒ Trạng-thái: **sàn-file always-on đã phình 68,3% trong 4 tuần**, và 59,4% khối lượng nằm ở đúng 2 file (`STATUS.md` + `HANDOFF.md`). Tôi **không** phán đây là bệnh hay là kỳ-vọng — hai file đó lớn lên vì dự án chạy; việc định giá là của `harness-refine`.

⚠️ **Caveat của chính máy (in nguyên-văn, không được bỏ):** *"HEADROOM is measured over a STABLE FILE-FLOOR = an UPPER BOUND. The PEAK hot-feed also loads session-variable task-context NOT in this list; real headroom is SMALLER."* ⇒ **114.223 là CẬN TRÊN**; headroom thật nhỏ hơn. Và `[199.332..265.777]` là **DẢI**, không phải số thật — token thật nằm trong dải.

**Verdict §4: REGRESSION** — 21 mốc, 0 đảo chiều, thiếu target **−95.777 tok**, và con số đang báo là **cận trên** của thực tế.

---

## §5 — `scripts/nhip-no-probe.ps1` + trục HCV/harvest-proxy — 🔴 **REGRESSION (điểm mù của CHÍNH trục đo của tôi)**

### 5a. Dòng NHIP-NO — nguyên-văn máy VỪA in

```
NHIP-NO: kiem light 6/6 deep 1/1 OVERDUE:light,deep | tran-bo-nho 3 over-cap l2idx 0 over | run-chua-gom 1 | pull-cach 3 ngay | so-yc treo 7 / nhac2+ 5 (muc 25, gop 5 dong nhac-lai) / 1 dong KHONG TACH DUOC COT
```

**So với dòng lead dán — 2 chỗ lệch:**

| đoạn | lead dán | máy VỪA in | ghi chú |
|---|---|---|---|
| `run-chua-gom` | **0** | **1** | 🔴 **số đã TRÔI trong phiên** — orphan = chính `runs/2026-08-13-S192-bookend-open/` (đã định danh bằng máy): folder có `run.md` nhưng chưa có `*-synthesis.md` non-empty. **Phiên tự sinh orphan cho chính nó** — y hệt lớp S159/S173. |
| đoạn `so-yc` | **thiếu hẳn** | `so-yc treo 7 / nhac2+ 5 (muc 25, gop 5 dong nhac-lai) / 1 dong KHONG TACH DUOC COT` | bề-mặt lead dán **rụng nguyên một segment**; ai đọc số lead sẽ không thấy **7 yêu-cầu treo / 5 cái nhắc ≥2 lần**. |

Các đoạn khác khớp: `light 6/6 deep 1/1 OVERDUE:light,deep` · `tran-bo-nho 3 over-cap` · `l2idx 0 over` · `pull-cach 3 ngay`.
- `light 6/6` + `deep 1/1` = **cả hai nhịp H24 ĐÚNG VẠCH và đang OVERDUE** (`light_every`=6, `deep_every`=1 — deep chạy mọi bookend theo owner YC-019(5)).
- `l2idx 0 over` = **ĐÚNG** (đã chứng ở §1d: đỉnh MAIN `reviewer` 13.941 = 68,07% cap).

### 5b. 🔴 Câu lead hỏi thẳng: **instrument của TÔI có thấy 8 slot thủng không? — KHÔNG. Không cái nào thấy.**

Tôi **không nhận datum của `harvest-curator` rồi coi như mình đo được**. Tôi đo lại độc-lập, và kết quả **trùng khớp** — nhưng điều quan trọng hơn là: **trùng khớp bằng phép đo TÔI PHẢI TỰ DỰNG, không phải bằng instrument nào trong bộ 5 của tôi.**

**Đo độc-lập (kèm control-dương — luật cứng của tôi: 0-hit CẤM rời tay khi chưa có control-dương):**

| vai | hits `S191` trong diary | diary bytes | mtime | control-dương |
|---|---|---|---|---|
| `ring5-audit` | **0** | 2.474 | **08-10 04:02** (3 ngày cũ) | `S1xx` = **2 hit** ⇒ grep chạy, corpus KHÔNG rỗng; `S19x` = **0** ⇒ chưa từng ghi bất kỳ phiên S19x nào |
| `harness-audit` | **0** | 20.934 | **08-11 12:24** | `S1xx` = **16 hit**, `S19x` = **0** ⇒ cùng kết luận |
| 9 vai còn lại (`ctx-audit`, `harvest-curator`, `lead-gap`, `lead-stale`, `ring1`, `ring2`, `tooling-auditor`, `harness-eval`, `harness-refine`) | **1–3 hit** | — | 08-13 | — |

⇒ **9/11 vai có artifact S191 đã về sổ; 2/11 thủng** (`ring5-audit` 3.708 B + `harness-audit` 8.191 B — khớp đúng 2 tên `harvest-curator` nêu).
⚠️ **Mẫu-số của tôi (11) ≠ mẫu-số của `harvest-curator` (12).** Tôi báo **9/11 theo phép đếm của tôi** (11 artifact mang tên vai trong folder S191) và **KHÔNG** mượn "10/12" — 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" ở §1d.

### 5c. Vì sao KHÔNG instrument nào của tôi thấy — soi từng cái

| instrument | ring5-audit hiện ra thế nào | có thấy thủng không |
|---|---|---|
| `measure-agent-memory` | `l1_hot 2.474` — **delta 0 so baseline** | **KHÔNG.** delta-0 **nhập nhằng chết người**: hoặc baseline tươi, hoặc diary ĐÓNG BĂNG. Máy không phân biệt được. Ở §1b tôi xếp delta-0 vào cột "khớp = tốt" — với vai này nó là **dấu hiệu XẤU** đội lốt dấu hiệu tốt. |
| `mfe-eval` | **`N/A`** (`no numbered anti-pattern ... to extract`) | **KHÔNG.** Vai nằm ngoài mẫu-số coverage hoàn toàn. |
| `memory-archive-gate` | `2474  no  2 entries  strike 0  - ok` | **KHÔNG.** Dưới cap ⇒ in **`ok`**. |
| `crystallized-backfill` | không có mặt | **KHÔNG.** Trục khác hẳn. |
| `nhip-no-probe` `run-chua-gom` | folder S191 **CÓ** `bookend-close-synthesis.md` 5.549 B ⇒ **đếm là ĐÃ GOM** | **KHÔNG.** Source `nhip-no-probe.ps1:156-180` (đã đọc): DUAL-ACCEPT chỉ hỏi *"có file `*-synthesis.md` non-empty không"* — **đo CÓ-FILE, không đo VỀ-SỔ**. Lead gọi là *ĐẠT-ảo do CẤU TRÚC*: **đúng, và tôi xác nhận bằng chính source.** |

🔴 **Kết luận phải nói thẳng: đây là điểm mù của chính trục đo memory-health mà tôi phụ trách.** `ring5-audit` đồng thời được **4 instrument chấm "sạch"** — delta-0 (measure), N/A (MFE), `ok` (gate), nằm-trong-folder-đã-gom (probe) — trong khi nó **chưa ghi một chữ nào về S191, và chưa từng ghi bất kỳ phiên S19x nào**. Bốn phép đo, bốn màu xanh, trên một vai đang mất trí nhớ.

Đây là **cùng một lớp** với 3 thứ đã bắt trong chính phiên này: `absent ≡ 0` (§3b) · anchor đúng-nhưng-không-nhận-tín-hiệu (§2b) · "hình dạng output đọc thành sạch" (S172). Tên chung: **vắng-mặt trông giống ổn**.
🔴 **Ranh-giới:** tôi **KHÔNG** đề-xuất nối instrument nào vào đâu — đó là việc `harness-refine`. Tôi chỉ khai: **trục này hiện KHÔNG có máy đo.**

### 5d. Nợ tồn — khai theo đúng nguồn, KHÔNG nhận làm số của mình

`harvest-curator` cùng lượt chốt `GATE-FAIL` 6 finding, nợ S188 **42.975 B / 4 vai** treo 3 cửa-sổ.
🔸 **Provenance: đây là số của VAI KHÁC (H2 harvest-integrity), tôi KHÔNG tái đo** — thao-tác harvest thuộc `harvest-curator`, tôi nhường đúng ranh-trục. Tôi chỉ dẫn lại để `harness-refine` thấy nó nằm **cùng hướng** với §5b: hai cửa-sổ liên tiếp đều thủng, và **bộ 5 instrument của tôi mù cả hai lần**.

**Verdict §5: REGRESSION** — dòng NHIP-NO có 2 nhịp OVERDUE + 1 orphan tự sinh; và trục HCV/về-sổ **không có instrument nào phủ**.

---

# §VERDICT TỔNG — **MIXED — 39 trục**

**11 HEALTHY · 18 REGRESSION · 8 MIXED · 1 không-phán · 1 nhường-H2.**
Tự cộng: 11 + 18 + 8 + 1 + 1 = **39** ✓ (tự-kiểm bắt buộc — meta-count là chỗ tôi từng ngã S151/S153/S159/S173).

🔴 **Vì sao MIXED chứ không REGRESSION-tổng:** REGRESSION **áp đảo về số lượng và về sức nặng** (headroom, điểm-mù về-sổ, 3 vai over-cap). Nhưng kỳ này có **3 trục đảo chiều tốt THẬT**, không phải số đẹp lên: A7 **429→432 failed 0** · `ring1-audit` **hết `N/A`** (2 archive từng ngoài tầm đo nay vào trong) · phủ `measured` **29/29** giữ nguyên. Xoá chúng để gọi "REGRESSION toàn phần" là bóp méo theo hướng ngược lại.
🔴 **Vì sao KHÔNG được đọc thành "ổn":** trong 11 HEALTHY có **4 cái là HEALTHY-vì-vắng-mặt** (`l2idx 0 over`, soft_cap 0 over, delta-0 rows, `ok` của gate) — §5c chứng rằng **đúng những màu xanh đó đang che một vai không ghi gì suốt 3 phiên**.

| # | trục | số nguyên-văn (máy VỪA in) | baseline | verdict |
|---|---|---|---|---|
| 1 | phủ `measured` | 29/29 (0 orphan 2 chiều) | 29 row | HEALTHY |
| 2 | l1 vs `soft_cap` 30.720 | 0/29 over | — | HEALTHY |
| 3 | l2_index MAIN vs cap 20.480 | đỉnh `reviewer` 13.941 = **68,07%** | — | HEALTHY |
| 4 | L2 row có số lần đầu | 3 row (`lead-stale` 223, `ring1` 682/6.761) | 0 | HEALTHY |
| 5 | MFE Coverage-FIT | 30.945 B ⇒ ~7.736–10.315 tok / 380.000 = **2,71%** | PASS | HEALTHY |
| 6 | MFE age-band | 11 parse ngày; **6 >30d vẫn Active → KEPT** | status-driven | HEALTHY |
| 7 | MFE sub-coverage | **163/165 = 98,79%**, 21/23 role 100% | — | HEALTHY |
| 8 | A7 archive-integrity | **432/432, failed 0**, 12 sub | 429/429 *(số DIARY kỳ trước)* | HEALTHY **+3** |
| 9 | `ring1-audit` A7 | `PASS pointers 1 resolved 1` | `N/A` @S191 *(diary)* | HEALTHY (đóng trục) |
| 10 | giả-thuyết "vênh `ring2` 1↔2" | **BÁC** — `lưu 1` vs `dự-phóng 2`, source `:121-126` | — | HEALTHY (không phải lỗi) |
| 11 | probe `l2idx` | `0 over` — **đúng**, chứng ở §1d | — | HEALTHY |
| 12 | `measured` khớp đĩa | **10/29 khớp · 19/29 LỆCH**; đỉnh `score-counter` **+40,4%** | 29/29 @S191 *(diary)* | **REGRESSION** |
| 13 | l1 over `autoinject_cap` (BYTE) | **3/29** — `lead-gap` 29.295 · `ring2` 29.268 · `lead-stale` 27.154 | cap 25.600 | **REGRESSION** |
| 14 | l1 over ngưỡng KÝ-TỰ | **2/29** — `lead-gap` 25.594 · `ring2` 25.291 | **0** @S191 *(diary)* | **REGRESSION** (đảo chiều xấu) |
| 15 | Goodhart anchor | `strikes_total=25` **bất động 33/33 run · 18,1 ngày** | 25 | **REGRESSION** |
| 16 | MFE vai ngoài mẫu-số | **6/29** `N/A` (mẫu-số rỗng) | — | **REGRESSION** |
| 17 | gate over-cap planner | **3 sub** YES | 3 @S191 *(diary)* | **REGRESSION** |
| 18 | `ring2` strike A6 | **2** = `strike_need 2` — chạm ngưỡng PROPOSE | 1 (đĩa) | **REGRESSION** |
| 19 | keep-floor | **3/3** `keep-floor hit (5); cannot auto-drain` | — | **REGRESSION** |
| 20 | `.archive-strikes.json` tươi | mtime **08-07**, DRY-RUN không persist | — | **REGRESSION** |
| 21 | `.archive-strikes.json` phủ | **26 khoá / 29 vai** — thiếu `score-counter`·`score-count-auditor`·`ring5-audit`; `absent ≡ 0` (source `:121`) | — | **REGRESSION** |
| 22 | headroom vs target | **114.223** tok / target **210.000** | 122.555 *(S188, đĩa)* | **REGRESSION −95.777** |
| 23 | chuỗi headroom | **21 mốc / 17 phiên / 28 ngày · 0 lần đảo chiều** | — | **REGRESSION** (đơn-điệu xác nhận) |
| 24 | hotload sàn-file | **797.330 B**; STATUS+HANDOFF = **59,4%** | 473.694 B *(S127, đĩa)* | **REGRESSION +68,3%** |
| 25 | nhịp `light` | **6/6 OVERDUE** | `light_every` 6 | **REGRESSION** |
| 26 | nhịp `deep` | **1/1 OVERDUE** | `deep_every` 1 | **REGRESSION** |
| 27 | sổ yêu-cầu | **treo 7 / nhắc2+ 5** (mục 25) | — | **REGRESSION** |
| 28 | HCV về-sổ S191 | **9/11 về sổ · 2 THỦNG**: `ring5-audit` 0 hit · `harness-audit` 0 hit (control-dương xác nhận grep sống) | — | **REGRESSION** |
| 29 | phủ instrument trục về-sổ | **0/5 instrument thấy** | — | **REGRESSION** |
| 30 | vai sát mép cap | `reviewer` còn **131 B** · `harvest-curator` còn **248 B** | — | MIXED |
| 31 | l1 GIẢM | `cicd` **−6.899** · `ring1` **−3.975** | — | MIXED (curate hay mất? máy không nói) |
| 32 | `rca_entries` | **14 → 16** trong khi `strikes` đứng im | — | MIXED |
| 33 | MFE role <100% | `implementer-backend` **17/18=94%** · `implementer-frontend` **12/13=92%** | — | MIXED |
| 34 | số trôi giữa lượt | `score-counter` **3.322 → 4.115** (+793 B, mtime 02:41:38) | — | MIXED |
| 35 | tốc độ headroom | **−3.853 tok/ngày** toàn chuỗi; cuối −4.245, gần nhất −2.777 | — | MIXED (**KHÔNG tăng tốc**) |
| 36 | độ tin headroom | `114.223` = **CẬN TRÊN** (caveat máy: sàn-file, bỏ task-context) | — | MIXED |
| 37 | `run-chua-gom` | **0 → 1** — orphan = chính folder S192 | 0 *(lead dán)* | MIXED (tự sinh) |
| 38 | `pull-cach 3 ngay` | in ra số | — | **không-phán** (ngưỡng `pull_warn_days` tôi chưa kiểm kỳ này — không phán trên thứ chưa đo) |
| 39 | nợ harvest S188 **42.975 B / 4 vai** | số của `harvest-curator` | — | **NHƯỜNG H2** (không tái đo, đúng ranh-trục) |

---

## ĐỀ-XUẤT-SIGNAL cho `harness-refine` (nấc 2/3)

🔴 **Chỉ NÊU TÍN-HIỆU — tôi KHÔNG đề-xuất action nào.** Xếp theo sức nặng đo được:

1. **S-A · Điểm mù về-sổ (nặng nhất).** Trục #28+#29: 2 vai thủng S191, **0/5 instrument phát hiện**; `ring5-audit` được 4 phép đo chấm xanh cùng lúc. Lớp: *vắng-mặt trông giống ổn*. Cùng hướng với nợ H2 (#39) — hai cửa-sổ liên tiếp cùng thủng.
2. **S-B · Headroom.** #22/#23/#24: **114.223 < 210.000 (−95.777)**, 21 mốc 0 đảo chiều, hotload +68,3%/28 ngày, 59,4% khối lượng ở 2 file. Lưu ý sắc thái: **không tăng tốc** — đây là rò đều, không phải vỡ.
3. **S-C · 3 vai over-cap không tự thoát được.** #13/#17/#18/#19: `ring2-audit` đã **chạm strike 2**; cả 3 `keep-floor hit` ⇒ máy tự khai không auto-drain được. Cộng #30: 2 vai nữa cách mép **131 B / 248 B**.
4. **S-D · Hai state-file không tự tiến.** #20/#21 `.archive-strikes.json` (stale 6 ngày, thiếu 3 row, `absent ≡ 0`) và #15 anchor `strikes_total` (bất động 33 run) — **cùng một hình dạng**: máy đọc đúng, nhưng **đường ghi vào không có ai đi**.
5. **S-E · Baseline `measured` rữa lại.** #12: 29/29 → **19/29 lệch** chỉ sau 2 ngày ⇒ **mọi cột delta trong chính bảng này, kể cả cột tôi vừa đưa, đang so với số đã trôi.**
6. **S-F · Đơn-vị & định-nghĩa.** #14 (byte 3 ⟂ ký-tự 2 — đổi đơn-vị thì verdict đổi) và §1d (`l2_index` = 2 phép đo khác nhau cùng tên). **Trước khi neo action vào "over-cap", phải chốt đơn-vị.**
7. **S-G · Nhịp + sổ.** #25/#26 light 6/6 + deep 1/1 **cùng OVERDUE**; #27 sổ yêu-cầu **treo 7 / nhắc2+ 5** — segment này **rụng khỏi bề-mặt lead dán**, dễ vô hình.

## Caveat đóng (nhắc lại, không được cắt)

- **Provenance:** số **MÁY kỳ này** = §1–§5 (5/5 instrument chạy tươi, exit 0). Số gắn *(diary)* / *(đĩa)* / *(lead dán)* = **baseline kỳ trước**, đã dán nhãn từng chỗ — không trộn.
- **Tôi ghi 1 file duy nhất** = chính file này. `.mfe-state.json` đổi **+185 B** là do `mfe-eval.ps1` tự ghi (đã khai §2). ⚠️ **`git status` KHÔNG đủ backstop** — Stop-hook nuốt vào commit `wal:`; lead soi `git log` sau lượt này.
- **2 lỗi của CHÍNH TÔI, tự bắt trong lượt, đã sửa tại chỗ:** (a) §1d suýt phát REGRESSION giả do trừ 2 phép đo khác nhau; (b) §4b chuỗi headroom thiếu **4 mốc giữa** do regex trượt định-dạng `160.924` — đúng lớp lỗi làm S173 sai DẤU đạo hàm. Cả hai đều bị bắt **trước khi phát**, nhưng cả hai đều suýt lọt.

---

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

Tôi ghi **đúng 1 file** = file này. Nhưng caveat "`git status` không đủ backstop" **đã thành sự thật NGAY trong lượt này, đo được**:

- `.claude/agent-memory/.mfe-state.json` tôi làm đổi (**6.060 → 6.245 B**, do `mfe-eval.ps1` tự ghi) **đã BIẾN MẤT khỏi `git status`** ở cuối lượt.
- Nó không mất — nó bị **Stop-hook auto-commit nuốt vào commit `wal:`** (chuỗi `wal: flush 20260813T0240/0241/0248/0253/0255` sinh ra trong đúng khoảng tôi chạy).
⇒ **Lead soát working-tree cuối lượt sẽ KHÔNG thấy thay đổi đó.** Backstop chống-ghi-lén phải là **`git log` / diff các commit `wal:` sinh sau lượt vai**, KHÔNG phải `git status`. (Lớp đã bắt ở S173/S189 — kỳ này tái hiện nguyên vẹn và tôi để lại vết đo.)

**Tự khai đầy đủ:** ngoài file này, tôi **không** Write/Edit gì khác; các file khác đang `M` trong `git status` (`sub-lead-stale-deep`, `sub-ring1-audit`, `.session-counter.json`) là của **vai khác chạy song song**, không phải tôi. Mọi lệnh Bash của tôi là đọc/đo, trừ 2 thứ đã khai: file này + `.mfe-state.json` (do instrument tự ghi).
