# VERDICT: PASS_WITH_FIXES  (lăng-kính C7 / Axis A)

Core C7 (viết luật + reword + B1-point + fault-inject) KHỚP canonical hub-reply Câu 1.
NHƯNG 1 must-fix BLOCKING: "đính-chính 4 surface→2" (spec step-4 / A2) FACTUALLY SAI —
spec nhầm `nhip-no-probe.ps1` với `distill-shard-probe.ps1`.

## Findings

### [CRITICAL / must-fix BLOCKING] spec:15 + A2 (:53) — "4 surface → 2" là SAI, phải DROP
Spec:15 khẳng-định: header `nhip-no-probe.ps1:6-7` "4 surface" SAI, "thực chỉ **2** (pause:44 + tiep:112;
session-start/end gọi `distill-shard-probe` script KHÁC)". → **False premise = conflation 2 script.**

Bằng-chứng đĩa (verified live):
- `scripts/nhip-no-probe.ps1:6-8` (header): *"Called (never inlined) by the session command surfaces
  (/pause, /tiep, session-start, session-end)"* → header tự khai **4**, và **4 đó ĐÚNG**.
- 4 caller THẬT của `nhip-no-probe.ps1` (grep + Read xác nhận từng dòng):
  1. `pause.md:44` → `powershell.exe ... -File scripts/nhip-no-probe.ps1`
  2. `tiep.md:112` → `powershell.exe ... -File scripts/nhip-no-probe.ps1`
  3. `session-start.md:216` → khối "(e) BÁO dòng-nợ 4-vế" gọi `... -File scripts/nhip-no-probe.ps1` (LIVE)
  4. `session-end.md:104` → khối "(i) BÁO dòng-nợ 4-vế" gọi `... -File scripts/nhip-no-probe.ps1` (LIVE)
  (`session-end.md:131` chỉ là REFERENCE "khối (c) đã chạy ... nhip-no-probe" — KHÔNG phải caller thứ-5.)
- `distill-shard-probe.ps1` là script KHÁC HẲN, mục-đích KHÁC (Sleep-check, đếm shard pending),
  gọi ở `session-start.md:135`. Spec-author thấy "session-start/end gọi distill-shard-probe" (ĐÚNG, cho
  sleep-check) rồi suy sai "⇒ session-start/end KHÔNG gọi nhip-no-probe" (SAI — gọi CẢ HAI, khác mục-đích).
- `session-model-se-draft.md:34` (path THẬT = `docs/governance/`, KHÔNG `.claude/governance/`):
  `| NHIP-NO probe 4-vế | 4 điểm lệnh | GIỮ per-điểm-dừng |` → "4 điểm lệnh" cũng **ĐÚNG**, KHÔNG stale.

Hệ-quả nếu implement A2:
- Ghi 1 FALSEHOOD vào 2 file (header script + draft) — đổi con-số ĐÚNG "4" thành SAI "2".
- Acceptance A2 grep `"4 surface\|4 điểm lệnh" = 0 hit` = **anti-teeth / Goodhart**: cổng PASS bằng cách
  XÓA thông-tin ĐÚNG, không verify tính-đúng. Đúng lớp "vá bằng rời tập-đo" mà governance chặn.
- run.md:9 (scratch) mang cùng lỗi ("header '4 surface' SAI (chỉ 2)") — nếu implementer re-derive từ run.md
  sẽ nhân lỗi. Cảnh-báo implementer BỎ luôn.

**SỬA:** DROP hẳn spec step-4 + xoá vế stale-fix trong A2. GIỮ NGUYÊN "4" ở cả header lẫn draft:34
(chúng đang đúng). Nếu muốn rõ hơn, header CÓ THỂ ghi "4 surfaces (2 stop-point pause/tiep + 2 bookend
session-start/end)" — nhưng CON-SỐ vẫn là **4**, không phải 2. A2 rút gọn còn: "0 chỉnh — 4 đã đúng".

### [PASS] spec:12 — nhà-luật §N chọn ĐÚNG (verify-point 1)
Law-home = `harness-11-engine.md §N` (thêm N.x "C7 điểm-dừng-rẻ", cạnh WAL H22). CLAUDE.md xác nhận
WAL H22 sống ở "PHẦN N" của engine ⇒ đặt C7 kề đó hợp-lý. pause.md/tiep.md chỉ TRỎ về §N (spec:14, B1 —
KHÔNG chép predicate 2 nơi). ĐÚNG chỗ: engine (governance floor) chứ KHÔNG nhét vào command. Khớp canonical.
🔸 minor: "§N" còn placeholder — implementer phải chốt số §; nhưng hướng đúng.

### [PASS] spec:11 + :16 — code script KHÔNG đổi (verify-point 4, phần code)
`nhip-no-probe.ps1:203-208`: `catch { Write-Host 'probe-loi (khong chan)' }` → `exit 0`. Thoả vế-iv
non-blocking rồi. Spec:11 "Script THỎA 4-vế rồi" + spec:16 "script KHÔNG đổi code" = ĐÚNG. KHÔNG đổi
interpreter sang python (FORM, hub KHÔNG đòi) — death-path spec:17 bắt đúng.
⚠️ NHƯNG spec:15 lại bảo "Sửa header → 2" = 1 EDIT vào script (comment), VÀ edit đó SAI (xem CRITICAL).
Kết-luận verify-4: logic KHÔNG đổi (đúng); header-edit CÓ nhưng phải DROP.

## Acceptance-teeth-check
| # | Có răng? | Ghi-chú |
|---|---|---|
| A1 C7 luật | ✅ teeth | verify tồn-tại mục C7 4-vế + grep 0-chép-2-nơi (anti-drift B1 thật). 🔸 minor: chưa verify WORDING predicate khớp canonical FLOOR (read-only + non-blocking + **gỡ-được-không-hậu-quả**) + tách FLOOR/FORM — nên thêm để chặn "viết luật nhưng lệch floor". |
| A2 stale-fix | ❌ ANTI-TEETH | Goodhart: PASS = xoá info ĐÚNG. Tệ hơn vô-dụng — nó THƯỞNG cho việc làm doc SAI. Phải DROP (xem CRITICAL). |
| A3 fault-inject | ✅ teeth | falsifiable: probe lỗi → in `probe-loi` + hoàn-tất, KHÔNG hang; "chạy thật KHÔNG happy-path". Khớp hub "vế-iv LOAD-BEARING + chiều-lỗi bắt-buộc". 🔸 minor: chưa nêu VECTOR inject (bad `-RepoRoot` / JSON hỏng / kill mid-run) — S135 precedent dùng `-RepoRoot` sai → probe-loi exit0; nên chốt vector để đảm-bảo răng. |

## Risk/gap
- **Death-path THIẾU (spec:17):** liệt 3 (đừng python · đừng cấm-tất · đừng chép predicate) — ĐÚNG nhưng
  SÓT cái quan-trọng nhất mà lỗi này phơi ra: *"đừng 'sửa' header 4→2 — nó ĐÚNG, đừng nhầm với
  distill-shard-probe"*. Bổ-sung death-path này.
- **Fault-inject chiều-lỗi teeth-thật:** script đã `exit 0` + catch sẵn ⇒ A3 chỉ CONFIRM behavior hiện-có
  (đúng ý hub "verify-before-trust"). Nhưng "KHÔNG hang" chỉ thật-sự có răng nếu inject thứ CÓ-THỂ hang;
  script chỉ đọc JSON/bytes/dirs (bounded, no net/lock/loop) ⇒ hang-risk thấp, exception-path là proxy hợp-lý.
  OK, chỉ cần chốt vector (minor).
- **A1 chưa neo FLOOR-wording:** rủi-ro implementer viết "4-vế" nhưng chữ lệch canonical (vd bỏ
  "gỡ-được-không-hậu-quả" = mất chính phần LOAD-BEARING hub nhấn). Thêm 1 vế acceptance so 3 tính-chất FLOOR.

## Verdict recap (Axis A / C7)
- (1) law-home §N: ✅ ĐÚNG (engine, không command).
- (2) "4→2": ❌ SAI — thực **4** (verified 4 caller). CRITICAL, DROP step-4 + A2-stale-clause.
- (3) fault-inject chiều-lỗi: ✅ có răng (minor: chốt vector).
- (4) đổi code script: logic KHÔNG (đúng); header-edit CÓ nhưng SAI → DROP.
Core C7 sound; chặn ở 1 must-fix conflation. → PASS_WITH_FIXES.
