# sub-ring1-audit — S152 @open · KIỂM vòng-1 (H1 tooling-auditor + H2 harvest-curator)

> Read-only ngoài file này · propose-only · APPEND TỪNG MỤC NGAY (anti-#53 / AS-17).
> Mỗi số kèm LỆNH. KIỂM ≠ đo lại: tao verify per-claim + tái-dựng số load-bearing + falsify, KHÔNG chạy lại trọn việc H1/H2.

## §0 — PIN + fail-safe (nghĩa-vụ (i))

**LỆNH:** `stat -c "%s %y %n" <3 file pin>` · `date "+%H:%M:%S"` · `git log --oneline -3`

| pin | size đo | size lead khai | mtime | phán |
|---|---|---|---|---|
| `sub-tooling-S152.md` (H1) | **20435 B** | 20.435B | 2026-07-25 **20:49:55** | ✅ TỒN-TẠI + khớp byte EXACT |
| `sub-harvest-S152.md` (H2) | **16263 B** | 16.263B | 2026-07-25 **20:46:17** | ✅ TỒN-TẠI + khớp byte EXACT |
| `machine-baseline.md` (nền) | 4578 B | 4.578B | 20:30:47 | ✅ |

- **Tuần-tự C4b CHỨNG ĐƯỢC:** `now = 20:53:07` > mtime cả 2 pin (20:49:55 / 20:46:17) ⇒ tao chạy SAU con-đo, không song-song. Chấm bản đã-xong.
- **Fail-safe KHÔNG kích:** pin đủ + non-0-byte + mtime trong cửa-sổ phiên S152 ⇒ có measure thật ⇒ tao chạy (không NO-OP).
- 🔴 **Khai ranh open/close (contract tao = KIỂM end-only):** vòng này là bookend **@open** nhưng 2 pin KHÔNG phải diff-report — chúng là **verdict đầy-đủ** (H1 4-mặt + H2 5-trục) ⇒ có artifact đáng chấm. Tao chạy vì **lead spawn đích-danh** (`run.md:6` đợt-2 ghi rõ `ring1-audit` KIỂM H1+H2), **KHÔNG phải tự-fire @open** — điều cấm trong contract là *tự* chạy. Ghi ra để owner biết hình-B @open đã sinh artifact authoritative-shape, tức tiền-đề "@open chỉ có diff-report" của §L.b(g-bis) không còn đúng với thực-tế wave này (nêu, không tự chấm — quyền owner/lead).
- 🔴 **Time-drift đã lộ ngay (bài E1-1 của tao):** H1 §0 khai `HEAD 3058470`; tao đo HEAD nay = **`766eb87 wal: flush 20260725T2049`** (+3 commit hook WAL trong lúc wave chạy). ⇒ MỌI tái-dựng git của tao phải pin tại base H1/H2 (`1b85713` / `3058470`), KHÔNG tại HEAD tao. Không được chấm H1 TRƯỢT vì cái này.

## §1 — TỰ TÁI-DỰNG số load-bearing (nghĩa-vụ (iv) phần 1) — 6 số

> Luật tự áp (E1-surprise-1 S150): mọi lệnh đếm trên `.claude/agents/*.md` **PHẢI** trừ `README.md`. Chứng bẫy còn sống: `ls -1 .claude/agents/*.md | wc -l` = **21** (có README) vs **20** (trừ README).

| # | số load-bearing | H1/H2 khai | tao đo lại | lệnh (nguồn KHÁC con-đo) | phán |
|---|---|---|---|---|---|
| R-1 | roster `.claude/agents/*.md` −README | **20** (H1 2a) | **20** | `ls -1 .claude/agents/*.md \| grep -v README \| wc -l` | ✅ KHỚP |
| R-1b | roster nguồn thứ-2 (git index, không phải `ls`) | — | **20** | `git ls-files .claude/agents/ \| grep '\.md$' \| grep -v README \| wc -l` | ✅ KHỚP |
| R-2 | `VALID_ROLES` element-count | **20** + set-diff RỖNG (H1 2a) | **20**, dup **0**, set-diff **RỖNG 2 chiều** | python: cắt block `hmw.js:22..41` (dòng `]` cột-0) → **strip `//` comment TRƯỚC** → `findall("'([a-z0-9-]+)'")` → so `set` với glob đĩa | ✅ KHỚP |
| R-3 | role-dir `agent-memory/` (nguồn thứ **5**, H1 không dùng — H2 dùng ở 2a) | **20** (H2) | **20**, và `set(dirs) == set(roster)` (0 lệch 2 chiều) | `os.listdir + isdir` → set-compare với roster | ✅ KHỚP + mạnh hơn: khớp TẬP, không chỉ khớp SỐ |
| R-4 | `.claude/commands/*.md` | **19** (H1 FLAG-4) | **19** | `ls -1 .claude/commands/*.md \| wc -l` | ✅ KHỚP |
| R-5 | `tests/…Tests/Application/` file-count | **38** (H1 FLAG-3) | **38**, trong đó **0** entry không-`.cs` | `ls -1 … \| wc -l` + `ls -1 … \| grep -vc '\.cs$'` | ✅ KHỚP (và 38/38 là file `.cs` thật, không lẫn dir) |

🔴 **BẪY TAO TỰ ĐẠP (khai thẳng — chi tiết ở F-1):** lần extract VALID_ROLES ĐẦU của tao dùng `sed -n '/^const VALID_ROLES/,/\]/p'` ⇒ range **kết thúc SỚM** tại dòng comment chứa literal `[2]` ("owner-decision **[2]** TÁCH") ⇒ ra **18** và set-diff *giả* báo thiếu `ring2-audit`/`ring4-audit`. Nếu tao tin số của chính mình thì đã chấm H1 claim-2a **TRƯỢT OAN**. Sửa: strip `//`-comment TRƯỚC khi bắt literal + chốt biên bằng dòng `]` cột-0.

## §2A — VERDICT PER-CLAIM · H1 `tooling-auditor` (27 claim: ĐẠT 25 / TRƯỢT 2)

| # | claim H1 | verdict | bằng-chứng tao tự chạy |
|---|---|---|---|
| H1-1 | §0 `HEAD 3058470` + `git status` 3 mục | **ĐẠT** | `git log --oneline -3` nay = `766eb87/fda01de/76c27c7` (3 wal-hook flush SAU khi H1 đo) — `3058470` vẫn trong lineage ⇒ **time-drift, KHÔNG phải sai** |
| H1-2 | 1a **6 skill** + README · 0 thêm/xoá vs S151 | **ĐẠT** | `ls -1 .claude/skills/` = 6 dir + README · `git log 1b85713..HEAD -- .claude/skills/ .claude/agents/ \| wc -l` = **0** commit |
| H1-3 | 1b row **Mig 67** tại `ef-core-migration/SKILL.md:89` | **ĐẠT EXACT** | `sed -n '89p'` = `\| **67** \| **AddPeApprovedBudgetSnapshot** \| … *(row bổ sung @S151 — ring1 TRƯỢT-1…)*` |
| H1-4 | 1b mtime `Jul 25 19:11` · **33.773B** | **ĐẠT EXACT** | `stat -c "%s %y"` = `33773  2026-07-25 19:11:33` |
| H1-5 | 1c tái-lập **TOTAL C2 = 15** | **ĐẠT (gián-tiếp)** | tao KHÔNG chạy lại detector (KIỂM≠đo lại). Kiểm **số-học phân-rã**: 6 (contract-wf) + 7 (ef-core) + 1 (CLAUDE.md:93) + 1 (session-end:251) = **15** ✓ · spot **8/15 dòng** mở ra đúng nội-dung H1 mô-tả (`ef-core:100` "2 migration tách" · `:101` "1 migration GỘP" · `:117` "3 bảng" · `:120` "1 bảng riêng" · `:168` heading "Revert 1 migration" · `:185` comment "Script từ 1 migration" · `contract-workflow:24` "3 bảng" · `:35` "6 test PE 2-stage") |
| H1-6 | 1c **15/15 DƯƠNG-GIẢ** ⇒ KHÔNG vá | 🔴 **TRƯỢT (phần — 13/15)** | 2 dòng `ef-core:109` + `:117` bị H1 bác **bằng lý-do đếm** ("module-local") trong khi **cả khối chứa chúng mô-tả module ĐÃ XOÁ** (Budget, DROP @Mig 50/S61). Xem **TC-CLEAN-1**: `BudgetPolicy` = **0 hit** trong toàn bộ `*.cs`. ⇒ "dương-giả" đúng ở trục count, **sai ở trục nội-dung** — đúng bài chính H1 dùng cho FLAG-3 ("máy flag đúng dòng, sai lý-do") nhưng H1 không áp lại cho 2 dòng này |
| H1-7 | 1d 0 commit chạm `skills/` sau `1b85713` | **ĐẠT** | như H1-2 |
| H1-8 | 1d 6 cặp size/mtime `SKILL.md` | **ĐẠT EXACT 6/6** | `ls -la .claude/skills/*/SKILL.md` → 24452/May8 · 5551/Jun18 · 33773/Jul25 · 5450/Apr30 · 14688/Jun25 · 7864/Jul15 |
| H1-9 | 1d nợ S119 `permission-matrix` CLOSED (`:3/:17/:18/:26`) | **ĐẠT EXACT** | `sed -n '3p;17p;18p;26p'` → `:3` B1-pointer trong frontmatter · `:17` "KHÔNG chép số vào file này (B1)" · `:18` dạy đếm từ `MenuKeys.cs:147` · `:26` bia-mộ `Bg_*` XOÁ-S61 |
| H1-10 | FLAG-1 `permission-matrix:42` `~60 key` vs canonical 54 | **ĐẠT** | `sed -n '42p'` = `## Menu tree (seed — ~60 key sau Phase 8)` · canonical `docs/STATUS.md:447` row `Menu keys` = **54** |
| H1-11 | 2a roster **20** (4 nguồn) | **ĐẠT + tao thêm 2 nguồn** | `ls\|grep -v README\|wc -l`=20 · `git ls-files`=20 · `os.listdir agent-memory`=20 · STATUS:452=20 · STATUS:465 state-line "Sub-agents 20" |
| H1-12 | 2a **set-diff 2 chiều RỖNG** | **ĐẠT** | python `set(VALID_ROLES) - set(disk)` = `[]` · `set(disk) - set(VALID_ROLES)` = `[]` · thêm: `set(role-dir) == set(roster)` (0 lệch 2 chiều) |
| H1-13 | 2b matrix **20 row** + `ring1:195`/`ring2:196`/`ring4:197` + header `:174` không hardcode số | **ĐẠT** | `sed -n '174,200p' \| grep -c '^\| '` = **21** = 1 header + **20 row** (dòng `\|---\|` không khớp pattern) · `:174` = "Skill assignment (**6 skill**, re-distributed S39)" — số SKILL, không phải số VAI ⇒ không tự-lão-hoá |
| H1-14 | 2c **10 hit** tên-chết / 8 bề-mặt sống · **10/10 frozen-mention · 0 dùng-sống** | **ĐẠT (kết-luận) + caveat PHẠM-VI** | Tao quét RỘNG hơn: `.claude/governance/ACTIVE-MARKS.md` **4** · `.claude/governance/.session-counter.json` **6** · `docs/governance/**` **~11** · `docs/STATUS.md` **4** — đều **ngoài** 8 bề-mặt H1 chọn. Mở từng cái: counter-hit nằm trong chuỗi `_note`/`event` (bản-ghi sự-kiện, KHÔNG phải key máy đọc) · ACTIVE-MARKS-hit nằm trong **bảng-mapping rename** + scope-cũ của mark. ⇒ **kết-luận "0 dùng-sống" HELD**, nhưng con số "10" là **10-trong-8-bề-mặt**, không phải 10 repo-wide (H1 có khai phạm-vi ⇒ không chấm TRƯỢT) |
| H1-15 | ③ `enabledPlugins` **18 / true 15 / false 3** + đúng 3 tên | **ĐẠT EXACT** | `json.load(~/.claude/settings.json)` (parse KHÁC `sed` của H1): total **18**, true **15**, false **3** = `pr-review-toolkit@…` · `code-modernization@…` · `hookify@…` |
| H1-16 | ③ standalone skill **23** | **ĐẠT** | `ls -1 ~/.claude/skills \| wc -l` = 23 |
| H1-17 | ③ marketplace **37** | **ĐẠT** | `ls -1 ~/.claude/plugins/marketplaces/claude-plugins-official/plugins \| wc -l` = 37 (+ ghi công: H1 **tự khai** "count trùng ≠ set trùng" và dán 37 tên làm mốc — đúng nấc trung-thực) |
| H1-18 | ③ `settings.json:11` = `claude-opus-5[1m]` | **ĐẠT EXACT (đúng cả số dòng)** | `sed -n '11p'` = `  "model": "claude-opus-5[1m]",` · `json['model']` = `'claude-opus-5[1m]'` |
| H1-19 | ③ nợ S143 (a) **model-pin-flip-unlogged CLOSED** | **ĐẠT** | `STATUS:452` chứa "Lead = **DEFAULT Opus 5 MAX** (thư `59ce1d0f` @S149)" · `session-start.md` khối BƯỚC 0.6 có dòng "🔄 **VALUE-update @S149** … Default = Opus 5 MAX ở MỌI vị trí, KỂ CẢ ghế lead" |
| H1-20 | ③ nợ S143 (b) **outage-recipe hết no-op** | **ĐẠT** | `session-start.md` outage-path: "GIỮ `/model claude-opus-4-8[1m]` + BÁO HUB NGAY" ≠ pin `opus-5` ⇒ recipe trỏ model **khác** pin ⇒ có tác-dụng thật |
| H1-21 | ④ `STATUS:451` Skills **6** = 3 domain + 3 ops | **ĐẠT** | `grep -n "^\| Skills"` = `:451 \| Skills \| 6 \| 3 domain + 3 ops \|` — khớp 6 dir đĩa |
| H1-22 | FLAG-2 `STATUS:453` RAG **2447** vs tươi **2448** | **ĐẠT (tao đo LẠI bằng nguồn gốc)** | tao **tự gọi MCP `list_projects`** (không đọc qua `machine-baseline`): `proj_solution_erp.chunk_count` = **2448** ⇒ lệch +1 xác nhận |
| H1-23 | ④ `README:27` ⓘ diagram 7-lane vẫn ĐÚNG (legend 7 màu · B1 0-số-cứng) | **ĐẠT** | `sed -n '28,60p' \| grep -oiE "cyan\|blue\|yellow\|orange\|purple\|red\|green" \| sort -u` = **7 màu distinct** · `:27` liệt **tên** vai + chốt "Số vai canonical → docs/STATUS.md" (0 số cứng) |
| H1-24 | FLAG-3 `tests/…/Application/` = **38 file** | **ĐẠT** | `ls -1 \| wc -l` = 38 · `grep -vc '\.cs$'` = **0** ⇒ 38/38 là file `.cs` thật |
| H1-25 | FLAG-4 commands **19** · "3 file thêm gần nhất = snapshot · pause · fable-clone" | **ĐẠT (19) + 🔴 TRƯỢT-nit (danh-sách 3 tên)** | `ls -1 .claude/commands/*.md \| wc -l` = **19** ✓. Nhưng `git log --diff-filter=A -1` từng file: `snapshot` `2448393` **2026-07-24** · `pause` `8aa3869` **2026-07-12** · **`tiep` `8aa3869` CÙNG COMMIT với pause** · `fable-clone` `e350660` **2026-07-03** ⇒ 3 mới nhất = snapshot · pause · **tiep**, KHÔNG phải fable-clone. **Kết-luận delta 18→19 = `snapshot.md` KHÔNG đổi** |
| H1-26 | INFORM-1 class ∈ enum ĐÓNG, H1 không tự chế | **ĐẠT** | `json.load(memory-budget.json)['lead_self_audit']['flag_classes']` = **11 class**, có `view-stale-count`; cả 4 FLAG của H1 đều dùng đúng class trong enum |
| H1-27 | INFORM-2 C1 MED nằm ở session-log (frozen) + turf H24 | **ĐẠT** | `machine-baseline.md:22` xác nhận vị-trí `docs/changelog/sessions/2026-07-25-1930-S151-…:25` |

## §2B — VERDICT PER-CLAIM · H2 `harvest-curator` (23 claim: ĐẠT 21 / TRƯỢT 1 / KHÔNG-CHẠM 1)

| # | claim H2 (trục) | verdict | bằng-chứng tao tự chạy |
|---|---|---|---|
| H2-1 | §1 universe **55 dir** | **ĐẠT** | python `os.listdir + isdir` = **55** (nguồn KHÁC: H2 dùng `ls -1d */ \| wc -l`) |
| H2-2 | §1 **3 dir** không có `*-synthesis.md` non-0 — đúng 3 tên | **ĐẠT EXACT** | python `os.walk` + `getsize>0` → đúng 3: `S117-pe-approve-minmax-range` (1 file) · `S117-pe-luyke-finalize` (1 file) · `S152-h24-open-bookend` (8 file, có `run.md`) |
| H2-3 | §1 **ORPHAN THẬT = 0** (Coverage) | **ĐẠT** | 2 dir spec-only không `run.md` (by-design, baseline S132 đã ghi) + 1 dir **chính wave đang chạy** ⇒ 0 orphan. Phán độc-lập trùng H2 |
| H2-4 | §1b `S144-bootstrap` CÓ synthesis ⇒ **không orphan** (nợ ring1-S151 của TAO đóng) | **ĐẠT EXACT** | `find -printf "%s %f"` = `1239 bootstrap-synthesis.md` · `16732 sub-tooling-auditor-1.md` · `18326 sub-harvest-curator-1.md` — khớp 3/3 byte. **Nợ TAO bắt @S151 đóng ĐÚNG** (và H2 khai đúng bản-chất: lỗi **mẫu-số**, không phải folder thiếu vết) |
| H2-5 | §2a **9 vai distinct** chạy @S151 | **ĐẠT** | `ls` 2 folder: bookend 6 vai (`harvest`·`lead-gap`·`lead-stale`·`ring1`·`ring2`·`tooling`) + trio 3 vai (`harness-audit/eval/refine`) = **9**, trùng tên 9/9 |
| H2-6 | §2a **20 role-dir** | **ĐẠT** | `find -mindepth 1 -maxdepth 1 -type d \| wc -l` = 20 |
| H2-7 | §2a **9/9 vai có mục `## S151`** + hit-count từng vai | **ĐẠT EXACT 9/9** | `grep -c S151` per role: lead-gap **3** · lead-stale **3** · ring1 **2** · ring2 **2** · tooling **2** · harvest **2** · h-eval **2** · h-refine **1** · h-audit **1** — khớp **từng con một** với bảng H2 |
| H2-8 | §2a **11 vai không chạy = 0 hit** | **ĐẠT EXACT** | đúng 11 vai còn lại đều `grep -c S151` = 0 (cicd · db · fd · impl-be · impl-fe · inv-api · inv-cb · office · reviewer · ring4 · test-spec) |
| H2-9 | FLAG-1 chứng ① 3 diary mtime = **19:29:03** (cùng giây, batch) | **ĐẠT EXACT** | `stat -c "%y"`: lead-gap `19:29:03.547` · lead-stale `19:29:03.466` · ring2 `19:29:03.582` |
| H2-10 | FLAG-1 3 deep-file: **22.056/19:46:35** · **22.157/19:48:49** · **22.843/20:09:56** | **ĐẠT EXACT 6/6** | `stat -c "%s %y"`: 22056 `19:46:35` (lead-stale-deep) · 22157 `19:48:49` (lead-gap-deep) · 22843 `20:09:56` (ring2-deep) ⇒ **mtime-chain diary < deep đúng 17–41 phút** |
| H2-11 | FLAG-1 chứng ② `grep -rn "deep-S151" agent-memory/` = **0** | **ĐẠT** | tao chạy lại = **0** |
| H2-12 | FLAG-1 chứng ② `grep` 3 byte-cite (22.056/22.157/22.843) = **0** | **ĐẠT** | regex `22[.,]056\|22[.,]157\|22[.,]843` trên `agent-memory/` = **0** |
| H2-13 | FLAG-1 chứng ③ **0 token "deep" trong khối `## S151`** (0/0/0) | **ĐẠT EXACT** | python cắt block heading-to-heading: lead-gap `:46–50` **0** · lead-stale `:24–28` **0** · ring2 `:52–56` **0** |
| H2-13b | (phụ) "2 hit deep ở lead-gap + 1 ở lead-stale **đều thuộc khối S143**" | **ĐẠT về QUY-THUỘC · lệch ĐƠN-VỊ** | quy-thuộc đúng 100% (lead-gap `:25` heading `## S143 DEEP-audit #1` + `:27` trong khối đó; lead-stale `:18` "S143 … DEEP-audit"). Đơn-vị: lead-gap = **2 DÒNG nhưng 3 occurrence** (`grep -c` dòng ⟂ `grep -o\|wc -l` occurrence — bẫy quen `feedback_resume_premise_reverify`) |
| H2-14 | FLAG-1 chứng ④ commit `1b85713` **20:13:25** chứa 3 deep **+214/+171/+219 = 604** + **9 diary +4/+5** | **ĐẠT EXACT** | `git show -s --format="%ci"` = `2026-07-25 20:13:25` · `git show --numstat`: lead-gap-deep **214** · lead-stale-deep **171** · ring2-deep **219** (Σ **604**) · đúng **9** `MEMORY.md` với +4 (h-audit/h-eval/h-refine/harvest) và +5 (lead-gap/lead-stale/ring1/ring2/tooling) |
| H2-15 | §3(A) **0 file <400B** trong 3 folder · nhỏ nhất 1.861/1.947/1.971 | **ĐẠT EXACT** | `find -size -400c \| wc -l` = **0** · `sort -n` → `1861 S151-bookend/run.md` · `1947 trio/run.md` · `1971 trio/trio-synthesis.md` |
| H2-16 | §3(B) **10 file 0-byte, TẤT CẢ `.gitkeep`** | **ĐẠT EXACT** | `find -size 0c -printf "%f\n" \| sort \| uniq -c` = `10 .gitkeep` (0 tên khác) |
| H2-17 | §3(C) 5 diary nhỏ nhất **1047/2060/2131/2149/3323** | **ĐẠT EXACT 5/5** | `find -name MEMORY.md -printf "%s %p" \| sort -n \| head -5` khớp cả 5 số + 5 tên |
| H2-18 | §4 `git status --porcelain agent-memory/` = **0** (containment) | **ĐẠT** | tao chạy lại = **0 dòng** (kể cả sau khi 6 sub đã chạy) |
| H2-19 | trục 4 Placement: **0 dir rỗng** · **20/20 role-dir có MEMORY.md** | **ĐẠT** | `find .claude -type d -empty \| wc -l` = **0** · role-dir 20 / `MEMORY.md` depth-2 = **20** |
| H2-20 | §5 Fidelity mẫu `ring2` **6/6 truy được** (byte 18.785 · 8 heading ĐẠT · falsify 5) | **ĐẠT (spot 3/6 mệnh-đề)** | `stat -c %s sub-ring2-S151.md` = **18785** EXACT · `grep -cE "^### [SG]-[0-9]"` = **8** · file chứa 19 lần chữ "ĐẠT" (bao trọn 8 heading) ⇒ 3 mệnh-đề load-bearing nhất tái-dựng đúng |
| H2-21 | §5-bis **U+FFFD = 0** trên 20 diary + 12 S151 + 6 trio + 4 S152 | 🔴 **TRƯỢT (SỐ SAI — hit LÀNH)** | python `str.count('\ufffd')` (đọc file trực-tiếp, KHÔNG qua shell-quoting) → **1 hit** ở `agent-memory/harvest-curator/MEMORY.md` char-index **8912** (nội dung: `inv-cb "<FFFD>24.1KB" = m#6 tail-cut artifact tự-bắt`) + **1 hit** ở CHÍNH `sub-harvest-S152.md:124` (nằm TRONG backtick của dòng `**LỆNH:** grep -c …`). **Phán 2/2 hit = LÀNH** (mention/trích artifact — use⟂mention, bài citation-trap S123/S151 tao suýt nộp HIGH oan @S151). **Nhưng "0" là số SAI** ⇒ xem F-4: instrument FFFD của H2 có dấu hiệu **mù** |
| H2-22 | §5-bis `iconv` **VALID 12/12** | **KHÔNG-CHẠM** | tao không chạy lại `iconv`. Hậu-thuẫn gián-tiếp: python `io.open(…, errors='strict').read()` thành-công trên **20/20 diary + 34/34 file run S151+S152** ⇒ 0 `UnicodeDecodeError` (KHÔNG thay iconv được vì đây là phép decode khác) |
| H2-23 | §5-bis moved-not-cut **N/A** (0 `archive/` trong `1b85713`) | **ĐẠT** | `git show --stat 1b85713 \| grep -c "archive/"` = **0** |
