# sub-ring2-audit — KIỂM vòng soi-lead H24 @open S192 (phiên-LOGIC L16)

- ngày: 2026-08-13 · counter H24 = 66 · nhịp `light 6/6 deep 1/1 OVERDUE:light,deep` ⇒ cặp H24 chạy **DEEP**
- vai: `ring2-audit` — KIỂM **2 con-đo H24**, KHÔNG soi LEAD trực tiếp. no-self-exempt: tao ≠ `lead-stale-auditor`, ≠ `lead-gap-auditor`.
- **PROPOSE-ONLY** — 0 Write/Edit ngoài file NÀY, 0 commit, 0 RAG-write.
- Quy ước chống #53: **ghi TỪNG verdict NGAY khi phán xong, TRƯỚC khi đo tiếp.**

---

## §0. PIN — fail-closed (verify TỒN-TẠI trước khi chấm)

| input | path | byte khai | byte đo | mtime |
|---|---|---|---|---|
| `lead-stale-auditor` | `.claude/workflows/runs/2026-08-13-S192-bookend-open/sub-lead-stale-deep-S192.md` | 27.535 | **27.535** ✅ byte-exact | 02:55 |
| `lead-gap-auditor` | `.claude/workflows/runs/2026-08-13-S192-bookend-open/sub-lead-gap-deep-S192.md` | 22.123 | **22.123** ✅ byte-exact | 02:54 |

⇒ **PIN ĐẠT.** Cặp H24 CÓ chạy phiên này, output tươi trên đĩa. KHÔNG NO-OP.

**C4b tuần-tự:** file này ghi lúc > 02:55 ⇒ mtime(output ring2) > mtime(H24 return) ⇒ chạy SAU cặp, không song song.

---

## §1. ENUM-GATE — đếm LIVE, cấm chép số

Đọc `.claude/agent-memory/memory-budget.json` → `lead_self_audit.flag_classes`: **12 phần tử** (6 `view-*` + 6 `gap-*`).
Đối chiếu HAI CHIỀU với `.claude/governance/.session-counter.json` → `class_repeat.counts` (12 khoá):

```
counts NOT in enum: []      enum NOT in counts: []      IDENTICAL: True
```

⇒ **ENUM-GATE 12/12 hai chiều, 0 lệch.**

**Class 15 FLAG hai vai gán, chấm từng cái vào enum:**

| vai | FLAG | class gán | ∈ enum? |
|---|---|---|---|
| stale | 1 · 5 · 10 | `view-residual-asym` | ✅ |
| stale | 3 · 7 · 8 | `view-stale-count` | ✅ |
| stale | 2 · 6 | `view-stale-status` | ✅ |
| stale | 4 | `view-stale-header` | ✅ |
| stale | 9 | `view-claim-broader-than-sample` | ✅ |
| gap | 1 · 2 · 3 · 5(a) | `gap-carry-dropped` | ✅ |
| gap | 4 | `gap-decision-sunk` | ✅ |
| gap | 5(c) | `gap-underfill` | ✅ |

⇒ **15/15 class ∈ enum ĐÓNG · 0 class tự chế.** Hai điểm cộng cho kỷ-luật enum:
- `lead-gap` **BÁC tên brief đưa**: brief gọi `gap-memory-underfill`, vai từ chối vì tên đó không có trong enum, dùng `gap-underfill`. Tao kiểm: `gap-memory-underfill` **không** nằm trong 12 phần tử ⇒ vai bác ĐÚNG.
- `lead-stale` gặp một ca không xếp được thì **ESCALATE thay vì ép vừa** (xem §7).
- `jump_on_class_repeat` = **3** — tao đọc tận khoá `h24_cadence` trong `memory-budget.json` (KHÔNG nằm trong `.session-counter.json`; đây là bẫy substring đã ghi vào diary tao @S181). Cả 2 vai dùng đúng số 3.

---

## §2. CLAIM-1 (stale FLAG-3) — slot (89) 13/10/9/8 vs counter thật — **ĐẠT**, và tao dựng thêm một tầng vai không thấy

**Tự đọc `.session-counter.json` (không chép của vai):**

| class | counter @S192 | slot (89) trình anh |
|---|---|---|
| `gap-carry-dropped` | **18** | ❌ KHÔNG có trong tập |
| `view-stale-count` | **16** | ❌ KHÔNG có trong tập |
| `view-residual-asym` | **15** | 13 |
| `view-stale-status` | **12** | 10 |
| `gap-decision-sunk` | **11** | 9 |
| `view-stale-header` | **10** | 8 |

Số class ≥ JUMP(3) đo tươi = **6**, view nói **4**. Bốn digit lệch đúng **+2** mỗi ô. ⇒ **mọi vế của FLAG-3 tái lập được. ĐẠT.**

🔴 **Tao đi thêm một nước mà cả hai vai KHÔNG đi — kéo bản đúng-thời-điểm S188 để hỏi: tập "4 class" có ĐÚNG LÚC SINH không?**

```
git show ef1d4fbb:.claude/governance/.session-counter.json   (counter=62, last_ticked=S188)
  >=3 : gap-carry-dropped 16 · view-stale-count 14 · view-residual-asym 13 ·
        view-stale-status 10 · gap-decision-sunk 9 · view-stale-header 8      => n>=3 = 6
```

- 4 digit `13/10/9/8` **khớp byte-exact** state S188 ⇒ phần DIGIT đúng lúc sinh, nay thối = `view-stale-count` thật.
- Nhưng **n≥3 đã là 6 NGAY TẠI S188**, và 2 class bị bỏ chính là **hạng 1 (16) và hạng 2 (14)**.
- Slot tự khai viết **"sau khi hoàn số"** ⇒ nó cầm đúng file đã restore. Bịt luôn cửa bào chữa *"lúc đó mới restore được 4 class"*: chuỗi 3 mốc `S188 → S189 → S191` cho **6 / 6 / 6** class ≥3 (mỗi vòng +1 đều), chưa bao giờ là 4.

⇒ **Vế "4 class" KHÔNG phải stale — nó SAI NGAY LÚC SINH.** Đây là **đúng cái lớp mà chính `lead-stale` dựng ESCALATE-1 để mô tả** (số sai lúc sinh, source không đổi) — nhưng vai **không nhận ra ca thứ hai của lớp đó đang nằm trong FLAG-3 của chính mình**. Hệ quả cho anh: ESCALATE-1 mạnh hơn vai trình, vì lớp này có **≥2 ca trong CÙNG một lượt đo**, không phải ca lẻ.

---

## §3. CLAIM-2 (stale FLAG-2) — `STATUS:11` 🔥CURRENT khai L9/S168 + cớ "advance @closeout" — **ĐẠT**

Tự chạy lại, không chép:

```
git log -S "S161→S168" --oneline -- docs/STATUS.md
  => a2b37dcc  [CLAUDE] Docs: S168 closeout-no ...        (đúng 1 hit)
```

- **1 hit duy nhất**, và hit đó là commit closeout **S168** — tức chuỗi này vào file một lần rồi nằm im.
- Đã qua các closeout S172 · S179 · S181 · S185 · S188 · S191 (6 lượt, tao đối chiếu bằng `git log` trên `.session-counter.json` thấy đủ mốc) ⇒ **0 lượt nào advance dòng này**.
- ⇒ mệnh-đề bào chữa ở `STATUS:9`/`:697` (*"dòng CURRENT advance @closeout nên tụt sau"*) mô tả một cơ-chế **không tồn tại trên thực tế**. Vai bác cớ này là ĐÚNG, và đây là phần **máy không phán được** (máy chỉ thấy số cũ, không thẩm được lời bào chữa).

⇒ **ĐẠT.** Trục quan trọng: vai không dừng ở "số cũ" mà đi giết **lý-do miễn-trừ** — đúng bẫy #3 (đóng-băng-có-chủ-đích) phải loại trước khi flag.

---

## §4. CLAIM-3 (stale FLAG-10) — `_end` liệt 7 slug, sổ bền nhận 3 — **ĐẠT**, khớp từng phần tử

Tự đếm 2 đầu (đếm **PHẦN TỬ**, không so hình-dạng chuỗi — mega-line `:27` dài 1.506 B, `grep -c` ra 1):

```
RE-STAMP@S191 (HANDOFF:27): 52 occurrence / 52 uniq      <- khớp con số "52" cả 2 vai dùng
```

| slug (7 cái trong `session-15/_end`) | trong `:27` | occurrence toàn `HANDOFF` |
|---|---|---|
| `w5-host-ondeleted` | ✅ CÓ | 2 |
| `reset-doi-het` | ✅ CÓ | 2 |
| `sentinel-truoc-bu` | ✅ CÓ | 3 |
| `w8-delete-policy` | ❌ VẮNG | **1** (chỉ `:5`) |
| `mind-dinh-chinh-mot-be-mat` | ❌ VẮNG | **0** |
| `session-end-thieu-buoc-ghi-block` | ❌ VẮNG | **0** |
| `du-cua-rule-khong-phai-phep-kiem` | ❌ VẮNG | **0** |

⇒ **3/7 đúng y số vai trình**, và **đúng y 3 slug** vai nêu tên. Vế nặng nhất cũng đứng: **3 slug có 0 hit trong toàn `HANDOFF`** ⇒ con-trỏ *"bản đủ ở HANDOFF"* trong `_end` dẫn tới nơi **không hề chứa chúng**. **ĐẠT.**

🔸 **Ranh turf vai giữ đúng:** FLAG-10 (`view-residual-asym`) chỉ đánh *2 view mâu-thuẫn + con-trỏ dẫn sai*; vế *"carry bị rớt"* nhường `lead-gap` (`gap-carry-dropped`). Tao kiểm chồng-lấn: **KHÔNG đếm đôi** — 2 vai đánh 2 vị-ngữ khác nhau trên cùng vật, hợp lệ ở tầng CLASS (bài S191 của tao).

---

## §5. CLAIM-4 (stale FLAG-7) — lead khai "9 mark Active-High", đĩa **11** — **ĐẠT**

Tự đếm `.claude/governance/ACTIVE-MARKS.md` §🔴 ACTIVE-HIGH bằng neo cấu-trúc (`dòng bắt đầu bằng "| \`RC-"`):

```
row tại dòng: 15 16 17 18 19 20 22 23 25 26 27   => n = 11
control-dương: §📦 SUPERSEDED = 1 row (:76)      => thước phân biệt được 2 section, không nuốt lẫn
```

- **11 ≠ 9.** Hai mark thừa so lời lead = `RC-pqhuy1987-07-08-2026-20-57-48` + `RC-pqhuy1987-07-08-2026-21-42-10` — **đúng 2 ID vai nêu tên**, và ngày ký `07-08-2026` (= 2026-08-07, S181) khớp lời vai *"ký @S181"*. **ĐẠT.**
- Vai còn khai đúng một nấc tinh: `session-start.md` §2.1.4 **ra lệnh ĐỌC ledger, không hardcode số** ⇒ số 9 **sinh tại lượt đọc của lead**, không phải con-trỏ thối. Tao xác nhận nhận-định đó **đổi bản-chất ca**: đây không phải doc-drift, mà là **đếm sai lúc đọc** — lại một ca nữa cùng lớp ESCALATE-1 (xem §2 và §7).

---

## §6. CLAIM-5 (stale FLAG-9) — `VALID_ROLES` bao nhiêu phần tử, ai đúng — **ĐẠT** (kèm **1 ERRATA vào chính vai**)

**Tao đếm bằng 4 đường độc lập, tất cả = 29:**

1. **Đếm tay** từng dòng `hmw.js:22-60` (2+2+4+1+1+2+2+3+1+2+1+1+2+2+3) = **29**
2. **Python bóc `//` rồi regex** `'([A-Za-z0-9_-]+)'` = **29**
3. **Lệnh nguyên-văn vai công bố** (`awk … | grep -v "^\s*//" | grep -o "'[a-z0-9-]*'" | wc -l`) = **29**
4. **Đối chiếu ĐĨA hai chiều:** `.claude/agents/*.md` −README = **29**; `disk ∖ VALID_ROLES = []` · `VALID_ROLES ∖ disk = []` ⇒ **IDENTICAL True**

**Phán ai đúng:**

| lane | số | verdict |
|---|---|---|
| `lead-stale-auditor` | **29** | ✅ **ĐÚNG** |
| lead | 43 | ❌ SAI (thừa 14) |
| `tooling-auditor` | 32 "= 29 vai + 3 lens" | ❌ SAI |

- Tao mở `sub-tooling-auditor-open-S192.md` xem nguyên văn trước khi buộc tội: bảng §② row #2 ghi *"`VALID_ROLES` … **32** phần tử = **29 vai** + 3 lens `view`/`omission`/`derived-staleness`"*. Ba chữ đó **KHÔNG phải phần tử mảng** — chúng nằm trong **comment `:36-37`** (câu ghi-chú từ-vựng *"'view'/'omission' chọn CÓ CHỦ-ĐÍCH… `derived-staleness`"*). Mảng có đúng 29 chuỗi, **0 phần tử lạ**. ⇒ vai stale phán đúng.
- 🔸 **Turf:** disposition lỗi của `tooling-auditor` là việc `ring1-audit`, không phải tao. Tao chỉ chấm **claim của `lead-stale`** — và claim đó ĐẠT. (Kèm datum cho ring1: cùng file `tooling-auditor` **tự mâu-thuẫn** — §F-E viết *"Nguồn thật `hmw.js:22-60` **ĐÚNG ĐỦ 29**"*, ngược với row #2 của chính nó.)

🔴 **ERRATA-1 — BROKE vào BẰNG-CHỨNG của vai (không phải vào phán quyết):**
Vai công bố control-dương: *"cùng lệnh **bỏ `grep -v`** cho số **LỚN HƠN** ⇒ thước đọc được, 29 không phải do lọc quá tay."* Tao chạy thật:

```
có grep -v  => 29        bỏ grep -v => 29        (số dòng bị grep -v loại = 22)
```

**KHÔNG lớn hơn — bằng y nhau.** 22 dòng comment bị loại **không chứa một token nháy-đơn nào** khớp mẫu, nên control này **không chứng được điều nó nói**. Kết-luận 29 vẫn ĐÚNG (tao chứng bằng 3 đường khác) ⇒ **chỉ sửa LÝ DO, không sửa PHÁN QUYẾT**.
🔴 Đắt ở chỗ: đây **đúng lớp khuyết-tật mà chính vai đang đi flag** — FLAG-8 (*"bằng-chứng tự vô-hiệu"*) và câu chốt của vai (*"chính câu bào chữa/chứng-cứ kèm theo mới là thứ thối nhất"*). Vai phạm nó **ở quy mô nhỏ, trong cùng lượt**.

---

## §7. CLAIM-6 (stale ESCALATE-1) — từ chối tự chế class: **ĐÚNG LÀN, KHÔNG phải né việc** — **ĐẠT**

Tao đọc thẳng 3 ghi-chú lineage trong `memory-budget.json` (không tin lời vai kể):

- `_note`: *"CLOSED = a monitor **may NOT invent a class**; an unclassifiable finding is **reported verbatim + escalated to the owner** to extend this list."* ⇒ hành vi vai làm **chính là đường thoát mà luật kê sẵn**, không phải lách.
- `_class_added_S172`: tiền-lệ tả đúng khuôn vai đang chạy — *"qua dung cua escalate: con-do lead-stale gap ca KHONG xep duoc → **TU CHOI ep-vua** → bao verbatim + de-nghi"*. Và ranh mà vai viện dẫn có thật, nguyên văn: *"view-stale-* doi **'source da doi, view giu so cu'** (o day 0 thu gi stale, **cau SAI NGAY LUC SINH**)"*.
- `_sealed_P3B_S181`: *"Tu nay **LOP LOI MOI KHONG duoc them vao day**; no song o `docs/governance/error-ledger.md`."*

**Phán 3 nấc:**

1. **Không né việc — việc đã làm TRỌN.** Vai vẫn đo xong ca (43 vs 29), nêu **3 lý do loại 3 class ứng viên** (`view-stale-count` / `view-claim-broader-than-sample` / `view-residual-asym`), dẫn 2 tiền-lệ, và **giữ ra ngoài TOTAL** để không pha loãng thống kê. "Không xếp được" ở đây là **kết luận có công-đo đằng sau**, không phải chỗ trốn.
2. **Đọc đúng con niêm-phong.** Vai không đòi thêm class thẳng tay — nó trình **2 nhánh (a) mở enum · (b) đá sang `error-ledger`**. Nhánh (b) chính là nhà mà `_sealed_P3B_S181` chỉ định cho lớp lỗi MỚI. Một con "né việc" sẽ không tự đi tìm cái niêm-phong bất-lợi cho đề-nghị của mình.
3. 🔴 **Và ca này MẠNH HƠN vai tự biết** (bằng chứng từ §2 của tao): lớp *"sai lúc sinh, source không đổi"* có **≥2 ca trong CÙNG lượt đo** — (i) `VALID_ROLES` 43 vs 29, (ii) tập "4 class" của slot (89) sai set ngay tại S188. Vai chỉ trình 1 ca ⇒ **cận-dưới**. Với anh, điều này đổi câu hỏi từ *"có đáng mở ô cho 1 ca lẻ không"* thành *"lớp này đang tái diễn trong một lượt"*.

⇒ **ĐẠT.** 🔸 Tao **không** đề xuất tên class mới (đó là quyền anh, và tao cũng bị chính luật enum ĐÓNG ràng).

---

## §8. CLAIM-7 (stale INFORM-1) — `FE pages 68 · unchanged S54` — **ĐẠT** (cả 2 vế), và **đúng làn**

**view:** `docs/STATUS.md:474` — `| FE pages | **68** | unchanged S54 (ItTicketsPage reassign = in-place 2 app); +1 S52 AttendanceReportPage |`

**Tao đo lại, 3 phép độc lập:**

| phép đếm | số |
|---|---|
| `*Page.tsx` fe-admin | 42 |
| `*Page.tsx` fe-user | 34 |
| **tổng 2 app** | **76** |
| **union distinct theo tên file** | **46** |
| mọi `*.tsx` trong `pages/` 2 app | 76 |

⇒ **68 ∉ {46, 76}** — không rơi vào bất kỳ quy-ước nào. **Vế ② ĐẠT.**

**Vế ① "unchanged S54"** — git đếm trang MỚI thêm sau mốc:

```
git log --diff-filter=A --since=2026-06-15 --name-only -- "fe-*/src/pages/**Page.tsx" | sort -u  =>  12
```
12 file, đúng cụm vai nêu tên: `ComingSoonPage` ×2 app · `contracts/HardCopiesPage` ×2 · `khkk/Khkk{Create,Detail,List}Page` ×6 · `office/OfficeDashboardPage` ×2. ⇒ **"unchanged" SAI. Vế ① ĐẠT.**

**Làn có đúng không — ĐÚNG.** Đây là ô **canonical** (`STATUS` §CURRENT STATE), không phải bản sao chép lại. Luật vai H24 = soi **view lệch source**; khi nghi chính canonical thì không có "source" nào cao hơn để đối chứng, mà cần **anh chốt quy-ước đếm**. Vai để INFORM, không tính vào TOTAL, không tự sửa ⇒ đúng ranh. 🔸 Vai còn khai thẳng **CHƯA ĐO** ô anh em `API endpoints ~253` thay vì đoán — kỷ-luật đúng.

🔸 **Tao thêm 1 datum cho anh khi chốt quy-ước:** ngay dưới, `STATUS:487` có ghi-chú *"Count drift fixed S40: … FE pages 53→**65**"* ⇒ ô này **đã từng được re-ground một lần**, và lần đó cũng không kèm quy-ước đếm. Chốt quy-ước một lần sẽ cắt cả lớp tái phát, không chỉ vá số.

---

## §9. CLAIM-8 (gap FLAG-3) — `jump_on_class_repeat` **0 reader thật** — **ĐẠT**, control tao TỰ DỰNG mạnh hơn vai

**Tự grep lane MÁY (`.ps1`/`.py`/`.js`, trừ `runs/`):**

```
scripts/governance-detectors.ps1:932   'create memory-budget.json carrying h24_cadence { light_every, deep_every, jump_on_class_repeat }'
scripts/governance-detectors.ps1:947   'W2: add h24_cadence { light_every, deep_every, jump_on_class_repeat }'
=> ĐÚNG 2 HIT, KHÔNG hơn.
```

Tao **đọc `:925-:956`** để xác nhận bản chất 2 hit đó (không tin nhãn "gợi-ý-sửa" của vai): cả hai là **đối số thứ 3 của `Write-Flag`** — tức chuỗi *"cách khắc phục"* in ra cho người đọc khi config thiếu. **0 chỗ nào dereference** `$cfg.h24_cadence.jump_on_class_repeat`. ⇒ **0 reader thật, xác nhận.**

🔴 **Control-dương tao tự dựng — 2 khoá ANH EM trong CÙNG object, để loại giả-thuyết "thước không đọc nổi kiểu truy cập này":**

| khoá | dereference thật | verdict thước |
|---|---|---|
| `light_every` | `$CadenceM = [int]$cfg.h24_cadence.light_every` (`governance-detectors:955`) + `$lightEvery = [int]$cad.light_every` (`nhip-no-probe:98`) | ✅ thước BẮT được |
| `deep_every` | `$deepEvery = [int]$cad.deep_every` (`nhip-no-probe:99`) | ✅ thước BẮT được |
| `jump_on_class_repeat` | *(không có)* | 🔴 **0 — thật** |

🔴 **Và tao thêm một nhân chứng vai KHÔNG dùng — chính con ghi tally:** `scripts/h24-signal-write.ps1` (máy cộng `class_repeat.counts`) chứa **0 lần xuất hiện chữ `jump`**. Tức con máy duy nhất **biết** tally vừa tăng lên bao nhiêu thì **không bao giờ so với ngưỡng**. Đây là chỗ chốt: JUMP không phải "chưa nối dây ở đâu đó", mà **không có dây ở đúng chỗ duy nhất có thể nối**.

⇒ **ĐẠT.** Vai còn khai thật rằng đây **không phải phát hiện mới của nó** — `_sealed_P3B_S181` tự ghi nguyên văn *"nguong `jump_on_class_repeat` KHONG co may nao doc (lane F do @S180)"*. Tao đối chiếu: đo @S180 → nay S192 = **12 nhãn phiên y nguyên**. Báo lại một lỗ đã tự khai mà **chưa ai đóng** là việc ĐÚNG của vai-gap, không phải trùng lặp.

🔴 **HỆ QUẢ THẲNG — slot (89) đang hỏi anh một câu hỏng ở 2 chỗ (tao nói thẳng vì đây là quyết-định của anh đang treo):**

1. **Tập sai** (§2 của tao): slot trình **4 class**, thật **6**, và 2 class bị bỏ là **hạng 1 (`gap-carry-dropped` 18) + hạng 2 (`view-stale-count` 16)**. Nhánh **(a)** *"kéo audit-sớm chuyên-đề 4 class đó"* nếu anh chọn sẽ **kéo đúng tập không chứa đỉnh**.
2. **Nhánh (b) là no-op**: *"đổi ngưỡng"* — đổi một con số **không máy nào đọc** thì không đổi hành-vi nào. Slot không nói cho anh biết điều đó.
3. Câu hỏi thật đáng hỏi lại **nằm sẵn trong nhánh (c)** của `lead-gap`: *giữ nguyên đọc-theo-nhịp **và ghi rõ JUMP là chỉ-báo-người-đọc, không phải cổng-máy*** — nếu anh chốt (c), lỗ này **hết là gap, thành thiết-kế có chủ-đích**. Đó là nhánh **rẻ nhất và trung-thực nhất**; 2 nhánh kia đòi nối dây thật vào `h24-signal-write.ps1`.

---

## §10. CLAIM-9 (gap FLAG-1) — `w8-delete-policy` bị bỏ **CÓ CHỌN LỌC** — **ĐẠT**, và tao chứng bằng **máy thời-gian** (mạnh hơn phép của vai)

**Tự đếm occurrence 2 slug, 10 nguồn:**

| nguồn | `w8-delete-policy` | `w5-host-ondeleted` |
|---|---|---|
| `docs/HANDOFF.md` | **1** (chỉ `:5`) | **2** |
| `so-yeu-cau-chu-du-an.md` | 1 | 0 |
| `_context-s-15.md` | 1 | 1 *(cùng MỘT câu)* |
| `session-15/_end` | 1 | 1 |
| run **S190** | **6** | **2** |
| `STATUS` · `WAL` · `error-ledger` · `migration-todos` · `ACTIVE-MARKS` | **0** | **0** |

⇒ mọi con số vai trình **tái lập chính xác**, gồm cả cặp `6 vs 2` ở run S190.

🔴 **Nước tao đi thêm — kéo bản TRƯỚC lượt RE-STAMP để hỏi: lúc quét, khối THẤY gì?**

```
git show d6026b14~1:docs/HANDOFF.md   (bản ngay TRƯỚC closeout S191)
   w8-delete-policy   = 1     <- ĐÃ CÓ SẴN trong HANDOFF
   w5-host-ondeleted  = 0     <- KHÔNG có trong HANDOFF
```

Và ở HEAD, 2 hit của `w5` nằm ở **`:26` (câu tự khoe) + `:27` (danh sách)** — tức **cả hai đều do chính lượt RE-STAMP đẻ ra**.

⇒ **Kết luận cứng hơn vai một bậc:** khối RE-STAMP tuyên đã quét `HANDOFF`. Trong `HANDOFF` lúc đó **có `w8`, không có `w5`**. Khối **vớt đứa VẮNG mặt** và **bỏ đứa CÓ mặt** ngay trong nguồn nó vừa quét — rồi **dán nhãn thành-tích** cho việc vớt (*"2 slug lần đầu vào được sổ carry sau khi bị nuốt"*). Đây không còn là "bỏ sót do gấp": **bằng chứng cơ-học loại sạch nhánh đó**. **ĐẠT.**

🔸 Vế hệ-quả cũng đứng: `w8-delete-policy` là khoản **có điều-kiện mở của owner** (*"ổn rồi" ⇒ mở W8 + grant Drafter*), và `so-yeu-cau` chỉ đóng **vế approver-delete**, không đóng vế policy+grant ⇒ khi anh nói "ổn rồi", **0 sổ carry nào nhắc**.

---

## §11. CLAIM-10 (gap FLAG-5c) — `gap-underfill` + đối chứng `harness-eval` — **ĐẠT**, **2 vai KHÔNG mâu thuẫn**

**Vế "0 vết rót" — tao tự quét** `docs/` + `.claude/sessions/` + `.claude/workflows/runs/` với mẫu *đã rót · da rot · backfill đã nạp · rót gist* (loại trừ chính 2 file audit để tránh tự-chiếu):

```
=> 0 hit.
```
⇒ **Vế nặng nhất của FLAG-5c đứng**, và cách vai diễn đạt lại nó là điều đáng giá nhất: underfill **không phải 114K/210K mà là ~0/210K** — máy là **DRY planner**, `_target_note` tự khai *"performs NO auto-pour"*, và **chưa lượt rót tay nào để lại vết** kể từ khi target đặt @S115 (**77 nhãn phiên**). **ĐẠT.**

**Đối chứng chéo với `harness-eval` (đo độc lập, CÙNG lượt) — có mâu thuẫn không? KHÔNG.**

| trục | `lead-gap` | `harness-eval` | phán |
|---|---|---|---|
| giá trị hôm nay | 114.223 | 114.223 | ✅ khớp |
| S185 / S188 | 134.573 / 122.555 | 134.573 / 122.555 (trong chuỗi 21 mốc) | ✅ khớp |
| hình dạng | "đơn-điệu giảm" | "0 lần đảo chiều / 21 mốc / 28 ngày" | ✅ **cùng kết luận**, eval mạnh hơn |
| S191 có số không | *(0 số đo trong run-folder)* | *"S191 @close không sinh số headroom nào, đã kiểm"* | ✅ **2 vai độc lập cùng xác nhận** |

🔸 **Một chỗ cần hiệu-chỉnh cách ĐỌC (không phải sai số, nên KHÔNG hạ verdict):** `lead-gap` viết *"hụt **tăng 27%** trong 7 nhãn phiên"*. Tao kiểm số học: `(95.777 − 75.427)/75.427 = 26,98%` ⇒ **đúng**, nhưng đó là % tăng của **KHOẢNG HỤT so target**, KHÔNG phải gia-tốc suy giảm. `harness-eval` đo trên 21 mốc: tốc độ toàn chuỗi **−3.853 tok/ngày**, cửa sổ cuối −4.245, và **cửa sổ gần nhất S188→S192 là CHẬM NHẤT (−2.777/ngày)** ⇒ **không có bằng chứng tăng tốc**. Thêm nữa, chuỗi 3 mốc của `lead-gap` **bỏ qua 2 mốc trung gian** (S186 `131.496` · S188 `125.828`) mà eval tìm ra — đúng bẫy *"khoảng GỘP nhiều kỳ"* mà eval cảnh báo là nguồn của lỗi-dấu-đạo-hàm S173.
⇒ **Ghi cho lượt cộng sổ:** giữ nguyên FLAG-5c, nhưng khi trình anh thì **đừng để "+27%" đọc thành "đang sụp nhanh dần"**. Câu đúng: *suy giảm ĐỀU, một chiều, 28 ngày, chưa từng đảo* — và đó mới là điều đáng lo, không phải gia-tốc.

---

## §12. CLAIM-11 (gap FLAG-5a — ca BÁC) — **BÁC ĐÚNG**, phần "lead không nghi" **ĐẠT**, kèm **ERRATA-2** vào lý-do

**(i) Vế BÁC — đúng.** Lead tự nghi *"phiên này không in 52 slug ra mặt ⇒ có phải gap?"*; vai **BÁC**. Tao đồng ý: in 52 slug @open là **nhiễu**, không phải lớp-bắt. Định-nghĩa `gap-*` = **cái KHÔNG CÓ**; 52 slug **CÓ**, nằm ở sổ bền `HANDOFF:27`, **grep ra được** (tao vừa đếm đúng 52 ở §4). *Vắng khỏi màn hình ≠ vắng khỏi sổ.* Vai **từ chối gật cho đủ số** — đúng kỷ-luật vai-đo.

🔴 **ERRATA-2 — BROKE vào một trong hai lý-do chống đỡ (không lật kết luận):**
Vai viết: *"[52 slug] … là **nguồn #2 của `tiep_reload`** ⇒ **tự vào context mỗi `/tiep`**"*. Tao mở `memory-budget.json` → `tiep_reload.sources[1]` nguyên văn:

```
"docs/HANDOFF.md :: segment Last-updated MOI NHAT (KHONG ca file)"
```

- Phạm-vi khoanh **rõ ràng là KHÔNG cả file**. Segment mới nhất = **`:5`**; chính `:6` tự dán nhãn *"🧊 (Segment cũ giữ nguyên bên dưới:)"* ⇒ theo cách file tự khai, khối RE-STAMP `:26-27` **nằm dưới lằn "segment cũ"**, thậm chí nằm sau nhãn `:22` *"(Segment cũ S182→S185/L13)"*.
- Và `_note` của chính khoá đó **tự khai**: *"KHAI THANG: **chua co script-consumer**"* ⇒ không máy nào ép việc nạp.
- ⇒ Câu *"tự vào context mỗi /tiep"* **chưa chứng được**, nhiều khả năng **rộng hơn phạm-vi thật**. 🔸 Trớ trêu: đây đúng hình-dạng `view-claim-broader-than-sample` — class mà vai **anh em** (`lead-stale`) đang cầm.
- **Kết luận BÁC vẫn ĐỨNG** vì chân còn lại tự đủ: `HANDOFF:27` là **sổ bền + grep được**, không cần tới lập-luận auto-load.

**(ii) Vế "cái lead KHÔNG nghi" — ĐẠT, tao đo lại 2 đầu:**

- `HANDOFF:26` nguyên văn (tao đọc tận dòng): *"⇒ **52 slug mở** (cận-trên; **disposition per-slug = việc bookend kế**)"* ⇒ **lời hẹn có thật, ghi bằng chữ.**
- "bookend kế" là phiên nào: S191 = bookend **@close** (13/08) → **S192 = bookend @open (13/08)** = **đúng lượt bookend kế tiếp**. Không có bookend nào chen giữa.
- Đo thi-hành: `run.md` S192 + `_context-s-16.md` ⇒ `disposition` = **0 hit / 0 hit**; **0 slug carry** nào được phân loại.

⇒ **0/52 đến hạn mà trôi.** Đây không phải "quên in danh sách" mà là **một lời hứa neo vào cái mốc tự trôi**. **ĐẠT.** 🔸 Vai xử đúng tally: cùng lớp `gap-carry-dropped` với FLAG-1/2 ⇒ **không cộng thêm** (1 quyết-định/class).

---

## §13. CHỒNG-LẤN — cộng sổ **MỘT lần: ĐÚNG** · "2 leg MỚI": **TRƯỢT**

**(i) Cộng sổ một lần — ĐÚNG.** `lead-stale` FLAG-1 và `tooling-auditor` F-D nhắm **CÙNG MỘT vật thể**: cặp ô `CLAUDE.md:128` ⟂ `STATUS:848`. Hai trục soi khác nhau (H1 = docs-freshness · H24 = view-lệch-source) nhưng vật thì một; cộng 2 lần sẽ **thổi số finding** đúng lớp *meta-count blind-spot*. Vai **tự khai chồng-lấn trước khi bị hỏi** ⇒ kỷ-luật đúng, giữ nguyên.

**(ii) Nhưng "2 leg vai này thêm mà H1 không có" — SAI. Tao đọc thẳng F-D của `tooling-auditor`:**

| leg `lead-stale` tự nhận là MỚI | có trong F-D của H1 không? |
|---|---|
| (a) vế *"giá-trị SỐNG duy nhất"* sụp vì `STATUS:848` tồn tại | 🔴 **CÓ** — F-D: *"'STATUS KHÔNG có row canonical' — **SAI**. `STATUS:848` tồn tại và đang mang số."* |
| (b) `rules.md` chỉ định STATUS là canonical ⇒ **B1 lộn ngược** | 🔴 **CÓ** — F-D mở đầu bằng *"`rules.md:559` §9.4 … ⇒ **theo LUẬT, STATUS là ô canonical**"* và kết *"⇒ **Vi phạm B1 one-direction-lock**"* |

⇒ **Cả 2 "leg mới" đều đã nằm sẵn trong F-D.** Phần thật sự thêm chỉ là **con-trỏ thứ hai `rules.md:307`** (H1 chỉ dẫn `:559`) — một increment nhỏ, không phải 2 leg.
🔴 Ngược lại, **H1 có 1 leg mà `lead-stale` KHÔNG có**: F-D chứng `CLAUDE.md:128` tự dẫn `rules.md:546` = **con-trỏ GÃY** (rơi vào template frontmatter skill; dòng thật `:559`).
⇒ **Phán: TRƯỢT** ở vế "2 leg MỚI" — đây là **claim mạnh hơn việc đã làm**, đúng lớp lỗi mà chính lượt đo này đang đi bắt. 🔸 Không ảnh hưởng FLAG-1 (vật thật, class đúng, vẫn tính 1 lần); chỉ hạ **phần tự-nhận công**.

---

## §14. 🔴 THÁCH-CLEAN (bắt buộc) — `view-stale-role-desc` = 0 hit: **TRƯỢT — ô CLEAN có lỗ**

**Định-nghĩa class, đọc tận nguồn** (`lead-stale-auditor.md:50`):
> `view-stale-role-desc` | **con-số trong mô-tả một VAI** lệch thực-tế | ví dụ: `agents/README` ghi 12 sub khi roster = 14

**Tao soi 3 ứng viên + mở rộng. Hai ứng viên đầu SẠCH THẬT (công bằng cho vai):**

- `ring2-audit.md` (persona của chính tao) — `:4` nay ghi *"Số class của mỗi nhánh **KHÔNG chép ở đây** — đếm từ khoá `lead_self_audit.flag_classes`"* ⇒ vá @S180 **vẫn đứng**, 0 digit số-lớp. Vai báo đúng.
- `back-end-reviewer-style.md` / `database-reviewer-style.md` — grep version-digit = **0 hit**; cả hai chủ động khai *"SỐ HIỆU version KHÔNG chép ở đây, đọc `.csproj`/`package.json`"*. Vai báo đúng.
- `lead-gap-auditor.md:29` `## **6** class của mày` — digit CÓ, nhưng nhánh `gap-*` đếm live = **6** ⇒ **khớp**, không phải flag. Vai đã kiểm ô này và kiểm đúng.

🔴 **NHƯNG ứng viên thứ tư thì thủng — `front-end-reviewer-style.md:4` (frontmatter `description` = ĐÚNG NGHĨA "mô-tả một VAI"):**

> *"🔴 SỐ HIỆU version KHÔNG chép ở đây, đọc `fe-admin/package.json` — SỬA-6b @S179: chép digits là đẻ nguồn thứ hai rồi drift, và class này **ĐÃ drift thật trong repo** — **`CLAUDE.md:43` ghi "React 18"** trong khi `package.json` là ^19.2.5"*

**Đo tươi hôm nay:**

| vế | khai trong persona | đĩa hôm nay |
|---|---|---|
| `CLAUDE.md` ghi | **"React 18"** | 🔴 **0 hit** — `CLAUDE.md:50` = **"React 19"** |
| dòng neo | `:43` | 🔴 `:43` = *"Pattern: CQRS + MediatR, FluentValidation, AutoMapper"* — **không dính gì React** |
| `package.json` | `^19.2.5` | ✅ `^19.2.5` (cả 2 app) — vế này đúng |

**control-dương:** `grep -c "React" CLAUDE.md` = **3** ⇒ thước đọc được chữ "React"; số 0 của *"React 18"* là **vắng thật**, không phải regex hỏng.

🔴 **Và git cho ra thứ đắt hơn nhiều — câu này SAI NGAY GIÂY NÓ ĐƯỢC COMMIT:**

```
CLAUDE.md @57e672f7~1  'React 18' = 1   |  persona 'React 18' = 0
CLAUDE.md @57e672f7    'React 18' = 0   |  persona 'React 18' = 1
```

**CÙNG MỘT commit `57e672f7` (2026-08-07, closeout S179)** vừa **xoá** "React 18" khỏi `CLAUDE.md`, vừa **viết vào** persona câu *"CLAUDE.md:43 ghi React 18"* làm **bằng-chứng SỐNG**. Bản sinh trước đó (`090ab1cd`) chưa có câu này ⇒ **không phải nó thối dần, nó sai từ lúc đẻ.**

**Phán:**
- ⇒ **`view-stale-role-desc` = 0 hit là SAI. Có ≥1 hit.** Ô 🟢 sạch duy nhất của bảng phân-rã **thủng**. Đây đúng ca mà thách-CLEAN sinh ra để bắt: **CLEAN "chỗ này ổn" khi không ổn**.
- Class khớp chính xác: **con-số** (`18`) nằm trong **mô-tả một VAI** (frontmatter `description`) và **lệch thực-tế** (đĩa = 19). Không cần chế class mới.
- 🔴 **Mỉa mai load-bearing:** persona này tồn tại để **cấm chép digit version**, và nó **tự chép một digit version sai** ngay trong câu ra lệnh cấm. Bản vá SỬA-6b @S179 **đẻ ra đúng khuyết-tật nó đi vá** — cùng hình dạng ca `STATUS:15` tao bắt @S181.
- 🔴 **Ca thứ BA của lớp "sai lúc sinh"** trong cùng lượt đo (sau `VALID_ROLES 43` và tập "4 class" của slot 89) ⇒ **ESCALATE-1 nay có 3 chứng-nhân, không phải 1.**
- **resolve đề nghị:** bỏ hẳn mệnh-đề ví-dụ (giữ luật, bỏ ca), hoặc thay bằng ca còn sống + không neo số dòng. Hết flag khi persona không còn literal version-digit nào.

🔸 **Khai giới hạn thành thật:** tao soi **4 persona + README** có chủ đích (theo hồ-sơ rủi ro), **không** quét cả 29. Vậy nên kết-luận đúng là **"ô 0-hit đã thủng"**, KHÔNG phải *"đếm đủ là N hit"*. Con số thật của class này **≥1**, cận-dưới.

---

## §VERDICT — ring2-audit @open S192

# `RING2-AUDIT: 12Đ / 2T / 1KC`

| # | claim | verdict |
|---|---|---|
| 1 | stale FLAG-3 — slot (89) 13/10/9/8 vs 15/12/11/10, tập 4 vs 6 | **ĐẠT** |
| 2 | stale FLAG-2 — `STATUS:11` L9/S168 + cớ "advance @closeout" bị git bác | **ĐẠT** |
| 3 | stale FLAG-10 — `_end` 7 slug, sổ bền nhận 3 | **ĐẠT** |
| 4 | stale FLAG-7 — "9 mark" vs đĩa 11 | **ĐẠT** |
| 5 | stale FLAG-9 — `VALID_ROLES` = 29 (lead 43 ✗, H1 32 ✗) | **ĐẠT** |
| 6 | stale ESCALATE-1 — từ chối tự chế class = đúng làn, không né việc | **ĐẠT** |
| 7 | stale INFORM-1 — `FE pages 68 · unchanged S54` sai cả 2 vế | **ĐẠT** |
| 8 | gap FLAG-3 — `jump_on_class_repeat` 0 reader thật | **ĐẠT** |
| 9 | gap FLAG-1 — `w8-delete-policy` bỏ CÓ CHỌN LỌC | **ĐẠT** |
| 10 | gap FLAG-5c — underfill ~0/210K, 0 vết rót 77 nhãn phiên | **ĐẠT** |
| 11 | gap FLAG-5a — BÁC ca lead tự nghi + bắt lời hẹn đến hạn trôi | **ĐẠT** |
| 12 | chồng-lấn — cộng sổ **MỘT lần** | **ĐẠT** |
| 13 | chồng-lấn — "2 leg vai thêm mà H1 không có" | 🔴 **TRƯỢT** (cả 2 leg đã nằm trong F-D) |
| 14 | thách-CLEAN — `view-stale-role-desc` = 0 hit | 🔴 **TRƯỢT** (≥1 hit: `front-end-reviewer-style:4`) |
| — | **độ PHỦ của cặp H24** | **KC** (xem dưới) |

**ENUM: 15/15 FLAG ∈ enum ĐÓNG (12 class, 12/12 hai chiều) · 0 class tự chế.** Cả 2 vai đều **bác tên sai** khi được đưa (`gap-memory-underfill`) hoặc **escalate thay vì ép vừa** (ESCALATE-1).

**Falsify-log — 5 phép thử phủ-định (2 BROKE nhắm vào chính con-đo, 1 vào ô CLEAN):**

| # | phép thử | kết quả |
|---|---|---|
| F-1 | Slot (89) có được miễn-trừ "đóng-băng có nhãn @S188" không? | **HELD** — bác được: nó đang mời owner quyết NGAY, và tập sai ngay tại S188 (6≠4) |
| F-2 | `29` có phải do lọc quá tay `grep -v` không? | **HELD** — 4 đường đo độc lập đều 29; nhưng… |
| F-3 | control-dương của vai (bỏ `grep -v` ⇒ số lớn hơn) có tái lập? | 🔴 **BROKE** → ERRATA-1: **29 = 29**, control không chứng được điều nó nói |
| F-4 | 52 slug có "tự vào context mỗi `/tiep`" như vai nói? | 🔴 **BROKE** → ERRATA-2: `tiep_reload` khoanh *"segment Last-updated MOI NHAT (KHONG ca file)"*, và `_note` tự khai *"chua co script-consumer"* |
| F-5 | `view-stale-role-desc` = 0 có thật sạch? | 🔴 **BROKE** → §14: sai, ≥1 hit, và ca đó sai từ lúc commit |

**2 ERRATA tao tự ghi vào chính mình (không phải vào vai):** — không có. Cả 2 ERRATA ở trên đều nhắm vào **bằng-chứng của con-đo**, và **không** lật phán quyết nào của chúng.

**🔴 KC — thứ tao KHÔNG chấm được, khai thẳng:**
Tao chứng được **độ CHÍNH XÁC** (13/14 vế load-bearing trúng vật thật), **KHÔNG** chứng được **độ PHỦ** — tao không có cách chứng cặp H24 đã bắt HẾT. Chính `lead-stale` cũng khai TOTAL **10 = SÀN không phải TỔNG** với 3 lý do đo được (7 bề mặt/26 persona chưa quét · mega-line đọc bằng lát cắt · ô `API endpoints` chưa đo). §14 của tao **chứng thực cảnh báo đó là đúng**: chỉ soi thêm 4 persona đã lòi 1 FLAG ngoài tập.

**Nấc đắt nhất phiên (phần máy không nói được):** ba ca độc lập trong CÙNG một lượt đo đều mang **một hình dạng** — *số/tập SAI NGAY LÚC SINH, source không hề stale*: `VALID_ROLES 43` · tập "4 class" slot (89) @S188 · `"React 18"` viết vào persona bởi đúng commit vừa xoá nó. Enum ĐÓNG **không có ô nào** chứa lớp này, nên cả ba **không bao giờ chạm `jump_on_class_repeat`** — mà ngưỡng đó thì **cũng không máy nào đọc** (§9). ⇒ Lớp lỗi này hiện **vô hình hai tầng**: không có ô để đếm, và có đếm cũng không có cổng. Đó là câu tao đề nghị anh trả lời khi xử ESCALATE-1, thay cho câu "có nên thêm 1 class cho 1 ca lẻ không".

---

🔸 **Kỷ luật đã giữ:** propose-only (0 Write/Edit ngoài file NÀY · 0 commit · 0 RAG-write) · PIN byte-exact trước khi chấm · mọi số load-bearing **tự tái dựng** (không chép của vai) · mọi phủ-định kèm **control-dương tự dựng** · KHÔNG soi lead trực-tiếp (chỉ KIỂM 2 con-đo) · KHÔNG lấn turf `ring1-audit` (lỗi 32 của `tooling-auditor` chỉ **trao datum**, không phán) · ghi từng verdict NGAY khi phán (chống #53).
🔸 **Nhật-ký vai:** entry `ring2-audit/MEMORY.md` để **lead seed on-behalf** từ return này (đúng khuôn `[LEAD SEED ON-BEHALF]` của các entry S162/S181) — tao **không** tự ghi.

