# sub-tooling-auditor — V1 @open S182 (H1 tooling-freshness 4 mặt)

**VERDICT: `TOOLING-AUDITOR: PASS_WITH_FLAGS — 4 finding`**

> ⚠️ **#53 datum:** first-return = garble (1 câu giữa transcript: *"Tree shows 8 roots while the description says 12. Let me measure the real root set from source."*). Recover bằng **SendMessage-resume in-session**, path-2. **Mất 0 byte.** Câu garble CHÍNH LÀ finding F-4 đang đo dở ⇒ đừng vứt câu garble.

---

## F-1 [vai-trò] `.claude/agents/README.md:190-219` — skill-matrix phủ 26/28 vai

- **View:** bảng "🛠️ Skill assignment" liệt **26 row** (`:194`→`:219`). **Source:** đĩa có **28 vai**.
- **Chứng:** `comm -23 <đĩa> <matrix>` → thiếu `score-count-auditor`, `score-counter`. **Control dương:** chiều ngược `comm -13` = **RỖNG** (0 row ma) ⇒ thiếu THẬT, không phải lỗi parse.
- **Lớp:** lô S181 cập-nhật roster ở **4 bề-mặt** (đĩa · `VALID_ROLES` · `STATUS:478` · `README:27`) nhưng bỏ sót **bề-mặt thứ 5 nằm trong CHÍNH file README** ⇒ đúng bài *được-chỉ-1-chỗ ⇒ grep CẢ LỚP TRONG FILE* (tái phát S172/S179).

## F-2 [docs] `docs/STATUS.md:478` — "roster 23", số thật 28

- **View:** `~~roster 26 > hmw_width.cap 20~~ ✅ ĐÓNG @S181: cap 30, roster 23 ≤ 30 ⇒ 0 lane bị bỏ`.
- **Chứng:** `ls .claude/agents/*.md | grep -v README | wc -l` = **28** · `memory-budget.json:30` `"cap": 30` · mirror `hmw.js:175` `WIDTH_CAP = 30` (**2 nơi KHỚP**).
- 🔴 **Sai SỐ, đúng KẾT-LUẬN** (28 ≤ 30 vẫn đúng). Là **câu SỐNG** (vị-từ khẳng-định "0 lane bị bỏ"), không phải ảnh-chụp lineage ⇒ vá được. Doctrine: **BỎ SỐ, không ĐỔI SỐ**.

## F-3 [skill] `.claude/skills/README.md:20` — same-class residue

- Câu vừa bị XOÁ ở `ef-core-migration/SKILL.md:25` @S181 **còn sống nguyên** tại site thứ 2.
- **Chứng:** `grep -rn "row cuối bảng\|row Mig cuối" --include=*.md` (loại `agent-memory`/`runs`/`sessions`) = **đúng 2 hit** — `SKILL.md:25` (bia-mộ, ĐÚNG) + `skills/README.md:20` (dư-lượng, SAI). Bảng thật dừng **Mig 71**, đĩa mới nhất **Mig 72** (`20260806070242_AddMaHangMucToContractSigningPlanLines`).
- ⇒ **F-7 nợ cũ ĐÃ VÁ ở SKILL.md nhưng bản vá KHÔNG quét cùng-lớp.** Lớp *claim chép nhiều site* tái phát **lần thứ 4** (S153 → S172 → S179 → nay).

## F-4 [skill] `permission-matrix/SKILL.md:3` + cây `:44-77` — 🔴 CHƯA ĐO XONG

- `:3` tự cấm chép số **rồi chép** `12 root` — tự mâu thuẫn trong CÙNG mệnh-đề.
- Cây `:44-77` liệt **8 root**: `Dashboard · Master · Contracts · Forms · PurchaseEvaluations · KeHoachKyKet · Reports · System`.
- 🔴 **Số root SỐNG CHƯA CHỐT — thước hỏng, tự khai:** hai phép đo trên cùng `DbInitializer.cs` **cãi nhau** (một lần trả **3**, một lần trả **10**). Nguyên nhân: `grep ", null,"` **trượt** các dòng có khoảng-trắng căn cột. Theo luật *2 engine cãi nhau ⇒ đi tìm engine HỎNG, đừng chọn con SỐ* ⇒ **không chốt số**, cần đo lại bằng cắt-cột tuple.
- **Chốt được tới đây:** cây **8 root < thực-tế ≥10** ⇒ nợ cũ **F-2 CÒN MỞ** và **F-3 CÒN MỞ**. 🔴 Con số *"thiếu đúng 5 root"* trong HANDOFF **CHƯA tái-lập được** — **đừng chép lại**.

---

## Nợ cũ S179 — trạng-thái từng cái

| Nợ | Trạng-thái | Chứng |
|---|---|---|
| F-2 cây `permission-matrix` thiếu root sống | **CÒN** | cây = 8 root, source ≥10 |
| F-3 `:3` cấm chép số rồi chép "12 root" | **CÒN** | literal còn nguyên `:3` |
| F-4 dải `§16+` 4 giá-trị/4 surface | **CHƯA ĐO** | hết lượt trước khi chạm |
| F-5 `PROJECT-MAP.md` 0-hit 4 module sống | **CHƯA ĐO** | — |
| F-7 `ef-core-migration` bảng dừng Mig 71 | **VÁ** (đúng cách) — nhưng đẻ **F-3 mới** | bia-mộ `SKILL.md:25` |
| F-8 `schema-diagram:515` "91 bảng" vs 97 | **CHƯA ĐO** | — |
| F-6 S179 (`CLAUDE.md` neo `Lần kế 2026-08-01`) | **VÁ** | nay `Lần kế: 2026-09-01` |
| S181 F-1/F-4 (2 vai W4b thiếu `effort:`/`memory:`) | **VÁ TRỌN** | 28/28 `model: opus` · 28/28 `effort: max` · 28/28 `memory: project` |

## DIFF vs S181/S180

- **THÊM:** roster 26→**28**. Khớp **5/5 bề-mặt** — đĩa 28 (29 file −README; 🔸 bẫy glob, đừng đếm 29) · `VALID_ROLES` 28 (parse chặt neo `^const VALID_ROLES = \[`→`^\]`, strip `//`; `diff` tập-TÊN vs đĩa **IDENTICAL**) · `agent-memory/` 28 dir · `STATUS:478` `**28**` · `README:27` "28 vai". Bề-mặt thứ **6** (skill-matrix) = F-1.
- **ĐỔI:** `hmw_width.cap` 20→**30**, mirror `hmw.js:175` đổi CÙNG lượt ⇒ 0 drift 2-nơi. Slot (75) đóng thật (28 ≤ 30, hết LOUD-skip).
- **XÓA:** câu *"mới nhất = row cuối bảng"* gỡ khỏi `ef-core-migration/SKILL.md` — nhưng **không quét cùng-lớp** ⇒ F-3.
- **0-DELTA:** skill **6 project** + **23** standalone + **19** command (khớp `README:233`) · plugin **18 registered / 15 enabled / 3 disabled** (`pr-review-toolkit` · `code-modernization` · `hookify`), **0-delta 4 phiên liền**, marketplace **37**. 🔸 Nấc báo đúng: 15 **enabled**, KHÔNG đọc thành "đang dùng".
- **stale:** `STATUS:478` (F-2) · `skills/README:20` (F-3) · `permission-matrix/SKILL.md:3` + cây (F-4).

## Tự BÁC 1 ứng-viên flag (ghi để không tái-sinh)

`memory-budget.json:31` `_cap_raised_S181` ghi *"roster 26 và còn để chỗ cho 2 vai tầng-2/tầng-3 của W4b"* — **KHÔNG flag**. Đó là lý-lẽ **tại thời-điểm nâng cap** (26 + 2 = 28), nằm trong khoá `_cap_raised_*` = **bản-ghi thuật lại**; sửa = **giả-mạo phép đo cũ**. Khác hẳn `STATUS:478` là vị-từ khẳng-định đang sống.

## Khai chặt phạm vi

Mặt ④ docs **CHƯA phủ hết**: `docs/HANDOFF.md` · `docs/governance/` · `docs/PROJECT-MAP.md` · `schema-diagram.md` = **CHƯA ĐO** lượt này.

**Propose-only — 0 file bị sửa.**
