# sub-tooling-auditor — BOOKEND @OPEN S154 (phiên-logic L7)

> H1 tooling-freshness 4-mặt + DIFF vs S153-close. Read-only + propose-only. Ghi-trong-lúc-làm (chống #53).
> Bắt đầu 2026-07-26. Repo `D:\Dropbox\CONG_VIEC\SOLUTION\SOLUTION_ERP`. PIN đối-chiếu: `runs/2026-07-26-S153-bookend-close/sub-tooling-auditor-close-S153.md` (6 finding).

## Ground state (đo trước tiên — mọi số có lệnh kèm)

| mục | giá-trị | lệnh |
|---|---|---|
| HEAD | `871ac0a` 2026-07-26 16:16:45 +0700 "S153 closeout-bis — _end session-6 + _mind block-0 … + reset WAL" | `git log -1 --format='%h %ad %s' --date=iso` |
| working tree | **3 mục, SẠCH-về-governance**: 1 M `.claude/governance/.session-counter.json` (tick S154) + 2 untracked `.claude/sessions/session-7/` · `runs/2026-07-26-S154-bookend-open/` — cả 3 = artifact của chính bookend này | `git status --porcelain \| wc -l` = 3 |
| Δ vs S153-close | S153 lúc đó DIRTY 13 M + 3 untracked; nay **đã commit trọn** qua `11db5ef` + `871ac0a` | so PIN §Ground |

(findings ghi dần bên dưới — file LUÔN hợp-lệ giữa chừng)

---

## ② VAI-TRÒ SUB-AGENT — **PASS** (4 bề mặt khớp **23**, tên trùng 1:1)

| bề mặt | số | bằng-chứng (lệnh) |
|---|---|---|
| đĩa `.claude/agents/*.md` trừ README | **23** | `ls .claude/agents/*.md \| grep -v README \| wc -l` = 23 |
| `hmw.js` VALID_ROLES (đếm PHẦN-TỬ) | **23** | `awk '/^const VALID_ROLES = \[/{f=1} f{print} /^\]/{if(f)exit}' .claude/workflows/hmw.js \| sed 's#//.*##' \| grep -o "'[a-z0-9-]*'" \| wc -l` = 23 |
| `docs/STATUS.md:456` §Sub-agents (canonical) | **23** | `grep -n "Sub-agents" docs/STATUS.md` → `:456 \| Sub-agents \| **23** \| +S153 bộ-ba vòng Ctx …` |
| `.claude/agent-memory/*/` (nhà diary) | **23** | `ls -d .claude/agent-memory/*/ \| wc -l` = 23 |
| `.claude/agents/README.md` | **B1-pointer, 0 số** (ĐÚNG luật) | `:3` "Số vai canonical → docs/STATUS.md §Sub-agents. KHÔNG chép số vào file này" |

- **Tên trùng khít 1:1 (không chỉ trùng SỐ):** `diff <(VALID_ROLES sorted) <(disk sorted)` = **rỗng**; `diff <(agent-memory dirs) <(disk)` = **rỗng**. ⇒ 0 vai mồ-côi nhà, 0 nhà mồ-côi vai.
- **Header `STATUS:6` cũng khai `Sub-agents 23`** (`grep -o "Sub-agents [^|]\{0,20\}"` → hit-1 = `Sub-agents 23** · counter **27`) ⇒ 2 tầng STATUS nhất-quán. 15 hit `Sub-agents 12` còn lại đều nằm khối **Prev/frozen** (`:198 :222 :249 :282 :315 …`) = record lịch-sử, **KHÔNG sửa** (luật S143 prescriptive⟂frozen).
- 🔴 **Bẫy `]` (bài S153) TÁI-KIỂM và né được:** range naive `awk '/VALID_ROLES/,/^\]/'` cho **33** — sai vì range **MỞ LẠI** ở `!VALID_ROLES.includes(...)` phía validator rồi nuốt thêm chuỗi nháy-đơn trong header-comment. Neo đúng = `^const VALID_ROLES = \[` + `exit` ở `^]` đầu tiên ⇒ 23. *(Khác biến-thể S153: lần đó lỗi do `]` trong comment; lần này do range tái-mở. Cùng một class "range không neo".)*
- **`hmw_width.cap` = 20 < roster 23** ⇒ full-sweep LOUD-skip 3 lane cuối. **KHÔNG tính là finding mới** — đây là carry `[carry:hmw-width-vs-roster]` slot (40) đã mở @S153; mirror `hmw.js:153 const WIDTH_CAP = 20` **KHỚP** `memory-budget.json:24 "cap": 20` ⇒ 0 drift mirror, chỉ là ngưỡng owner chưa nâng.

## ②-bis DƯ-LƯỢNG TÊN CŨ (rename T11 hub-form) — **PASS, 0 prescriptive-drift**

Lệnh: Grep tool (ripgrep) `ctx-pause-check|ctx-reload|ctx-chain` repo-wide → **13 hit**, phân loại 2 lớp theo luật S143:

| lớp | site | phán |
|---|---|---|
| **lineage-note CỐ Ý** (2) | `agents/ctx-verifier.md:14` · `agents/ctx-curator.md:14` | GIỮ — khai cả nghịch-lý VIPIX gọi vai-2 đúng là `ctx-reload` |
| **diary seed** (3) | `agent-memory/ctx-{audit,curator,verifier}/MEMORY.md:3` | GIỮ — lineage |
| **frozen record** (8) | `runs/S153-close/` ×4 (`run.md:6` + 3 sub-file) · `sessions/2026-07-26-1600-S153-…md:14,:52,:54` · `STATUS.md:456` | GIỮ — sửa = giả-mạo |

- **0 site MÔ-TẢ-HÀNH-VI-SỐNG bằng tên cũ** ⇒ 0 vá. Kiểm phản-chứng: `sessions/…:52` cột VIPIX ghi `ctx-check→ctx-reload→ctx-chain` là **ĐÚNG tên nhà VIPIX**, không phải drift SE.
- **Δ vs S153:** S153 đếm 7 hit; nay 13. Chênh = **+7 sinh mới toàn frozen** (4 sub-file/run.md của chính S153-close + 3 dòng session-log) **−1 XÓA THẬT**: hit `WAL.md:11` @S153 đã biến mất do `871ac0a` reset WAL. ⇒ tăng thuần là artifact lịch-sử, không phải drift lan.

---

## ① SKILL — **PASS** (0 đổi, 0 stale, 0 thiếu map)

| mục | số | lệnh |
|---|---|---|
| skill project `.claude/skills/*/` | **6** | `ls .claude/skills/` → contract-workflow · dependency-audit-erp · ef-core-migration · form-engine · iis-deploy-runbook · permission-matrix |
| thay-đổi working-tree | **0** | `git status --porcelain .claude/skills/` = **rỗng** |
| commit chạm skill gần nhất | `c2d01f0` 2026-07-26 (S152 closeout) | `git log -1 --date=short -- .claude/skills/` ⇒ **S153 không đụng skill nào** |
| standalone `~/.claude/skills/` | **23** | `ls -1 ~/.claude/skills/ \| wc -l` = 23 — IDENTICAL S153 |
| command-file `.claude/commands/*.md` | **19** | `ls -1 .claude/commands/*.md \| wc -l` = 19 — IDENTICAL S153 |

- **Nợ S151 (Mig 67) VẪN ĐÓNG — verified tươi:** `ef-core-migration/SKILL.md:89` còn row `| **67** | **AddPeApprovedBudgetSnapshot** | …` kèm chú *"(row bổ sung @S151 — ring1 TRƯỢT-1 bắt bảng dừng ở 66 trong khi canonical Mig 67)"*. File 34.147B, mtime 2026-07-26 01:41. Bảng skill = row cuối 67 ⟂ canonical `STATUS` Mig 67 ⇒ **khớp**.
- `skills/README.md:20` dùng **B1-pointer đúng luật** (*"mới nhất → row cuối bảng skill; số → `docs/STATUS.md`"*) ⇒ 0 count-claim cứng để lão-hoá.
- **Không có skill nào cần biết vòng Ctx** — kết luận S153 giữ nguyên: lớp mềm là session-lifecycle (tầng command + persona + máy `session_ctx.py`), skill là tầng domain/ops. Kéo vào skill = sai tầng.

---

## ③ PLUGIN — **PASS** (0 delta mọi nấc)

| nấc | giá-trị | lệnh |
|---|---|---|
| registered | **18** | `~/.claude/settings.json:17-35` `enabledPlugins` |
| enabled | **15** | `sed -n '17,36p' ~/.claude/settings.json \| grep -c true` = 15 |
| disabled | **3** | `grep -c false` = 3 → `pr-review-toolkit:20` · `code-modernization:22` · `hookify:27` |
| marketplace | **37** | `ls -1 ~/.claude/plugins/marketplaces/claude-plugins-official/plugins \| wc -l` = 37 |
| lead model | `claude-opus-5[1m]` `:11` · `effortLevel: xhigh` | cat settings |

- **IDENTICAL baseline S153 ở CẢ 4 nấc** (18/15/3 + marketplace 37). Marketplace = **lớp đo riêng**, đã đo tươi chứ không suy từ lớp registered (bài F-D @S143).
- **Authority ③ VẪN user-global:** project `.claude/settings.json` (330B) chỉ có `autoMemoryDirectory` + `hooks.Stop wal-flush.ps1` — **0 khoá plugin/model** ⇒ không conflate 2 file settings.

---

## F-1 — ④ docs — **MED** (carry S153 F-2, MỞ SANG PHIÊN THỨ 2, 0 tiến-triển)

`docs/governance/README.md` **chưa hề được chạm** kể từ `72bbfa5` **2026-06-02** (`git log -1 --date=short -- docs/governance/README.md`), working-tree 0 thay-đổi. 2 vị-từ sai:
- `:5` `**Status:** ✅ Active trial week 1-4 (2026-05-26 → 2026-06-23)` — cửa-sổ đóng **33 ngày** trước hôm nay (2026-07-26) mà vẫn khai `Active`.
- `:35` `phase-9-uat — UAT + production hardening **(current)**` — trong khi `CLAUDE.md` khai **Phase 10 COMPLETE + Phase 11 A→F done**; enum phase trong file này dừng ở phase-9, **thiếu hẳn phase-10/11**.

Đây là **prescriptive** (mô-tả trạng-thái SỐNG của governance), không phải frozen ⇒ phải vá. Lane lead/owner. *Ghi chú ranh: file này là index RAG-governance, không phải index doc chung.*

## F-2 — ④ docs — **LOW** (carry S153 F-4, class-gap CÓ TRƯỚC, chưa chốt luật)

`broadcasts/_index.md` (112 dòng) thiếu row **INBOUND**. Đo từng file thay vì đoán — `for f in $(ls -1t broadcasts/inbox/ai_infra/ | head -10); do grep -c "$f" _index.md; done`:

```
0  2026-07-25-Governance-pause-tiep-upgrade-vong-ctx      <- thư ② S153 (0df10df4)
0  2026-07-25-Governance-model-default-opus-5-max         <- thư ① S153 (9c909007)
1  2026-07-22-...reply-session-model-dung-ban-da-duyet    (:59)
1  2026-07-22-...reply-adap11-c7-bulk-shards              (:58)
0  2026-07-21-Governance-eval-quality-audit-...
0  2026-07-20-Governance-3-khoan-title-tier-posture-...
0  2026-07-20-Governance-auto-toan-vong-distill-2-tang
0  2026-07-19-Governance-harness-dong-du-vong-audit-...
0  2026-07-19-Governance-goi-chot-owner-nam-khoan
0  2026-07-18-Governance-spawn-label-panel-audit-khung
```

**Phạm-vi tập-đo (khai rõ):** **8/10 thư inbox mới nhất = 0-row**, gap kéo từ **2026-07-18**. Lane inbound **CÓ tồn tại** và đầy-đủ tới 2026-07-22 (`:15-59`, khuôn `ai_infra → se | processed | … | ✓`), lane outbound thì cập-nhật tới `:112` (2 row S153 `d432f5eab5cd` + `aedd7fb67405` ĐÃ có). ⇒ **outbound sống, inbound chết từ 07-18.** Δ vs S153: **KHÔNG xấu thêm** (vẫn đúng tập 8 đó, S153 đo 6/8 trên head -8; tao đo head -10 nên ra 8/10 — cùng một gap, khác bề-mặt-đếm). Lead cần chốt: lane inbound còn hiệu-lực hay đã bỏ — nếu bỏ thì hàng `:15-59` phải khai, chứ đứng lưng-chừng là bẫy cho phiên sau.

## F-3 — ④ docs — **LOW** (residual của S153 F-6 — đóng 2/3, hở đúng con-trỏ)

S153 F-6 yêu-cầu 3 thứ @closeout; đo tươi thì **2 đã đóng, 1 hở**:

| yêu-cầu | trạng-thái | bằng-chứng |
|---|---|---|
| HANDOFF stamp S153 | ✅ ĐÓNG | `docs/HANDOFF.md:5` `**🆕 Last updated:** 2026-07-26 chiều (**S153** …)` |
| STATUS row S153 | ✅ ĐÓNG | `docs/STATUS.md:466` `## ✅ Recently Done (S153 — 2026-07-26)` + `:471` State-line |
| **con-trỏ `→ log`** tới session-log | ❌ **HỞ** | `grep -c "→ log" docs/STATUS.md` = **29** (khuôn dùng đều khắp, vd `:480 :484 :488 :508`) nhưng **khối S153 `:466-471` KHÔNG có dòng nào**; `grep -rn "2026-07-26-1600-S153"` = 7 hit, live-anchor DUY NHẤT là `.claude/sessions/session-6/_end:2 pointer:` — 4 hit còn lại là run-folder frozen + chính file S153 của tao |

⇒ session-log `docs/changelog/sessions/2026-07-26-1600-S153-ctx-adopt-3vai-rename.md` **vào được từ `_end` manifest nhưng KHÔNG vào được từ `STATUS`** — lệch khuôn 29 khối anh em. Đề: thêm 1 mảnh `→ log …` vào `:471`. Lane lead (rẻ, additive).

---

## DIFF vs S153-close (PIN 6 finding) — 4 ĐÓNG / 2 MỞ

| S153 | mặt | phán @S154 | bằng-chứng đóng/mở |
|---|---|---|---|
| F-1 plugin README "KHÔNG enable" | ③④ | ✅ **ĐÓNG** | `agents/README.md:225-226` vá @S153 — tách nấc ĐÚNG: *"Nấc THẬT của khối này = `enabled` nhưng CỐ Ý KHÔNG DÙNG"* + trỏ `~/.claude/settings.json:17-35` cho bit enable. **Neo số verify tươi:** `csharp-lsp :33` ✓ · `commit-commands :31` ✓ · block `:17-35` ✓ (grep -n trên chính settings.json) ⇒ 3 citation ĐÚNG, không phải vá-cho-vừa-detector. Số chốt cuối = ring1 @close "3 hard + 1 nấc-khác", `:226` ghi minh-bạch cả 3 lượt số |
| F-2 governance/README stale | ④ | 🔴 **MỞ** → **F-1 @S154** | git log đứng 2026-06-02 |
| F-3 ctx-draft 0 con-trỏ | ④ | ✅ **ĐÓNG** | `docs/HANDOFF.md:8` neo live, tự khai *"(F-3 H1 @close — neo con-trỏ live-doc)"* |
| F-4 `_index` inbound gap | ④ | 🔴 **MỞ** → **F-2 @S154** | 2 thư S153 vẫn 0 hit |
| F-5 `hmw_width` additive-note | ④ | ✅ **ĐÓNG ĐÚNG KIỂU** | `memory-budget.json:28` `_roster_note_S153` = khoá MỚI, và `:29 _why_20_not_16` **giữ nguyên từng chữ** ⇒ thi-hành đúng "thêm câu, KHÔNG sửa record đã ratify" |
| F-6 session-log pointer | ④ | 🟡 **ĐÓNG 2/3** → **F-3 @S154** | HANDOFF+STATUS-row xong, `→ log` hở |

**THÊM/ĐỔI/XÓA khác:** THÊM = `.claude/sessions/session-7/` (scaffold L7) + run-folder S154 · ĐỔI = `.session-counter.json` 27→28 · XÓA = `WAL.md` reset sạch (`871ac0a`) ⇒ mất 1 hit tên-cũ. **0 skill mới · 0 plugin mới · 0 vai mới · 0 command mới.**

## NEW-ALLOC — 0 action

- **Skill-matrix phủ 23/23:** `agents/README.md` `## 🔌 External skill/plugin mapping` `:212-230` + bảng vai — 3 row ctx đã có từ S153, cả 3 khai `ref-only … KHÔNG dùng domain skill` (đúng bản-chất monitor read-only).
- 0 skill/plugin mới trong cửa-sổ (skills diff rỗng · settings 18/15/3 identical · marketplace 37 = 0 delta) ⇒ **0 alloc-action**.
- Carry chưa đo lại (khai rõ, KHÔNG suy): `security-guidance` @S143 — mang hook Stop + edit-time warning ⇒ đụng `settings.json` hooks ⇒ **owner quyết, tao không bật, không tự đánh giá lại**.

## G-015 self-honesty

Vai này propose-only. `store_memory` đã strip nhưng **`Bash` vẫn còn = write-channel MỞ** ⇒ **KHÔNG khai "read-only enforced"**. Trong phiên này tao chỉ ghi **đúng 1 file của chính tao** (`sub-tooling-auditor-open-S154.md`); containment thật = em-main single-writer + git-diff post-session.

<!-- END sub-tooling-auditor-S154 · TOTAL=3 FINDING -->
