# sub-ring2-audit — KIỂM vòng soi-lead H24 @open S182

**VERDICT: `RING2-AUDIT: 17 ĐẠT / 0 TRƯỢT`** (+2 errata cưỡng-hành, +1 FLAG SÓT bắt bằng thách-CLEAN)

**PIN thoả (fail-closed):** `sub-lead-stale-auditor.md` 12.717 B mtime 23:58 + `sub-lead-gap-auditor.md` 13.606 B mtime 23:56. Output sinh SAU 23:58 ⇒ **chứng C4b tuần-tự**, không song song.

> ⚠️ **#53:** first-return garble. Recover bằng resume. Mất 0 byte. (6/6 vai garble lượt này.)

---

## 1. Per-FLAG — 17/17 chấm được, 0 CHƯA ĐO

**`lead-stale` 11/11 ĐẠT** — F-1 (`STATUS:8` verbatim `644`/`46`/`6/15 ok`/`light_at=44`; source `:467`=72 `:474`=645, counter 56 `light_at` 53 ⇒ `53−44 = 9 nhịp` ✓) · F-2 (3 mốc chỏi: `:8`=L9 · `:488`=L12 · `:500`=L11 · `:508`=L10 · `:6`=L11; caveat *"advance @closeout"* CÓ THẬT nhưng `Recently Done` đã vượt `:8` **3 nấc L** ⇒ bác đúng) · F-3 (xem §5) · F-4 (`grep ".NET 10\|EF Core 10" *style*.md` = **0 hit**, control-dương `:4` cả 3 file nay trỏ `.csproj`) · F-5 (be **7** · fe **7** · db **rút gọn 4** ⇒ "chép 7" sai file thứ 3; `cicd-monitor:225` chép bản 3-mục đời cũ ⇒ lệch NGAY; tổng **5 site**) · F-6 (`rules.md:546` = `---`; site thật `:307` + `:559`; vai **tự bác 5/6 vế của chính mình**) · F-7 (§3a) · F-8 (§3b) · F-9 (`:479` = row RAG, `:481` = Bundle ⇒ trỏ trật **2 dòng**) · F-10 (`:7` verbatim `15/15` kẹp giữa 2 việc vặt; `:11` tự tố; đĩa **16/15**) · F-11 (thử bác bằng câu tự-khai-đóng-băng `:308` → **không bác được**).

**`lead-gap` 6/6 ĐẠT** — G-1 (**13/28** > hook-cap 17.100 · **3** > 25.600 ⇒ *"nay TỆ HƠN"* đúng; vai **tự bác 4 nghi-vấn của chính nó**) · G-2 (§4, **7/7 byte-exact**) · G-3 (`56−40=16/15`; `:6` có 4 câu, **0 câu** về deep) · G-4 (`:6` câu (4) đúng là **chọn A-hay-B**; vai **ghi nhận lead tự khai** — chấm công bằng) · G-5 (§2 F-4 HELD) · G-6 (vai **tự rút P5/P7/P8** khi đo ra đã trả lời; §Khai-kẽ #2 tự dán nhãn **cận-dưới**).

**Enum-check (đếm từ khoá, KHÔNG chép số từ lead):** `lead_self_audit.flag_classes` = **12 phần tử** (6 `view-*` + 6 `gap-*`), `_sealed_P3B_S181`. **0/17 tự chế class.** `set(class_repeat.counts) ≡ set(flag_classes)` — 12/12 hai chiều, mọi value `int`.

## 2. Falsify-log — 6 phép (4 HELD / **2 BROKE**)

- **F-1 HELD** — nghi F-9 *ép-vừa-enum*. Vị-ngữ `:161` = *"dư-lượng bất-đối-xứng"*; cơ-chế đo được: row bị chèn ⇒ **ô đích trôi, con-trỏ đứng yên** = sửa **một phía**. Thoả.
- **F-2 HELD** — nghi F-11 được miễn bởi `:308`. `:308` chỉ miễn **con số chi-phí**, `:294` cột-3 mô-tả **phạm-vi vòng đo hiện hành**. Hai đối-tượng khác nhau.
- **F-3 HELD** — nghi G-2 sai vì `.ps1:907` `if ($ks.Count -gt 0)`. Port đủ luật bỏ-rỗng: `carryLines[0]` thật đến từ `segs[2]` (`:193`), **nhưng vùng câm do `marks[0].Index` quyết, độc lập luật bỏ-rỗng** ⇒ 22,8% không đổi.
- **F-4 HELD** — nghi G-5 oan vì 🧊 = ngủ-có-chủ-đích. Đọc hàng xóm: `(68)(69)(70)(71)` **đều gạch ✅ ĐÓNG**, riêng **(67) không gạch**. Một mục CHƯA đóng lọt giữa 4 mục ĐÃ đóng dưới 🧊 = **đúng định nghĩa chìm**.
- 🔴 **F-5 BROKE — đánh vào chính TIỀN-ĐỀ LEAD GIAO.** Brief lead viết *"`ring2` đã đo @S173 (`marks[0]`=HANDOFF:90, 12 slug)"* — **SAI**. Mở artifact gốc: `sub-ring2-audit-close-S172.md:261` = `HANDOFF:90 / L1-89 / 12 slug` ⇒ đó là mốc **S172**; `sub-ring2-audit-open-S173.md:132` = `marks[0] at line 130 ; blind L1-129 ; 31698 bytes`. ⇒ **`lead-gap` trích ĐÚNG** (khớp tới từng byte), **brief của lead trích SAI**. 🔴 Gốc con số sai = **`HANDOFF:58`** — **chính defect mà `lead-gap` FLAG-2 nêu đã lan vào brief lead giao cho vai KIỂM.** Ca tự-quy-chiếu **thứ HAI** trong phiên.
- 🔴 **F-6 BROKE (một nửa) — vào con số của CẢ HAI vai.** Cả 2 khai `counter = 56`; **blob tại `936d1aed` là 55**. Không phải bịa: `history[]` ghi `S182: 55→56, head b8d2274→936d1ae` ⇒ tick xảy ra trong **working tree**, chưa vào blob. Hai vai đọc cây ⇒ **56 đúng tại thời điểm đo**; cái sai là **nhãn `HEAD 936d1aed`** dán lên phép đo đọc cây bẩn. **Sửa lý-do, không sửa phán-quyết** (mọi dẫn-xuất 3/6 · 16/15 đều tính từ 56 và đều đứng).

## 3. Số tự tái-dựng (3 phép độc lập)

**(a) `HANDOFF:8` "20" vs `:9`** — đếm bằng chính `$carryRx` của máy: **23 occurrence / 23 unique / 0 trùng**. Lệch **+3**, đúng 3 cái append cuối. 🔸 Đáng ghi: `lead-gap` gặp cùng số này và **tự nhường trục** (*"lệch-số là trục `view-*`"*), `lead-stale` nhận ⇒ **0 đếm hai lần, khe giữa 2 vai kín**.

**(b) Tập over-cap — `stat` toàn bộ 28/28, không lấy mẫu**

| vai | byte | so `HANDOFF:40` |
|---|---|---|
| **`ring2-audit` (CHÍNH VAI NÀY)** | **29.582** | `:40` ghi 26.440 — **sai, và là tệ nhất trong 28 vai** |
| `tooling-auditor` | 29.429 | `:40` ghi 27.147 — sai |
| `lead-stale-auditor` | 27.658 | **VẮNG MẶT ở `:40`** — và đây là **chính con-đo tự tố mình** |
| `harvest-curator` | 25.498 | dưới auto-cap |
| `reviewer` | **21.058** | `:40` ghi 26.856 — **đã tụt dưới cap, danh sách đuổi oan** |

Khớp **tuyệt đối** F-8, cả 5 số byte-exact. Đồng thời chứng G-1: 13/28 > 17.100 ✓, 3 > 25.600 ✓.
🔴 **Tự khai (no-self-exempt):** vai **đang over-cap 29.582 B = 115% auto-cap, tệ nhất roster**; diary bị **cắt lúc nạp** (`MEMORY.md is 25.1KB (limit 24.4KB)… Only part of it was loaded`) ⇒ **chấm lượt này với trí-nhớ thủng THẬT**, khai để lead trừ hao.

**(c) `class_repeat` — `git show` bản TRƯỚC vs đĩa NAY.** 12/12 khoá cả 2 phía, mọi value `int`. **9 khoá +1, 3 khoá +0.** `lead-stale` khai tally 10·7·10·5·1 → bản TRƯỚC **10·7·10·5·1** ✓ 5/5 byte-exact; `lead-gap` khai 12 và 5 → ✓✓. 3 khoá +0 = đúng 3 class 2 vai tuyên 0. **Ngữ-nghĩa đúng:** `view-stale-count` fire **5 FLAG** nhưng chỉ **+1** ⇒ máy đếm **vòng-đo**, không đếm flag.

## 4. `lead-gap` FLAG-2 — **ĐÚNG, 7/7 byte-exact**

Cài lại độc lập bằng Python, port nguyên văn `:892` + segment `:893-898` + carryLines `:902-908` + streak `:916-931`:

| vai khai | đo độc lập | |
|---|---|---|
| `marks.Count` = 25 | **25** | ✅ |
| `marks[0]` = HANDOFF:179 | **179** (index 36.644) | ✅ |
| vùng câm L1–178 | **L1–178** | ✅ |
| **42.606 B / 186.729 B** | **42.606 / 186.729** | ✅ byte-exact cả hai |
| 22,8% | **22,82%** | ✅ |
| 91 occurrence / 28 slug | **91 / 28** | ✅ từng phần-tử |
| `carryLines[0]` 5 slug, 2 đã đóng | **đúng 5** | ✅ |
| streak `2·1·1·1·3`, M=6 ⇒ 0 fire | ✅ | ✅ |

⇒ **`gap-carry-aged = 0` đúng là số 0 CHẾ TẠO.** Khối re-stamp `:9` (23 slug) nằm TRỌN trong vùng câm ⇒ máy không thể thấy, vĩnh viễn. Vế "cái THIẾU" cũng đứng: `HANDOFF:58` nằm dưới `:57` = `~~(70)…~~ ✅ ĐÓNG @S179` ⇒ quét "slot còn mở" không thấy.

**Chuỗi mốc — nhất quán, KHÔNG mốc bịa** (chấm bằng artifact gốc, không bằng diary):

| kỳ | `marks[0]` | vùng câm | nguồn đĩa |
|---|---|---|---|
| S172 | 90 | L1-89 · 12 slug | `sub-ring2-audit-close-S172.md:261` |
| S173 | **130** | **31.698 B** | `sub-ring2-audit-open-S173.md:132` |
| S180 | 172 | 34.855/163.546 | `sub-ring2-audit-open-S180.md:27-28` |
| S182 | **179** | 42.606/186.729 · 28 slug | lượt này |

90 → 130 → 172 → 179 = **đơn-điệu tăng 4/4 mốc**.

🔴 **ERRATA-1 (nhẹ, không đổi kết luận):** chuỗi của vai so **21,3% (S180) → 22,8% (S182)** là **TRỘN ĐƠN-VỊ** — 21,3% là *code-point*, 22,8% là *byte*. Byte-to-byte: 21,96% → 22,82%; code-point: 21,31% → 22,16%. **Tăng đơn-điệu trong CẢ HAI đơn-vị** ⇒ kết luận giữ, chỉ delta bị phóng đại **~1,7×**.
🔴 **ERRATA-2:** nhãn `HEAD 936d1aed` trên cả 2 sub-file nên đọc là *"cây làm việc tại 936d1aed"*.

## 5. `lead-stale` FLAG-3 — **CẢ 2 VẾ ĐÚNG**

**Vế 1:** `:161` liệt **đúng 5**, ánh xạ 1:1 sạch, thiếu **đúng** `view-claim-broader-than-sample` (mở @S172). `:162` liệt **5**, thiếu `gap-incident-unrecorded`. Phép âm + control-dương: `grep "incident\|sự cố"` = **0 hit**, control `grep -c "gap-"` = 4, `grep -c "carry"` = 6 ⇒ thước sống. `rg -l "claim-broader-than-sample"` → 21 file, **`session-start.md` KHÔNG có** ✓. **ĐẠT, HIGH xứng đáng.**

**Vế 2:** vai KIỂM không đọc được brief của `lead-stale` ⇒ **không chấm trực tiếp**. Nhưng chấm được **brief của CHÍNH NÓ**, và nó **xác nhận cơ-chế bằng ca độc lập** (F-5 BROKE). ⇒ **ĐẠT theo class**, khai rõ nấc: chứng bằng **ca song song**, không phải ca vai nêu.

🔴 **Trục "ép-vừa-enum":** `0 ESCALATE` ở đây là **enum phủ đủ THẬT**, KHÔNG phải bẻ ca cho vừa nhãn. Soi 3 ca dễ ép nhất (F-9 · F-11 · G-4) — **cả 3 thoả vị-ngữ class đang mang**. Đối lập rõ với **S162**, khi vai phán TRƯỢT vì `view-stale-count` bị ép. Enum **chưa cần mở**.

## 6. Thách-CLEAN — 🔴 bắt được **1 FLAG SÓT, nằm trong file của CHÍNH VAI KIỂM**

Soi bề mặt **cả 2 vai đều KHÔNG chạm**: `lead-stale` khai coverage 6/29 `agents/**` và **0 file** `agent-memory/**`.

**SÓT: `.claude/agent-memory/ring2-audit/MEMORY.md:28` — `view-stale-role-desc`, CÙNG class F-3, cùng bệnh ghost-enum.**
Verbatim dưới `## 🎯 Role baseline`: `- Input = OUTPUT của lead-stale-auditor (5 class view-*) + lead-gap-auditor (6 class gap-*).` — enum đĩa = **6** `view-*`; vế `gap-*` đúng, vế `view-*` **sai**.

Vì sao là FLAG thật:
1. **Cùng vị-ngữ F-3, cùng đợt vá sót** — `:161` sót vì @S180 bỏ file lệnh; dòng này sót vì đợt đó không chạm `agent-memory/**`.
2. 🔴 **Site ĐIỀU-KHIỂN, không phải văn kể chuyện** — `## 🎯 Role baseline` **auto-inject ~200 dòng đầu mỗi lượt spawn** ⇒ **vai bị nạp thước thiếu một vạch TRƯỚC khi bắt đầu chấm**.
3. **Bất-đối-xứng nội-dòng** — cùng câu, vế `gap-*` đúng vế `view-*` sai ⇒ đã sửa một nửa.
4. 🔴 **Tái phát lần 2, vai tự bắt @S173** (diary: *"`:25` dạy '5 class view-*' (enum 6)… tao bị nạp thuốc thiếu vạch TRƯỚC khi làm việc"*). Dòng trôi 25→28, **số sai vẫn nguyên** ⇒ **9 phiên không ai vá**.
5. **Không tự-miễn-trừ** — bỏ qua = đúng anti-pattern `m-1 miễn-trừ-persona-của-vai-đo` vai tự tố @S153.

**2 honest-zero — cả 2 CÓ RĂNG:** `gap-incident-unrecorded=0` (garble #53 **có** sổ ở `_mind-s-12.md:96`/`:125`; máy đồng ý +0) · `gap-underfill = CHƯA ĐO` — 🔴 **nhãn này TRUNG THỰC HƠN honest-zero, chấm là điểm cộng**: vai tự nhận ràng buộc áp @S179 và **từ chối phát flag khi chưa đo trọn 9 nguồn**, đồng thời **vẫn để lại datum nợ** (`_expand_S168` 182.160 B vs đo @S179 373.881 B = **2,05× lỗi-thời**).

---

## Câu dặn cho lead

🔴 **17/17 ĐẠT nghĩa là mọi FLAG trúng vật thật và mọi class đúng vị-ngữ — KHÔNG nghĩa 2 vai đã bắt hết.** Đây là **độ CHÍNH XÁC, không phải độ PHỦ**: `lead-stale` tự khai chỉ chạm **~7% `STATUS`** (30/853 dòng) và **6/29** persona; mở đúng MỘT chỗ trong phần chưa chạm (`agent-memory/**`) là ra ngay **1 FLAG sót cùng class**. ⇒ **11 và 6 phải đọc là SÀN. Cấm làm tròn sàn thành tổng.**

**2 việc load-bearing cho closeout:**
1. **`HANDOFF:58` đang là NGUỒN LÂY** — không chỉ "số cũ đọc thành nhẹ gấp đôi", nó **đã lây vào brief lead giao cho vai KIỂM lượt này**. Vá `:58` phải **kèm mở lại slot (70)**, vì lỗi máy đang bị **đóng ké** dưới `~~ĐÓNG @S179~~`.
2. **`gap-carry-aged` vừa 0→1** trong `class_repeat` — nhưng máy sinh số đó **vẫn đang mù 22,8% đầu file**. Số 1 này do **vai tự tính TAY**, không phải máy tự thấy. **Đừng đọc thành "detector đã khỏi".**
