# ring2-audit — archive 2026-08 (tạo @S185, YC-019(2) anh chốt "Role baseline + Runs")

[moved-not-cut @S185, verbatim 8637B]

## 🎯 Role baseline

C4/C4b vai-KIỂM vòng **soi-lead (H24)** — adap đợt-11 khoản ①, owner-decision [2] TÁCH mỗi-vòng-1-con, land S145.
🔴 **Tao KIỂM 2 con-đo H24 (chúng soi LEAD) — tao KHÔNG soi LEAD trực tiếp.** Lấn sang soi-lead = làm sai vai.
- Input = OUTPUT của `lead-stale-auditor` (số class = ĐẾM LIVE từ `lead_self_audit.flag_classes`, CẤM chép — bản cũ ghi "5" sai 9 phiên, chính mình FLAG-SÓT @S182, lead sửa cùng lượt seed) + `lead-gap-auditor` (6 class `gap-*`).
- Trả: verdict per-FLAG ĐẠT/TRƯỢT/**KHÔNG-CHẤM-ĐƯỢC** + falsify ≥2 + **tự tái-dựng ≥1 số CÓ-THỂ-SAI**.
- **thách-CLEAN BẮT BUỘC** khi 2 vai báo ÍT/0 FLAG. Biến thể khi chúng báo NHIỀU FLAG: soi **cái chúng KHÔNG nói** (honest-zero có honest thật không · có bỏ sót class nào trong enum không).
- **PIN đích-danh, fail-closed** — pin missing/rỗng ⇒ TỪ CHỐI, **CẤM ĐẠT-ảo**. CẤM tự đi tìm "run mới nhất".
- Class ∈ enum ĐÓNG `lead_self_audit.flag_classes` (`memory-budget.json`) — verify 2 vai không tự chế class.
- Propose-only, lead single-writer. AUTO fire SAU cặp H24 (owner @S146 "3 → auto", không consent). H24 không chạy phiên đó ⇒ NO-OP im lặng.
- KHÔNG lấn: `ring1-audit` (vòng tooling/harvest) · `harness-audit` (trio memory) · `reviewer` (diff-code) · `ring4-audit` (nén-ngủ).

## 📅 Runs

- **S146 (2026-07-22/23) — lần chạy ĐẦU** `[#53 garble; nguồn verbatim `runs/2026-07-22-S145-apply-hub-answers/sub-h24-audit-S146.md` 6.169B]`. Chạy trong vòng light force-fire P=8 cùng `lead-view` + `lead-omission`; **cả 3 vai garble**. 7 FLAG của vòng đó đã vá hết. 🔴 Diary KHÔNG được seed sau lượt này ⇒ GAP-3.

- **S149 (2026-07-24) — chấm vòng S148-force-fire, qua `/tiep §4` relaunch-cắt-gọt** `[#53 garble ×2 — CẢ HAI vớt trọn từ đĩa nhờ ép ghi-đĩa-trong-lúc-làm: 7,7KB lượt-1 → 25,7KB lượt-2 sau SendMessage-resume; 0 mất dữ-liệu]`. Nguồn: `runs/2026-07-24-S148-h24-force-fire/sub-h24-audit-S149.md`.
  **VERDICT: 7 ĐẠT · 0 TRƯỢT nội-dung · 2 KHÔNG-CHẤM-ĐƯỢC** (9 FLAG = 5 view + 4 omission).
  **Tự tái-dựng 3 số:** (a) chạy `dotnet test` tươi = 45D+487I=**532** ⇒ canonical-poison `STATUS:448`=528 là THẬT, nay đã vá; (b) tự đếm anchor `gotchas.md` = **83** liên tục ⇒ cặp bất-đối-xứng NGƯỢC CHIỀU `STATUS:6`=82 vs row=83 là THẬT; (c) **TỰ CHỌN thêm phép thứ-3** (ngoài 3 ứng viên lead giao) = đọc git 2 commit closeout S148 ⇒ **CHỈ 3 dòng `gap-*` được đổi, 0 dòng `view-*`** ⇒ nửa tally bị bỏ.
  **2 FLAG lead-view (V4/V5) KHÔNG TỒN TẠI TRÊN ĐĨA** (run-folder chỉ có `run.md`; đối chứng S146 có 3 file `sub-*`) ⇒ ghi **KHÔNG-CHẤM-ĐƯỢC**, từ chối ĐẠT-ảo.
  Tag `[s149, verdict-7-dat, tally-view-bo-nua, 2-flag-mat-tich, tu-chon-phep-thu-3]`

- **S149 (tiếp) — 3 bài học phương-pháp rút từ chính lượt chạy.**
  ① 🔴 **GỐC của cả §3 lẫn §9: `lead-stale-auditor` KHÔNG GÁN CLASS cho FLAG nào @S148** — trong khi nó VẪN gán @S140, @S143, và @S146 dùng header chuẩn `## FLAG-N — \`class\` — SEV`. Không gán ⇒ không đếm được ⇒ sổ đứng yên. **Đối chứng bất-đối-xứng (chống đổ lỗi lead):** cùng closeout đó `gap-*` ghi đủ 3 dòng — khác biệt DUY NHẤT là `lead-omission` **có đưa bảng tally có nguồn**. ⇒ Nghi-thức rẻ chống tái diễn: buộc mỗi vai H24 ghi `## FLAG-N — \`class\` — SEV` vào `runs/<id>/sub-<vai>-<S>.md` **ngay khi có FLAG**.
  ② **thách-CLEAN bắt SEAM THẬT ở khe giữa 2 vai:** honest-zero `gap-incident-unrecorded=0` của lead-omission **đúng LUẬT** (2 sự-cố S146/S147 CÓ trong sổ bền) nhưng nó **đẩy-turf** phần "số cũ" sang `view-*` rồi thả — mà lead-view không nhận ⇒ **không vai nào ôm**. Hệ quả đo được: garble S148 ×2 chưa vào sổ bền nào, và tổng lũy kế `×27` **SAI** (tự cộng từ chính thân sổ: 25 qua-S143 + 3 S146 + 3 S147 + 2 S148 = **33**). ⇒ Bài: **honest-zero đẩy-turf phải nêu ĐÍCH DANH vai nhận**, không thì rơi khe.
  ③ **Phép thử của chính mình cũng phải falsify:** F4 grep `2-3 phiên` ra **0 hit** ⇒ suýt kết luận con-đo bịa; hoá ra **en-dash trong `-E` alternation nuốt kết quả** — chạy lại bằng lệnh KHÁC ⇒ HELD. Cùng lớp với bẫy `grep -c` (dòng) vs `-o|wc -l` (occurrence). **Vá xong PHẢI grep lại bằng lệnh KHÁC.** Và F7: tự nghi lead-view sót roster ⇒ đếm 20 file + kiểm 20 TÊN trong README ⇒ **BROKE nghi-vấn của chính mình**, ghi VERIFIED-CLEAN để không tạo báo động giả.
  Tag `[s149b, class-khong-gan-la-goc, seam-giua-2-vai, tu-falsify-phep-thu-cua-minh, endash-grep-trap]`

- **S150 (2026-07-25) — chấm bookend @close lượt ĐẦU (hình B), cặp H24 + wave 7-lane** `[#53 garble lần 3 của vai qua 2 phiên (S149 ×2 + S150 ×1) — đĩa cứu TRỌN 3/3]`. Nguồn: `runs/2026-07-25-S150-closeout-bookend/sub-ring2-S150.md`.
  **VERDICT: 10 ĐẠT · 0 TRƯỢT · enum-check 10/10** (6 FLAG `lead-stale-auditor` + 4 `lead-gap-auditor`; cả 2 vai gán class chuẩn `## FLAG-N — \`class\` — SEV` ⇒ **gốc lỗi S148 không tái-phát**).
  🔴 **Nhưng 10/10-ĐẠT KHÔNG = 2 vai hoàn-hảo** — 3 khuyết-tật ngoài FLAG: **D-1** `sub-lead-stale:177` tuyên `view-stale-count` KHÔNG-fire, mâu-thuẫn bảng `:192/:193` + chính FLAG-3 của nó ⇒ lead chép là đẩy 1→0 khi vừa fire (**hậu-quả S148, cơ-chế MỚI**) · **D-2** số "22 hit tên-cũ" không kèm lệnh, tái-dựng ra **30** · **M-1 FLAG BỊ SÓT**.
  **Tái-dựng 3 số:** (a) `grep -c '^## FLAG-'` = 6+4 = **10** khớp TOTAL; (b) "22 hit" → **30** bằng 2 lệnh độc-lập (gộp + tách), loại time-drift (git clean, mtime 07-24) và loại grep-trap của chính tao (`-oc` ra 5 vs occurrence thật 6); (c) `class_repeat.counts` **lạc-hậu 9 dòng** (máy chưa chạy: `gap-incident-unrecorded` còn 0 dù G-4 fire).
  **G-2 phân-biệt đúng-lúc-đo vs đã-xử:** gap đo 11:40 (`grep`=0, FLAG **không oan**) → lead cắm khoá 11:43 → tao chấm 11:45. Chứng bằng mtime, không bằng lời khai.
  Tag `[s150, 10-dat-0-truot, 3-khuyet-tat-ngoai-flag, so-khong-kem-lenh, garble-7]`

- **S150 (tiếp) — 3 bài phương-pháp.**
  ① 🔴 **thách-CLEAN phải nhắm vào class được tuyên "0 fire".** Vai-stale khai `view-stale-role-desc` **0** + tuyên `STATUS:452` "KHÔNG flag, giữ nhất-quán". Tao soi đúng ô đó ⇒ bắt **M-1**: ô `ring2-audit` ghi luật hiện-hành *"no-self-exempt ≠ **lead-view/omission**"* — 2 tên đã CHẾT (`ls .claude/agents/` = 0 hit). **3 lý-do không được miễn:** (i) chính file tuyên chỉ miễn *"narrative/runs/history"*, đây là **luật thì-hiện-tại trong ô canonical**; (ii) **bất-đối-xứng cùng ô cùng mẫu câu** — ring1 dùng tên SỐNG (`H1/H2`), ring2 dùng tên chết ⇒ sweep chạm câu này bỏ câu kia; (iii) nó là luật về **chính vai KIỂM**. ⇒ Bài: **CLEAN nguy nhất nằm ở class con-đo tự tuyên 0**, không ở class nó fire nhiều.
  ② **Số KHÔNG kèm lệnh = số KHÔNG kiểm được.** `lead-gap-auditor` dán nguyên block `grep` ⇒ tao tái-dựng **100%** G-1/G-3. `lead-stale-auditor` khai "22 hit" trần ⇒ không tài nào biết tập-đo, và mệnh-đề dẫn-xuất từ nó ("1 live-stale") **SAI thật** (≥2). Đề-nghị buộc mỗi số trong sub-file H24 đi kèm lệnh sinh ra nó. 🔴 Và **không vu-oan**: số không tái-dựng được ⇒ phán "không dùng được", KHÔNG phán "bịa".
  ③ **Chứng khoá bằng BIỂU-THỨC CỦA MÁY, không bằng `grep` thấy chữ.** Nghi lead cắm `_frozen_until_owner` sai tầng (vào trong `counts`) ⇒ chạy đúng `($cr.PSObject.Properties.Name -contains '_frozen_until_owner')` = **True** + ép kiểu 8/8 `counts` = `Int32` (invariant "chỉ chứa số" còn nguyên) ⇒ **BROKE nghi-vấn của chính tao**, ghi VERIFIED-CLEAN thay vì báo-động giả. Vẫn khai vế nợ: dòng `(frozen - …)` tại `:223` **chưa quan-sát được** vì máy chưa chạy — *có mặt ≠ có răng*.
  Tag `[s150b, thach-clean-nham-class-0-fire, so-phai-kem-lenh, chung-bang-bieu-thuc-may]`

