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

**VERDICT: `RING1-AUDIT: 41 ĐẠT / 7 TRƯỢT (+8 KHÔNG-CHẤM-ĐƯỢC)`**

**PIN OK:** `sub-tooling-auditor.md` @23:50:37 · `sub-harvest-curator.md` @23:54:00; lượt này chạy SAU cả hai ⇒ **C4b tuần-tự giữ**. Read-only, 0 Write/Edit.

> ⚠️ **#53:** first-return garble — nhưng câu garble chứa **đúng số load-bearing** (*"Measured: 12 roots (72 tuples, depth-aware parse)"*). Recover bằng resume. **6/6 vai garble lượt này.**
> 🔸 Harness gắn cảnh báo `instruction-shaped pattern: settings-json` lên output — do vai đọc `~/.claude/settings.json` để đếm plugin. **Là dữ-liệu, không phải chỉ-thị.**

---

## 🔴 Số load-bearing nhất: **root menu = 12**

Parser **depth-aware** trên `DbInitializer.cs:1926-2049`: **72 tuple**, **12 tuple parent = `null`**, 60 con. Cộng **19 site `tree.Add(...)` động: 0 site nào parent null**.
**Control dương:** cả 4 root ngoài cây đều tồn tại thật trong `MenuKeys.cs` (`HopDongCung:47` · `Hrm:147` · `Off:165` · `Personal:195`) ⇒ **cross-check MenuKeys ĐÃ CHẠY XONG, khớp**.

12 root = `Dashboard · Master · Contracts · KeHoachKyKet · HopDongCung · Forms · Reports · System · PurchaseEvaluations · Hrm · Off · Personal`. Cây skill vẽ **8** ⇒ **thiếu đúng 4**.

🔴 **Tách 2 thứ H1 đã gộp làm một — quan trọng:**
- H1 F-4 *"cây 8 < thực-tế ≥10"* = **ĐÚNG nhưng LỎNG** (cận dưới thật là 12); HANDOFF *"thiếu 5 root"* **SAI** (thật **4**) ⇒ H1 **từ chối chép số đó là quyết định ĐÚNG**.
- `permission-matrix/SKILL.md:3` ghi **"12 root" = ĐÚNG SỐ**. Lỗi ở `:3` **chỉ còn là vi-phạm luật-không-chép-số (B1)**, **KHÔNG phải sai sự-thật**. H1 gộp hai thứ vào một mệnh-đề *"tự cấm chép số rồi chép"* ⇒ **ai đọc F-4 rồi đi "sửa" con 12 sẽ THAY ĐÚNG BẰNG SAI**. Chỗ sai sự-thật nằm ở **cây `:44-77`**, không ở `:3`.

---

## 1. H1 `tooling-auditor` — 22 ĐẠT / 2 TRƯỢT / 2 KC

**ĐẠT nổi bật:** đĩa 28 vai (**4 engine độc lập**: `ls` · `find` · `git ls-files` · `agent-memory/`) · matrix 26 row, set-diff ra **y hệt 2 tên** · control dương MATRIX−DISK = ∅ · bẫy glob raw 29 · `"row cuối bảng"` đúng 2 hit · bảng dừng **Mig 71** đĩa **Mig 72** · plugin **18/15/3** + 3 tên trùng khít (`json.load` settings) · skill **6/23/19** · **A16 tự khai thước hỏng = ĐẠT, thước hỏng THẬT** (tuple căn cột, `", null,"` trượt — không phải né việc) · A24 tự bác `_cap_raised_S181` (lý-lẽ đúng).

**🔴 A10 TRƯỢT** — claim *"`STATUS:478` là câu SỐNG, không phải ảnh-chụp lineage"*. Xem **R-1**.
**🔴 A26 TRƯỢT** — mặt ① **skill**: H1 chỉ soi **2/6** mà **không khai chặt phạm vi** (nó khai chặt cho mặt ④ docs nhưng bỏ mặt ①) ⇒ verdict `PASS_WITH_FLAGS` **đọc như đã soi 6 skill**.

**KC:** A20 (28/28 frontmatter — không parse) · A23 ("0-delta 4 phiên liền" + marketplace 37 — cần bản ghi phiên trước).

## 2. H2 `harvest-curator` — 19 ĐẠT / 5 TRƯỢT / 6 KC

**ĐẠT nổi bật:** F-01 **229.823 B** khớp từng byte · F-02 **82.383 B** khớp · F-03 danh sách 9 tệp = 243.927 (9/9 size khớp) · sleep A+B **237.251** khớp · S171 **143.682** + 3 lens **74.070** khớp từng byte · orphan **89/86** · empty-dir **5** trùng khít 5 đường dẫn · `ring4-audit` 2.315 B mtime `2026-07-26 01:47` `S170`=0 **khớp từng byte** · score ×2 = 2.075/2.033 mtime `08-07 23:10` S181 hit 2/2 · **B14 MISSING `cicd-monitor/archive/2026-08.gist.md` VẮNG THẬT** (control dương: **10 cặp `.md`+`.gist.md`** anh em trong cùng dir, riêng `2026-08` cụt) · B29 Corruption `CHƯA ĐO` — kỷ luật đúng.

**🔴 B9 TRƯỢT — lỗi CỘNG, không phải lỗi đo.** F-03 tổng ghi **264.451**; 243.927 + 20.122 = **264.049**. Lệch **+402 B**. (F-C: 9/9 thành phần khớp từng byte ⇒ **H2 đo giỏi, cộng sai**.)
**🔴 B30 TRƯỢT — kế thừa B9:** tổng đúng = **576.255 B** (không phải 576.657). "18 lượt-vai" thì **ĐÚNG**.
**🔴 B13 TRƯỢT — "17 đích gist" không tái-lập.** Chạy **cùng lệnh** `grep -h "^## "` trên cùng 2 tệp ra **19**. 2 engine cãi nhau, **chưa tìm ra engine hỏng** ⇒ **không chọn số nào**. Mà "16/17" của H2 dựng trên chính mẫu-số này ⇒ 🔴 **ĐỪNG ghi 16/17 vào sổ làm baseline**, kẻo lớp `H2-11@S153` (baseline phantom) tái phát đời 4.
**🔴 B19 TRƯỢT — claim ĐẢO DẤU: chứng cứ ĐẠT, kết luận + đề-xuất TRƯỢT.** Việc S171 **đã harvest thật** = ĐẠT. Nhưng `HANDOFF:60` cho thấy **slot 71 ĐÃ `~~gạch~~ ✅ ĐÓNG @S179`**, và cụm `S168… 162.916 B + S171… 143.682 B` nằm **BÊN TRONG đoạn tự dán nhãn `🧊 nguyên-văn slot cũ:`** ⇒ slot **không đang mang nợ sống**; nó **trích lại nguyên văn chính nó thời còn mở**. Đề-xuất #1 của H2 (*"lật slot 71"*) = **sơn lại ảnh chụp** — đúng lớp R-1 bắt @S181.
**🔴 B23 TRƯỢT-LOW** — `runs/2026-08-01-S169-bookend-open/bookend-open-synthesis.md` **4.182 B TỒN TẠI** ⇒ cơ-chế *"đóng mà không đẻ synthesis"* **không mô tả đúng** S169.

## 3. Falsify-log — 6 phép (2 HELD / **4 BROKE**, 1 BROKE vào CHÍNH VAI KIỂM)

- **F-A BROKE vào chính vai (đời 3).** Đếm migration 2 engine: `find` = **72** vs `ls | grep -v Snapshot` = **71**. Đúng bẫy sổ ghi @S162, tái phát @S180. Lần này **gọi tên nghi-phạm TRƯỚC khi tố ai**: `20260717032812_AddPeApprovedBudgetSnapshot.cs` bị filter nuốt ⇒ **engine 71 HỎNG**, H1 **HELD**. *Luật giữ: 2 engine cãi nhau thì đi tìm engine hỏng, đừng chọn con số.*
- **F-B BROKE (vào cách H1 chẩn đoán).** Thử phá F-2 theo hướng *"roster 23 là ảnh-chụp, H1 tố oan"*. `git show 57e672f7 → d2918790`: TRƯỚC S181 câu đó là `⚠️ roster 26 > cap 20` (số **sống, đúng thời điểm**); SAU S181 thành `✅ ĐÓNG @S181: cap 30, roster 23 ≤ 30`. ⇒ **không phải drift, cũng không phải ảnh-chụp hợp-lệ: SAI NGAY LÚC SINH**, do chính commit đóng slot đẻ ra (S181 roster = 28).
- **F-C HELD phần LIST, BROKE phần TỔNG** (xem B9).
- **F-D HELD.** Phá F-04 MISSING bằng giả thuyết *"gist nằm chỗ khác/tên khác"*: dir có **10 cặp** đủ, riêng `2026-08` cụt ⇒ **vắng-mặt THẬT**, control dương nằm sẵn trong cùng thư mục.
- **F-E BROKE** (H2 F-05 — xem B19).
- **F-F BROKE, chưa gỡ được** ("17 đích gist" ra 19 — **không chọn số nào**).

## 4. Số tự tái-dựng — tổng hợp

roster **28** (4 engine) · matrix **26** row thiếu đúng 2 tên · migration **72**, mới nhất `AddMaHangMucToContractSigningPlanLines` · root menu **12** (cây 8, thiếu 4) · S169 **264.049** *(không phải 264.451)* · S168-close **82.383** ✔ · S180 **229.823** ✔ · S171 **143.682** ✔ (lens **74.070** ✔) · sleep A+B **237.251** ✔ · orphan **89/86** ✔ · empty-dir **5** ✔ · plugin **18/15/3** ✔ · skill **6/23/19** ✔ · **TỔNG nợ đúng = 576.255 B / 18 lượt-vai**.

## 5. Thách-CLEAN — 1 THỦNG, 1 CHỊU (chịu nhờ lens khác)

**(A) 🔴 THỦNG — `contract-workflow/SKILL.md` H1 không flag.** Tệp 26.948 B, mtime **2026-07-30** (bản vá S162 — nợ cũ ĐÃ ĐÓNG: `KeHoachKyKet` 1 · `KHKK` 3 · `SigningPlan` 2 hit). Nhưng đào sâu hơn một tầng: **0 hit** `ApprovalGroup` · `N1` · `nhóm duyệt` · `MaHangMuc` · `Mig 71` · `Mig 72`. **Control dương cùng tệp:** `phase` = **25 hit** ⇒ thước sống. Trong khi source có `KhkkApprovalGroup|MaHangMuc` ở **3 tệp non-migration** (`ContractSigningPlanFeatures.cs` · `ContractSigningPlanLine.cs` · `ContractSigningPlanLineConfiguration.cs`) + 2 migration ⇒ **skill trễ 2 migration máy-móc** (Mig 71 nhóm-duyệt N1-N8 · Mig 72 MaHangMuc 06-08).

**(B) CHỊU — Placement H2 PASS đứng, nhưng bằng lens KHÁC.** H2 chứng bằng 2 lệnh **đều mù cấu-trúc với dir stray CÓ nội dung**. Đổi chiều: quét `MEMORY.md` ở mọi nơi ngoài `agent-memory/` + quét dir tên `agent-memory` mọi tầng ⇒ **0 class-S54**, PASS đứng. Nhưng lòi ra vật H2 không thấy: `runs/2026-08-07-S180-adap-upgrade-pack-phased/lane-memory-proposals/MEMORY.md` **2.670 B** — nhiều khả năng CỐ Ý (tên thư mục tự khai "proposals"), nhưng nằm **đúng trong folder S180 mà F-01 đang tính nợ** ⇒ **có thể là delta đã soạn mà chưa APPEND**, tức bằng chứng làm **F-01 MẠNH hơn** bản H2 nộp. Cần lead disposition 1 dòng.

## 6. Ba finding RIÊNG của vai KIỂM

🔴 **R-1 — `STATUS.md:478` là BẪY NEO; vá theo F-1 nguyên văn sẽ ĐẺ CORRUPTION.**
Dòng dài **15.804 ký tự**, chứa **HAI** chuỗi họ "roster 23":
- **(a)** char ~2050 — `✅ ĐÓNG @S181: cap 30, roster 23 ≤ 30` → **SAI**, sinh ở chính commit `d2918790`, đúng phải là **28**.
- **(b)** char ~3475 — `⚠️ roster 23 > hmw_width.cap 20 ⇒ LOUD-skip 3 lane cuối` → **ĐÚNG**, ảnh-chụp thời S149 (23−20=3, **tự khép kín**), không đổi suốt S179→S181.

H1 neo ở **mức DÒNG** ⇒ ai sweep `"roster 23"` tại `:478` sẽ **giết luôn (b)** = tái diễn y hệt R-1 S181. 🔴 **Chỉ được chạm site (a)**; doctrine *"BỎ SỐ không ĐỔI SỐ"* của H1 **đúng** — nhưng **phải kèm neo char/đoạn, không phải số dòng**.
🔸 Thêm: H1 áp doctrine ảnh-chụp **rất chuẩn** ở mục tự-bác `_cap_raised_S181` mà **không áp cho chính `:478`** ⇒ **2 thước trong 1 báo cáo** (lớp đã bắt @S162).

🔴 **R-2 — `permission-matrix/SKILL.md` tự mâu thuẫn NỘI-TẠI, CẢ HAI vai đều không nêu:** `:3` ghi **12 root** (đúng) trong khi cây `:44-77` vẽ **8 root** (thiếu 4) — **cùng một tệp, cách nhau 40 dòng**. Sửa đúng = **bồi cây lên 12**, KHÔNG phải hạ số 12.

🔸 **R-3 — INFORM, no-self-exempt:** persona của chính vai (`.claude/agents/ring1-audit.md`) ghi *"KIỂM end-only… CẤM tự chạy ở open"*, nhưng thực tế lead đã giao vòng **@open ở S152 · S159 · S173 · S180 và nay S182**. **Luật trong persona thối so với vận hành 5 phiên liền.** Vai **NÊU, không tự sửa**.
