# sub-apply-L5 — C-a eval-của-eval (thư 2026-07-21 eval-quality-audit)

> Lane L5 · run `2026-07-25-S149-adap-backlog` · agent tier `opus` effort MAX
> Label (khuôn-④ C3): **ai** = L5-apply · **gì** = C-a bảng eval-của-eval + report eval-quality-audit · **nhịp** = wave-apply S149 · **phiên** = S149 (2026-07-25)
> KHUNG RỖNG ghi ĐĨA TRƯỚC khi đọc/đo (chống #53 return-garble — ghi-đĩa-TRONG-lúc-làm).
> Thư nguồn đọc TRỌN: `AI_INFRA/broadcasts/outbox/all/2026-07-21-Governance-eval-quality-audit-ra-thuoc-eval-cua-eval.md` (55 dòng, `content_sha256: c04d39dbc8f5…`).

## ⓪ Fact-0: giải LỆCH 2 nguồn về trio — KẾT LUẬN: **trio ĐÃ chạy thật; cả 2 nguồn "pending" là VĂN-BẢN STALE, không phải sự-thật khác**

Lệnh giao nêu 2 nguồn. Đo ra **3** nguồn — và nguồn thứ 3 nghiêng cùng phía nguồn thứ 2.

| # | Nguồn | Nói gì | Đo được |
|---|---|---|---|
| 1 | `runs/2026-07-22-S144-trio-first-run/` | trio ĐÃ chạy | **5 file**: `harness-eval-return.md` (10.907 B) · `harness-refine-return.md` (14.321 B) · `harness-audit-return.md` (11.251 B) · `run.md` · `trio-synthesis.md`. Commit **`8b6df0a` 2026-07-23** |
| 2 | `.claude/agent-memory/memory-budget.json:186-188` | "S141 seed - **first-run pending restart+consent**" | Văn-bản **STALE** — chưa ai sửa sau S144 |
| 3 | 🆕 chính diary của trio, vd `agent-memory/harness-refine/MEMORY.md:16` | "S141 seed — **CHƯA chạy lần nào**; first-run chờ restart-CLI + spawn-probe + anh consent" | Cũng **STALE**, cùng gốc |

**Kết luận (khai đúng cái đo được):** trio **ĐÃ CHẠY** first-run thật @S144 (2026-07-22), tuần-tự eval→refine→audit, verdict trong `trio-synthesis.md:7` = `executed-file` → **`verified-runtime`**. Hai nguồn "pending" **không mâu thuẫn với nguồn 1 về sự-kiện** — chúng chỉ **chưa được cập-nhật**, vì đúng lý-do đã tự khai ở `trio-synthesis.md:35`: *"phiên S144→S145 chạy tiếp việc khác rồi `/pause`, harvest-gate chưa kịp gom"*.

**Nhưng có một vế "pending" VẪN ĐÚNG theo nghĩa hẹp** — và đây là chỗ dễ nhập nhằng, nên tách bạch:

| Nghĩa của "first-run" | Trạng thái THẬT | Bằng chứng |
|---|---|---|
| trio **chạy task** lần đầu | ✅ **RỒI** | 3 return-file + synthesis |
| trio **ghi diary** lần đầu | ❌ **CHƯA** | eval 1.547 B (mtime **2026-07-20**) · audit 1.513 B (mtime **2026-07-20**) — đứng y nguyên từ ngày seed |

⇒ Con-số `l1_hot` trong budget.json **vẫn khớp đĩa** (eval 1547 = 1547 ✔ · audit 1513 = 1513 ✔); chỉ **câu chữ `rollout`** là sai. Lý do 3 vai không tự ghi: `run.md:9` khai *"3 vai khai không có Write/Edit"* — nên first-run KHÔNG thể sinh diary; phải lead harvest, mà harvest bị cắt.

**Drift phụ đo được:** `harness-refine` = **1.611 B** ≠ 1.616 B ghi trong budget.json (−5 B, mtime 2026-07-24 23:11). Truy `git log -p`: commit `9abc2e1` **không phải** entry first-run mà là **đổi tên vai** `lead-omission-auditor` → `lead-gap-auditor` trong dòng split-boundary. ⇒ diary bị chạm vì lý-do khác, con số budget.json lệch 5 B từ đó.

> 🔴 **Đây chính là ca mẫu của cả đợt rà:** việc ĐÃ chạy, nhưng **bề-mặt-đo không đổi** ⇒ mọi thước đọc `memory-budget.json` sẽ báo "pending" **vĩnh viễn**. Không thước nào trong 17 thước dưới đây đo được ô `rollout` (văn xuôi tự-do, không máy nào parse). Cf. `feedback_absence_looks_like_clean` — vắng-mặt trông giống ổn.

## ① Bảng eval-của-eval — 4 câu của thư + verdict

**Quy ước cột:** **Q1** = đã bắt lỗi THẬT chưa (trích dòng, "chưa từng" cũng là dữ liệu) · **Q2** = activity ⟂ integrity ⟂ **efficacy-outcome** (hệ kiểm bắt được lỗi?) ⟂ **use-outcome** (tri-thức có được DÙNG?) · **Q3** = tự-nói-chuyện-với-mình {(a) token-hoá-thạch · (b) đếm-chính-dòng-định-nghĩa · (c) nhãn-hứa-không-ép · (d) chú-thích-tự-mâu-thuẫn} · **Q4** = bỏ thì lọt gì {dormant-đúng-thiết-kế ⟂ thừa-thật}.

🔒 **2 cột thẩm-quyền ĐỂ TRỐNG — owner điền.** AI chỉ được tự quyết cột "AI-tự-sửa" (vá máy/nhãn/filter); *"AI không tự quyết hai cột sau"* — thư `:24` verbatim.

### A. 7 thước ĐỘC-LẬP (script riêng)

| # | Thước | Q1 — bắt lỗi thật? | Q2 — lớp đo | Q3 — tự-nói? | Q4 — bỏ thì lọt gì | Verdict | 🔒 owner-SỐ | 🔒 owner-LUẬT |
|---|---|---|---|---|---|---|---|---|
| A1 | `mfe-eval.ps1` (Memory-Fidelity) | **CÓ, hôm nay** — fault-inject 3-arm ĐỎ đúng 2/2 (§②). Trước đó: chưa ca tự-nhiên nào | **efficacy-outcome** (nhánh GOODHART-WARN) + activity (span/FIT). Tự tách đúng H6.7 ở `:8-9` | 🔴 **CÓ — dạng MỚI, ngoài 4 dạng của hub: "tự-ăn-nhân-chứng"** (§②.3) | dormant-đúng-thiết-kế cho FIT; **nhưng WARN đang bị tự vô-hiệu** | **SỬA** (bỏ ghi-đè state khi chỉ đọc) | | |
| A2 | `applied-eval-nokey.ps1` | Có — `:276` tự khai *"caught by fault-injection: a sabotaged gate printed CASE FAIL yet the summary…"* | **efficacy-outcome** thuần (gate + 3-case selftest) | **KHÔNG** — mẫu-mực ngược: tự in *"This file is a MECHANISM, NOT a number"* + 4 caveat + từ-chối phát số | thừa-thật nếu bỏ = mất **positive-control duy nhất** dạng gate | **GIỮ** (mẫu chuẩn cho cả bộ) | | |
| A3 | `spawn-model-audit.ps1` | Có — S126 2026-07-16 đo spawn-param THẮNG frontmatter hard-pin (ghi ngay trong §E.5) | activity + integrity (20/20 model+effort); tự khai KHÔNG phải enforcement | **KHÔNG** — có hẳn §E *"what this report does NOT say"* 6 điều phủ-định | dormant-đúng-thiết-kế (retro-only, tự khai `:E.4`) | **GIỮ** | | |
| A4 | `nhip-no-probe.ps1` | Có (gián-tiếp) — `error-ledger.md:50` liệt nó là 1 trong 2 lưới của carve-out; `:61` kiểm S142 = **SỐNG** | activity (đếm nhịp/ngày) — **không** efficacy | Chưa thấy | dormant-đúng-thiết-kế (lưới nhắc, rẻ) | **GIỮ** | | |
| A5 | `distill-shard-probe.ps1` | Chưa từng KÊU tự-nhiên. Live: `pending=15 \| nguong=15 => IM` | activity (đếm shard chưa-gist) | ⚠️ **(d) nhẹ** — header `:3` ghi *"anh chot 7 @S144"* nhưng thân `:55-57` + config live = **15**. Header stale | dormant; **NHƯNG level-blind**: ngưỡng neo vào hiện-trạng (`-gt` cố ý, `:55-57` có lý-do owner) ⇒ chỉ kêu khi **thêm 1**, không bao giờ kêu vì "15 đã nhiều" | **SỬA** (chỉ vá comment `:3`) | | |
| A6 | `measure-agent-memory.ps1` | Chưa từng — tool xuất JSON byte, không có verdict | **activity/integrity** thuần (byte + `l1_over_30kb`) | Chưa thấy | dormant-đúng-thiết-kế (là nguồn số cho thước khác) | **GIỮ** | | |
| A7 | `closeout-sentinel.ps1` | Chưa đo được trong lượt này — `-Commit` là **mandatory**, không chạy trần được | efficacy-outcome (per-commit ritual) | Chưa thấy; `:35/:61-71` tự khai positive-control giới-hạn ở obs-pair | dormant-đúng-thiết-kế | **GIỮ** (chưa đủ dữ-liệu để đòi sửa) | | |

### B. 11 check TRONG `governance-detectors.ps1` (TOTAL live = **46**)

🔴 **Kể bằng THÀNH-PHẦN, không bằng số tổng** (bài Goodhart — số tổng che mất ai đang nói):

```
46 = 24 C1-wikilink  +  15 C2-derived-stale  +  3 H24-2-carry  +  3 C3-vocab-fork  +  1 H24-1-title
```

| # | Check | Q1 — bắt lỗi thật? | Q2 — lớp đo | Q3 — tự-nói? | Q4 — bỏ thì lọt gì | Verdict | 🔒 owner-SỐ | 🔒 owner-LUẬT |
|---|---|---|---|---|---|---|---|---|
| B1 | **C1** broken-gotcha-ref | Live **0 flag** | integrity | Không | dormant-đúng-thiết-kế | **GIỮ** | | |
| B2 | **C1** dangling-wikilink | Live **24 flag** = **52% toàn TOTAL**. Cùng MỘT lớp: hyphen⟂underscore. Chính detector tự in *"hyphen vs underscore basename fork is common"* | integrity | ⚠️ **(c) nhẹ** — biết nguyên-nhân mà vẫn phát 24 LOW không ai đóng ⇒ **bão-hoà nhiễu**, nuốt tín-hiệu | dormant nhưng đang **che** 22 flag còn lại | **SỬA** (normalize `-`⟂`_` rồi mới đếm) | | |
| B3 | **C2/B3** derived-staleness | Live **15 flag**; canonical khớp đĩa (mig 67 · gotcha 83) | integrity | Không — tự in caveat "soft net… can false-positive" + H18-A ratio-band hạ LOW | thừa-thật KHÔNG; đây là lưới chống drift B1 | **GIỮ** | | |
| B4 | **C3** vocab-fork | Live **3 flag** (wave-folder⟂run-trace · Dự trù⟂Ngân sách PRO · two-tier⟂all-inherit⟂worker-tier-pin) | integrity | Không (đã vá lớp citation-trap trước đó) | dormant-đúng-thiết-kế | **GIỮ** | | |
| B5 | **C4** self-line exclusion | **CÓ** — live: `6 paths excluded`, `0 self-match`, `0 leaked` | integrity **về chính bộ đo** (meta-guard) | Đây là **thuốc giải** dạng tự-nói, không phải bệnh | bỏ = detector tự-khớp chính mình (citation-trap đã cháy thật) | **GIỮ** | | |
| B6 | **C5** WAL guardrail | Live `[OK] WAL.md = 30 lines (<= 40)` | integrity (hard cap) | Không | dormant-đúng-thiết-kế (H22) | **GIỮ** | | |
| B7 | **C6** cite-2-tier (INFORM) | Live 0/48 file | integrity | Không — tách `InformCount`, không trộn TOTAL | dormant, mới | **GIỮ** | | |
| B8 | **C9** hmw WIDTH mirror (INFORM) | Live `[ok] 20 == 20`; `:1545` khai FAIL-LOUD khi thiếu mirror | integrity | Không | dormant-đúng-thiết-kế | **GIỮ** | | |
| B9 | **C10** logic-session folder (INFORM) | Live `[ok] session-3 is OPEN`, 0 flag | integrity | Không | dormant, mới @S149 | **GIỮ** | | |
| B10 | **C11** H24 FLAG-khuôn (INFORM) | Live 0 — **và tự khai**: *"MEASURED NOTHING… a 0 after a skip is not a green"* | integrity | **KHÔNG** — mẫu-mực: tự tố cáo "xanh-vì-mù" của chính mình | dormant, mới @S149 | **GIỮ** | | |
| B11 | **H24-2** carry-age | Live **3 flag** (uat-s134 ×7 · uat-s133 ×9 · hook-vs-budget ×13) | activity (đếm streak) | 🔴 **CÓ — dạng (d) chú-thích-tự-mâu-thuẫn, XÁC NHẬN TRONG CODE** (§②.4) | dormant; nhưng đang **bơm số vào TOTAL** | **SỬA** | | |
| — | H24-1 title · H24-3 label-lag · H24-4 pending-flip · H24-5 counter-ancestor · H25-1 closeout-ritual · H25-2 role-notebook | H24-1 = 1 flag · H24-3 `[skip]` · H24-4/5 = 0 · H25-1 `[ok]` 3/3 · H25-2 roster 20, diaries-ok 18, **inert 2** | integrity | H24-3 in `[skip]` trung-thực | phụ-lục, không đủ chỗ soi kỹ lượt này | **GIỮ** (chưa rà sâu — khai thẳng) | | |

**Tổng verdict:** GIỮ **13** · SỬA **4** (A1 · A5 · B2 · B11) · BỎ **0** · THÊM **1 đề-xuất** (§③).

## ② Fault-inject THẬT (`-RepoRoot` cây tạm, khuôn S95) + 2 phát hiện phái sinh

### ②.1 Chọn thước: `mfe-eval.ps1` — **chưa từng bị fault-inject**
Grep `docs/governance/ + runs/` ra 8 hit `mfe-eval` nhưng **0 hit fault-inject cho chính nó**; hit gần nhất (`adap-reports/2026-06-30…harness-17…:49`) chỉ chứng *"mfe-eval.ps1 (A2 reuse) exit-0 KHÔNG vỡ"* = happy-path, **không** chứng có RĂNG. Đủ điều-kiện "chọn thước chưa từng inject".

### ②.2 Kết quả — 3 arm, cây tạm ngoài git, script `scratchpad/mfe-faultinject.ps1`

| ARM | Bơm gì | FIT | GOODHART | Kỳ vọng | Kết |
|---|---|---|---|---|---|
| **0** negative-control | không bơm (bản sao sạch) | PASS | no-warn | PASS / no-warn | ✅ |
| **A** | `.mfe-state.json.strikes_total` 23 → **3** | PASS | **WARN-FIRED** | WARN | ✅ |
| **B** | `lead_tokens` 380000 → **100** | **OVER** | no-warn | OVER | ✅ |

Dòng ĐỎ thật arm A: `GOODHART-WARN: strikes rose (3 -> 23) while set still FITS -> coverage may LIE (set 'fits' but errors recur = not actually applied)`
Dòng ĐỎ thật arm B: `FIT = OVER (worst-case exceeds cap) -> decision: INCREASE budget`

⇒ **`mfe-eval` CÓ RĂNG, 2/2 nhánh, im đúng lúc sạch.** Không phải "xanh-vì-mù".

### ②.3 🔴 Phát hiện 1 — **dạng tự-nói-chuyện THỨ 5, chưa có trong 4 dạng của hub: "thước tự ăn nhân-chứng của mình"**

`mfe-eval.ps1` tự khai `:16` *"a measure-and-report tool, NOT a build gate"* và `:12-13` *"READ-ONLY on token_governor"* — nhưng nó **GHI** `.claude/agent-memory/.mfe-state.json` mỗi lần chạy (`:205-209` `WriteAllText`; write-ops = **2**, là script **duy nhất** ghi trong 8 thước đọc-only đã soi).

Hệ quả không phải "bẩn git" mà nặng hơn — **cơ-chế cảnh-báo tự tháo ngòi**:
- `:193` đọc `$lastStrikes` từ state → `:205-209` **ghi đè ngay** state bằng số hiện-tại.
- ⇒ sau BẤT KỲ lần chạy nào, `last == current` ⇒ **GOODHART-WARN không thể nổ** cho tới khi strikes tăng tiếp.
- ⇒ ai chạy MFE "chỉ để xem" (đúng như tôi làm hôm nay) là **đốt mất cửa-sổ cảnh-báo** của lần chạy chính-thức kế tiếp. **Quan-sát tiêu-thụ nhân-chứng.**

**Bằng chứng sống, chính tôi gây ra:** lần chạy baseline làm `git status` hiện ` M .claude/agent-memory/.mfe-state.json`; diff thật = `"at": 2026-07-22 → 2026-07-25` và `"rca_entries": 12 → 14`. **Đã `git checkout --` hoàn nguyên**, git sạch lại (giữ đúng isolation B6, và trả lại cửa-sổ warn cho lần chạy thật).

### ②.4 🔴 Phát hiện 2 — **H24-2 = dạng (d) nguyên-bản, xác nhận trong code**

- `:909` phát cờ bằng `Write-Flag` ⇒ tăng `$script:FlagCount` = **TOTAL**.
- Nhưng nội-dung cờ ghi `gap-carry-aged **[INFORM]**` + resolve `"INFORM-only - **no action forced**"`; tiêu-đề section `:820` cũng ghi `(INFORM-only)`; docstring `:24` ghi INFORM-only.
- Trong khi `:1818` liệt roster INFORM-ONLY = `C6 + H24-4 + H24-5 + C9 + C11` — **KHÔNG có H24-2**; và chính-sách `:65-73` nói rõ sink INFORM là để *"a brand-new net… must not move the audited TOTAL"*.

⇒ Cùng một output vừa nói *"không ép hành-động"* vừa **tính vào TOTAL bị siết**. Nguyên-nhân nhiều khả năng: H24-2 có TRƯỚC khi sink `InformCount` ra đời (`:65` chỉ kể C6, H24-4), lúc thêm sink **quên di-cư**.

**Ảnh hưởng đo được:** 3/46 = **6,5%** TOTAL là cờ tự-nhận không-ép. Nặng hơn: acceptance của chính wave này (`spec:19`) là *"detector TOTAL không tăng"* — mà một `[carry:]` owner **cố ý giữ** sẽ đẩy TOTAL lên và **đọc thành hồi-quy**.

⚠️ **Nhưng vá là RỜI TẬP-ĐO:** chuyển 3 cờ sang INFORM hạ TOTAL 46→43 — *trông y hệt tiến-bộ* mà không sửa gì thật (đúng bài `feedback_goodhart_leave_measurement_set`). ⇒ **KHÔNG tự vá.** Phải owner chốt: baseline mới 43 có được ratify không, hay giữ 46 và chỉ đổi nhãn? → cột 🔒 owner-LUẬT của B11.

## ③ THÊM-mới (đề-xuất, KHÔNG tự wire)

1. **Thước đo "bề-mặt-đo có được cập-nhật không"** — Fact-0 cho thấy trio chạy 3 ngày trước mà 2 chỗ văn-bản vẫn ghi "pending", **0 thước phát hiện**. Đề-xuất check: role có return-file trong `runs/**` mà `memory-budget.json.rollout` còn chữ `first-run pending` ⇒ FLAG INFORM. (Họ-hàng "first-run-role-has-diary" đã đề-xuất lên hub tại `error-ledger.md:118`, đang **chờ hub canonical** — SE không tự chế detector riêng.)
2. **Đưa dạng-5 "tự-ăn-nhân-chứng" vào khung 4-câu** (câu 3 thành 5 dạng) — đề-xuất ngược lên hub qua `/adap-request` nếu anh duyệt.

## ④ KHÔNG CHẮC / honest-caveat

1. **A7 `closeout-sentinel` chưa đo** — `-Commit` mandatory; verdict GIỮ là **suy từ đọc code**, không phải từ chạy. Khai thẳng.
2. **Dòng cuối bảng B (H24-1/3/4/5 + H25-1/2)** gộp 6 check vào 1 dòng — **chưa rà 4 câu từng cái**. Đây là thiếu-sót có chủ-đích do trần lượt, KHÔNG phải "đã phủ hết". Cf. `feedback_meta_count_selfcoverage_blindspot`: không lấy số tổng thay cho từng dòng.
3. **Q1 của A4/A5/A6/A7** dựa trên vắng-mặt bằng-chứng (grep sổ ra 0 ca) — vắng-mặt ≠ chứng-minh chưa từng bắt; sổ có thể ghi thiếu.
4. **Fault-inject chỉ phủ `mfe-eval`** (1/17 thước). 16 thước còn lại **chưa có fixture đông-lạnh** — đúng lớp hub cảnh báo (`thư:31` 17/18 check thiếu positive-control). Không suy ra "cả bộ có răng".
5. **Cây tạm nằm ở scratchpad NGOÀI repo** (đúng chỗ tạm được cấp) — nên `git diff` không thấy; containment chứng bằng `git status` sạch sau khi hoàn nguyên `.mfe-state.json`, không phải bằng diff cây tạm.
6. **Số hub KHÔNG chép** (thư `:55` dặn) — mọi con số trên là SE tự đo hôm nay.

## ⑤ Report đã ghi

`docs/governance/adap-reports/2026-07-21-Governance-eval-quality-audit-ra-thuoc-eval-cua-eval.md` — nấc **executed-partial**, đủ 5 trường format-LOCK, trỏ ngược file này cho bảng.

## Log tiến-trình

- [L1] khung rỗng ghi đĩa TRƯỚC khi đo. [L2] đọc spec + sub-invest §② + thư nguồn TRỌN.
- [L3-4] Fact-0: ls+git log folder trio · budget.json:186-188 · **tự tìm ra nguồn-3** (diary trio) · đo byte 3 diary · truy `git log -p` drift −5B refine.
- [L5-7] chạy detector suite live (TOTAL 46) + tally thành-phần theo section + soi code `:909`/`:65-73`/`:1818` xác nhận mâu-thuẫn H24-2.
- [L8-10] map input mfe-eval → dựng `mfe-faultinject.ps1` 3-arm → vá bug PS5.1 (`if` inline không phải expression) → **PASS 3/3**.
- [L11] `git status` bắt **chính mình** làm bẩn `.mfe-state.json` → truy `:205-209` → ra phát-hiện dạng-5 → `git checkout --` hoàn nguyên.
- [L12] probe còn lại (nhip-no · distill-shard · spawn-model · applied-eval · measure-agent) + write-op scan 8 script → mfe là outlier duy nhất.
- [L13] bảng 18 dòng + report.
