# H1 tooling-auditor — @bookend-close S185 (2026-08-09/10)

> Vai INFORM-only · propose-only. Single-writer = lead (B3 VERIFY→APPEND).
> ARTIFACT-FIRST: file này đổ ruột LIÊN TỤC chống #53. Return = VERDICT + ≤8 dòng.
> Run: `.claude/workflows/runs/2026-08-09-S185-bookend-close/`

## 0. Mốc đo (ground)

- HEAD lúc bắt đầu: `6a8c17cf wal: flush 20260810T0138`
- Commit nội-dung gần nhất: `6282806c [CLAUDE] Docs: adap 08-08 executed (3 phep thu + f-bis re-measure) + orphan S182 closed + 3 self-ref sites patched (S185)`
- Working tree: 20 M + 3 ?? (chưa commit) — **audit đo ĐĨA (bao gồm uncommitted)**, vì đây là bookend-close chốt trạng-thái CUỐI PHIÊN.
- Mốc diff-vs-last của chính vai: **S181 (2026-08-07) @close** — `TOOLING: PASS_WITH_FLAGS — 6 flag` (L1 MEMORY).

### Untracked (?? ) — 3 file MỚI chưa vào git
- `.claude/workflows/runs/2026-08-09-S185-bookend-close/sub-harness-audit.md`
- `scripts/loi-hua-may-baseline.json`
- `scripts/loi-hua-may-scan.ps1`

---

## 1. SỐ 4-MẶT (đo đĩa, không tin doc)

| Mặt | Số đo @S185 | vs S181 | Nguồn lệnh |
|---|---|---|---|
| ① skill project | **6** | 0-delta | `ls .claude/skills/` (trừ `README.md`) |
| ① skill user-global | **23** | 0-delta | `ls ~/.claude/skills/ \| wc -l` |
| ① command | **19** | 0-delta *(4 SỬA, 0 thêm/xoá)* | `ls .claude/commands/*.md \| wc -l` |
| ② roster | **28** | 0-delta | đĩa 29 file **− README = 28** (🔸 bẫy glob) |
| ③ plugin | **18 reg / 15 en / 3 dis** | 0-delta (phiên thứ **5** liên tiếp) | `~/.claude/settings.json` enabledPlugins |
| ③ marketplace | **37** | 0-delta | `~/.claude/plugins/marketplaces/claude-plugins-official/plugins` |
| ③ máy (scripts/*.ps1) | **36** *(+1 mới)* | **+1** `loi-hua-may-scan.ps1` | `ls scripts/*.ps1 \| wc -l` |

### ② Roster 28 — khớp mấy bề-mặt?
- **ĐĨA** 28 ✓ · **`VALID_ROLES` (hmw.js)** 28 phần-tử ✓ (parse neo `^\]`, strip comment) — `diff` tập-TÊN vs đĩa = **IDENTICAL** ✓
- **`.claude/agent-memory/*/`** 28 dir ✓ · **`docs/STATUS.md:478`** `| Sub-agents | **28** |` ✓ · **`agents/README.md:27`** "Roster THẬT (28 vai)" ✓
- ⇒ **5/5 bề-mặt khớp.** Bề-mặt thứ **6** (skill-matrix) = **F-1 dưới, VẪN HỞ**.

### ③ Plugin — báo đúng NẤC (không conflate)
`installed/registered 18` → `enabled 15` → `disabled 3` (`pr-review-toolkit` · `code-modernization` · `hookify`) → `assigned` (bảng `agents/README:233+`) → `used` (per-session auto-trigger, KHÔNG đo lượt này).
🔸 `agents/README:231` khai "18 registered (15 enabled / 3 disabled)" = **KHỚP đĩa**. R-1 @S179 (`frontend-design` plugin trùng) đã vá đúng — `:234` nay ghi *"plugin trùng **ĐANG enabled** — cố ý KHÔNG dùng"* ✓ **ĐÓNG**.

---

## 2. FINDING — 6 FLAG + 2 INFORM

### F-1 | ② vai-trò | **MED** | skill-matrix phủ **26/28** — HỞ SANG PHIÊN THỨ 2
- **View:** `.claude/agents/README.md:190-231` bảng "🛠️ Skill assignment" = **26 row**. **Source:** đĩa **28 vai**.
- **Thiếu đúng 2:** `score-counter` · `score-count-auditor` (sinh @S181 W4b). Tái-lập: `comm -23 <(đĩa) <(cột-1 bảng)` → 2 tên.
- 🔴 **Đã FLAG @S182 (F-1), chưa vá** ⇒ 5/5 bề-mặt roster khớp 28 nhưng **bề-mặt thứ 6 vẫn 26**. Cùng lớp drift @S143 (vá 15→17) — lớp này tái phát mỗi lần đẻ vai.
- **Đề-xuất:** thêm 2 row `ref-only` (2 vai này = tầng-2/tầng-3 chấm-điểm, không dùng domain skill).

### F-2 | ③ máy | **HIGH** | máy MỚI `loi-hua-may-scan.ps1` = **MỒ-CÔI**, đúng lớp mà `(k-ter)` vừa dựng @S181 để diệt
- **Vật:** `scripts/loi-hua-may-scan.ps1` **30.223 B** + `scripts/loi-hua-may-baseline.json` **13.460 B** (30 entry) — dựng @S185 lane-7, cả 2 còn `??` untracked.
- **Đo nhà-khai:** `grep -rn "loi-hua-may" .claude/commands/` = **0 hit** · `grep -rn "loi-hua-may" docs/` = **1 hit DUY NHẤT**, và hit đó (`adap-reports/2026-07-19-…:21`) nói máy **"CHƯA CÓ"**.
- **Control dương:** `naming-scan` → **9 file** trong `docs/`+`.claude/commands/` (có cửa `(k-ter)` gọi). ⇒ thước sống, 0-hit của máy mới là **vắng thật**.
- 🔴 **Đây là máy mồ-côi thứ 3.** 2 con trước (`naming-scan` + `artifact-integrity`) phải chờ tới **S181** mới có cửa — `session-end.md:163` `(k-ter)` tự khai lý do: *"đo @S181 … cả 2 máy có **0 cửa nghi-thức gọi** … chỉ sống khi có người gõ tay ⇒ hết phiên là hết chạy"*. **Bệnh tái phát ngay phiên kế, trên máy mới nhất.**
- **Đề-xuất (rẻ→đắt):** (a) thêm 1 dòng vào `(k-ter)` — cửa đã có, 0 kiến-trúc mới; (b) **hoặc** cắm ở `adap-apply` BƯỚC 0 — đúng ý gốc khoản 4.4 *"chặn từ lúc VIẾT"* (doc governance mới sinh ở cửa đó); (c) git-add 2 file (untracked = ngoài cả git-diff backstop).

### F-3 | ④ docs | **MED** | cùng file, cùng phiên: **4.2 có ADDENDUM, 4.4 KHÔNG** — trong khi máy 4.4 vừa ra đời
- `docs/governance/adap-reports/2026-07-19-Governance-goi-chot-owner-nam-khoan.md:21` row 4.4 khai `máy-quét = DỰ-ĐỊNH, chưa có` + 🔴 *"Máy quét tự động cho chính class lời-hứa-máy: **CHƯA CÓ**"*.
- @S185 lead ĐÃ viết khối `ADDENDUM @S185 — ĐÓNG vế treo 4.2` vào **chính file này** (đúng doctrine *block MỚI, không sửa dòng cũ*) — nhưng `grep "4\.4"` cả file = **4 hit, 0 hit nào trong addendum**.
- ⇒ Tài-liệu **duy nhất** trong repo nói về máy này vẫn khai nó không tồn tại, sau khi nó đã tồn tại **cùng phiên**.
- 🔴 **Vá đúng cách = ADDENDUM THỨ 2, CẤM sửa row `:21`** — row đó **đúng lúc viết (25-07)**; sửa = giả-mạo phép đo cũ (luật S143/S172). Cùng khuôn 4.2 vừa dùng.

### F-4 | ④ docs | **MED** | adap-report 08-08 **0 con-trỏ sống** — chỉ WAL trỏ, mà WAL reset ở §6.4
- `grep -c "2026-08-08" docs/STATUS.md` = **0** · `docs/HANDOFF.md` = **0**.
- Con-trỏ duy nhất ngoài chính nó: `.claude/WAL.md:16` — nhưng WAL = **sổ TASK**, và `session-end §6.4` **xoá/reset WAL ở bước CUỐI** ⇒ đóng phiên xong, report này thành **mồ-côi hoàn toàn**.
- **Control dương:** run-folder `2026-08-09-S185` **CÓ** trong `docs/HANDOFF.md` ⇒ không phải lỗi thước.
- **Đề-xuất:** 1 dòng trong HANDOFF (hoặc row STATUS Recently-Done) trỏ `docs/governance/adap-reports/2026-08-08-Governance-quy-trinh-hai-dau-phien-may-diem-danh-va-6-bai-hoc.md` **TRƯỚC** khi chạy §6.4.

### F-5 | ③ máy | **LOW-MED** | 4 detector mới (C13 · C14 · C15 · L7-bolt) **0 nhà khai ngoài script** — nhưng đây là **gap CŨ**, không phải lỗi S185
- Đo: `grep "C13|C14|C15|L7-bolt"` trong `docs/governance/harness-11-engine.md` + `docs/STATUS.md` = **0 hit**.
- 🔸 **TỰ BÁC một nửa:** control C10/C11/C12 (detector CŨ) **cũng 0 hit** trong engine doc ⇒ repo **chưa từng** có registry detector; script **tự-mô-tả** (có khối `# NAMING: script-local C-numbering` ngay trong code, và `C13/C14/C15` đều `INFORM-only, NOT folded into TOTAL baseline` = **đúng bài anti-Goodhart owner-set**). ⇒ **KHÔNG** hạ verdict S185 vì cái này.
- **Đề-xuất:** đóng CẢ LỚP 1 lượt (bảng detector-registry C6→C15 + L7-bolt) hoặc **cố ý không đóng, khai là chủ-đích** — đừng vá lẻ 3 con mới rồi 12 con cũ vẫn câm.

### F-6 | ④ run-trace | **LOW-MED** | `run.md` S185: **6 vòng đã có artifact trên đĩa, checkbox tick 0/11** + tên artifact khai **lệch đĩa**
- Đĩa đã có: `sub-harvest-curator.md` 43.771 B · `harness-eval-return.md` · `harness-refine-return.md` · `sub-harness-audit.md` · `sub-lead-stale-deep.md` · `sub-lead-gap-deep.md` — nhưng bảng `run.md` **11 row đều `[ ]`**.
- **Lệch tên:** `run.md` "Artifact chờ" khai `harness-{eval,refine,audit}-return.md`; đĩa có con thứ 3 tên `sub-harness-audit.md` ⇒ grep theo tên **đã khai** = 0-hit.
- 🔴 **Vì sao đắt hơn vẻ ngoài:** luật **ONE-SHOT vừa land cùng phiên** quy định *đứt bất-khả-kháng ⇒ lượt-nối chạy HẾT phần §L.b còn thiếu*. `run.md` là **thứ duy nhất** nói "phần còn thiếu" là gì. Checkbox không tick = **luật mới mất la-bàn ngay lượt đầu áp dụng**. (Cùng họ bài owner S165 *"pause phải nhớ kỹ plan-progress"*.)

### INFORM-1 | vocab-collision | `PA-2` mang **HAI nghĩa rời nhau**, và S185 thêm site mới cho nghĩa-2
- Nghĩa ①(H23, owner O1 @S119): *"PA-2a hằng-số `TIER2_EXPECTED_FULL_ID` + PA-2b `spawn-model-audit.ps1`"* — sống ở `session-start.md:57`, `fable-clone.md:105`.
- Nghĩa ②(P1, owner @S180): *"hai mã thoát trong MỘT máy"* (W3b) — sống ở `_context-s-12.md:55`, **+MỚI @S185** `adap-apply.md:20` và header `tien-kiem-cua.ps1`.
- Không câu nào sai; nhưng `grep "PA-2"` trả lẫn 2 họ quyết-định. Đúng lớp `vocab-collision-check on adopt` đã có trong sổ.

### INFORM-2 | ① command | `(f-bis)` chỉ có con-trỏ **NGƯỢC**, không có con-trỏ **XUÔI** từ (c)
- `(f-bis)` (`session-end.md:121`) trỏ đúng `(c)`/`(d)`/`(f)` — 3 nhãn đều tồn tại thật (`:72`/`:83`/`:85`), thứ tự vật-lý `121 > 85` ✓, nhãn `f-ter`→`f-bis` đúng (không nhảy nấc).
- Nhưng `(c)` — nơi **chạy phép đo và người ta chép số** — **0 chữ** báo có bước re-measure phía sau. Người thi hành đọc (c), ghi số vào HANDOFF ngay tại đó, rồi mới gặp (f-bis) ⇒ đúng chế-độ hỏng mà (f-bis) sinh ra để diệt.
- **Đề-xuất:** 1 mệnh-đề trong (c): *"số khối này là **chụp-trước-harvest** — CHƯA được mang vào HANDOFF/STATUS trước khi (f-bis) chạy lại"*.

---

## 3. ĐÃ CÂN NHẮC → **BÁC** (không flag)

| Ứng-viên | Vì sao KHÔNG flag |
|---|---|
| `lead-stale-auditor.md:47` neo chết (`post Session 6 — 2026-04-30`) | **Cặp H24 deep đã FLAG hôm nay (stale-F10)** — vai tôi lấn = double-touch. Chỉ ghi nhận, không đếm vào n. |
| Persona `lead-stale`/`lead-gap` còn **chép tay bảng class** | Đo: **6 `view-*` + 6 `gap-*` = 12** = **KHỚP** `flag_classes` canonical (`memory-budget.json`, gồm `view-claim-broader-than-sample` mở @S179). Bảng chép tay nhưng **ĐÚNG** ⇒ flag = vu oan. (Site chép tay ở `session-start.md:163-164` đã được gỡ @S185 — đúng hướng.) |
| Header `tien-kiem-cua.ps1` khai P1=PA-2 | **Tái-lập 4/4:** `grep -c "OVERDUE:jump"` = **0** · control `grep -c "OVERDUE"` = **6** · `harness-11-engine.md:587` khớp nguyên văn vế soak · `_context-s-12.md:55` khớp. Và **cố ý KHÔNG trích lại câu cũ** (tránh citation-trap use⟂mention) = đúng bài S123. **PASS mẫu mực.** |
| 2 site ONE-SHOT "có đối xứng không" | **Đối xứng ĐỦ:** mỗi bên 4 vế CẤM + trỏ chéo 2 chiều + `CLAUDE.md` **chỉ TRỎ, 0 chép giá-trị** (B1 đúng). Bất-đối-xứng còn lại là **có lý**: bookend có `closing:` sentinel (Sàn-2) nên nói thêm về nó; bookstart giữ carve-out H22 cho `/pause`·`/tiep`. |
| `run.md` thiếu cột label | **CÓ** cột `label` 4-thành-phần (khoản-④ C-7 vừa land @S185 trong `fable-clone.md`) — **áp ngay cùng phiên**, không đợi phiên sau. PASS. |
| 7 memory-file `reviewer` mới | **7/7 đều có pointer** trong `agent-memory/reviewer/MEMORY.md` (đo từng tên, 1 hit mỗi tên). PASS. |
| `docs/STATUS.md`/`HANDOFF.md` stale nói chung | **Cặp H24 deep đã soi hôm nay (10+6 FLAG)** — không lặp việc, đúng phân-vai. |

---

## 4. NEW-ALLOC AUDIT @close (skill/plugin/máy MỚI chưa phân-bổ)

| Loại | Mới phiên này | Đã phân-bổ? | Đề-xuất |
|---|---|---|---|
| Skill project | **0** (6 giữ) | — | 0-action |
| Skill user-global | **0** (23 giữ) | — | 0-action |
| Plugin | **0** (18/15/3, **0-delta phiên thứ 5**) | — | 0-action |
| Vai mới | **0** (28 giữ) | — | 0-action |
| 🔴 **Máy mới** | **1** — `loi-hua-may-scan.ps1` | ❌ **CHƯA** (F-2) | Cửa `(k-ter)` (rẻ) **hoặc** `adap-apply` BƯỚC 0 (đúng ý 4.4); vai đọc = **lead**, KHÔNG đẻ sub mới |
| Detector mới | **4** (C13/C14/C15/L7-bolt) | ⚠️ chỉ trong script | F-5 — đóng cả lớp hoặc khai chủ-đích |

🔸 **Không có skill/plugin nào cần gán cho 28 vai** — new-alloc lượt này **thuần lớp MÁY**, khác 4 lượt trước.

---

## 5. VERDICT

**`TOOLING-CHOT: PASS_WITH_FLAGS — 6`** (+2 INFORM)

| Mặt | Chốt | Một chữ |
|---|---|---|
| ① skill/command | 6+23+19 **0-delta**; 4 command SỬA nhất-quán (ONE-SHOT đối xứng, f-bis nhãn đúng, khoản-④ áp ngay) | **PASS** |
| ② vai/persona | roster **28 khớp 5/5** bề-mặt; class-table persona khớp enum 12 | **PASS** (F-1 = bề-mặt thứ 6) |
| ③ plugin/máy | plugin 0-delta 18/15/3; **máy MỚI mồ-côi** + 4 detector không nhà | **DRIFT** |
| ④ docs | 4.4 chưa addendum · report 08-08 0-con-trỏ · run.md 0-tick | **DRIFT** |

🔴 **G-015:** vai này **propose-only** — mọi mục trên là ĐỀ-XUẤT, lead single-writer VERIFY→APPEND (B3). `Bash` còn mở ⇒ **KHÔNG** khai "read-only enforced"; containment thật = lead single-writer + git-diff.

**END TOTAL = 6 FLAG (1 HIGH · 3 MED · 2 LOW-MED) + 2 INFORM · 7 BÁC có lý-do · new-alloc 1 máy chưa cắm.**

