# sub-w3-nghi-thuc — W3 / GĐ-3 phần TỰ-CHẠY: nghi thức hai đầu (4 nhãn · vòng hỏi ngược · tiền-kiểm đầu cửa · gói-B persona)

- **Vai:** implementer-backend (lane W3) · **Phiên:** S180 · **Ngày:** 2026-08-07
- **Model tự khai:** claude-opus-5 (effort max)
- **Ghi đĩa liên tục** (chống #53): mỗi mục xong append ngay, KHÔNG chờ cuối lượt.
- **Input ghim (đọc thật, không suy diễn):**
  - `.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-n3-lane-c-gd34.md` §E.1 (`:385-398`) · §E.2 (`:400-406`) · §E.5 (`:421-440`) · §F bảng 10 khoản (`:444-463`)
  - `…/wave-plan-S180.md` W3 (`:76-90`) — 7 trường đủ
  - `…/sub-w1a-mayd-octen.md` §4 R1/R2 (`:458-462`) — 14 đoạn máy, 11 vỡ-câm
  - `docs/governance/naming-standard.md` (W1-b vừa ký) · `…/sub-w2-luoi-ghi-dia.md` (W2 vừa xong)
  - `broadcasts/inbox/ai_infra/2026-08-04-…-phu-luc-spec-pitfall.md` §GĐ-3
- **PHẠM VI:** CHỈ phần tự-chạy. **W3b (cổng chặn bằng mã lỗi) KHÔNG thuộc wave này** — chờ owner P1 (đã chốt PA-2 về hướng, nhưng phân loại ~70 cờ là wave riêng). 🔴 **Mọi thứ đụng trong lượt này giữ exit 0 / INFORM.**

---

## §0 — Trạng thái ghi đĩa (cập nhật liên tục)

| Mục | Trạng thái | Ghi ở § |
|---|---|---|
| Phép đo nền (wall-clock + bảng 19 cửa + persona) | ✅ XONG | §1 |
| (1) 4 nhãn suy-giảm | ✅ KÝ 4/4 — nhưng **cưỡng chế 1 đủ / 2 nửa / 1 CHƯA CÓ MÁY** | §2 |
| (2) Vòng hỏi ngược 5 cột | ✅ CÓ — khuôn + luật đóng 3 điều kiện + 1 hàng sinh bằng máy | §3 |
| (3) Tiền-kiểm đầu cửa | ✅ **5/19 → 9/19** + máy mới + fault-inject 5/5 | §4 |
| (4) Gói-B persona | ✅ 4 tệp / 5 sửa — 4 phép đo sau-restart **BÀN GIAO lead** | §5 |
| Hệ quả lên máy sống + CHƯA ĐO / CẦN LEAD | ✅ 6 mục | §6 |

**Vật đã hạ cánh:** `docs/governance/ritual-labels.md` (mới) · `scripts/tien-kiem-cua.ps1` (mới) · `.claude/commands/{adap-apply,adap-report,adap-request,check-email}.md` · `.claude/agents/{lead-stale-auditor,ring2-audit,back-end-reviewer-style,database-reviewer-style}.md`.

---

## §1 — PHÉP ĐO NỀN (chạy TRƯỚC khi gõ một dòng nào)

### 1.1 — Wall-clock: trần chi phí cho tiền-kiểm (hub `phu-luc:194` đòi "chi phí bằng không")

Lệnh: `Measure-Command`, n=5, lấy min/trung-vị/max. Máy này, 2026-08-07.

| Phép đo | n | min | **trung vị** | max |
|---|---|---|---|---|
| **CONTROL** — chỉ khởi động `powershell -NoProfile`, không chạy gì | 5 | 143 ms | **156 ms** | 260 ms |
| `scripts/nhip-no-probe.ps1` — **đang chạy ở `/pause` + `/tiep`**, tức chi phí ĐÃ ĐƯỢC CHẤP NHẬN | 5 | 419 ms | **423 ms** | 452 ms |

⇒ **Phần việc RÒNG của probe đang sống = 423 − 156 = ~267 ms.** Đây là **trần tham chiếu**: một tiền-kiểm mới muốn cắm vào cửa dừng phải **rẻ hơn con số đã được chấp nhận này**, không phải rẻ hơn một ngưỡng tôi tự đặt.

🔴 **Luật đã thành văn trên đĩa, không phải tôi bịa:** `.claude/commands/check-email.md:41` — *"việc NẶNG chỉ sống ở bookend. Ai thêm bước vào đường `/pause`·`/tiep` sau này **phải đo wall-clock trước**"*. Lượt này tuân: đo trước, và **KHÔNG thêm bước nào vào `/pause` · `/tiep`** (cả hai đã có probe rồi — xem §1.2).

🔸 **Khai giới hạn của thước:** đo trên máy này, đĩa nóng, không đo lần-chạy-nguội. Con số dùng để **so tương đối** (mới ⟂ đã-chấp-nhận), không dùng làm SLA tuyệt đối.

### 1.2 — Bảng 19 cửa × tiền-kiểm, TỪNG DÒNG (A4 cấm ghi gộp) — 3 cửa treo của lane C: ĐÓNG

**Thước 1 (CONTROL — dựng lại đúng phép đo lane C `§E.5`):** `grep -c "nhip-no-probe\|Sàn-3\|san-3\|tiền kiểm\|probe"`.
**Thước 2 (SẮC HƠN — vị từ *lời gọi thật*):** `grep -cE '\-File +scripts/[^ ]+\.ps1|node +scripts/|python +scripts/'` — tách **gọi** ⟂ **nhắc tên** (đúng ranh *use ⟂ mention* của W1-b/W2).

| # | Cửa | T1 (lane C) | T2 lời-gọi | `nhip-no-probe` gọi thật? | Kết luận |
|---|---|---|---|---|---|
| 1 | `session-start.md` | 19 | 9 | ✅ `:269` | ✅ **CÓ** |
| 2 | `session-end.md` | 12 | 7 | ✅ `:118` | ✅ **CÓ** |
| 3 | `tiep.md` | 10 | 2 | ✅ `:154` | ✅ **CÓ** |
| 4 | `pause.md` | 4 | 3 | ✅ `:113` | ✅ **CÓ** |
| 5 | `snapshot.md` | 1 | 4 | ✅ `:69` | ✅ **CÓ** — 🔴 lane C để **🟡 CHƯA ĐO**, nay ĐÓNG = **CÓ** |
| 6 | `check-email.md` | 2 | 2 (`stamp_verify.py`) | ❌ `:45`+`:48` = **NHẮC TÊN**, 0 lời gọi | ❌ **KHÔNG** — lane C 🟡 ĐÓNG = KHÔNG |
| 7 | `sleep-recovery-memory-l2.md` | 2 | 0 | ❌ 0 hit tên | ❌ **KHÔNG** — lane C 🟡 ĐÓNG = KHÔNG |
| 8 | `send-email.md` | 0 | 1 (`stamp_verify.py`) | ❌ | ❌ **KHÔNG** |
| 9 | `adap-apply.md` | 0 | 0 | ❌ | ❌ **KHÔNG** 🔴 ca `LỚP-2` |
| 10 | `adap-report.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
| 11 | `adap-request.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
| 12 | `fable-real.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
| 13 | `fable-clone.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
| 14 | `ultra-on.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
| 15 | `ultra-off.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
| 16 | `user-mark-active.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
| 17 | `user-mark-active-high.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
| 18 | `user-mark-medium.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |
| 19 | `user-mark-disable.md` | 0 | 0 | ❌ | ❌ **KHÔNG** |

**⇒ Trạng thái TRƯỚC lượt này: 5/19 có tiền-kiểm** (không phải 4/19 như lane C ghi — chênh vì `snapshot` được đóng từ 🟡 sang CÓ). **14/19 không có. 0 cửa còn treo.**

🔴 **BÁC MỘT SỐ CỦA LANE F — `check-email` bị đếm nhầm là cửa gọi probe.** `sub-n3-lane-f-maytay.md:49` và `:253` ghi *"`nhip-no-probe.ps1` — check-email, pause, session-end, session-start, snapshot, tiep (**6 cửa**)"*. Đo lại: `check-email.md` chứa chuỗi `nhip-no-probe.ps1` **2 lần** nhưng **cả 2 đều là NHẮC TÊN** — `:45` mượn nó làm *khuôn fail-soft*, `:48` bàn về *đổi vai của vế-4 `pull-cach`*. **0 lời gọi.** ⇒ tập đúng là **5 cửa**, không phải 6. Đây đúng lớp lỗi *use ⟂ mention* mà W1-b/W2 đã dựng vị từ để tách — lane F dùng thước cũ nên dính.

🔸 **Khai giới hạn của thước 2:** nó đo *có dòng lệnh gọi script trong tệp lệnh*, **không** đo *lời gọi đó có được thi hành mỗi lượt không* (tệp lệnh là prompt, người thi hành là model). Vẫn là *sự hiện diện + khuôn dạng, không đo CHẤT* — đúng ranh hub `phu-luc:208`.

### 1.3 — Phép đo persona (gói-B) trước khi sửa

| Persona | Phép đo | Kết quả | Control-dương |
|---|---|---|---|
| `lead-stale-auditor.md` | `grep -cE "run-folder|runs/"` | **0** | `FLAG`=**4** · `governance-detectors`=**2** ⇒ thước đọc được tệp, **0 là THẬT** |
| `lead-stale-auditor.md` | số class `view-*` liệt trong tệp | **5** (`view-residual-asym`·`stale-count`·`stale-header`·`stale-role-desc`·`stale-status`) + câu *"5 class dưới"* `:41` | enum đĩa = **12** |
| `ring2-audit.md:4` | chuỗi *"5 class `view-*`"* | **có** (kèm *"6 class `gap-*`"* — vế này ĐÚNG) | — |
| `back-end-reviewer-style.md:4` | chuỗi `.NET 10` | **có** | `front-end-reviewer-style.md:4` đã de-number @S179 (SỬA-6b) ⇒ khuôn có sẵn |
| `database-reviewer-style.md:4` | chuỗi `EF Core 10` | **có** | như trên |

**Nguồn số enum (đọc đĩa, không tin doc):** `.claude/agent-memory/memory-budget.json` → `lead_self_audit.flag_classes` = **12 phần tử = 6 `view-*` + 6 `gap-*`**. Phần tử thứ 6 của nhánh view là **`view-claim-broader-than-sample`** (mở @S172 theo escalate của `ring2-audit`).

🔴 **PHÁT HIỆN NGOÀI DANH SÁCH ĐỀ BÀI — nặng hơn ca `ring2`:** đề bài chỉ giao sửa `ring2-audit.md:4`. Nhưng `lead-stale-auditor.md` — **chính vai PHẢI DÙNG enum đó** — cũng chỉ liệt **5/6** class `view-*`, thiếu đúng `view-claim-broader-than-sample`. Đây là **ghost-enum tái phát**: đúng lớp lỗi `F-B HIGH` mà `tooling-auditor` đã ghi @S143 (*"enum mở 10→11 nhưng commit KHÔNG đụng `lead-gap-auditor.md` — vai bị luật CẤM tự chế class ⇒ lần tới gặp ca sẽ escalate lại đúng thứ vừa được duyệt"*). Lần này vật thể là nhánh `view-*` và vai là `lead-stale-auditor`. Sửa `ring2` mà bỏ `lead-stale-auditor` = vá cái GƯƠNG, để nguyên cái MÁY.

---

## §2 — (1) BỐN NHÃN — đã ký `docs/governance/ritual-labels.md`, và CHỨNG vị từ chạy THẬT

**Vật đã hạ cánh:** `docs/governance/ritual-labels.md` (kebab thường, đúng `naming-standard.md:170` luật vật MỚI).

### 2.1 — Bốn vị từ, chạy thật, kèm control-dương

`$M` = vật mốc · `$V` = **vật chứng của LƯỢT** (không phải đặc tả) · `$B` = mã bước.

| Vị từ | Lệnh | Ca thật đã chạy | Kết quả | Control-dương |
|---|---|---|---|---|
| (1) vật mốc | `test -e "$M" && echo 1 \|\| echo 0` | `docs/governance/rename-ledger.md` | **0** = VẮNG | `test -e naming-standard.md` → **1** ⇒ thước đọc được đĩa |
| (2) dòng khai | `grep -c -- "$B" "$V"` | `$B=rename-ledger` trong `sub-w1b-chuan-ten.md` | **0** = KHÔNG KHAI | cùng tệp, `grep -c naming-standard` → **6** ⇒ thước đọc được tệp |
| (3) con trỏ `file:line` | `grep -E -c -- "$B.*[^ ]+\.(md\|ps1\|py\|js\|json):[0-9]+" "$V"` | như trên | **0** | cùng tệp, bỏ neo `$B` → **39** ⇒ thước bắt được khuôn con trỏ |
| (4) điều kiện chạy lại | *lệnh do đặc tả nêu* | `naming-standard.md` **không nêu** điều kiện chạy-lại-được cho bước "lập sổ đổi tên" | **không-xác-định** | — |

⇒ Tra bảng quyết định `ritual-labels.md §2.1`: (1)=0 · (2)=0 ⇒ **nhãn `quên`**. **Hàng đầu tiên của vòng hỏi ngược, sinh bằng máy, không bằng cảm giác.**

🔴 **Ca này là một phát hiện thật, không phải ví dụ dựng:** `naming-standard.md:10` tuyên *"Sổ đổi tên: `docs/governance/rename-ledger.md` — chỉ-thêm-không-xoá"* và `:278` tuyên *"Sáu ô còn lại: xem `rename-ledger.md`"* — **tệp không tồn tại**, và **vật chứng lượt W1-b không có dòng khai nào**. Đúng lớp *lời-hứa-chưa-land* (`feedback_dryrun_finds_promised_but_unlanded`). **Tôi KHÔNG sửa `naming-standard.md`** (nằm trong danh sách cấm) — nộp thành 1 hàng cho lead.

### 2.2 — 🔴 NHÃN NÀO **CHƯA CÓ MÁY** (luật nấc W1-a: sạch đúng tới độ sâu máy KIỂM, không sâu hơn một nấc)

| Nhãn | Máy chấm được tới đâu | Nấc |
|---|---|---|
| **quên** | **TRỌN** — `(1)=0 ∧ (2)=0`, cả hai vị từ đều cơ khí | ✅ **CÓ MÁY ĐỦ** |
| **tự ý bỏ** | máy chỉ chấm được nhánh `(2)≥1 ∧ (3)=0`. Nhánh `(4)=sai` **CHƯA CÓ MÁY** — không máy nào chạy lại điều kiện cho phép | 🟡 **NỬA** |
| **suy giảm hợp lệ** | máy chấm được *có khai + có con trỏ*; **không** chấm được *con trỏ trỏ đúng chỗ cho phép hay không* | 🟡 **NỬA** |
| **bị chặn** | ❌ **CHƯA CÓ MÁY.** Phân biệt *"con trỏ tới đặc tả"* ⟂ *"con trỏ tới nỗ lực gỡ"* là phán-xét ngữ nghĩa, `(3)` cho **cùng một số** ở cả hai | ❌ **CHƯA CÓ MÁY** |

**⇒ Nói thẳng: 1/4 nhãn có máy đủ · 2/4 nửa · 1/4 chưa có máy.** Bốn nhãn **đã thành văn 4/4**, nhưng **cưỡng chế bằng máy thì KHÔNG phải 4/4**. Ghi đúng nấc này vào `ritual-labels.md §2.2` chứ không để nó trông như đã cưỡng chế — đó chính là **LỚP-9** (cưỡng chế được tuyên mà chưa có máy) mà cả gói này tồn tại để chữa.

🔴 **Máy anh em để đối chứng (lead chỉ, đã dùng):** `scripts/artifact-integrity.ps1` (W2) đang chạy thật. Nó chấm **vật chứng có đủ ruột không**; bốn nhãn ở đây chấm **bước có chạy không**. Hai trục khác nhau, **không** gộp số.

### 2.3 — 🔴 BÁC MỘT VẾ TRONG KHUNG ĐỀ BÀI (vế này nếu nhận sẽ làm thủng chính bộ nhãn)

Đề bài khung 4 nhãn là *"làm đủ ⟂ làm thiếu CÓ KHAI ⟂ bỏ qua CÓ KHAI ⟂ bỏ qua KHÔNG khai — **chỉ nhãn cuối mới là lỗi**"*.

**Đo lại chữ hub** (`phu-luc:189`, nguyên văn): *tự ý bỏ* = *"bỏ mà không khai, **hoặc** khai là 'bỏ êm' trong khi điều kiện cho phép bỏ **đánh giá lại trên đĩa là sai**"*.

⇒ Hub **có tính** một ca **CÓ KHAI** là lỗi nặng. Nếu áp khung *"chỉ bỏ-qua-KHÔNG-khai mới là lỗi"* thì **viết một dòng khai là tự tha được**, và bộ nhãn thành đồ trang trí. Hai khung cũng **không cùng phân hoạch**: *làm đủ* của đề bài = **TRỌN**, mà TRỌN **không sinh hàng nào** nên nó không phải một trong 4 nhãn.

**Xử:** ký theo **chữ hub**, ghi rõ ở `ritual-labels.md §2.2(a)(b)`: (a) khai không tự miễn trừ · (b) `(4)=không-xác-định` ⇒ rơi về nhãn **NẶNG**, không rơi về nhãn vô tội — vì nếu chỗ mù mặc định về vô tội thì cách rẻ nhất để sạch là **viết đặc tả mơ hồ**.

---

## §3 — (2) VÒNG HỎI NGƯỢC 5 CỘT — đã ký `ritual-labels.md §3`

KhuÃ´n nguyÃªn chá»¯ hub, 5 cá»™t **khÃ´ng Ä‘á»•i tÃªn**: *bÆ°á»›c thiáº¿u hoáº·c lá»‡ch Â· Ä‘áº·c táº£ nÃ³i gÃ¬ Â· báº±ng chá»©ng trÃªn Ä‘Ä©a Â· nhÃ£n nÃ o Â· cÃ¢u há»i Ä‘Ã­ch danh*.

**Luáº­t Ä‘Ã³ng â€” ba Ä‘iá»u kiá»‡n, thiáº¿u má»™t lÃ  CHÆ¯A ÄÃ“NG** (`ritual-labels.md Â§3.2`):
1. **0 Ã´ trá»‘ng** â€” ká»ƒ cáº£ cá»™t *nhÃ£n*: khÃ´ng phÃ¢n loáº¡i Ä‘Æ°á»£c â‡’ ghi `chÆ°a-phÃ¢n-loáº¡i` **kÃ¨m lÃ½ do**; Ã´ trá»‘ng Ä‘á»c thÃ nh *Ä‘Ã£ xÃ©t vÃ  sáº¡ch*.
2. Má»—i hÃ ng cÃ³ **má»™t Ä‘á»‹nh Ä‘oáº¡t** cá»§a ngÆ°á»i Ä‘iá»u phá»‘i, thuá»™c Ä‘Ãºng 3 giÃ¡ trá»‹: `cháº¡y-bá»•-sung` Â· `khai-suy-giáº£m` Â· `khai-khÃ´ng-thá»ƒ-ná»¯a`.
3. Báº£ng **luÃ´n kÃ¨m MáºªU Sá»** *N hÃ ng / M bÆ°á»›c Ä‘Æ°á»£c soi*; `M` = sá»‘ bÆ°á»›c **tháº­t sá»± Ä‘Æ°á»£c duyá»‡t**, khÃ´ng pháº£i sá»‘ bÆ°á»›c tá»“n táº¡i.

ðŸ”´ **Â§3.3 Cáº¤M thay báº£ng báº±ng má»™t con sá»‘ tá»•ng** â€” neo tháº³ng ca S119 (*"vÃ¡ 19 finding"* khi tháº­t **23**) + con trá» `feedback_meta_count_selfcoverage_blindspot`. Ghi rÃµ Ä‘Ã¢y lÃ  **há»™i tá»¥ Ä‘á»™c láº­p**: luáº­t Ä‘Ã³ng cá»§a hub vÃ  bÃ i há»c S119 lÃ  cÃ¹ng má»™t káº¿t luáº­n tÃ¬m ra á»Ÿ hai nÆ¡i, Ä‘á»ƒ láº§n sau khÃ´ng ai tÆ°á»Ÿng lÃ  luáº­t ngoáº¡i nháº­p.

ðŸ”´ **Â§3.4 `C3-02` thÃ nh vÄƒn:** vai kiá»ƒm **CHá»ˆ Äá»I CHIáº¾U**, nguá»“n = **chÃ­nh tá»‡p lá»‡nh cá»§a cá»­a**; Ä‘áº·c táº£ tá»± chá»i â‡’ nhÃ£n `Ä‘áº·c-táº£-xung-Ä‘á»™t` + **cáº£ hai** con trá» + tráº£ ngÆ°á»i Ä‘iá»u phá»‘i; **Cáº¤M tá»± phÃ¡n**. Ghi rÃµ: `Ä‘áº·c-táº£-xung-Ä‘á»™t` á»Ÿ Ä‘Ã¢y lÃ  **giÃ¡ trá»‹ cá»™t NhÃ£n**, KHÃ”NG pháº£i mÃ£ thoÃ¡t (thang mÃ£ thoÃ¡t = W3b).

**Ai sinh báº£ng:** `lead-gap-auditor` (hÃ ng *thiáº¿u*) + `lead-stale-auditor` (hÃ ng *lá»‡ch*) â€” cáº·p **Ä‘ang spawn vÃ´-Ä‘iá»u-kiá»‡n á»Ÿ Cáº¢ HAI Ä‘áº§u phiÃªn**. **0 vai má»›i** (Ä‘Ãºng lane C Â§E.1; vai má»›i thuá»™c P4/W4b).

**HÃ ng máº«u Ä‘Ã£ sinh Báº°NG MÃY** (Â§2.1): `bÆ°á»›c "láº­p sá»• Ä‘á»•i tÃªn" | naming-standard.md:10 + :278 | (1)=0 (2)=0, control 1/6 | quÃªn | "Sá»• nÃ y land á»Ÿ wave nÃ o, hay gá»¡ hai con trá»?"` â€” **1 hÃ ng / 1 bÆ°á»›c Ä‘Æ°á»£c soi**.

---

## Â§4 â€” (3) TIá»€N-KIá»‚M Äáº¦U Cá»¬A: 5/19 â†’ **9/19**

### 4.1 — Máy mới `scripts/tien-kiem-cua.ps1`

- **Chá»‰ Ä‘á»c Â· LUÃ”N `exit 0` Â· INFORM.** Fail-soft y khuÃ´n `nhip-no-probe`: lá»—i â‡’ `tien-kiem loi (khong chan)`.
- Thi hÃ nh Ä‘Ãºng chá»¯ hub `phu-luc:194`: chá»n **cá»­a Ä‘Ã³ng gáº§n nháº¥t** báº±ng **dáº¥u thá»i gian ghi TRONG tá»‡p** â€” `.claude/WAL.md` dÃ²ng `updated:` (cá»­a `/pause`Â·`/snapshot`) + `.claude/governance/.session-counter.json` khoÃ¡ `last_ticked_at`/`last_ticked_session` (cá»­a `/session-*`). **KHÃ”NG dÃ¹ng `mtime`** (hook `wal:` cháº¡m tá»‡p má»—i lÆ°á»£t; `git checkout` viáº¿t láº¡i `mtime` hÃ ng loáº¡t).
- **Pure-ASCII: 0 byte >127.** ðŸ”´ Control-dÆ°Æ¡ng cho chÃ­nh thÆ°á»›c ASCII: `ritual-labels.md` = **4.250** byte >127 â‡’ thÆ°á»›c **cÃ³ báº¯t Ä‘Æ°á»£c**, sá»‘ 0 kia khÃ´ng pháº£i thÆ°á»›c há»ng. *(BÃ i W2: control-Ã¢m-sai = há»ng THÆ¯á»šC.)*
- Cá» in ra: `THIEU-TAP` (0/2 nguá»“n) Â· `NGUON-HONG:<tÃªn>` Â· `LECH-PHIEN:<a>/<b>` Â· `ok`.

### 4.2 â€” Fault-inject **BA chiá»u: 5/5 PASS** (harness `scratchpad/fi-tienkiem.ps1`, cây tạm, KHÔNG chạm repo thật)

| Chiều | Ca | Kỳ vọng | Thực tế | |
|---|---|---|---|---|
| **B** | cáº¥y ÄÚNG, 2 nguồn lành | IM = `ok`, 0 dương-giả | `nguon 2/2 \| ok` | ✅ |
| **A-1** | cấy HỎNG nguồn WAL | `NGUON-HONG:Wal` | `nguon 1/2 \| NGUON-HONG:Wal` | ✅ |
| **A-2** | cấy HỎNG nguồn counter | `NGUON-HONG:Counter` | `nguon 1/2 \| NGUON-HONG:Counter` | ✅ |
| **A-3** | 2 nguồn lệch phiên | `LECH-PHIEN` | `nguon 2/2 \| LECH-PHIEN:S177/S180` | ✅ |
| **A2** | **Máº¤T Cáº¢ Táº¬P** (xoÃ¡ cáº£ 2) | cá» `THIEU-TAP` **RIÊNG**, CẤM in `ok` | `THIEU-TAP - 0/2 nguon moc doc duoc \| KHONG ket luan duoc gi` | ✅ |

`exit 0` ở **5/5** (ràng buộc cứng trong harness: `exit != 0` ⇒ FAIL). Harness in **control-harness** (`WAL=True/False counter=True/False`) mỗi ca ⇒ chứng cây tạm thật sự có/không có tệp như ý định.

ðŸ”´ **LÆ°á»£t fault-inject Äáº¦U cháº¿t vÃ¬ HARNESS, khÃ´ng vÃ¬ script:** viáº¿t harness inline qua `bash` â‡’ bash nuá»‘t `$`/backtick cá»§a chuá»—i PowerShell â‡’ tá»‡p WAL "lÃ nh" **khÃ´ng bao giá» Ä‘Æ°á»£c ghi Ä‘Ãºng** â‡’ chiá»u B in `NGUON-HONG:Wal` **trÃ´ng y há»‡t script há»ng**. Dá»±ng láº¡i harness thÃ nh `.ps1` Ä‘á»™c láº­p â‡’ 5/5. ÄÃºng bÃ i S139: *harness cáº§n cÃ¹ng ká»· luáº­t nhÆ° production*. Náº¿u tin lÆ°á»£t Ä‘áº§u thÃ¬ Ä‘Ã£ Ä‘i sá»­a má»™t script **khÃ´ng há»ng**.

### 4.3 â€” Wall-clock ÄO ÄƯỢC (bắt buộc TRƯỚC khi cắm — luật `check-email.md:41`)

| | trung vị (n=5) | **ròng** (trừ khởi động) |
|---|---|---|
| CONTROL `powershell -NoProfile` khởi động không | 196 ms | — |
| **`tien-kiem-cua.ps1` (MỚI)** | 390 ms | **~194 ms** |
| `nhip-no-probe.ps1` (đã được chấp nhận ở `/pause`·`/tiep`) | 477 ms | ~281 ms |

â‡’ MÃ¡y má»›i **ráº» hÆ¡n cÃ¡i Ä‘Ã£ Ä‘Æ°á»£c cháº¥p nháº­n**. ðŸ”¸ Khai tháº³ng: pháº§n lá»›n 194 ms lÃ  Ä‘á»c + `ConvertFrom-Json` trÃªn sá»• Ä‘áº¿m ~45 KB; **khÃ´ng** pháº£i "báº±ng khÃ´ng" theo nghÄ©a Ä‘en. Äo trÃªn mÃ¡y nÃ y, Ä‘Ä©a nÃ³ng â‡’ dÃ¹ng Ä‘á»ƒ **so tÆ°Æ¡ng Ä‘á»‘i**, khÃ´ng pháº£i SLA tuyá»‡t Ä‘á»‘i.

ðŸ”´ **KHÃ”NG cáº¯m vÃ o `/pause` Â· `/tiep`.** Hai cá»­a Ä‘Ã³ **Ä‘Ã£ cÃ³** probe; thÃªm bÆ°á»›c ná»¯a = lÃ m Ä‘iá»ƒm dá»«ng Ä‘áº¯t lÃªn, trÃ¡i floor `goi-chot Â§3` vÃ  trÃ¡i báº¥t-biáº¿n `check-email.md:41`. ÄÃ¢y lÃ  **quyáº¿t Ä‘á»‹nh cÃ³ Ä‘o rá»“i má»›i nÃ³i khÃ´ng**, khÃ´ng pháº£i bá» sÃ³t.

### 4.4 â€” Äộ phủ sau lượt (mẫu số **19**)

| | n/19 | Cửa |
|---|---|---|
| Trước | **5** | `session-start` · `session-end` · `tiep` · `pause` · `snapshot` |
| Cắm mới | **+4** | `adap-apply` 🔴 *(ca LỚP-2: chính cửa áp gói này)* · `adap-report` · `adap-request` · `check-email` |
| **Sau** | **9** | còn thiếu **10**: `send-email` · `sleep-recovery-memory-l2` · `fable-real` · `fable-clone` · `ultra-on` · `ultra-off` · `user-mark-active` · `user-mark-active-high` · `user-mark-medium` · `user-mark-disable` |

**Control-dương cho phép đếm:** `grep -c tien-kiem-cua .claude/commands/ultra-on.md` = **0** ⇒ con số 9 không do mẫu khớp tràn lan.

ðŸ”¸ **VÃ¬ sao dá»«ng á»Ÿ 9, khÃ´ng cáº¯m ná»‘t 10:** 6 cá»­a (`fable-*`, `ultra-*`, `user-mark-*`) lÃ  **cá»­a má»™t-dÃ²ng, khÃ´ng cÃ³ Ä‘iá»ƒm dá»«ng nÃ o Ä‘á»ƒ soi** â€” cáº¯m vÃ o lÃ  **nghi thá»©c trang trÃ­**, vÃ  má»—i lá»i gá»i thá»«a lÃ  má»™t cÆ¡ há»™i alarm-fatigue. `send-email` + `sleep-recovery-memory-l2` **Ä‘Ã¡ng cáº¯m**, xin lead má»™t dÃ²ng Ä‘á»“ng Ã½ vÃ¬ chÃºng khÃ´ng náº±m trong danh sÃ¡ch Æ°u tiÃªn cá»§a Ä‘á» bÃ i.

---

## §5 — (4) GÓI-B PERSONA (chỉ ăn từ RESTART kế) — 4 tệp / 5 sửa

| # | Tá»‡p | Sá»­a | Äo TRÆ¯á»šC | Äo SAU (trÃªn Ä‘Ä©a) |
|---|---|---|---|---|
| 1 | `lead-stale-auditor.md` | +má»¥c **Táº­p-Ä‘o Báº®T BUá»˜C gá»“m thÆ° má»¥c lÆ°á»£t cháº¡y**: cÃ¡ch soi ráº» (so khá»‘i tráº¡ng-thÃ¡i `run.md` âŸ‚ dÃ²ng `END`/báº£ng káº¿t tá»«ng `sub-*.md` cÃ¹ng run-folder) Â· **PIN Ä‘Ã­ch danh, cáº¥m `glob-latest`** Â· ranh: run-folder phiÃªn ÄÃƒ ÄÃ“NG = record Ä‘Ã³ng-bÄƒng, Ä‘á»«ng flag Â· khÃ´ng láº¥n `artifact-integrity.ps1` | `run-folder\|runs/` = **0** (control-dÆ°Æ¡ng cÃ¹ng tá»‡p: `FLAG`=4, `governance-detectors`=2) | **6** |
| 2 | `lead-stale-auditor.md` | heading **Bá»Ž Sá»** + trá» khoÃ¡ `lead_self_audit.flag_classes`; **+1 dÃ²ng báº£ng** `view-claim-broader-than-sample` | liá»‡t **5** class `view-*`; enum Ä‘Ä©a = **12 = 6+6** | liá»‡t **6**; `[0-9]+ class` cÃ²n 2 hit **Ä‘á»u há»£p lá»‡** (*"gáº¯n 1 class"* Â· *"1 class láº·p N láº§n"*) |
| 3 | `ring2-audit.md:4` | **Bá»Ž Sá» cáº£ hai váº¿**, trá» khoÃ¡. **KHÃ”NG sá»­a 5â†’6** (luáº­t B1) | `5 class` = **1** | `5 class` = **0** Â· `[0-9]+ class` = **0** (control `class` = 7 â‡’ thÆ°á»›c sá»‘ng) |
| 4 | `back-end-reviewer-style.md:4` | bá» digit, trá» `SolutionErp.Domain.csproj` â†’ `TargetFramework` | `.NET 10` = **1** | **0** (control `.NET` = 2 â‡’ thÆ°á»›c sá»‘ng) |
| 5 | `database-reviewer-style.md:4` | bá» digit, trá» `SolutionErp.Infrastructure.csproj` â†’ `PackageReference â€¦EntityFrameworkCore*` | `EF Core 10` = **1** | **0** (control `EF Core` = 1 â‡’ thÆ°á»›c sá»‘ng) |

Khuôn de-number lấy **nguyên** từ `front-end-reviewer-style.md:4` (SỬA-6b @S179) — **không tự chế khuôn mới**.

ðŸ”´ **PHÃT HIá»†N NGOÃ€I DANH SÃCH Äá»€ BÃ€I (sá»­a #2):** Ä‘á» bÃ i chá»‰ giao `ring2-audit.md:4`. NhÆ°ng `lead-stale-auditor` â€” **chÃ­nh vai PHáº¢I DÃ™NG enum** â€” cÅ©ng chá»‰ liá»‡t **5/6** class `view-*`, thiáº¿u Ä‘Ãºng `view-claim-broader-than-sample`. ÄÃ¢y lÃ  **ghost-enum tÃ¡i phÃ¡t**, Ä‘Ãºng lá»›p `F-B HIGH` mÃ  `tooling-auditor` ghi @S143: vai bá»‹ luáº­t *"Cáº¤M tá»± cháº¿ class"* trÃ³i â‡’ láº§n tá»›i gáº·p ca **suy-luáº­n-vÆ°á»£t-máº«u** sáº½ **escalate láº¡i Ä‘Ãºng thá»© vá»«a Ä‘Æ°á»£c duyá»‡t**. Sá»­a `ring2` mÃ  bá» `lead-stale-auditor` = **vÃ¡ cÃ¡i GÆ¯Æ NG, Ä‘á»ƒ nguyÃªn cÃ¡i MÃY**.

ðŸ”´ **Tá»° Báº®T CITATION-TRAP â€” vÃ²ng 1 THá»¦NG:** ghi chÃº vÃ¡ cá»§a tÃ´i trong `lead-stale-auditor.md` **trÃ­ch nguyÃªn vÄƒn** cá»¥m sá»‘ cÅ© â‡’ `grep "5 class"` **váº«n = 1** trÃªn chÃ­nh báº£n Ä‘Ã£ sá»­a Ä‘Ãºng. VÃ²ng 2 diá»…n-giáº£i-khÃ´ng-trÃ­ch â‡’ **0**. ÄÃºng bÃ i W1-b: *lá»i-giáº£i-thÃ­ch náº±m TRONG táº­p Ä‘o*. ÄÃ£ grep láº¡i báº±ng **lá»‡nh KHÃC** (`[0-9]+ class` thay chuá»—i cá»‘ Ä‘á»‹nh) Ä‘á»ƒ khÃ´ng tá»± tha.

### 5.1 â€” ðŸ”´ PHÃ‰P ÄO CHá»ˆ XANH **SAU RESTART** (tÃ´i KHÃ”NG restart Ä‘Æ°á»£c â€” bÃ n giao lead)

Sá»­a `.claude/agents/*.md` lÃ  **hot-reload ENV-DEP**: Ä‘Ä©a Ä‘á»•i ngay, **hÃ nh vi vai chá»‰ Ä‘á»•i sau restart CLI**. Äo trÃªn Ä‘Ä©a (báº£ng trÃªn) **KHÃ”NG chá»©ng Ä‘Æ°á»£c vai Ä‘Ã£ Äƒn**. Bá»‘n phÃ©p sau, má»—i cÃ¡i **chá»‰ xanh sau restart**:

| # | Phép đo | Xanh = |
|---|---|---|
| 1 | spawn `lead-stale-auditor`, há»i *"liá»‡t táº­p-Ä‘o báº¯t buá»™c cá»§a mÃ y"* | cÃ¢u tráº£ lá»i **cÃ³ chá»©a** `runs/` hoáº·c `run-folder` |
| 2 | spawn `lead-stale-auditor`, há»i *"nhÃ¡nh `view-*` gá»“m class nÃ o"* | liá»‡t **Ä‘á»§ 6**, cÃ³ `view-claim-broader-than-sample`, vÃ  **Ä‘á»c khoÃ¡** chá»© khÃ´ng Ä‘á»c sá»‘ tráº§n |
| 3 | spawn `ring2-audit`, há»i *"má»—i nhÃ¡nh cÃ³ bao nhiÃªu class"* | tráº£ lá»i **trá» khoÃ¡ `lead_self_audit.flag_classes`**, KHÃ”NG Ä‘á»c sá»‘ tráº§n |
| 4 | spawn `back-end-reviewer-style` + `database-reviewer-style`, há»i *"version .NET / EF Core"* | tráº£ lá»i **trá» `.csproj`**, KHÃ”NG Ä‘á»c sá»‘ tá»« persona |

ðŸ”´ KhÃ´ng cháº¡y 4 phÃ©p nÃ y thÃ¬ *"chÆ°a Äƒn"* trÃ´ng **y há»‡t** *"há»ng"*, vÃ  cáº£ hai trÃ´ng **y há»‡t** *"Ä‘Ã£ xong"*.

---

## Â§6 â€” Há»† QUáº¢ ÄO ÄÆ¯á»¢C LÃŠN MÃY ÄANG Sá»NG + CHÆ¯A ÄO / Cáº¦N LEAD

### 6.1 â€” Tripwire `-Expect` cá»§a `naming-scan.ps1` ÄÃƒ KÃŠU vÃ¬ tÃ´i (Ä‘Ãºng thiáº¿t káº¿, KHÃ”NG pháº£i há»ng)

Chạy `naming-scan.ps1` read-only sau khi land:

```
mau so: 56 muc (tep + thu muc)   [!] lech ky vong 55 - chuan hoac kho da doi, doc lai naming-standard.md
OK 54/56 | LECH 1/56 | MIEN-theo-luat 1/56
```

- NguyÃªn nhÃ¢n: `scripts/tien-kiem-cua.ps1` lÃ  **má»¥c thá»© 56** cá»§a nhÃ³m `scripts/`; lead vá»«a vÃ¡ `-Expect` **54â†’55**, giá» thÃ nh **55â†’56**.
- ðŸ”´ **`-Expect` kÃªu VÃ€NG, KHÃ”NG Ä‘á»™i thÃ nh `LECH`** â€” `LECH` giá»¯ nguyÃªn 1/56 (`master-import-data.generated.md`), vÃ  **cáº£ 2 tá»‡p má»›i cá»§a tÃ´i Ä‘á»u KHÃ”NG lá»‡ch chuáº©n**. ÄÃºng nhÆ° lead mÃ´ táº£: `-Expect` lÃ  **tripwire cÃ³ chá»§ Ä‘Ã­ch**, cho `THIEU-TAP` má»™t **máº«u sá»‘** â€” **khÃ´ng** pháº£i lá»›p lá»—i drift. TÃ´i **khÃ´ng láº·p nhÃ£n "Lá»šP-5"** mÃ  W2 gÃ¡n nháº§m.
- **Tôi KHÔNG sửa `naming-scan.ps1`** (nằm trong danh sách cấm). **Xin lead bump `-Expect` 55→56.**
- Toàn kho: `LECH 8/236` — **+2 tệp mới của tôi không thêm dòng lệch nào**. Exit 0.

### 6.2 â€” CHÆ¯A ÄO / CẦN LEAD

1. 🔴 **4 phép đo sau-restart (§5.1)** — tôi không restart được. **Không chạy = gói-B chưa nghiệm thu**, dù đĩa đã đúng.
2. 🔴 **`-Expect` 55→56** trong `naming-scan.ps1` — tệp cấm, lead vá.
3. ðŸ”´ **HÃ ng vÃ²ng-há»i-ngÆ°á»£c Ä‘áº§u tiÃªn chá» Ä‘á»‹nh Ä‘oáº¡t:** `docs/governance/rename-ledger.md` **khÃ´ng tá»“n táº¡i** trong khi `naming-standard.md:10` + `:278` trá» tá»›i nÃ³, vÃ  váº­t chá»©ng W1-b **0 dÃ²ng khai** â‡’ nhÃ£n **`quÃªn`**. `naming-standard.md` lÃ  **tá»‡p cáº¥m** â‡’ tÃ´i khÃ´ng Ä‘á»¥ng. Ba lá»±a chá»n: `cháº¡y-bá»•-sung` (láº­p sá»•) / `khai-suy-giáº£m` / `khai-khÃ´ng-thá»ƒ-ná»¯a` (gá»¡ 2 con trá»).
4. ðŸŸ¡ **`lead-gap-auditor.md:42` neo sá»‘ tráº§n cho nhÃ¡nh `gap-*`** â€” hÃ´m nay **ÄÃšNG** (6 gap-*), nÃªn **KHÃ”NG sá»­a** (bÃ i S143: *biáº¿t chá»— KHÃ”NG sá»­a*). NhÆ°ng nÃ³ lÃ  **neo cÃ¹ng loáº¡i** vá»›i 2 cÃ¡i vá»«a gá»¡ â‡’ á»©ng viÃªn de-number Ä‘á»£t sau. NgoÃ i scope W3.
5. ðŸŸ¡ **Cáº¯m ná»‘t `send-email` + `sleep-recovery-memory-l2`** (Â§4.4) â€” cáº§n lead gáº­t, khÃ´ng cÃ³ trong danh sÃ¡ch Æ°u tiÃªn Ä‘á» bÃ i.
6. â›” **KHÃ”NG lÃ m, Ä‘Ãºng pháº¡m vi:** thang mÃ£ thoÃ¡t 4 tráº¡ng thÃ¡i (`C3-04` + khoáº£n (v)) = **W3b**, chá» P1. Luáº­t tá»±-trá»‹ 3 báº­c (`C3-07`/khoáº£n (vi)) = chá» **P5** owner gáº­t ná»™i dung. Tráº§n chi phÃ­ `C3-08` chá»‰ **khai `KHÃ”NG ÄO ÄÆ¯á»¢C`** + nghÄ©a vá»¥ khai, **khÃ´ng pháº£i thuá»‘c**.

### 6.3 — Bất-biến giữ được

- **MÃ£ thoÃ¡t: 0 lÃ¡i.** MÃ¡y má»›i `exit 0` á»Ÿ 5/5 fault-inject; 4 tá»‡p lá»‡nh sá»­a Ä‘á»u ghi rÃµ *"KHÃ”NG cháº·n Â· mÃ¡y luÃ´n exit 0 Â· cá»•ng cháº·n = W3b"*.
- **14 Ä‘oáº¡n mÃ¡y (11 vá»¡-cÃ¢m): 0 vá»¡.** ChÃºng Ä‘á»c **TÃŠN** (`sub-*` Â· `session-<N>` Â· tÃªn vai Â· `agent-memory/`). LÆ°á»£t nÃ y **0 Ä‘á»•i tÃªn, 0 xoÃ¡ tÃªn**; 2 tá»‡p má»›i Ä‘á»u là tên MỚI đúng chuẩn (`naming-scan` xác nhận 0 dòng lệch mới). Bất-biến ngầm `agents/<role>.md`.BaseName ≡ `agent-memory/<role>/` **không bị chạm** — tôi chỉ sửa RUỘT 4 persona, **0 rename**.
- **Tệp cấm: 0 chạm.** `STATUS.md` · `HANDOFF.md` · `CLAUDE.md` · `broadcasts/_index.md` · `naming-standard.md` · `naming-scan.ps1` · `artifact-integrity.ps1` · `adap-upgrade-pack-*.md`.

---

**END sub-w3-nghi-thuc â€” 4 nhÃ£n KÃ 4/4 nhÆ°ng CÆ¯á» NG CHáº¾ 1 Ä‘á»§ / 2 ná»­a / 1 CHÆ¯A CÃ“ MÃY Â· vÃ²ng há»i ngÆ°á»£c 5 cá»™t CÃ“ (khuÃ´n + luáº­t Ä‘Ã³ng 3 Ä‘iá»u kiá»‡n + 1 hÃ ng sinh báº±ng mÃ¡y) Â· tiá»n-kiá»ƒm 5/19 â†’ 9/19 (wall-clock rÃ²ng 194 ms < 281 ms Ä‘Ã£-cháº¥p-nháº­n) Â· persona-B 4 tá»‡p/5 sá»­a, 4 phÃ©p Ä‘o sau-restart BÃ€N GIAO Â· fault-inject 5/5 ba chiá»u Â· 2 chá»— bÃ¡c Ä‘á» bÃ i/lane (khung 4-nhÃ£n "chá»‰ nhÃ£n cuá»‘i lÃ  lá»—i" âŸ‚ chá»¯ hub Â· lane F Ä‘áº¿m `check-email` lÃ  cá»­a gá»i probe trong khi nÃ³ chá»‰ NHáº®C TÃŠN) Â· 1 sá»‘ cá»§a lane C sá»­a (4/19 â†’ 5/19, `snapshot` Ä‘Ã³ng tá»« CHÆ¯A-ÄO sang CÓ).**
