Files
solution-erp/.claude/workflows/runs/2026-07-22-S144-adap-dot-11/sub-reviewer-2.md
pqhuy1987 8b6df0a396
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m25s
[CLAUDE] Docs: S146 closeout — session-model 3 owner-decision + hook 4-path + H24 auto
Ap spec-apply-hub-s145-v2 (5 axis, governance-only: 0 prod-code, 0 migration).
Workflow S145 chet giua chung -> /tiep §4 relaunch-cat-gon wf_3d803740-41d 3/3 DONE.

Owner-decision @S146:
- session_ctx_kb = 64 TUONG-MINH (giu nguyen caveat ghost-wire: 0 reader)
- session-model: scaffold IDEMPOTENT (tach cap-SO vs tao-THU-MUC) · closed.md WIRE
  (session-end §6.3-bis) · V2 AUTO (go cong NGUOI, GIU cong NHIP 6/15/3)

Landed: C7 §N.8 predicate 4-ve · hook wal-flush.ps1 4 path (+.claude/sessions/)
· San-3 tin-hieu ⑤ + ORPHAN-L · D2 KIEM end-only · §L.c completeness-gate co RANG.
LIVE-VERIFY hook 4-path PASS repo THAT (da7ee8a). Session-model chay TRON VONG dau
tien: pause-S146 -> resume-S146 -> ORPHAN-L can so.

H24 force-fire (P=8 pause >= 1, luat auto moi): 2 vai + h24-audit -> 7 FLAG, va het:
- sweep-consent sot 6 site (h24-audit.md:4 = frontmatter description)
- closed.md wired-but-declared-unwired (ghost-wire CHIEU NGUOC)
- owner-decision [7] BI GHI DE do tai-dung slot-index -> mat uy-quyen push
3/3 vai lane-H24 garble #53: ghi-dia-SOM cuu tron, ghi-MUON mat trang.

So: orphan run-folder 3->0 · carry 14->20 (co tag [carry:*]) · +E-013 +E-014
error-ledger · +memory feedback_absence_looks_like_clean · .gitignore +lock file.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 00:16:37 +07:00

103 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# sub-reviewer-2 — R3 "acceptance-teeth" (S144 adap dot-11)
> Vai: reviewer adversarial. Câu hỏi duy nhất: **qua được C1→C13 thì có NGHĨA LÝ gì, hay chỉ xanh-vì-mù?**
> Khung áp: `broadcasts/inbox/2026-07-21-Governance-eval-quality-audit-ra-thuoc-eval-cua-eval.md` (gọi tắt `eval:`).
> Đối tượng chấm: `.claude/workflows/runs/2026-07-22-S144-adap-dot-11/spec-adap-dot-11-22-07-2026.md` §③ C1→C13 (`:149-172`).
## 0. VERDICT — `PASS_WITH_FIXES`
**4 răng-thật · 4 nửa-răng · 5 nghi-thức-rỗng.** Spec đáng làm, nhưng **thước đo của nó yếu hơn việc nó mô tả**.
Hai mục phải sửa trước khi worker chạy:
- **C6 rỗng-hoàn-toàn** — tập-đo có **0 phần tử**; đạt mà không cần sửa gì; sweep này **đã chạy rồi** ở wave-3 với pattern RỘNG HƠN.
- **C11 bất-khả-thi** — muốn `grep=0` phải **xoá một luật owner đang GIỮ**, trái chính luật-chung #6 của spec.
Một mục **độc-hại**: **C12** đẩy em-main viết vào `CLAUDE.md` một claim **stale-by-construction**.
## 1. Ground-truth đã đo (lượt 3-5, re-đo từ đĩa — không chép spec)
| Neo | Lệnh | Kết quả |
|---|---|---|
| `hmw.js:225` | `grep -n "filter(Boolean)"` | `return results.filter(Boolean)` — XÁC NHẬN spec ①(2) đúng |
| `hmw.js:114-116` | `grep "cap c"` | `S4 — số task THOẢI MÁI … KHÔNG cap cứng (soft notice only)`; ngưỡng `>16` chỉ `log()` ⇒ C8 chưa có clamp: ĐÚNG |
| `hmw.js:124-125` | idem | `throw có thể bị nuốt thành null = STOP-SILENT, tệ hơn` + `(trước parallel) — halt KHÔNG phụ-thuộc semantics parallel()` |
| `fable-clone.md` (70 dòng) | `grep "lượt"` | **KHÔNG có** chuỗi `trần lượt` (hiện = 0) |
| `.claude/agents/` | `ls` | 18 mục `README.md` = **17 vai** ⇒ spec P2-2 "roster nay 17" **ĐÚNG**; `harness-audit.md` **đã tồn tại** ⇒ C4 không phải đẻ vai mới |
| **C6 tập-đo** | `grep -rn "máy sẽ" docs/governance/ .claude/` (trừ `runs/`) | **0 hit** |
| C6 toàn repo | `grep -rn "máy sẽ" --include="*.md"` (trừ `runs/`) | **7 hit — 100% nằm trong `broadcasts/`, 100% là use⟂mention** (câu *định nghĩa* luật, không phải lời hứa) |
| C6 rủi-ro thật | `grep "detector\|guard\|hook"``chặn\|quét\|bắt\|đảm` trong `docs/governance/*.md` | **19 hit****ngoài** tập-đo của C6 |
| **C6 trùng-việc** | `broadcasts/outbox/ai_infra/2026-07-18-se-to-ai_infra-adap-wave-3-ban-17-07-bao-nac.md:26` | *"Grep lớp câu 'máy sẽ quét / detector phủ / đã fault-inject' trên governance SE ra **3 câu** … cả 3 trace được vào mã đang chạy … **Không câu nào phải hạ chữ**"* |
| **C12 tiền-đề** | `grep -n "HMW\|posture\|ensemble" CLAUDE.md docs/CLAUDE.md` | **0 hit** (CLAUDE.md 147 dòng) ⇒ phát hiện P3-3 của spec **ĐÚNG** |
| **C12 bẫy** | `fable-clone.md:16` | *"Hiệu-lực CHỈ lượt đó — KHÔNG còn 'về mặc-định', KHÔNG marker, KHÔNG persist"* |
| **C11 xung-đột** | `.claude/commands/sleep-recovery-memory-l2.md:52` | *"**INFORM 7-ngày GIỮ** (quyền owner cục-bộ, B1 §3.4; cấm-là-cấm-hub-phát-chuẩn)"* |
| C11 over-broad | `grep -c "ngày"` file trên | **6** — phần lớn văn xuôi (`:68/:76/:80`), KHÔNG phải trigger |
| **C7 đường pause** | `pause.md:44` (53 dòng) | đã gọi `powershell.exe … scripts/nhip-no-probe.ps1` **ngay trong** đường dừng |
| C10 mẫu-số | `ls scripts/` | ~10 thước: `governance-detectors` · `memory-archive-gate` · `memory-selfimprove-audit` · `mfe-eval` · `applied-eval-nokey` · `agent-frontmatter-eol-check` · `crystallized-backfill` · `nhip-no-probe` · `measure-agent-memory` · `deps-audit` |
| C5 máy nền | idem | `scripts/mfe-eval.ps1` + `scripts/applied-eval-nokey.ps1` **có thật** |
## 2. Bảng C1→C13 — 4 câu hub (`eval:15-24`)
| # | Lớp đo (`eval:20`) | Goodhart-able? — đường lách cụ thể | Pos/Neg-control (`eval:31`) | Bỏ thì lọt gì (`eval:22`) | **Verdict** |
|---|---|---|---|---|---|
| **C1** | integrity→**efficacy** | Khó. Hardcode `log('lane CHẾT')` qua được vế dương nhưng **trượt vế âm** | **CÓ CẢ 2** (null→phải có · sạch→phải không) + `node --check` | Đúng ca đã cắn hôm nay: 3/5 lane chết, lead thấy "sạch". **Active, không dormant** | **RĂNG THẬT** |
| **C2** | **activity** (2/3 vế không đo được) | **CAO**`grep -c 'trần lượt' ≥1` hiện = 0, gõ đúng cụm chữ là xong | KHÔNG | Lane chết vì cháy lượt — ca thật, nhưng **thước không quy được NHÂN**: marker C1 chỉ biết `null`, không biết *vì sao* | **NỬA-RỖNG** |
| **C3** | **activity**, tự-chấm | **CAO** — chấm chính label mình vừa viết, n=3, **không có artifact** (label panel ephemeral, `grep` không truy được; chỉ `hmw.js:9` là chuỗi tĩnh) | KHÔNG (thiếu ca label-hỏng-phải-trượt) | Ca thật có (`spec:67` `"Probe harness-eval alive"` thiếu pha+phiên) ⇒ **dormant-đúng-thiết-kế, thước hỏng** | **RỖNG** |
| **C4** | integrity→outcome | TRUNG BÌNH — re-check con số **dễ nhất**; **không cấm em-main tự kiểm vòng chính mình đo** (trái `m-3 no-self-exempt` S139) | Một nửa (thách-CLEAN ≥1 lens) | Vòng báo CLEAN sai — ca thật S143 (lead ĐO tốt nhưng ĐẾM-VỀ-MÌNH ~13%) | **NỬA-RĂNG** |
| **C5** | **efficacy** (nửa) | Vế `payload chứa literal 'FLOOR theo evidence'` = dán chuỗi | **CHỈ NEG, THIẾU POS** 🔴 — matcher **luôn** trả 0-hit qua neg-control **hoàn hảo** | Matcher rác báo APPLIED bừa | **NỬA-RĂNG** |
| **C6** | **activity, tập rỗng** | **TUYỆT ĐỐI** — tập-đo literal = **0/19**; và **rời-tập-đo** miễn phí: viết "hệ thống chặn X" là thoát | KHÔNG (không có câu-hứa-giả cắm vào) | **KHÔNG LỌT GÌ MỚI** — sweep rộng hơn đã chạy 3/3-sạch @wave-3 | **RỖNG HOÀN TOÀN** 🔴 |
| **C7** | **activity** | **CAO** — "đo wall-clock 1 lần, **ghi số**" **PASS ở MỌI giá trị** (`eval:21c` nhãn-hứa-không-ép). Tập cấm chỉ liệt "spawn-agent/quét-rộng" ⇒ `pause.md:44` gọi `powershell.exe` **lọt qua khe** | KHÔNG | Điểm dừng đắt lên — ràng buộc CỨNG `goi-chot:44` | **NỬA-RỖNG** |
| **C8** | integrity→efficacy | Khó — đòi **THROW**, `log` không giả được | **CÓ CẢ 2** (fault-inject 2 chiều) | `depth-axis` F1 trần cứng; hiện `hmw.js:114-116` = FAIL đo được | **RĂNG THẬT** |
| **C9** | activity + **mâu-thuẫn** | "cột đơn-vị hiện diện" = có cột là xong | KHÔNG | Bảng cost đóng băng ở 7 vai (roster thật 17) | **NỬA-RỖNG** — acceptance đòi *"trả lời được falsifier `depth-cost:59`"***chính spec `:103` khai falsifier "CHƯA ĐO ĐƯỢC"**, không nêu lối thoát |
| **C10** | activity + phép-thử thật | **CAO ở chỗ chọn mẫu** — "1 detector **bất kỳ**" trên **~10**; lựa chọn hợp lý = cái **đã** fault-inject (S138 13/13 · S143 7 ca) ⇒ **xanh chắc chắn, 0 thông tin về 9 cái kia**. Bảng "mỗi thước có verdict" = 100%-do-cấu-trúc (`eval:32`) | Có, nhưng **cỡ mẫu 1/10 tự chọn** | Thước xanh-vì-mù — chính bệnh hub tự bắt 17/18 | **NỬA-RĂNG** |
| **C11** | **activity, grep-vắng-mặt** | **TUYỆT ĐỐI** — grep-cho-VẮNG là dạng dễ lách nhất: đổi tên `ngày``chu-kỳ`/`d` là = 0, **hành vi y nguyên**. Thêm: phạm vi "trigger" **không nêu file** ⇒ người chấm tự chọn | KHÔNG | Proxy-giả theo tuổi | **RỖNG + BẤT-KHẢ-THI** 🔴 — đạt `=0` buộc **xoá luật owner đang GIỮ** (`sleep-…l2.md:52`), trái **luật-chung #6****O-1** của chính spec; lại **over-broad**: 6 chữ "ngày" phần lớn là văn xuôi ⇒ đỏ-giả vĩnh viễn |
| **C12** | **activity** (đo presence, mục tiêu là **use**) | **CAO** — thêm 1 dòng là xong (hiện 0 hit) | KHÔNG (không có phép thử "phiên mới có THẤY không") | Posture vô hình với phiên mới | **RỖNG + ĐỘC-HẠI** 🔴 — `fable-clone.md:16` nói posture **KHÔNG persist, chỉ sống trong lượt**; ghi dòng thường-trực vào `CLAUDE.md` (load MỌI phiên) = **đẻ ghost-wire mới**, đúng lớp SE đang trả nợ |
| **C13** | integrity (per-dòng) | TRUNG BÌNH — *"lý-do-không-làm"***cửa thoát vô hạn**: mọi dòng đều đạt được bằng một lý do ⇒ **không bao giờ đỏ** | KHÔNG | Báo số tổng che dòng sót (bài `meta-count` S119) | **NỬA-RĂNG** — cấu trúc đúng, **ngưỡng vắng** |
## 3. Câu chốt A — răng THẬT ⟂ nghi thức rỗng
- **RĂNG THẬT (2):** **C1**, **C8**. Cả hai: fault-inject **2 chiều** + đòi **hình dạng mã** (`THROW``log`) mà lời-nói không giả được. Đây là chỗ SE **đi trước hub** (`eval:31` hub 17/18 thiếu positive-control) — giữ nguyên.
- **NỬA-RĂNG (4):** **C4**, **C5**, **C10**, **C13** — có lõi thật, hỏng ở **cỡ mẫu / thiếu nửa control / thiếu ngưỡng**.
- **NGHI THỨC RỖNG (5):** **C2**, **C3**, **C6**, **C11**, **C12**.
🔴 Nguy nhất **không phải mục thiếu, mà là C6** — nó **trông nghiêm nhất** (binding floor, giao cho vai `reviewer`, có "đếm trước/sau") nhưng **tập-đo rỗng + việc đã làm rồi**. Qua C6 sẽ tạo cảm giác "đã phủ lời-hứa-máy" trong khi **19 câu** họ-diễn-đạt chưa ai sờ tới.
## 4. Câu chốt B — phép thử 2 (`eval:52`): bịa input chắc-chắn-sai
### Ca 1 — bịa cho **C6** ⇒ **KHÔNG ĐỎ** (xanh-vì-mù, đã chứng minh bằng số)
Bịa: chèn vào `docs/governance/harness-11-engine.md` câu *"Cổng nén-kết-tinh **tự-động quét** mọi shard mới và **chặn** shard thiếu guard."* — **không có mã nào làm việc đó**.
Chạy acceptance C6 (`grep "máy sẽ"` trên governance SE) → **0 hit → BÁO XANH**. Câu bịa **lọt trọn**.
Bằng chứng hậu thuẫn: literal `"máy sẽ"` trong `docs/governance/` = **0**, trong khi họ-diễn-đạt cùng nghĩa = **19**. ⇒ **C6 không có cách nào đỏ** trên đúng loại lỗi nó sinh ra để bắt.
### Ca 2 — bịa cho **C1** ⇒ **ĐỎ ĐÚNG** (răng thật)
Bịa: sửa `hmw.js` thành in **vô điều kiện** `log('hmw: 0/0 lane CHẾT (null) — KHÔNG phải "sạch"')`.
- Vế dương (ép 1 lane null → output phải chứa `lane CHẾT`) → **XANH** (lách được nếu chỉ có 1 chiều).
- Vế âm (lane sạch → **KHÔNG** được chứa) → **ĐỎ**. ⇒ C1 **bịt được** ca giả này nhờ **2 chiều**.
### Ca 3 (bonus) — **C11** ⇒ **KHÔNG ĐỎ**
Đổi `≥ 7 (ngày)` thành `≥ 7 (chu-kỳ)``grep 'ngày\|7 day'` = **0 → XANH**, trigger **vẫn đếm tuổi y hệt**. Rời-tập-đo thuần tuý.
## 5. Đề xuất SIẾT (acceptance mới — mô tả tiêu chí, KHÔNG viết mã hộ)
| # | Siết thành |
|---|---|
| **C6** | Bỏ neo literal. Tập-đo = **danh sách liệt kê tường minh** các câu-hứa-năng-lực trong `docs/governance/*.md` (mẫu số công bố, hiện đo được **19**), mỗi câu một dòng disposition {mã + lệnh + positive-control ⟂ đã hạ thành dự-định}. **Bắt buộc positive-control**: cắm **1 câu-hứa-giả** vào cây tạm → sweep **phải** nhặt ra. Và tách bạch **use⟂mention** (7 hit hiện có đều là *mention*, không được tính là vi phạm). Deliverable thật của `goi-chot:52`**câu hỏi thường-trực ở cửa review**, không phải một lần quét ⇒ acceptance nên đo *gate đã cài*, không đo *đã quét xong*. |
| **C11** | **Gỡ khỏi phạm vi em-main** hoặc viết lại: `grep=0` **mâu thuẫn** với `sleep-…l2.md:52` (owner GIỮ 7-ngày) + luật-chung #6 + O-1. Nếu giữ: đo **hành vi** (bơm trạng thái *0 shard chưa-gist nhưng đã 30 ngày* → trigger **phải im**; *3 shard chưa-gist, 0 ngày***phải kêu**) thay vì grep chữ. |
| **C12** | Bỏ vế "CLAUDE.md có dòng nêu posture **đang hiệu lực**" (stale-by-construction vs `fable-clone.md:16`). Thay bằng: `CLAUDE.md` trỏ **nơi tra posture**, và phép thử **use**: phiên mới chỉ đọc file luật có **nói đúng posture hiện hành** không (1 ca dương + 1 ca âm). |
| **C7** | Thêm **ngưỡng** (số của **owner** — O-gated, em không tự đặt) để "rẻ" có thể ĐỎ; đổi tập cấm từ liệt-kê-danh-mục sang **bất kỳ tiến-trình ngoài nào** trong đường dừng (nếu không, `pause.md:44` lọt khe). |
| **C10** | Cỡ mẫu **≥3, và ưu tiên thước CHƯA từng fault-inject** (loại trừ các ca S138/S143 đã xanh) — nếu không, phép-thử-2 xanh-do-chọn-mẫu. Bỏ vế "mỗi thước có verdict" khỏi headline (100% do cấu trúc, `eval:32`). |
| **C5** | Thêm **positive-control**: id THẬT đã biết → **phải** ra APPLIED. Không có vế này, matcher chết (luôn 0-hit) đạt C5 tuyệt đối. |
| **C2** | Bỏ `grep -c 'trần lượt'` khỏi acceptance (đếm chữ). Giữ vế "≤3 file/lane" nhưng **khai rõ nó chỉ đo được ở run KẾ** — không phải cổng của run này. Muốn "0 lane chết **vì cháy lượt**" đo được thì cần tín hiệu **phân biệt nguyên nhân**, C1 hiện chỉ biết `null`. |
| **C3** | Thêm **negative-control**: cắm 1 label thiếu {pha·phiên} → phép đọc-lại **phải trượt**. Và neo **artifact** (label phải xuất hiện trong `runs/<id>/run.md`) — nếu không thì không tái-lập/không audit được. |
| **C4** | Cấm **tự-kiểm vòng chính mình đo** (`m-3 no-self-exempt` S139); nêu đích danh **con số** bị re-check phải là con số **có thể sai** (không phải hằng số hiển nhiên). |
| **C13** | "Lý-do-không-làm" phải kèm **phân loại** {owner-gated · defer-có-ngày · bác-bỏ-có-bằng-chứng} — nếu không, cửa thoát vô hạn. |
| **C9** | Gỡ mâu thuẫn: hoặc khai *"falsifier `depth-cost:59` vẫn CHƯA đo được, C9 chỉ đóng phần re-ground roster"*, hoặc nêu đơn-vị chung làm cho nó đo được. Không để acceptance đòi thứ chính spec khai bất-khả-đo. |
## 6. Công bằng (Smart-Friend guard — nói cả chỗ đúng)
- Spec **re-đo đúng** roster **17** (`ls .claude/agents/` = 18 README) — không chép số cũ.
- ①(2) `hmw.js:225`, `:114-116`, `:124-125` **khớp đĩa 3/3**.
- P3-3 phát hiện `CLAUDE.md` thiếu posture: **ĐÚNG** (0 hit) — vấn đề nằm ở *cách vá*, không ở *chẩn đoán*.
- Luật-chung #3 (bảng disposition từng dòng) + #4 (ghi đĩa trong lúc làm) là **tự-nhận-thức thật**, và chính #4 cứu lượt này.
- **C1 + C8 là hàng thật** — 2 chiều, đúng chuẩn `eval:31` mà hub tự thú còn thiếu.
## 7. Cảnh báo phối-hợp (ngoài 4 câu)
**C1 CẤM `throw` ⟂ C8 ĐÒI `throw`** trong cùng một tài liệu (`spec:53` vs `spec:158`). Hoà giải **có tồn tại nhưng nằm trong mã, không nằm trong spec**: `hmw.js:124`*"(trước parallel) — halt KHÔNG phụ-thuộc semantics parallel()"* ⇒ C8 chặn **up-front trước `parallel()`** (throw sống), C1 nói về **per-lane trong `parallel()`** (throw bị nuốt thành null). Worker đọc spec đơn thuần sẽ thấy mâu thuẫn ⇒ **nên ghi 1 dòng phân định vào spec** trước khi giao.