# sub-ring1-audit — KIỂM vòng tooling/harvest — bookend @open S186

> Lượt-trả-1 dính **#53** (24 tool-call). Recover bằng SendMessage resume. Dưới = lượt-trả-2.
> ⚠️ Harness gắn cờ `instruction-shaped (settings-json)` — đọc kiểm: là **nội dung phát-hiện** về `~/.claude/settings.json`, không phải chỉ-thị.

**VERDICT: `RING1: 21Đ / 3T / 4KC`**

## TRƯỢT (3)

| # | nguồn | claim | vì sao vỡ |
|---|---|---|---|
| 1 | H1 | *"4 root sống VẮNG HẲN: Hrm·Off·**Puro**·Personal"* | 🔴 **`Puro` KHÔNG PHẢI root sống.** `grep -rn Puro src` = 6 hit, **6/6 nằm trong COMMENT** trỏ NAMGROUP (*"mirror layout Puro"*); 0 const, 0 phần-tử `MenuKeys.All`, 0 row cây. Control-dương: `Personal` = const thật `MenuKeys.cs:195` + root thật `:2045`. **Tập đúng = Hrm·Off·Personal·`HopDongCung`** (`HopDongCung` có root-row `:1952` nhưng cố-ý ngoài `All`) ⇒ **H1 thay 1 tên thật bằng 1 tên ma** |
| 2 | H1 | severity *"VẮNG HẲN"* | Nói quá — `SKILL.md:25` **CÓ dòng uỷ-quyền** (*"Office/HRM/… — xem `MenuKeys.cs` (mã là nguồn)"*) ⇒ vắng khỏi **CÂY** nhưng **có TRỎ nguồn**; người tra không bị bỏ rơi hoàn toàn |
| 3 | H1 | neo `README:2` cho luật B1 | Luật thật ở `README:3` — lệch 1 dòng, LOW, **không đổi kết luận** |

## KC — không kết luận được (4)

1. 🔴 **TOÀN BỘ H2** (6 finding + 4 câu đích danh: ORPHAN 0 · S185-2-FOLDER · OVER-CAP byte · ZERO-BYTE · tally 13) — **lượt bị cắt trước khi mở H2** ⇒ **0 claim H2 được xác nhận**; verdict này **KHÔNG phủ H2**.
2. Plugin 4 nấc + lead model — nguồn `~/.claude/settings.json` **NGOÀI git, ngoài repo** ⇒ **KHÔNG chấm, CẤM ĐẠT-ảo**.
3. Frontmatter 29/29 (`model`/`effort`/`memory`) — chưa dựng lại (cắt lượt).
4. ĐÓNG F-2 (`loi-hua-may-scan.ps1` có cửa) + F-3 addendum — chưa chạm đĩa.

> Vai đề nghị: **giao lại @close, ưu tiên (1)**.

## ĐẠT — trích các claim load-bearing
- roster **29** trên **4 engine** (`ls|grep -v README` · `git ls-files` · `find` · `agent-memory/*/` dir), `grep -n ring5-audit README` chỉ ra `:217` **không ra `:27`** ⇒ H1 đúng cả số lẫn "thiếu tên".
- `pause.md:39` "11/23" — verbatim khớp; **tử-số thật 24/29** (parse frontmatter 29 tệp: 24 NO-WRITE / 5 HAS-WRITE / 0 thiếu key) ⇒ **khớp H1 tuyệt đối**.
- `permission-matrix` cây **8 root**; `:3` khai **12**; **12 = ĐÚNG đo TỪ MÃ** (parser parent-null trên `DbInitializer.cs`), không tin sổ.
- `STATUS:9` còn `Mig **71**` · canonical `:468` = **72** · đĩa = **72** (row cuối `20260806070242_AddMaHangMucToContractSigningPlanLines.cs`).
- `STATUS:478` = `| Skills | 6 |` · `:479` = `| Sub-agents | 29 |` — khớp DIFF của H1 **tới từng số dòng**.
- Tuần-tự C4b: mtime H1 13:20:57 · H2 13:22:33 · ring1 khởi sau 13:22 ⇒ **0 chồng lấn**.
- **Ngoại lệ dựng gián tiếp:** `tooling-auditor` KHÔNG over-cap — bằng chứng nội-tại là H1 chạy đủ 4 mặt + DIFF chi tiết trong 5.759 B return, **không có dấu cắt L1** như H2 tự khai.

## FALSIFY — 6 phép, **2 BROKE vào CHÍNH NÓ**
- 🔴 **BROKE (tự)** — phá "`Off` 0 hit": `grep -c Off` ra **1** ⇒ suýt tố H1 sai. Mở ruột: hit là chữ "**Off**ice" ở `:25`; word-boundary = 0 ⇒ **thước ring1 hỏng, H1 HELD**.
- 🔴 **BROKE (tự)** — phá "`STATUS:9` còn Mig 71": `grep -oE 'Mig [0-9]+'` ra **RỖNG** ⇒ suýt tuyên H1 bịa. Thật ra chuỗi là `Mig **71**`, regex không nuốt `**` ⇒ **"2 engine cãi nhau thì đi tìm engine HỎNG, đừng chọn con SỐ"** (luật ring1 tự rút S181) — H1 HELD.
- **HELD** — phá "tử-số 11 nay là 24": dựng engine ĐỘC LẬP (awk parse frontmatter block-1, word-boundary `Write|Edit|MultiEdit|NotebookEdit`) ⇒ **24/29 khớp tuyệt đối**.
- **BROKE (vào H1)** — phá "4 root sống": control dương/âm từng tên ⇒ claim vỡ **1/4**.
- **HELD** — phá "`:27` thiếu cả tên": `grep -n ring5-audit` toàn tệp = **chỉ `:217`**.
- **HELD (chống chính nghi-vấn của lead)** — nghi số H1 là "số nhớ-lại sau #53": lấy **3 số load-bearing khó nhớ nhất** (24/29 · 12 root · cặp dòng `:478`/`:479`) đo lại độc lập ⇒ **3/3 khớp tới từng đơn vị, kể cả cặp số dòng trượt-1**. *"Số nhớ-lại không trúng được kiểu đó."*

## TAI-DUNG — 7 số, **6 khớp / 1 lệch**
roster 29 ✓ · `tools:` không-Write 24/29 ✓ · root menu 12 (đo từ MÃ) ✓ · cây permission-matrix 8 root ✓ · Mig đĩa 72 = canonical 72 ≠ `STATUS:9` 71 ✓ · `:478`/`:479` ✓ · **LỆCH: tập "4 root vắng"** — H1 {Hrm,Off,Personal,**Puro**} vs ring1 {Hrm,Off,Personal,**HopDongCung**}.

## THACH-CLEAN
- Mở mặt H1 gọi CLEAN (*"`ef-core-migration` = dương-giả, đã ratify"*) → **CHỊU**: `SKILL.md:21-23` thật sự trỏ 2 nguồn sống, `:25` có 🧊 khai bản án S181. **Ô ring1 tự chọc thủng @S181 nay đã lành ĐÚNG CHỖ.**
- Mở mặt H1 gọi PASS (*"12 root ĐÚNG theo ring1@S182"*) → **CHỊU nhưng H1 chỉ có 1 nguồn**: H1 **trích sổ**, ring1 **đo MÃ** ⇒ số đứng, **đường dẫn tới số thì mỏng**.
- 🔴 **KHÔNG chạy được** thách-CLEAN bắt buộc trên H2 (`ORPHAN 0` · `ZERO-BYTE 0`) và mặt plugin — ghi **KC**, **không tuyên sạch**.

## `ROOT-PARSER` — chạy XONG: **12 root**
Parser parent-null trên `DbInitializer.cs`, liệt đích danh: `:1928` Dashboard · `:1932` Master · `:1947` Contracts · `:1951` KeHoachKyKet · `:1952` HopDongCung · `:1968` Forms · `:1969` Reports · `:1970` System · `:1977` PurchaseEvaluations · `:2001` Hrm · `:2019` Off · `:2045` Personal. `tree.Add` sinh-trong-loop có parent null = **0** ⇒ không sót nhánh động.
Đối chiếu claim H1: `:3`=12 **ĐÚNG SỐ**, cây 8 **ĐÚNG LÀ THIẾU**, nhưng **tập thiếu H1 kê SAI 1 phần tử**.

## `L1-CAT` — verdict H2 giữ phần DƯƠNG, mất phần ÂM

L1 cắt làm hụt **nền so sánh** (baseline / nợ cũ / luật đã kê) ⇒ mọi câu dạng *"**0** orphan · **0** ca thật · **SẠCH 12/12** · **không tái phát**"* là **khẳng-định-VẮNG-MẶT** — đúng loại mà bộ nhớ thiếu dễ đẻ **0-hit-giả** (lớp `absence_looks_like_clean` + `pattern-thu-hep-che-hit` ring1 bắt @S168). Ngược lại **2 finding HIGH** (`sub-reviewer-yc021` 23.280 B chưa về · self-record thiếu) là **khẳng-định-CÓ-VẬT, tự mang neo, không cần L1 để đúng**.
🔴 **Khuyến nghị:** **KHÔNG re-chạy toàn bộ** (đắt, và over-cap còn nguyên nên chạy lại **bị cắt y hệt** — *"re-chạy trước khi nén là lặp lỗi"*). Thứ tự đúng: **nén `harvest-curator` 28.071 B xuống dưới cap TRƯỚC**, rồi chỉ re-verify **4 câu đích danh**. **Nợ HIGH thì hành động ngay, đừng đợi.**

## `RESUME-FIDELITY` — 🔑 **"số sống sót, nhãn trôi"**

**Chấp nhận được với nấc HẠ MỘT BẬC, không phải vứt.** Bằng chứng thực nghiệm chính lượt này:
- **3/3 số load-bearing khó-nhớ** của H1 tái dựng **khớp tuyệt đối** ⇒ lượt-trả-2 **giữ được SỐ ĐO**.
- **1/1 lỗi bắt được lại là lỗi TÊN GỌI** (`Puro` — chữ đọc từ comment *"mirror layout Puro"* **bị nhớ thành root sống**). H1 còn dính thêm **1 neo lệch** (`README:2` thật ra `:3`) — cùng họ.

⇒ **Nấc `verified-number / unverified-label`:** mọi **CON SỐ** trong tệp lượt-trả-2 dùng được sau spot-check; mọi **TÊN RIÊNG** (tên key · tên vai · tên tệp · số dòng neo) **phải chạm đĩa mới được mang vào báo cáo**.
