# sub-score-count-auditor — TẦNG-3 khối chấm điểm @open S189

```
SCORE-AUDIT: SAI-TẦNG-2 — 2 loi dem (L1 o dau-vao muc YC-008 · L2 o dieu-kien P.7)
TẦNG-1: 0 loi dem — 4/4 khoan khop luat, so tai lap duoc hom nay
```

> 🔴 Vai này kiểm **PHÉP ĐẾM**, KHÔNG kiểm KẾT QUẢ. **Không có con điểm nào của tầng-3 trong file này** (P.3 ranh cứng).
> Artifact-first: viết TỪNG MỤC ngay trong lúc làm (phiên dính #53 bốn lần).

## 0. PIN — fail-closed, kiểm trước mọi thứ

| pin | đường dẫn | có trên đĩa? |
|---|---|---|
| tầng-2 (`score-counter`) | `.claude/workflows/runs/2026-08-10-S189-bookstart-open/sub-score-counter-open-S189.md` | ✅ đọc được, verdict `SCORE-T2: 6` / `SCORE-COUNT: 4 mục nhắc≥2` |
| tầng-1 (lead) | mục "Ghi chú của LEAD (tầng-1)" ở CUỐI chính file trên (dòng 87-94) | ✅ `so-yc treo 6 / nhac2+ 3 (muc 22, gop 5 dong nhac-lai)` ⇒ **3 mục** |
| luật canonical | `docs/governance/harness-11-engine.md` PHẦN P (dòng 495-545) | ✅ đọc THẲNG, không qua lời kể |
| nguồn đếm đã ký | `docs/governance/so-yeu-cau-chu-du-an.md` | ✅ đọc trọn 98 dòng |

⇒ **Đủ pin, KHÔNG fail-closed.** Không đi tìm "bản mới nhất" của bất kỳ pin nào.

---

## 1. Câu hỏi 1 — máy `nhip-no-probe.ps1` có thi hành đúng LUẬT-ĐẾM đã ký không?

**Đọc mã, không suy.** Vế 5 (`so-yc`) nằm ở `scripts/nhip-no-probe.ps1:235-272`. Vòng đếm:

```powershell
if ($L -notmatch '^\|\s*`YC-\d+`') { continue }      # :246  chỉ dòng YC trong bảng
$c = $L -split '\|'
if ($c.Count -lt 9) { $bad++; continue }              # :248  dòng vỡ cột -> ĐẾM RIÊNG, in ra
if (($c[8] -replace '[*` ]','') -ne '') { $dup++; continue }   # :254  satellite -> BỎ
$tot++
if (($c[4] -replace '[*` ]','') -eq $OPEN) { $treo++ }         # :259
$m = [regex]::Match($c[5], '\d+')
if ($m.Success -and [int]$m.Value -ge 2) { $nhac2++ }          # :261  NGƯỠNG >=2
```

Đối chiếu từng khoản luật:

| khoản | luật đòi | máy làm | phán |
|---|---|---|---|
| **P.1 đơn vị** | trừ theo **MỤC**, không theo **LẦN** | `:254` bỏ mọi dòng có `nhắc-lại-của` ⇒ cụm `YC-002`+3 dòng đính chính chỉ vào đếm **1 lần** | ✅ ĐÚNG |
| **P.2 nguồn** | đúng `so-yeu-cau-chu-du-an.md` | `:237` hard-code đúng đường dẫn đó, không tham số hoá được | ✅ ĐÚNG |
| **P.2 cột** | cột *số lần đã nhắc* | `$c[5]` = cột 5 của bảng 8 cột (split cho `$c[0]`=rỗng, `$c[1..8]`=8 cột) ⇒ đúng cột *số lần đã nhắc* | ✅ ĐÚNG |
| **ngưỡng ≥2** | mục nhắc đúng 1 lần **không** tính | `-ge 2` ở `:261` | ✅ ĐÚNG |
| **in điểm** | — | máy in **con số thô** (`nhac2+ K`), **không in điểm**, không áp công thức | ✅ không đụng P.7 |

Ba chi tiết cho thấy máy **không phải** bộ lọc-dòng vô tri, mà là bản mã hoá CÓ CHỦ ĐÍCH của chính luật:

1. `:249-253` comment ghi thẳng dấu vân tay của lỗi LẦN-vs-MỤC: *"ca 'nhắc 5 lần' mã hoá thành 5 dòng sẽ cho 4 dòng count>=2 — đúng con số mà luật gọi là SAI"*. Đây đúng ví dụ ở P.1.
2. `:228-230` tách **`chua-co-du-lieu`** (phép đo KHÔNG tồn tại) ⟂ **`treo 0 / nhac2+ 0`** (đo được, kết quả 0) — đúng ranh *chưa-có-dữ-liệu ⟂ đã-đo-ra-0*, chống "đèn xanh giả".
3. `:263-266` in kèm **MẪU SỐ** (`muc 22, gop 5 dong nhac-lai`) + đếm riêng `dong KHONG TACH DUOC COT` ⇒ người đọc kiểm được ĐƠN VỊ, dòng vỡ không bị nuốt im lặng.

🔸 **Điểm mù có thật của máy (nêu để lead biết, KHÔNG phải lỗi đếm):** vì `:254` `continue` TRƯỚC khi đọc `$c[5]`, máy **không bao giờ nhìn** cột *số lần đã nhắc* của dòng satellite. Số gõ trên dòng con là vô hình với máy. Nhưng đó là **đúng luật đã ký** (`so-yeu-cau…:30`) — luật bảo dòng con "đã tính ở mã gốc". Máy trung thành với luật; chỗ gãy nằm ở **DỮ LIỆU**, không ở máy.

**⇒ Trả lời câu 1: máy THI HÀNH ĐÚNG luật-đếm đã ký, cả 4 khoản.** Nó lọc-dòng, nhưng "lọc-dòng" ở đây CHÍNH LÀ luật `so-yeu-cau…:30`, không phải phép tắt của người viết script.

---

### 1-bis. Hai phép kiểm máy tao TỰ CHẠY (không tin lời kể)

**(a) Số tầng-1 có tái lập được HÔM NAY không?** — chống lớp *claim mạnh hơn việc đã làm*:

```
$ powershell -File scripts/nhip-no-probe.ps1
NHIP-NO: kiem light 3/6 deep 1/1 OVERDUE:deep | tran-bo-nho 2 over-cap l2idx 0 over
       | run-chua-gom 1 | pull-cach 1 ngay | so-yc treo 6 / nhac2+ 3 (muc 22, gop 5 dong nhac-lai)
```

⇒ **Khớp VERBATIM** dòng lead chép ở `:90`. Số tầng-1 là số **đo được lúc này**, không phải số nhớ lại.

**(b) Máy có đọc ĐÚNG CỘT trên MỌI dòng không?** — nếu một ô chứa ký tự `|` thì `-split '\|'` lệch chỉ số, `$c[5]`/`$c[8]` đọc nhầm cột mà vẫn ra một con số trông hợp lệ. Đo cả 27 dòng:

```
YC-001..YC-027  parts=10 TRÊN CẢ 27 DÒNG   (0 dòng lệch cột, 0 dòng $bad)
   cnt=[1]×20 · cnt=[4]×1 (YC-002) · cnt=[2]×3 (YC-010, YC-013, YC-018) · cnt=[-]×3
   sat=[] ×22  ·  sat=[YC-002]×3 · sat=[YC-008]×1 (YC-010) · sat=[YC-013]×1
```

⇒ Không dòng nào lệch cột ⇒ máy đọc đúng cột trên 100% dòng. Và **xác nhận độc lập phát hiện dữ-liệu của tầng-2**: `YC-010` đúng là satellite **DUY NHẤT** mang số (`cnt=[2]`) trong khi 4 satellite kia đều `—`, còn gốc `YC-008` đọc `1`.

---

## 2. Câu hỏi 2 — chệch-luật-thành-văn để bắt lỗi dữ liệu: có hợp luật P không?

**KHÔNG.** Nhưng phải nói cho đúng chỗ sai, vì tầng-2 làm đúng nhiều hơn sai.

**Tầng-2 KHÔNG phạm hai điều dễ tưởng nó phạm:**
- **Không đổi nguồn** (P.2): vẫn đúng tệp sổ đã ký, `Tệp vai đã dùng` liệt đúng 3 tệp, 0 nguồn ngoài.
- **Không đếm theo LẦN** (P.1): nó gộp `YC-008 ⊕ YC-010` thành **một** dòng, `YC-002` + 3 dòng đính chính thành **một**. Đơn vị vẫn là MỤC.

**Chỗ nó thật sự chệch = ĐẦU VÀO của phép đo, không phải đơn vị.**

P.2 ghim **cột** (*số lần đã nhắc*). Sổ `:28` ghim **dòng nào mang cột đó** cho một mục: *"Yêu-cầu bị nhắc lại KHÔNG được cấp mã mới — nó chỉ làm tăng cột số lần đã nhắc của **mã GỐC**."* ⇒ với mục `YC-008`, ô dữ-liệu hợp lệ là ô trên **dòng gốc** — và ô đó đọc **1**. Tầng-2 thay nó bằng số đọc từ dòng `YC-010`, tức một ô mà chính quy-ước mã hoá đặt **ngoài tập đầu vào**.

Hệ quả đo được, không phải chuyện câu chữ: **phép đếm thôi tái lập được từ nguồn đã ký.** Hai người đếm trung thực trên cùng một tệp ra 3 và 4 — đúng cái mà "nguồn ĐÃ KÝ" sinh ra để chặn. Nguồn ký không phải để đúng, nó để **ai đếm cũng ra một số**.

🔴 **Câu chốt:** tầng-2 tự viết ở `:44` *"Việc của chủ sổ: sửa `YC-008` cột nhắc → 2"*. Tức nó **biết** việc sửa thuộc người khác, nhưng đã **đếm trên trạng-thái TƯƠNG LAI** của nguồn — trạng-thái mà chủ sổ chưa viết. Đếm trên bản sổ chưa tồn tại là chệch luật, dù chệch về phía trung thực.

🔬 **Đối chiếu sắc nét ngay trong cùng file:** lead ghi ở `:94` *"Lead cũng chưa sửa sổ (sửa nguồn đếm giữa lúc đang đếm = làm hỏng phép đo)"*. Hai vai đứng trước **cùng một cám dỗ**; lead từ chối sửa **trên đĩa**, tầng-2 đã sửa **trong đầu** rồi đếm trên bản đã sửa. Cùng một hành vi, khác mỗi chỗ nó xảy ra.

**Đường đi đúng (giữ luật + không đánh rơi phát hiện):** đếm trên ô đã viết → **đồng thời** dựng cờ lỗi-dữ-liệu chặn riêng cho chủ sổ → chủ sổ lật ô → **cả hai tầng đếm lại**. Tầng-2 đã làm rất tốt vế cờ (`:23-44`, kèm hướng lệch và cả hai nhánh sửa); nó chỉ gộp nhầm vế sửa **vào trong con số**.

---

## 3. Câu hỏi 3 — soi 4 lỗi đếm điển hình

| # | lỗi điển hình | tầng-1 (lead + máy) | tầng-2 (`score-counter`) |
|---|---|---|---|
| 1 | trừ theo **LẦN** thay vì **MỤC** | ✅ KHÔNG — `:254` bỏ satellite; cụm `YC-002` (nhắc 4, 3 dòng con) vào đếm đúng **1** | ✅ KHÔNG — gộp `YC-008⊕YC-010` = 1 mục, `YC-002` = 1 mục |
| 2 | đổi nguồn đếm khỏi sổ đã ký | ✅ KHÔNG — `:237` hard-code đúng sổ | ✅ KHÔNG — đúng sổ, 0 nguồn ngoài. *(Chệch của nó là đổi **ô đầu vào TRONG** nguồn — lớp khác, xem §2; tao không nong lỗi này cho vừa khuôn lỗi 2.)* |
| 3 | tính cả mục nhắc **đúng 1 lần** | ✅ KHÔNG — `-ge 2` ở `:261` | 🔴 **CÓ (theo hiệu-lực)** — mục `YC-008` có ô *số lần đã nhắc* trên **dòng gốc đọc `1`** đã được nhận vào tập ≥2. Ngưỡng ≥2 bị áp lên một giá-trị **SUY RA**, không phải giá-trị **ĐÃ VIẾT** |
| 4 | in điểm khi sổ còn thưa | ✅ KHÔNG — lead chỉ phát **số đếm** ("3 mục"), **không** in điểm, không áp công thức | 🔴 **CÓ** — `:10` phát `SCORE-T2: 6`. Xem §4 |

---

## 4. Câu hỏi 4 — lập luận "điều-kiện-kích-hoạt của P.7 đã FALSE" có đúng PHÉP ĐO không?

**KHÔNG.** Và tao chấm **phép đo**, không chạm vế thẩm-quyền (tuyên gỡ mặc định đúng là việc chủ dự án — chỗ đó tầng-2 nhận định ĐÚNG). Ba chân của lập luận, cả ba đều hỏng ở tầng phép-đo:

**(a) Đổi VỊ-TỪ, rồi vị-từ mới lại VÒNG TRÒN.**
Vị-từ của P.7 là **"sổ đủ dày"**. Tầng-2 thay bằng *lý do* của luật (*"nguồn thưa thì máy luôn cho 10/10"*) rồi đo **độ bão hoà**. Nhưng phép thử bão hoà đọc **KẾT QUẢ của công thức** để quyết định có được **in kết quả** hay không. Bất kỳ sổ nào có **≥1** mục lặp đều qua cửa đó. Một cái van mà **không bao giờ đóng được** kể từ khi có đúng một mục lặp thì nó **rỗng**, chứ không phải **đã thoả**.

**(b) Ô baseline `@S181` SAI so với chính nguồn đã ký — và sai đúng chiều có lợi cho việc in.**
Bảng `:50-57` có một hàng duy nhất nói về đúng cái hỏng mà P.7 gọi tên: *"công thức nhả ra | @S181: **10/10 — bão hoà**"*.
Nguồn đã ký `so-yeu-cau…:64` chép: *"Vai tầng-2 `score-counter` đếm độc lập ra **1 mục**"* @S181. Đếm ra 1 mục ⇒ công thức ở S181 **KHÔNG** ở mức bão hoà 10/10.
⇒ Vậy mà @S181 chính vai này vẫn trả `KHÔNG ĐO ĐƯỢC` — **đúng luật**. Nghĩa là **"không bão hoà" CHƯA BAO GIỜ là tiêu chí gỡ mặc định**. Ô baseline hỏng làm sập cả cột so sánh.

**(c) Bỏ sót một điều-kiện chặn THỨ HAI, còn sống, và ĐO ĐƯỢC là CHƯA THOẢ.**
Tầng-2 khẳng định ở `:48`: *"Tiêu chí vận hành **duy nhất** = lý do ở PHẦN P.7"*. Khẳng định này **sai như một phép đo**. Trong chính `docs/governance/`, khoản **A8** đang nằm ở §3 *"Khoản CHƯA ĐO"* — [`adap-upgrade-pack-tracking.md:68`](../../../docs/governance/adap-upgrade-pack-tracking.md):

> **A8 — tỉ lệ phủ sóng.** Bao nhiêu tin của chủ dự án đã được bắt vào nguồn đếm, **trên tổng số tin thật**. Chưa có vật tương đương ở SE nên **chưa xác định được mẫu số**. Chừng nào chưa có tỉ lệ này thì khối chấm điểm **phải in "KHÔNG ĐO ĐƯỢC" và cấm in điểm.**

🔴 **A8 nằm trên TRỤC KHÁC HẲN trục tầng-2 đã đo.** Toàn bộ bảng "đủ dày" của nó — 22 mục · 4 ngày · 7 nhãn phiên · 4 cụm lặp · 2/3 khối — đều là số đo **TỬ SỐ** (*trong sổ có bao nhiêu*). A8 hỏi **MẪU SỐ** (*ngoài kia anh đã nói bao nhiêu tin, bắt được mấy phần*). **Tử số phình lên không nói được gì về một tỉ lệ mà mẫu số chưa xác định.** Repo đã đặt tên sẵn cho lớp này: `docs/governance/ritual-labels.md:100` — *"Con số tổng đóng vai đã-phủ-hết trong khi mẫu số lệch."*

**(d) Mâu thuẫn nội bộ ngay trong một artifact.** `:63` nhận: *"chưa ai định nghĩa ngưỡng và **chưa ai tuyên gỡ**"* — trong khi `:10` đã phát `SCORE-T2: 6`. Thừa nhận mặc định **còn nguyên hiệu lực** rồi phát ra đúng con số mà mặc định đó cấm phát.

🔸 **Vế KHÔNG tính là lỗi, ghi rõ để lead khỏi phạt oan:** *"phép thử động cơ"* ở `:61` (hôm nay từ chối là nhánh **êm** ⇒ không lấy nhánh êm) là kỷ luật liêm chính tốt và tao tin nó thật lòng. Nhưng **giá của một nhánh không phải bằng chứng về giá trị chân lý của vị-từ**. Nó giải thích vì sao một vị-từ **không quyết định được** lại bị quyết, chứ không làm cho phép quyết đó đúng.

---

## 5. Tổng kết — tao chấm PHÉP ĐẾM, không chấm KẾT QUẢ

```
SCORE-AUDIT: SAI-TẦNG-2 — 2 loi dem
```

🔴 **File này KHÔNG chứa con điểm nào của tầng-3, và KHÔNG đề xuất một điểm khác** (P.3). Tao **không** phán 3 hay 4 là số đúng — tao phán **phép đếm nào khớp luật đã ký**, rồi tầng-1/tầng-2 đếm lại.

### Hai lỗi đếm — tầng nào · bước nào · vì sao sai

| # | tầng | bước | vì sao SAI |
|---|---|---|---|
| **L1** | **2** | chọn **ô đầu vào** cho mục `YC-008` | Lấy số `2` từ **dòng satellite `YC-010`** — ô mà sổ `:30` loại khỏi tập đầu vào và sổ `:28` quy về dòng **mã GỐC** (đọc `1`). Ngưỡng ≥2 bị áp lên giá-trị **suy ra**, không phải giá-trị **đã viết** ⇒ phép đếm **không tái lập được** từ nguồn đã ký (2 người đếm trung thực ra 3 và 4). Tự khai ở `:44` rằng việc sửa thuộc **chủ sổ**, rồi vẫn đếm trên bản sổ **chưa được sửa đó** = đếm trên trạng-thái tương lai của nguồn. *(Lỗi điển hình #3 — theo hiệu lực.)* |
| **L2** | **2** | đánh giá **điều-kiện P.7** rồi in `SCORE-T2: 6` | Ba chân đều hỏng: **(a)** thay vị-từ *"sổ đủ dày"* bằng phép thử **bão hoà**, mà phép thử này đọc chính **kết quả** công thức ⇒ **vòng tròn**, sổ nào có ≥1 mục lặp cũng qua ⇒ van **rỗng**, không phải **đã thoả**. **(b)** ô baseline *"@S181 = 10/10 bão hoà"* **trái nguồn đã ký** (`sổ:64`: @S181 tầng-2 đếm **1 mục** ⇒ không bão hoà) — mà @S181 vai vẫn trả `KHÔNG ĐO ĐƯỢC` đúng luật ⇒ *"không bão hoà"* chưa bao giờ là tiêu chí gỡ. **(c)** khai *"tiêu chí vận hành duy nhất"* trong khi khoản **A8** (`adap-upgrade-pack-tracking.md:68`) vẫn nằm ở §3 **CHƯA ĐO** và ra lệnh *"phải in KHÔNG ĐO ĐƯỢC và cấm in điểm"* chừng nào **mẫu số** chưa xác định — A8 đo **tỉ lệ phủ sóng**, mọi số của tầng-2 đều là **tử số**. *(Lỗi điển hình #4.)* |

### Tầng-1 — **0 lỗi đếm**

4/4 khoản khớp: đơn vị **MỤC** (`:254`) · nguồn đúng sổ ký (`:237`) · đúng cột *số lần đã nhắc* (`$c[5]`) · ngưỡng `-ge 2` (`:261`). Số **tái lập được hôm nay** (tao chạy lại, khớp verbatim). Và lead phát **số đếm**, **không** phát điểm ⇒ không đụng lệnh cấm in điểm của P.7.
🔸 Máy có **điểm mù thật** (không bao giờ nhìn cột số-lần của dòng satellite) — nhưng đó **đúng bằng** luật `sổ:30`. Điểm mù nằm ở **luật + dữ liệu**, không ở người đếm.

### Việc phải làm (KHÔNG phải việc của tầng-3)

1. **Chủ sổ lật ô** cụm `YC-008`/`YC-010` cho khớp quy-ước `sổ:28` — sửa **trên đĩa**, không sửa trong đầu người đếm. Sửa xong thì máy tự nhìn thấy.
2. **Sau khi sổ được sửa: tầng-1 và tầng-2 ĐẾM LẠI.** Tao cố ý **không** nói con số hậu-sửa là bao nhiêu.
3. **P.7 vẫn còn hiệu lực cho tới khi chủ dự án tuyên gỡ** — và giờ có **hai** khoá, không phải một: *"sổ đủ dày"* (chưa có ngưỡng) **+ A8** *"mẫu số tỉ lệ phủ sóng"* (chưa xác định). Muốn gỡ thì gỡ **cả hai**, đúng người gỡ.
4. **Đường ghi lại (P.5):** lead ghi `docs/governance/error-ledger.md` — **TẦNG-2 SAI**, nhãn *chấm sai*, 2 lỗi L1+L2.
   🔴 **CẤM nhét nhãn *chấm sai* vào `lead_self_audit.flag_classes`** — tập ĐÃ NIÊM PHONG theo P3=B (khoá `_sealed_P3B_S181`); `h24-signal-write.ps1` sẽ từ chối **exit 2**. Chỉ chủ dự án mở tập.

### Ghi công cho tầng-2 (để lead phạt đúng liều, đừng phạt lây)

Nó **khai to** chỗ mình chệch (`:23-44`) thay vì giấu — không có lời khai đó thì lỗi L1 **không ai soi ra được**, vì con số 4 tự nó trông hoàn toàn hợp lệ. Nó **giữ đúng đơn vị MỤC**, **không đổi nguồn**, chọn **nhánh tốn điểm hơn** khi gặp dữ-liệu mờ, phát kèm **số đếm thô** `SCORE-COUNT: 4 mục nhắc≥2` (đây mới là dạng output hợp luật), và **từ chối lục run-file** để khỏi đập vào số tầng-1 — đúng ranh cứng P.3. **Phát hiện lỗi dữ-liệu của nó là ĐÚNG và tao xác nhận độc lập bằng máy** (`YC-010` là satellite duy nhất mang số trong 5). Sai của nó không phải sai ở mắt nhìn, mà ở chỗ **đổ phát hiện vào trong con số** thay vì để bên cạnh nó.

### 🔸 Một lỗ cấu trúc cho lead biết (KHÔNG phải lỗi của ai)

Ranh cứng P.3 *"tầng-2 KHÔNG được xem điểm tầng-1"* nay **không cưỡng chế được bằng cách giấu pin nữa**: chính **nguồn đã ký** mang sẵn số tầng-1 của lượt trước — `so-yeu-cau…:64` viết *"Lead đếm **3 mục**"*. Vai tầng-2 nào đọc sổ cũng đập vào con số đó. Tầng-2 lượt này đã **tự khai** trùng hợp ấy (`:77`) và tao chấp nhận lời khai (con 3 lượt trước đi kèm con 1 của tầng-2, khác hẳn cặp 3/4 hôm nay). Nhưng cơ-chế cách-ly giờ **hở theo thiết kế** — muốn bịt thì phải xử ở chỗ khác, không phải bằng việc cấp pin sạch.

