# sub-ring1-audit — S151 (KIỂM vòng-ĐO tooling/harvest)

**Vai:** ring1-audit · vai-KIỂM độc-lập vòng-1 (H1 `tooling-auditor` + H2 `harvest-curator`) · read-only · propose-only · em-main = single-writer.
**Fire:** AUTO sau H1+H2 chốt (C4b tuần-tự — chạy SAU con-đo, KHÔNG song-song).
**no-self-exempt (m-3):** tôi KHÔNG phải H1/H2; tôi chỉ ĐỌC output của chúng.
**Ghi-đĩa-TRONG-lúc-làm:** file này tạo TRƯỚC khi chấm claim đầu tiên.
🔴 **Tự khai #53:** lượt này tôi **garble 1 lần** — verify xong 26 tool-use rồi return câu *"Writing the full audit to disk now"* mà đĩa mới có mục (i) (1.103B). Lead bắt + resume in-session; toàn bộ số dưới đây là kết-quả ĐÃ ĐO xong trước lúc garble, không đo lại từ trí-nhớ. **Bài: "ghi-đĩa-trong-lúc-làm" mà tôi làm chỉ là ghi HEADER trước — header không phải ruột.**

---

## (i) PIN + FAIL-SAFE — input CÓ THẬT ✅

| Pin | Đường dẫn | Byte | mtime | Tươi phiên này? |
|---|---|---|---|---|
| H1 | `.claude/workflows/runs/2026-07-25-S151-h24-open-bookend/sub-tooling-S151.md` | 17.702 | 2026-07-25 17:51 | ✅ |
| H2 | `…/sub-harvest-S151.md` | 8.944 | 2026-07-25 17:45 | ✅ |

⇒ **KHÔNG NO-OP.** Cả 2 con-đo CÓ chạy phiên này ⇒ có artifact authoritative để chấm.
C4b tuần-tự: file này ghi SAU cả 2 mtime trên.

---

## (ii) VERDICT PER-CLAIM — 38 claim: **ĐẠT 33 · TRƯỢT 3 · KHÔNG-CHẠM 2**

### A. H1 `tooling-auditor` — 22 claim: ĐẠT 20 / TRƯỢT 1 / KHÔNG-CHẠM 1

| # | Claim H1 | Verdict | Bằng-chứng tôi tự chạy |
|---|---|---|---|
| H1-1 | ③ registered `enabledPlugins` = **18** | **ĐẠT** | `json.load(~/.claude/settings.json)` → `len=18` (parse KHÁC H1: python json, không grep) |
| H1-2 | ③ enabled **15** / disabled **3** (`pr-review-toolkit`·`code-modernization`·`hookify`) | **ĐẠT** | python → enabled 15, disabled list khớp **cả 3 TÊN** |
| H1-3 | ③ marketplace **37** | **ĐẠT** | `ls -d ~/.claude/plugins/marketplaces/claude-plugins-official/plugins/*/ \| wc -l` = 37 |
| H1-4 | ③ `effortLevel`=`xhigh` · `model`=`claude-opus-5[1m]` | **ĐẠT** | python đọc 2 key trực-tiếp — khớp literal |
| H1-5 | ② roster **20=20=20=20** | **ĐẠT** (mạnh hơn H1 khai) | xem §(iv) — tôi so **TẬP** chứ không so SỐ: `diff` 3 danh-sách tên = **identical**, 0 dòng lệch |
| H1-6 | ② frontmatter **20/20** `model: opus`@:5 + `effort: max`@:6 | **ĐẠT** | loop 20 file, awk NR==5/NR==6 → `20/20`, mismatch RỖNG |
| H1-7 | ② `git diff 398d343..HEAD -- .claude/agents/` RỖNG | **ĐẠT** | `git diff --stat 398d343..HEAD -- .claude/agents/ .claude/skills/ .claude/commands/` → rỗng |
| H1-8 | **F-2 HIGH** `README:249` "17 folder" + **lời-biện-hộ tự-niêm-phong** | **ĐẠT** | quote VERBATIM trên đĩa: *"…`ring1-audit/` đã có dir RỖNG từ spawn-probe S145 [git KHÔNG track empty-dir] ⇒ **committed-state = 17 folder-có-MEMORY.md**, khớp. `ls` thô có thể ra 18 dir gồm dir rỗng."* H1 **KHÔNG thêm chữ nào** |
| H1-9 | F-2 bác-bỏ: 3 ring MEMORY.md **4.481/9.840/1.047B** + cả 3 **tracked** | **ĐẠT** | `stat` khớp **từng byte**; `git ls-files` trả đủ 3 path ⇒ lời-biện-hộ SAI ở chính nấc nó tự chọn |
| H1-10 | **F-3** `STATUS:452` cite `README:227` = **dòng TRỐNG** | **ĐẠT** | `awk NR==227` → rỗng (kẹp giữa :226 bullet `commit-commands` và :228 `---`) |
| H1-11 | F-3 câu thật ở `README:240`, lệch **13 dòng** | **ĐẠT** | :240 chứa VERBATIM *"🔴 **Registry = ảnh-chụp lúc khởi phiên, KHÔNG hot-reload** ⇒ vai mới cần **RESTART + spawn-probe THẬT**"* (nằm sâu trong mega-line — xem falsify F-5) |
| H1-12 | **F-4** `hmw.js:46` + `:65` = "17/17", đĩa 20/20 | **ĐẠT** | `grep -n '17/17'` → đúng **2 hit**, :46 và :65, không thừa không thiếu |
| H1-13 | F-4 (ngầm) `hmw.js:145` "14/14" KHÔNG flag vì dated | **ĐẠT** | :145 = *"S125/S126 = 14/14 **thời roster**"* → frozen-in-time, H1 bỏ qua ĐÚNG luật |
| H1-14 | **F-5** `spawn-model-audit.ps1:35-36` + chưa-phủ thật = **6** | **ĐẠT** | text khớp verbatim; 20 (roster) − 14 (N lúc đo) = **6** ✓ |
| H1-15 | **F-6** `grep '#111'` = **ZERO hit** | **ĐẠT** | `grep -c '#111'` = **0**, exit 1 |
| H1-16 | F-6 `111` xuất-hiện đúng **1 lần** @:85 = `gotchas 111.616B` | **ĐẠT** | `grep -on '111'` → **`85:111`** duy nhất; ngữ-cảnh `STATUS 180.776B · gotchas 111.616B ~19,6%`; **`stat docs/gotchas.md` = 111616** ⇒ đúng là BYTE-SIZE |
| H1-17 | F-6 ref `#N` thật trên :85 = `#26` (≤83) | **ĐẠT** | `grep -o '#[0-9]\+'` trên :85 → chỉ `#26` |
| H1-18 | F-6 cơ-chế FP = nhánh no-`#` của regex `:354/:355` | **ĐẠT** | `:355` = `'(?:gotcha[s]?\s*#?(\d+))\|(?<![A-Za-z0-9])#(\d+)'` — nhánh `gotcha[s]?\s*#?` nuốt `gotchas 111` ⇒ **cơ-chế H1 mô-tả CHÍNH XÁC** |
| H1-19 | **F-7** `session-start:294`~3076 · `STATUS:453`=2441 · **live 2447** | **ĐẠT** | 2 số đầu đọc đĩa khớp; **live tôi TỰ GỌI `list_projects`** → `proj_solution_erp` `chunk_count=2447`, `last_indexed_at=2026-05-29T23:26:13` — khớp tuyệt đối |
| H1-20 | **F-8** `README:302` dated "(S38 — 2026-05-28)" ⇒ sửa NHÃN không sửa SỐ | **ĐẠT** | :302 khớp verbatim, có nhãn ngày ⇒ đúng lớp frozen |
| H1-21 | **F-1** `session-start:41-44` ĐÓNG · `STATUS:452` CÒN HỞ (owner-choice + Fable 5 + **0 hit Opus-5** + flip dừng flip-8) | **ĐẠT** | :41 = VALUE-update @S149 "Default = Opus 5 MAX ở MỌI vị trí"; :44 outage = "GIỮ `/model claude-opus-4-8[1m]`" ⇒ F-C@S143 hết hiệu-lực ✓. :452 → `grep -oi 'opus[- ]5'` = **0 hit**, có `owner-choice`+`Fable 5`, flip cao nhất = flip-8 ✓ |
| H1-22 | ① skill **6** / standalone **23** / command **19** + git-diff rỗng | **ĐẠT** | `ls -d` 3 lớp → 6 / 23 / 19 khớp cả 3 |
| **H1-23** | **① SKILL = PASS** | 🔴 **TRƯỢT (phạm-vi)** | **thách-CLEAN phá được** — §(iv). `ef-core-migration/SKILL.md`: hàng Mig cao nhất = **66**, `grep -c '67'` = **0** (chuỗi "67" vắng mặt hoàn toàn); canonical `STATUS:441` = **Mig 67 `AddPeApprovedBudgetSnapshot`** (S133). ⇒ LOW của detector là **DƯƠNG-THẬT**; `①PASS` chỉ đúng ở lớp **đếm/tồn-tại**, KHÔNG đúng ở lớp **nội-dung** |
| H1-24 | ① 6/6 `name:` frontmatter khớp tên thư-mục | **KHÔNG-CHẠM** | tôi không đo lại — không xác-nhận, cũng không bác |

🔸 **Ghi công H1:** H1 **TỰ KHAI giới-hạn** ở `:100` — *"tôi KHÔNG mở thân 2 file `SKILL.md` … LOW đó CHƯA được tôi xác-minh độc-lập, và cũng không được đọc là đã-clear"*. ⇒ TRƯỢT H1-23 là **TRƯỢT của cái NHÃN `①PASS`**, KHÔNG phải H1 giấu. Đề-xuất đổi nhãn thành `PASS(shallow) + 1 LOW chưa-verify` để nhãn thôi tự-thanh-minh.

### B. H2 `harvest-curator` — 16 claim: ĐẠT 13 / TRƯỢT 2 / KHÔNG-CHẠM 1

| # | Claim H2 | Verdict | Bằng-chứng tôi tự chạy |
|---|---|---|---|
| H2-1 | T1 coverage: mọi sub đã-return có vết đĩa; synthesis vắng by-design | **ĐẠT** | `ls` run-folder khớp bảng H2 |
| H2-2 | T2 universe = **50** folder có `run.md` | **ĐẠT** | `find -mindepth 2 -maxdepth 2 -name run.md \| wc -l` = **50** |
| H2-3 | T2 orphan = 1 = chính wave đang chạy | **ĐẠT** | loop dual-accept (`*synthesis*.md` size>0 ∨ `harvest/*.md` size>0) → orphan duy nhất = `2026-07-25-S151-h24-open-bookend` |
| **H2-4** | T2 **"Orphan thực = 0/49"** | 🔴 **TRƯỢT (universe hở)** | tổng dir con của `runs/` = **53**, chỉ **50** có `run.md` ⇒ **3 folder NẰM NGOÀI phép quét**. Trong đó `2026-07-22-S144-bootstrap/` có **`sub-harvest-curator-1.md` 18.326B + `sub-tooling-auditor-1.md` 16.732B** (ruột thật) và **0 synthesis** ⇒ thoả đúng định-nghĩa orphan của chính H2, nhưng **vô-hình** vì thiếu `run.md`. (2 dir kia = spec-only S117, tiền-định-dạng run-trace — vô-hại.) **Tiêu-chí quét tự loại mất ca nó cần bắt nhất.** |
| H2-5 | T3 corruption **0** U+FFFD | **ĐẠT** | tôi tấn-công RỘNG hơn H2 (toàn `agent-memory/**` thay vì mẫu 7-file) → 4 hit → điều-tra → **DƯƠNG-GIẢ CỦA TÔI** (falsify F-4). H2 đúng |
| H2-6 | T3 **0** file `.md` 0-byte | **ĐẠT** | `find .claude/agent-memory -name '*.md' -size 0 \| wc -l` = **0** |
| H2-7 | T4 `git status --porcelain .claude/agent-memory` = **0 dòng** | **ĐẠT** | tự chạy → 0 |
| H2-8 | T4 `find .claude -type d -empty` = **0** | **ĐẠT** | tự chạy → 0 (m#13 git-MÙ hết ca) |
| H2-9 | T4 role-dir có MEMORY.md **20/20** | **ĐẠT** | 20 dir / 20 MEMORY.md — khớp, và trùng roster §(iv) |
| H2-10 | T4 **2 FLAG S150 ĐÓNG** (ring1 4.481B · ring4 1.047B) | **ĐẠT** (có caveat) | byte khớp tuyệt đối + tracked. ⚠️ caveat §(iv): `ring4-audit/MEMORY.md` = **SEED-only lead ghi on-behalf**, tự khai *"Vai CHƯA chạy audit-round nào"* — **0 delta do chính vai APPEND**. Claim H2 chỉ nói **"có nhà"** (placement) ⇒ **đúng như đã phát-biểu**; nhưng đọc lướt "FLAG ĐÓNG" dễ hiểu thành "vai đã harvest" |
| H2-11 | T5a S150 **6/6** có entry, hit `1·3·1·8·2·2` | **ĐẠT (exact)** | đơn-vị của tôi (`grep -o \| wc -l`) ra `2·6·2·12·5·8` — **lệch 6/6**; đổi sang `grep -c` (dòng) → **1·3·1·8·2·2 khớp TỪNG SỐ**. Xem falsify F-3 |
| H2-12 | T5b S151 5 vai **0** diary-hit (pending-by-design) | **ĐẠT (exact)** | 5/5 role → 0 hit |
| H2-13 | T5 "Delta mồ-côi từ session ĐÓNG = **0**" | **ĐẠT (kết-luận) / yếu (dụng-cụ)** | kết-luận đứng. Nhưng *grep-hit ≥1* **không phân-biệt entry THẬT với tên bị nhắc trong header**: `ring4-audit` "S149 hit=1" nằm ở **dòng 3 — blurb `rename @S149 (cũ: sleep-audit)`**, không phải entry phiên S149. Ở đây vô-hại (ring4 thật sự chưa chạy S149) — nhưng **dụng-cụ sẽ báo "CÓ" y hệt trong ca nó phải báo "THIẾU"** |
| **H2-14** | Fidelity: counter `signal_decided` S151 = **4 class** ⇒ **"KHỚP EXACT"** | 🔴 **TRƯỢT** | JSON thật: `last_audit.signal_decided` = **6 class** `['view-stale-role-desc','view-stale-count','view-residual-asym','gap-carry-aged','gap-decision-sunk','gap-carry-dropped']`. H2 **bỏ 2**. Tệ hơn: class thứ-4 H2 liệt (`gap-carry-aged`) có **0 hit trong `sub-lead-stale-S151.md`** (4 hit ở `sub-lead-gap`) ⇒ **4-vs-3 không thể "EXACT"** ngay trên danh-sách H2 tự cắt. Xem F-6 — **kết-luận fidelity vẫn CỨU được bằng phép dẫn KHÁC** |
| H2-15 | Chore: cap **25.600** · lead-gap **24.185 = 94,5%** · +5 vai | **ĐẠT (exact)** | cap đọc canonical `memory-budget.json` (`tiers.l1_hot.autoinject_cap_bytes`=25600, `archive_gate`=25600). lead-gap 24185→**94,5%** ✓ · harvest 20933 ✓ · test-spec 22140 ✓ · frontend 21492 ✓ · tooling 20082 ✓ · cicd 19281 ✓ — **7/7 khớp** |
| H2-16 | Tally #53 = **45 qua S150** @`feedback…:18` | **ĐẠT** | `awk NR==18` → *"⇒ **TỔNG = 45 qua S150.**"* ✓ (H2 báo-thôi, không tự nâng — đúng luật) |
| H2-17 | Shard `0/2` chưa có `.gist.md` | **KHÔNG-CHẠM** | chỉ `ls` thấy `MEMORY.md` + `archive/`, không mở `archive/` |

---

## (iii) FALSIFY-LOG — 9 phép: **6 HELD / 3 BROKE**

**F-1 · HELD** — *phá F-6*: nếu `#111` là ref thật thì H1 sai và máy đúng. 4 đường: `grep -c '#111'`=0 · `grep -on '111'`=1 hit duy nhất @:85 · ngữ-cảnh `gotchas 111.616B` · **`stat docs/gotchas.md` = 111616 byte**. Không phá được. Bằng-chứng thứ-4 là cái H1 **khẳng-định mà chưa chứng**; tôi chứng hộ.

**F-2 · HELD** — *phá roster 20*: thay vì đếm lại (dễ khớp giả), **so TẬP**: `diff` danh-sách tên từ (a) `ls .claude/agents/*.md` **trừ README**, (b) `VALID_ROLES` :22-41 tách bằng regex `'[a-z0-9-]+'`, (c) `find agent-memory -type d`. **Cả 2 `diff` = identical, 0 dòng.** Roster không chỉ **bằng SỐ** mà **trùng TÊN**.

**F-3 · HELD (sau khi hoà đơn-vị)** — *phá H2 T5a*: đếm hit S150 bằng **occurrence** ra `2·6·2·12·5·8`, lệch **6/6** → thoạt trông H2 sai toàn tập. Đổi sang **line-count** → **khớp tuyệt đối**. ⇒ **không phải H2 sai, là tôi đo khác đơn-vị** (đúng bẫy `feedback_resume_premise_reverify` S130 E-010).

**F-4 · HELD (tôi tự-bắt dương-giả của chính mình)** — *phá H2 T3*: H2 chỉ quét **7 diary + 7 file run-folder**; tôi quét **TOÀN** `agent-memory/**/*.md` → **4 file có U+FFFD**, gồm **chính `harvest-curator/MEMORY.md`**. Suýt nộp thành HIGH *"H2 sạch-giả ngay trên nhà mình"*. Điều-tra tiếp: decode `errors='strict'` → **UTF-8 HỢP-LỆ**, U+FFFD là ký-tự **lưu thật**, ngữ-cảnh:
> `Corruption PASS (FFFD 0/3 … inv-cb "<FFFD>24.1KB" = m#6 tail-cut artifact tự-bắt)`
> `(cicd) console showed "C<FFFD>ng" = sqlcmd codepage mangle of "ô", NOT data corruption`

⇒ U+FFFD nằm trong **TRÍCH-DẪN mô-tả một artifact hỏng đã bắt** — đúng lớp `feedback_citation_trap_selfreference`: **detector khớp-mẫu bắt chính tài-liệu nói về mẫu đó**. Discriminator = **use ⟂ mention**, KHÔNG phải charset-guard. **H2 ĐÚNG, tôi sai.**

**F-5 · HELD** — *phá F-3 của H1*: `awk NR==240` cắt 160 ký-tự đầu ra câu *"Đổi roster = đổi 2 BỀ-MẶT ĐỘC-LẬP…"*, **khác hẳn** câu H1 trích → nghi H1 trích sai dòng. Nhưng `grep -n 'hot-reload'` **CÓ liệt :240**, và `grep -o '.\{0,20\}Registry = .\{0,110\}'` lôi ra đúng câu H1 trích, verbatim. **H1 đúng — bài cho tôi: trên mega-line, `awk`+`cut` là dụng-cụ MÙ; phải `grep -o` quanh chuỗi.**

**F-6 · BROKE** — *phá H2 fidelity*: H2 nói `signal_decided` = 4 class. JSON thật = **6**. Truy nguồn từng class:

| Class | hit `sub-lead-stale` | hit `sub-lead-gap` |
|---|---|---|
| view-stale-role-desc / view-stale-count / view-residual-asym | 2 / 4 / 5 | — |
| gap-carry-aged / gap-decision-sunk / gap-carry-dropped | **0 / 0 / 0** | 4 / 3 / 5 |

🔴 **Phá xong thì SỰ THẬT LẠI SẠCH HƠN lời khai:** cả **6/6** class truy được về đúng file nguồn, **0 cross-contamination, 0 class bịa** — fidelity thật là **6/6 hai-nguồn**, mạnh hơn cái "4-vs-3 EXACT" méo mó. `class_repeat` cũng tăng đúng **6** class (+1 mỗi cái). ⇒ **kết-luận H2 SỐNG, phép dẫn CHẾT.** Lỗi = *ghép nhầm sổ*: counter là sổ **CẢ WAVE (2 vai H24)**, H2 đem so **1 vai** rồi cắt cho vừa ⇒ chữ "EXACT" **tự sinh ra từ thao-tác cắt**.

**F-7 · BROKE** — *phá H2 orphan 0/49*: liệt dir **KHÔNG có `run.md`** → 3 cái, trong đó `2026-07-22-S144-bootstrap/` mang **2 sub-file 18.326B + 16.732B, không synthesis**. Thoả định-nghĩa orphan của chính H2 nhưng bị loại khỏi mẫu-số. ⇒ đúng lớp `feedback_absence_looks_like_clean`: **thiếu-hồ-sơ đọc thành sạch-hồ-sơ**. Sửa rẻ: universe = *dir chứa BẤT KỲ `sub-*.md`*, không phải *dir chứa `run.md`*.

**F-8 · HELD** — *phá F-2 của H1 (nghi paraphrase)*: finding HIGH treo trên một câu trích dài; H1 diễn-giải thoáng thì HIGH sụp. Đọc `README:249` full → lời-biện-hộ **tồn-tại nguyên văn**, gồm cả *"committed-state = 17 folder-có-MEMORY.md, khớp"* và *"`ls` thô có thể ra 18 dir gồm dir rỗng"*. H1 không thêm chữ nào. Và nó **sai nặng hơn H1 nói**: doc dự-phòng "18 dir", thực-tế **20 dir, 20/20 có MEMORY.md, 3/3 tracked**.

**F-9 · BROKE** — *phá H1 ①SKILL PASS*: xem §(iv) thách-CLEAN.

---

## (iv) TỰ TÁI-DỰNG SỐ + THÁCH-CLEAN

### (a) 9 số load-bearing tự dựng lại — **6 khớp / 3 lệch**

| # | Số | H1/H2 báo | Tôi đo | Dụng-cụ **khác** con-đo |
|---|---|---|---|---|
| 1 | roster | 20=20=20=20 | **20** + **TRÙNG TÊN** | `diff` 3 danh-sách (so TẬP, không so SỐ) |
| 2 | plugin | 18/15/3 · 37 | **18/15/3 · 37** | `json.load` (không grep) |
| 3 | RAG live | 2447 | **2447** + `last_indexed 2026-05-29T23:26:13` | tôi TỰ gọi `list_projects` |
| 4 | `gotchas.md` byte | (H1 ngụ-ý 111.616) | **111616** | `stat -c%s` |
| 5 | lead-gap % cap | 94,5% | **94,5%** (24185/25600) | cap đọc từ JSON canonical |
| 6 | S150 diary-hit | 1·3·1·8·2·2 | **khớp** (đơn-vị dòng) | thử CẢ 2 đơn-vị |
| 7 | `signal_decided` | **4** class | 🔴 **6** class | đọc JSON thay vì đọc prose |
| 8 | orphan universe | 50 (ngụ-ý đủ) | 🔴 **50/53** — 3 dir ngoài tầm | đếm **mẫu-số**, không đếm tử-số |
| 9 | ef-core max Mig | (①PASS) | 🔴 **66** vs canonical **67** | mở THÂN file, không `ls` |

🔴 **Bẫy glob tái-xuất, lần này tôi né được:** `.claude/agents/*.md` = **21** file (kèm `README.md`). Mọi lệnh đếm của tôi đều kẹp `grep -v README` — đúng luật tôi tự áp sau khi bị cắn @S150.

### (b) THÁCH-CLEAN — bắt buộc vì H1 khai ①/②/③ PASS và H2 khai GATE-PASS

**Lens 1 — mở 1 skill H1 gọi "fresh" → 🔴 BROKE.**
`.claude/skills/ef-core-migration/SKILL.md`: hàng Mig cao nhất = **66**; `grep -c '67'` = **0** (chuỗi "67" vắng mặt hoàn toàn); `:90` viết *"Mig 51-66 đều AddColumn…"*, `:307` *"§16+ Mig 27-66 detail pending"*. Canonical `STATUS:441` = **Mig 67 `AddPeApprovedBudgetSnapshot`** (S133). `contract-workflow/SKILL.md` cũng `grep -c '67'` = **0**.
⇒ Skill **stale từ S133 → S151**. `①PASS` đúng ở lớp *đếm/tồn-tại/tên-thư-mục*, **sai ở lớp nội-dung**; detector-LOW mà H1 để treo là **DƯƠNG-THẬT**. **CLEAN không được tin trần — đúng như dự-liệu.**

**Lens 2 — mở 1 "nhà" H2 gọi đã-đóng-FLAG → BROKE nửa (dụng-cụ), HELD nửa (phát-biểu).**
`ring4-audit/MEMORY.md` (1.047B) mở ra = **SEED lead ghi on-behalf**, tự khai *"Vai CHƯA chạy audit-round nào"* — **0 delta do chính vai APPEND**. "S149 hit=1" nằm ở **dòng 3, blurb `rename @S149`**, không phải entry.
⇒ H2 phát-biểu **chính-xác** ("chưa-có-nhà → nay có nhà" = placement) nên **không TRƯỢT**. Nhưng dụng-cụ *đếm-hit* **không phân-biệt entry-thật với tên-trong-header** ⇒ đúng nguyên-văn anti-pattern *"coverage-đếm-tên mà chưa APPEND"*. Lần này vô-hại vì ring4 thật sự chưa chạy; **lần sau sẽ im-lặng báo ĐỦ khi đang THIẾU**.

---

## (v) ĐỀ-XUẤT (propose-only — lead quyết, tôi KHÔNG sửa file nào)

1. 🔴 **H1 đổi nhãn ①** `PASS` → `PASS(shallow) + 1 LOW dương-thật`: `ef-core-migration` + `contract-workflow` SKILL.md stale **Mig 66 vs canonical 67**.
2. 🔴 **H2 sửa universe orphan**: neo vào *dir có bất-kỳ `sub-*.md`* thay vì *dir có `run.md`* ⇒ kéo `2026-07-22-S144-bootstrap` (35KB sub-file, 0 synthesis) vào tầm.
3. 🔴 **H2 sửa phép dẫn fidelity**: counter là **sổ CẢ WAVE (6 class / 2 vai)**; so với 1 sub-file phải **phân-nguồn trước**, đừng cắt danh-sách cho vừa rồi gọi "EXACT". Bản đúng **mạnh hơn**: 6/6 truy-nguồn, 0 bịa.
4. **H2 ghi ĐƠN-VỊ** khi in số hit ("dòng chứa" ≠ "lần xuất-hiện") — nếu không, mọi lượt kiểm-lại đều lệch (tôi vừa lệch 6/6).
5. **F-6 của H1 (detector FP `#111`) ĐÚNG và cần xử**: `sub-lead-gap-S151.md:125` đang dùng nó làm chứng-cứ đầu-bảng. Siết nhánh no-`#` ở `governance-detectors.ps1:355` (đòi ranh-từ, loại token có `.`/`B` liền sau) — **owner quyết, tôi không sửa script.**
6. **Carry còn sống:** `STATUS:452` vẫn 0-hit Opus-5, flip dừng flip-8, trong khi `STATUS:8` đã ghi **flip-9 = Opus 4.8** và `settings.json` nay = **`claude-opus-5[1m]`** (flip kế **chưa có sổ**) ⇒ canonical stale **2 flip** — y hệt tôi ghi @S150, **chưa vá**. Nhãn flip = **quyền owner**.

---

## KẾT

**`KIEM-PASS-WITH-3-TRUOT`** — 38 claim: **ĐẠT 33 · TRƯỢT 3 · KHÔNG-CHẠM 2** · falsify **9 phép: 6 HELD / 3 BROKE** · tái-dựng **9 số: 6 khớp / 3 lệch** · **thách-CLEAN: BROKE** (H1 thủng mặt ①; H2 thủng dụng-cụ, giữ được phát-biểu).

**Đọc đúng kết-quả:** cả 3 TRƯỢT đều là **lỗi PHẠM-VI / PHÉP-DẪN, không phải bịa số** — H1 gắn nhãn PASS rộng hơn phép đo; H2 chọn mẫu-số hụt và ghép nhầm sổ. **Không phát-hiện claim bịa nào ở cả 2 con-đo**: 16/16 con số đơn-lẻ mà tôi chạm được đều tái-dựng đúng. Điểm sáng: H1 **tự khai giới-hạn** trước khi tôi soi (`:100`), H2 **tự khai không chứng-thực được pha skeleton** (`:106`) — cả hai giữ đúng nấc trung-thực. Và **2/9 phép phá của tôi lại là lỗi của TÔI** (F-4 citation-trap, F-5 mega-line) ⇒ vai KIỂM cũng phải chịu chính luật nó áp cho con-đo.

**Ràng buộc giữ đúng:** read-only · propose-only · 0 file ngoài `sub-ring1-S151.md` bị chạm · 0 `store_memory` · không tự harvest · không soi lead (ring2 lo) · không chấm code-diff · mọi claim kèm lệnh / `path:line` tái-chạy được.

**STATUS: DONE.**
