# sub-implementer-backend-2 — T3: TẠO MỚI `.claude/agents/ctx-audit.md` (persona vai KIỂM lớp mềm) > ĐANG GHI TRONG LÚC LÀM (chống #53). Wave hmw-1 · run `2026-07-26-S153-ctx-adopt` · role implementer-backend (lane 2/2). > Vết ủy quyền: **OWNER-DELEGATED qua lệnh pipeline 26-07** — file này KHÔNG ghi "owner chốt" ở bất kỳ đâu. ## 0. Nguồn đã đọc (trước khi ghi 1 dòng nào) | # | File | Lấy gì | |---|---|---| | 1 | `.claude/workflows/runs/2026-07-26-S153-ctx-adopt/spec-ctx-adopt-26-07-2026.md:9` | **CHỈNH-1 của lead** — câu `tools:` phải viết đúng nấc: *"khai KHÔNG Write/Edit (mô-tả ý-định — carry `tools-whitelist-no-teeth`: runtime vẫn cấp, backstop THẬT = git-diff commit-gate)"*; CẤM khai thành cơ-chế chặn (bài S143 4-site) | | 2 | `sub-fable-invest-S153.md:67-68` (§T3) | nhiệm-vụ @open 4-khoản / @close 5-khoản + 4-đối-chiếu + bất-biến + chấm-mồi · PIN fail-closed · NO-OP · VERDICT dòng-1 · schema-nhỏ 3-field · lead scribe `sub-ctx-audit-{open,close}.md` · tên khớp lưới C11(b) `sub-*.md` | | 3 | `sub-fable-invest-S153.md:44` ((38)) + `:37` (Mục 1) | (38)(a) 1 vai · 2 lượt @open+@close kiểm HỒI-TỐ · sàn khoản 5+7: GHI (lead) ⟂ KIỂM (vai) · máy-$0 mỗi cửa ⟂ vai chỉ 2 bookend | | 4 | `sub-fable-invest-S153.md:98` (Mục 3 T3) | ACCEPTANCE: grep `INFORM-only\|effort: max\|model: opus` ≥3 hit · grep khuôn-retired = 0 hit | | 5 | `.claude/agents/ring2-audit.md` (form CHÍNH) | AUTO-fire-after-measure · PIN + fail-safe → NO-OP · no-self-exempt · propose-only + backstop git-diff · `## Ranh-trục` · `## N caveat (khai thẳng)` · CONTRACT nghĩa-vụ số-thứ-tự | | 6 | `.claude/agents/harness-eval.md:3-9` (form frontmatter) | description dài 1 block `|` kết bằng câu **"PHẢI dùng khi/PHẢI dùng SAU…"** + liệt ranh "KHÔNG X (đó là vai Y)" | | 7 | `.claude/agents/harvest-curator.md:57-63` · `tooling-auditor` · `database-agent` · `office-document` | khuôn khối **`## 🚫 Anti-patterns (NEVER)`** (owner (31) S152) — bản MỚI NHẤT của nhà (4/21 vai đã đổi; `## Anti-pattern` là bản cũ ring-family) | | 8 | `.claude/agents/lead-stale-auditor.md:51-54` | 🔴 ĐỌC ĐỂ **TRÁNH** — khối `## Nhịp — mày KHÔNG chạy mỗi phiên` = khuôn STALE (M-1, ring2 bắt @S153). KHÔNG chép 1 chữ nào từ khối này | **Quyết định form (khai để lead veto 1 edit nếu muốn):** - Heading anti-pattern dùng bản **MỚI** `## 🚫 Anti-patterns (NEVER)` (đúng task + owner (31) S152), KHÔNG dùng `## Anti-pattern` của ring2 — ring2 là form CHÍNH cho *cấu-trúc*, không phải cho *heading đã bị owner thay*. - Thêm `memory: project` + `maxTurns: 16` (không có trong danh sách frontmatter tối thiểu của spec) — **theo khuôn nhà**: 100% vai read-only hiện hữu (ring1/ring2/ring4/harness-*/lead-*) đều có 2 khoá này. Additive, dễ gỡ. - KHÔNG thêm `color:` (chỉ `lead-stale-auditor` có; ring-family + harness-family không). ## 1. Ràng buộc TỰ-ÁP khi soạn (checklist trước khi Write) 1. 0 hit `consent` · 0 hit `OVERDUE` · 0 hit `không chạy mỗi phiên` — **toàn file**, không chỉ phần nhiệm-vụ (siết hơn acceptance để khỏi tranh chấp ranh "phần nhiệm-vụ"). 2. 0 hit `chặn-bằng-thiếu-tool` (CHỈNH-1) — `harness-eval.md:60` có cụm này, KHÔNG carry sang. 3. Hình-B phát biểu ở dạng **KHẲNG ĐỊNH** ("chạy MỖI phiên, CẢ HAI bookend, vô-điều-kiện"), không dùng dạng phủ-định của khuôn cũ. 4. Vết ủy quyền ghi đúng nấc **OWNER-DELEGATED → ENGINE-PROPOSED → LEAD-DECIDED @S153**, cấm chữ "owner chốt". 5. Con-trỏ khoá/số: trỏ khoá (`mind_ctx_kb`), CẤM chép số 32 vào persona (B1). 6. Pure-text MD; gotcha #30 (ASCII) KHÔNG áp (không sinh `.ps1`). ## 2. Đã ghi (kết quả) - `.claude/agents/ctx-audit.md` — **TẠO MỚI** (0 file cũ bị đụng; `ls` trước khi ghi = NO). - Cấu trúc landed: frontmatter 6 khoá → `# ctx-audit` → `## Vì sao mày TỒN-TẠI + TÁCH RIÊNG` → `## Vì sao AUTO vô-điều-kiện 2 bookend (hình-B từ lúc sinh)` → `## CONTRACT — 6 nghĩa-vụ` ((0) PIN · (i) @open 4 khoản · (ii) @close hồi-tố 5 khoản · (iii) @close đối-chiếu 4 khoản · (iv) bất-biến chuỗi · (v) chấm mồi-ngầm) → `## VERDICT + return` → `## File-đọc` → `## Ranh-trục` → `## 3 caveat (khai thẳng)` → `## 🚫 Anti-patterns (NEVER)` 6 mục. ## 3. ACCEPTANCE (Mục 3 §T3) — số đo THẬT, lệnh dán được | # | Lệnh | Kỳ vọng | Đo được | Verdict | |---|---|---|---|---| | A1 | `grep -n 'INFORM-only\|effort: max\|model: opus' .claude/agents/ctx-audit.md` | ≥3 hit | **3 hit / 3 dòng** — `:4` INFORM-only · `:5` `model: opus` · `:6` `effort: max` | **ĐẠT** | | A2 | `grep -o -i 'consent' …` | 0 | **0** | **ĐẠT** | | A2 | `grep -o -i 'OVERDUE.*mỗi phiên' …` (+ `OVERDUE` trần) | 0 | **0 / 0** (không dùng chữ OVERDUE ở đâu cả) | **ĐẠT** | | A2 | `grep -o 'không chạy mỗi phiên' …` | 0 | **0** | **ĐẠT** | | A3 | `grep -c 'chặn-bằng-thiếu-tool'` (CHỈNH-1 lead — cấm) | 0 | **0** (`harness-eval.md:60` có cụm này; KHÔNG carry) | **ĐẠT** | | A3 | `grep -c 'tools-whitelist-no-teeth'` + `grep -c 'git-diff commit-gate'` | ≥1 mỗi | **2** + **1** (description `:4` + caveat 1) | **ĐẠT** | | B1 | `python` yaml.safe_load frontmatter | parse OK | keys = `[name, description, model, effort, tools, memory, maxTurns]` · name=`ctx-audit` · tools_n=**8** (Read/Grep/Glob/Bash + 4 RAG) · desc=**1754 ký-tự** · file=**14.347B** | **ĐẠT** | | B2 | `grep -n '^#\{1,3\} '` | có đủ 2 khối bookend + CONTRACT + anti-pattern | 15 heading: `:29 ## CONTRACT — 6 nghĩa-vụ` với `(0)`PIN·`(i)`@open-4·`(ii)`@close-hồi-tố-5·`(iii)`đối-chiếu-4·`(iv)`bất-biến·`(v)`mồi-ngầm+thách-CLEAN | **ĐẠT** | | B3 | `awk` đếm mục dưới `## 🚫 Anti-patterns (NEVER)` | ≥5 | **7** | **ĐẠT** | | B3b | đếm mục `## 3 caveat` | 3 | **3** | **ĐẠT** | | B4 | `git status --porcelain` | chỉ 2 file của lane này | `?? .claude/agents/ctx-audit.md` + `?? …/sub-implementer-backend-2.md` — mọi entry khác thuộc lane khác (`sub-implementer-backend-1.md` = T1 · `session-mind-template.md` + `sub-implementer-frontend-1.md` = T2) hoặc có TRƯỚC wave (session-counter / broadcasts / adap-reports) | **ĐẠT (containment)** | ## 4. Phát hiện thêm (verify vs MÁY, không suy đoán) — 2 khớp lưới đã kiểm bằng chính script 1. **`ctx-audit` AUTO nhập danh sách INFORM-only của detector NGAY khi file land** — `scripts/governance-detectors.ps1:1721-1742` đọc **LIVE** frontmatter mọi `.claude/agents/*.md`, lấy vai nào có chuỗi `INFORM-only` **trong khối frontmatter** (`:1734`) → `name:` (`:1737`). Persona này có `INFORM-only` ở `:4` (trong frontmatter) ⇒ nhập list, **không cần ai wire tay**. 2. **Tên artifact `sub-ctx-audit-{open,close}.md` LỌT lưới C11(b) — xác nhận bằng regex thật:** `:1783` `^sub-[-.]` với `$role='ctx-audit'` ⇒ `sub-ctx-audit-open.md` **match**. ⇒ PHẦN B **#22 sẽ FIRE thật**: lead scribe artifact mà chưa có commit trong `.claude/agent-memory/ctx-audit/` ở/sau mtime artifact ⇒ FLAG GAP-3 (`:1790-1793` `git log -1 --format=%cI -- `). **Việc phải làm của lead:** seed diary `ctx-audit` (M9 on-behalf) cùng lượt scribe. 3. **Nuance 2 detector đọc CÙNG artifact KHÁC nhau (chống dự-đoán sai):** - `H25-role-notebook (GAP-3)` `:1098-1101` parse greedy `^sub-(.+)-\d+\.md$` → `sub-ctx-audit-open.md` KHÔNG khớp (`open` không phải số) → nhánh 2 `^sub-(.+)\.md$` → cand `ctx-audit-open` **không** trong roster ⇒ **UNMAPPED, KHÔNG flag** (đúng luật "no name-guessing" `:1068`). - `C11(a) FLAG-khuon` `:1754` `$roleNameRx='(?i)(lead-stale|lead-gap|ring2-audit)'` ⇒ **KHÔNG áp** cho ctx-audit ⇒ persona này **đúng** khi KHÔNG bắt vai gắn class-tag `## FLAG- — SEV`: ctx-audit không có enum class ĐÓNG (khác 2 vai H24). Không có xung đột luật. 4. **Hệ quả roster (KHÔNG tự sửa — T8 của lead):** `.claude/agents/*.md` trừ README nay = **21** file. `docs/STATUS.md` §Sub-agents + `agents/README.md` còn 20 ⇒ khoảng lệch tồn tại tới khi T8 land (spec đã giao). Và `hmw_width.cap=20` < 21 = câu hỏi owner O-7 (spec `:44` — CẤM tự đổi số). ## 5. Khai thẳng (không tô hồng) - **KHÔNG kiểm được trong lane này:** vai chỉ SỐNG sau **restart CLI + spawn-probe** (`session-start` BƯỚC 0.6b) — file mới không hot-reload. PHẦN B #20 (đối-chứng dương trước/sau restart) + #23 (STOP-HARD `hmw.js` trước/sau T5) thuộc T9/T5, lane này không chạm. - **Đã ghi 1 file duy nhất ngoài sub-md:** `.claude/agents/ctx-audit.md` (đúng file task giao). KHÔNG đụng persona khác, KHÔNG đụng `agents/README.md`, KHÔNG đụng `hmw.js`, KHÔNG đụng MEMORY của vai nào, KHÔNG commit.