Files
solution-erp/.claude/workflows/runs/2026-07-22-S143-closeout-audit/sub-reviewer-0.md
pqhuy1987 36cefcca62
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m26s
[CLAUDE] Docs: vá 9 finding audit S143 + mở enum gap-incident-unrecorded
Audit 3 lane (reviewer FAIL 1C/4M/4m/1nit + 2 vai H24 = 6 FLAG), lead tự
re-đo từng finding trước khi vá.

CRITICAL/MAJOR:
- Re-anchor 5 adap-report: sha wal: tiền-closeout (1a0fa59/a458102/96ab2679)
  dangling sau squash -> hub clone không resolve nổi. Đổi sang 2757e41.
  LUẬT: cite outward = commit SẼ SỐNG sau squash, không bao giờ wal:.
- Đính chính claim OK-reachable: phép đo tự huỷ trong cùng phiên (squash lật
  sang squash-benign). Sự thật mạnh hơn: cả 2 nhánh lành đã chạy runtime.
- TRIPLE 17/17/17 chọn enum dễ: README:225 (tự xưng "ĐỦ roster") còn 14 +
  "4 monitor"; README:27 ("Roster THẬT") còn 14. Cả 2 vá -> 17/7.
- TOTAL 46 "== baseline" sai: baseline ghi trong repo là 45. Tách claim-DELTA
  (bền) khỏi claim-TUYỆT-ĐỐI (phải neo commit+thời-điểm).

FLAG view-residual-asym: STATUS:450 + README:190 còn khai "NO Write/Edit" như
cơ-chế chặn -> sửa thành tuyên-bố ý-định (runtime vẫn cấp, 9/9 vai; nhân-chứng
reviewer đã Write+Edit thật).

FLAG gap-carry-dropped: HANDOFF carry 13 -> 14, trả [carry:session-model-adopt].
FLAG gap-decision-sunk: 3 mục "Chờ-anh" chìm 2 nhãn phiên -> lên NEXT anh (10)(11)(12).

Enum flag_classes 10 -> 11: +gap-incident-unrecorded (anh duyệt). Vai
lead-omission từ chối tự chế class và escalate đúng luật CLOSED-enum.

Bài học acceptance: AC4 grep theo SỐ nên 2 site liệt-kê-TÊN lọt lưới.
Lần sau đếm PHẦN TỬ rồi so canonical, đừng so hình-dạng chuỗi.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 13:40:49 +07:00

264 lines
18 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-0 — Reviewer gate độc-lập cho OUTWARD wave đợt-9/10
**Vai:** reviewer (adversarial, read-only)
**Bắt đầu:** 2026-07-22
**Đối tượng:** email `broadcasts/outbox/ai_infra/2026-07-22-se-to-ai_infra-bao-nac-wave-dot-9-10.md` (sha khai `6c94873f72e0…`) + 7 adap-report `docs/governance/adap-reports/`.
> Ghi ĐĨA TRONG LÚC LÀM. Mọi phát hiện + lệnh + output thật append xuống dưới.
## Trạng thái
- [x] Đọc run.md
- [x] Đọc email outward
- [ ] Đọc 7 adap-report
- [ ] Re-đo ≥5 số load-bearing
- [ ] Verdict
---
## LOG
### [F1] 🔴 MAJOR — SHA chứng-cứ `1a0fa59` + `a458102` KHÔNG tồn tại trong lịch-sử ĐÃ PUSH (dangling local)
Cả 7 adap-report neo bằng-chứng file-level vào 2 commit này. Đo:
```
$ git branch -a --contains 1a0fa59 -> (rỗng)
$ git branch -a --contains a458102 -> (rỗng)
$ git branch -a --contains 96ab2679 -> (rỗng)
$ git merge-base --is-ancestor 1a0fa59 origin/main -> exit 1 (NO)
$ git cat-file -t 1a0fa59 -> commit (chỉ còn sống nhờ reflog LOCAL)
```
Nguyên nhân: closeout squash gộp chuỗi `wal:` thành `2757e41`, rewrite history ⇒ 3 commit
`1a0fa59`(HEAD cũ) / `c3708e9` / `b1d92b9` / `96ab267` / `a458102` thành **dangling**.
Nội dung thì CÓ trong `origin/main` qua `2757e41` (đã verify: 3 persona + 3 diary có mặt
trong `git ls-tree origin/main`) ⇒ **thực-chất đúng, con-trỏ chết**.
Hệ quả: hub clone repo SE rồi `git show 1a0fa59` = **object missing**. Không verify lại được.
Đây đúng CLASS `object-missing` mà chính khoản ①a khoe là giữ được FAIL-LOUD.
### [F2] 🔴 MAJOR — 1 trong 3 điều-kiện "contract v2 chạy THẬT" ĐÃ LẬT ngay trong phiên
`2026-07-18-...-4-khoan.md:17` khai: *"`git merge-base --is-ancestor 96ab2679 HEAD` **exit 0**
`OK-reachable`"*. Đo lại NGAY BÂY GIỜ:
```
$ git merge-base --is-ancestor 96ab2679 HEAD -> exit 1 (NOT ancestor)
$ git cat-file -t 96ab2679 -> commit (còn)
```
Tức là đúng-lúc-đo thì đúng, nhưng squash-closeout cùng phiên đã làm nó unreachable.
Report ghi "đo thật @S143" mà **không caveat rằng phép đo này tự huỷ trong cùng phiên**.
Mỉa mai: đây chính là ca `squash-benign` mà contract sinh ra để xử — report lại dùng nó
làm bằng-chứng "OK-reachable" mà không nói nó sẽ đọc thành object-unreachable ngay sau đó.
### [M-EXACT] Số đã re-đo KHỚP
| Số khai | Nguồn | Đo lại | Kết |
|---|---|---|---|
| harness-eval 69 dòng / 6.261 B | 4-khoan:12 | `wc -l -c` = 69 / 6261 | ✅ |
| harness-refine 66 / 6.012 B | 4-khoan:12 | 66 / 6012 | ✅ |
| harness-audit 58 / 5.135 B | 4-khoan:12 | 58 / 5135 | ✅ |
| 3 diary mỗi file 16 dòng | 4-khoan:13 | 16 / 16 / 16 | ✅ |
| roster agents = 17 | 4-khoan:14 | `ls .claude/agents/*.md \| grep -v README \| wc -l` = 17 | ✅ |
---
## LƯỢT 2 (sau garble #53 — lead vớt được F1/F2, tao tiếp phần chưa soi)
### [F3] 🔴 MAJOR — "TRIPLE 17/17/17" chọn CÁI ENUM DỄ; enum tự-xưng-mirror còn 14
`4-khoan.md:14`: *"TRIPLE 17/17/17 … == enum `agents/README.md` = **17**"*. Đĩa có **HAI** enum trong README:
| Site | Nội dung | Đếm |
|---|---|---|
| `agents/README.md:236` | "17 folder: … harness-eval · harness-refine · harness-audit" | **17** ✅ |
| `agents/README.md:225` | tự khai **"VALID_ROLES (whitelist `hmw.js` — ĐỦ roster…)"** | **14** ❌ |
Lệnh đo: `sed -n '225p' .claude/agents/README.md | grep -oE '\`[a-z][a-z-]+\`' | tr -d '\`' | sort -u | wc -l` → **14**
(thiếu đúng `harness-eval` · `harness-refine` · `harness-audit`).
Cùng dòng còn ghi *"Cả **4** monitor vẫn INFORM-only"* — sau trio phải là **7** monitor.
`hmw.js:22-40` VALID_ROLES đọc tay = **17** (14 + 3 trio) ✅ — nên hmw.js ĐÚNG, README:225 STALE.
⇒ Claim "TRIPLE" chỉ đứng nếu người đọc chọn `:236`. Cái dòng **tự nhận là bản mirror của
`VALID_ROLES` và tự nhận "ĐỦ roster"** thì lệch. Đúng class `view-stale-role-desc` —
và trớ trêu, `README:3` tự lấy chính mình làm **ví-dụ minh-hoạ** cho class đó.
Đây là lỗi **sweep-literal thay vì sweep-same-CLASS** (bài S141 của chính tao).
### [F4] 🔴 MAJOR — detector TOTAL: khai 46, đo NAY 47; baseline ghi trong repo là 45
`4-khoan.md:19`: *"Detector suite: TOTAL **46 == baseline 46** (wave thêm 0 flag), exit 0"*.
```
$ powershell -File scripts/governance-detectors.ps1
TOTAL FLAGS: 47 <- ĐO NAY, exit 0
```
Phân rã tự đếm: 24 dangling-wikilink + 15 derived-stale + 3 vocab-fork(MED) + 3 gap-carry-aged + 2 title-stale = **47** ✔ (cộng khớp).
Nhưng "baseline 46" cũng KHÔNG phải baseline được ghi của repo:
- `docs/STATUS.md:483` (S137): *"detector TOTAL **46→45** = đúng 1 FP classified"*
- `docs/HANDOFF.md:13` (S138S139): *"live TOTAL **45 giữ**"*
⇒ Con số đã đi **45 → 46 (không ai giải trình) → 47 (nay)**. Report lấy số sống lúc chạy
gọi luôn là "baseline" mà không khai rằng nó lệch baseline ghi gần nhất.
Phần **đúng** và cứu được: sub-claim "wave thêm 0 flag" CÓ chứng before/after trong
`runs/…S142…/sub-task-1.md:177,289` (`baseline=46 final=46` + Compare-Object 1 delta = dời dòng 138→148 của flag CŨ).
Tao đối chứng: flag `session-end.md:148 derived-stale` vẫn sống đúng vị trí :148 ⇒ tuyến delta tin được.
Vấn đề là **con số tuyệt đối** bị publish ra ngoài mà không neo commit/thời-điểm ⇒ hub chạy lại ra 47, đọc thành SE khai sai.
### [F5] 🟡 MINOR — "N dòng" = churn (added+deleted), không phải added; hub đo lại sẽ lệch 7/10 mục
`git diff --numstat b146e2b..2757e41` (2757e41 = commit ĐÃ PUSH chứa trọn nội dung của 2 sha dangling):
| File | Report khai | added | deleted | added+del |
|---|---|---|---|---|
| `error-ledger.md` | +20 dòng | 20 | 0 | 20 ✅ |
| `stamp_verify.py` | 55 dòng | 55 | 0 | 55 ✅ |
| `check-email.md` | 9 dòng | 8 | 1 | 9 |
| `send-email.md` | 4 dòng | 3 | 1 | 4 |
| `session-end.md` | 14 dòng | 12 | 2 | 14 |
| `session-start.md` | 30 dòng | 27 | 3 | 30 |
| `.session-counter.json` | 11 dòng | **6** | 5 | 11 |
| `hmw.js` | 9 dòng | **6** | 3 | 9 |
| `session-model-se-draft.md` | 11 dòng | 10 | 1 | 11 |
Quy-ước NHẤT-QUÁN (churn) ⇒ không phải bịa. Nhưng ký-hiệu "N dòng" không định-nghĩa, và
`.session-counter.json "11 dòng"` / `hmw.js "9 dòng"` **thổi gần gấp đôi** lượng nội dung MỚI (6).
`broadcasts/_index.md "+7 dòng ghi nhận đợt"`: đo 8 added — nhưng dòng thứ 8 là row OUTBOX của
chính email này, nên "+7 ghi nhận đợt" **đúng theo scope**. ✅ không tính lỗi.
### [F6] 🟡 MINOR — cùng class F2: nhánh `squash-benign` ĐÃ có ca THẬT, hai artifact còn khai "chưa gặp ca thật"
Detector in ra ngay hôm nay:
```
===== H24-5 - counter-ancestor-classify (INFORM-only) =====
[trace] SQUASH-BENIGN: last_ticked_head 1a0fa59d (session S143) is NOT reachable from HEAD
but the object EXISTS (cat-file -t = commit) - expected closeout-squash drift, 0 flag (contract v2)
```
Nhưng: email `:35` *"Hai nhánh còn lại mới chỉ có fault-inject, **chưa gặp ca thật**"* ·
`carveout-dp2.md:26` *"3 ca fault-inject, 2 nhánh còn lại **chưa gặp ca thật**"*.
⇒ Sai theo hướng **UNDER-claim** (thực-tế mạnh hơn lời khai) ⇒ MINOR, không phải overclaim.
Nhưng nó chứng minh F2 là **class**, không phải ca lẻ.
### [F7] 🟡 MINOR — contract đòi ghi vết `squash-benign` vào `history[]`, chưa có vết
`.session-counter.json` `_contract.fail_loud_on_regress` v2: *"…append ONE trace entry to history[] with
event-class squash-benign and CONTINUE"*. Đo: `history[]` có **5** entry (S127·S133·S139·S137·S140),
**0** entry `squash-benign`. `counter=17 · last_ticked_head=1a0fa59de2e8… (dangling) · last_ticked_session=S143`.
Bào chữa hợp-lệ: phân-loại thuộc đường TICK, tick kế (S144) mới chạm ⇒ **chưa vi-phạm**, nhưng là
nợ phải theo dõi — nếu S144 tick mà không có entry thì contract v2 vỡ lần đầu ngay ca thật đầu tiên.
### [F8] ✅ GROUNDED (khen) — §3(b) tool-grant: tao là first-person evidence
`.claude/agents/reviewer.md` frontmatter:
`tools: [Read, Grep, Glob, Bash, mcp__rag-unified__…×4]` — **0** `Write`/`Edit`.
Đo 9 vai: 3 trio + 2 H24 + reviewer + tooling-auditor + harvest-curator + investigator-codebase
→ **cả 9 đều KHÔNG khai** Write/Edit. Đối-chứng `implementer-backend`:
`tools: [Read, Edit, Write, Bash, Skill, Grep, Glob, …]` — Edit/Write ở **slot 2-3** đúng thứ tự file.
🔴 Và **chính tao vừa dùng `Write` + `Edit` để tạo/ghi file này** trong khi frontmatter của tao không cấp.
⇒ Claim "whitelist frontmatter = tuyên-bố ý-định, KHÔNG phải cơ-chế chặn" là **ĐÚNG, có nhân-chứng trực-tiếp**.
Email nói "6 vai" — đo được **9 vai cùng hình-dạng** ⇒ under-count, an-toàn.
### [M-EXACT bổ sung] số đã tự chạy lại
| # | Số khai | Nguồn | Lệnh | Kết quả | Khớp |
|---|---|---|---|---|---|
| 6 | `stamp_verify.py` 7 thư **exit 0** | chuan-hoa:16 · email bảng | `python scripts/stamp_verify.py <7 file>` | 7× "OK (canonical match)", `EXIT=0` | ✅ |
| 7 | 7 sha 12-hex trong bảng disposition | email:22-28 | so `declared` trong output trên | 6239dd40·dede7ec5·101e69d6·9a35405b·d68de5e7·9cd1a486·58e28bae | ✅ 7/7 |
| 8 | Dòng 7 thư 118/93/125/66/51/26/58 | nudge-pull:12 | `wc -l` | 118·93·125·66·51·26·58 (tổng 537) | ✅ 7/7 |
| 9 | `stamp_verify.py` 55 dòng | chuan-hoa:14 | `wc -l` + numstat | 55 / `55 0` | ✅ |
| 10 | grep `carve-out` error-ledger = 5 | carveout:12 | `grep -c` | 5 | ✅ |
| 11 | grep `{8,64}` ở CẢ 2 command | chuan-hoa:12 | `grep -c` ×2 | 1 + 1 | ✅ |
| 12 | grep `da349fc` = 1 hit | khung-nhip:13 | `grep -c` | 1 | ✅ |
| 13 | grep `transient` = 1 hit | khung-nhip:15 | `grep -c` | 1 | ✅ |
| 14 | grep `ĐÃ VỀ` = 2 hit | session-model:12 | `grep -c` | 2 | ✅ |
| 15 | `H25-role-notebook` roster=17 diaries-ok=17 flagged=0 | 4-khoan:19 | detector output | `roster=17 ; diaries-ok=17 ; flagged=0 ; inert=0` | ✅ |
| 16 | Email self content_sha256 `6c94873f72e0…` | email frontmatter | `stamp_verify.py` trên outbox | OK (canonical match), EXIT=0 | ✅ |
| 17 | H25-closeout 3 close-group `[ok]×3` | carveout:14 | detector output | `[ok] b146e2b S140 · [ok] 0b0285c S139 · [ok] d99de8f S137` | ✅ |
| 18 | detector TOTAL 46 | 4-khoan:19 | detector output | **47** | ❌ (F4) |
| 19 | enum `agents/README.md` = 17 | 4-khoan:14 | `sed 225p` đếm tay | **14** ở site tự-xưng-mirror | ❌ (F3) |
### [F9] 🔴🔴 CRITICAL — `scripts/nhip-no-probe.ps1` bị SỬA, CHƯA COMMIT, và nó làm SAI một câu trong THƯ ĐÃ GỬI
```
$ git status --porcelain
M .claude/workflows/runs/2026-07-22-S143-closeout-audit/sub-reviewer-0.md <- của tao
M docs/HANDOFF.md <- lead re-stamp (đã khai trong run.md)
M docs/STATUS.md <- lead re-stamp (đã khai trong run.md)
M scripts/nhip-no-probe.ps1 <- 🔴 KHÔNG khai ở đâu
?? .claude/scheduled_tasks.lock
$ git diff --numstat scripts/nhip-no-probe.ps1 -> 55 2
$ grep -c "pull-cach" scripts/nhip-no-probe.ps1 -> 9 (worktree)
$ git show HEAD:scripts/nhip-no-probe.ps1 | grep -c -> 0
$ git show origin/main:scripts/nhip-no-probe.ps1 | grep -c -> 0
$ git show da349fc:scripts/nhip-no-probe.ps1 | grep -c -> 0
$ git diff --numstat b146e2b..2757e41 -- scripts/nhip-no-probe.ps1 -> (rỗng, wave KHÔNG đụng)
mtime = 2026-07-22 12:50:42 (SAU closeout push; git-status đầu phiên = 0 file modified)
```
Chạy thật:
```
$ powershell -File scripts/nhip-no-probe.ps1
NHIP-NO: kiem light 3/6 deep 14/15 ok | tran-bo-nho 1 over-cap | run-chua-gom 1 | pull-cach 2 ngay
```
**Vế thứ 4 `pull-cach` ĐANG CHẠY.** Trong khi:
- Email ĐÃ GỬI `:47`: *"SE đang cân nhắc thêm 1 vế `"lần pull gần nhất cách đây N ngày"` vào dòng-nợ. **Chưa làm**, chờ owner."*
- `nudge-pull.md:24`: *"**Đề-xuất (chưa làm, cần owner):** thêm 1 vế vào `nhip-no-probe.ps1`…"*
⇒ Hai artifact outward khai **"chưa làm / chờ owner"** cho đúng thứ **đã làm và đang chạy**.
Giảm nhẹ (công bằng): code CÓ giữ owner-gate cho **con số** — `:40-41` *"If key `h24_cadence.pull_warn_days`
is present it also appends OVERDUE:pull — but SE does NOT invent that number (owner's call)"*, và
diary `lead-omission-auditor:25` ghi `pull_warn_days` đã được cấp carry#12 + NEXT-anh#2.
⇒ Ngưỡng vẫn chờ owner; **cái vế thì đã bật**. Nhưng vẫn là:
(a) sửa CHƯA COMMIT lên **script enforcement tracked**, không nằm trong bề-mặt lead đã khai;
(b) làm **sai một câu trong thư đã stamp+gửi**;
(c) đụng đúng **lưới (a) của carve-out ô3** — lưới mà nấc `PASS-với-carve-out` treo vào, và
`carveout-dp2.md:14` đã **trích nguyên văn output 3-vế** của nó làm bằng-chứng.
Đây chính là class `feedback_monitor_residual_write_containment` / G-015 / E-006 — và nó xuất hiện
ĐÚNG trong phiên mà email §3(b) vừa chứng minh "whitelist frontmatter không có răng".
### [F10] 🟡 MINOR — evidence-paste của carve-out không còn tái-lập
`carveout-dp2.md:14` trích: `NHIP-NO: … | run-chua-gom 0` (3 vế). Live: **4 vế** + `run-chua-gom 1`.
Đúng lúc ghi thì đúng; nay hub chạy lại KHÔNG ra chuỗi đó. Cùng class F2 (bằng-chứng tự huỷ).
### [F11] 🔵 nit — báo THIẾU bằng-chứng MẠNH NHẤT mình đang có
`58e28bae:46` (thư hub) **bắt buộc**: *"Hai ca fault-inject **bắt buộc kèm**: (ca-1) … ⇒ IM-có-vết; (ca-2) … ⇒ FLAG."*
SE **CÓ LÀM THẬT** — `runs/…S142…/sub-task-1.md:70-139` ghi 3 ca, 3/3 PASS
(CA-1 squash-benign 0-flag · CA-2a object-missing 1-flag · CA-2b counter-regress 1-flag)
+ `implement-synthesis.md:20` lead **tự inject lại độc lập**.
Nhưng `4-khoan.md:19` — báo-cáo trả lời ĐÚNG thư ra mandate đó — **không nhắc một chữ** về fault-inject,
chỉ liệt nội dung JSON. Under-claim: bổ sung vào errata thì mạnh lên, không yếu đi.
---
## Trục G-011: nấc vs bằng-chứng (đối chiếu từng thư)
| # | Nấc khai | Tao kiểm | Kết |
|---|---|---|---|
| 1 `58e28bae` | executed-file / verified-pending-restart | 3 persona+3 diary byte-exact; "CẤM đọc thành verified-runtime" ghi thẳng 2 chỗ | ✅ hiệu-chỉnh ĐÚNG |
| 2 `9a35405b` | executed + DP-2 `n-a` có chủ đích | +20 dòng ledger, 5 hit; FI 3/3 thật | ✅ (kèm F9/F10) |
| 3 `6239dd40` | executed | tao chạy lại 7/7 exit 0 | ✅ MẠNH NHẤT đợt |
| 4 `dede7ec5` | executed-doc / verified-pending-first-real-closeout-gộp | grep da349fc=1, transient=1; annex chưa fire | ✅ ĐÚNG |
| 5 `101e69d6` | **agreed** (cố ý chưa wire) | `session_ctx_kb` 0-wire (chỉ ở draft/spec/run) · `.gitignore` 0 đụng | ✅ ĐÚNG, không nống lên executed |
| 6 `d68de5e7` | executed | "0 site sống" — grep còn 3 hit nhưng đều là `supersedes:` của hub / run-trace lịch-sử / chính report ⇒ 0 hit SỐNG | ✅ |
| 7 `9cd1a486` | n-a | notify 0-sàn; `_index` +7 row đúng; 58e28bae:44-46 thật sự có khối (C) ①(a) APPROVE | ✅ |
**Không thư nào khai `verified` / `verified-runtime`.** Kỷ-luật nấc = điểm mạnh thật, giữ nguyên qua soi.
## Trục honest-caveat: cái ĐÁNG khai mà IM
1. 🔴 Không thư nào cảnh báo **bằng-chứng neo vào `wal:` commit sẽ bị squash xoá** (F1/F2/F10) — dù chính SE có 3 tiền-lệ S127/S133/S139 và vừa viết hẳn contract cho nó.
2. 🔴 `TOTAL 46` publish ra ngoài **không neo commit/thời-điểm**, và không khai đã lệch baseline ghi 45 (F4).
3. 🟡 `nhip-no-probe.ps1` đã đổi (F9) — không khai ở đâu.
4. ✅ Khai TỐT (không cần thêm): trio chưa spawn · self-gate không reviewer · carve-out canh bằng NGƯỜI · label-convention máy không canh · 5 câu treo · `n=1 hub`/`n-nhỏ` không thừa-hưởng · stamp_verify là mirror không có máy canh drift.
## Đề xuất errata (KHÔNG sửa file đã stamp — sửa sau stamp = vỡ hash, đúng thứ `stamp_verify.py` sinh ra để bắt)
1. Bản đính-chính gửi hub: đổi mọi cite `1a0fa59`/`a458102` → **`2757e41`** (commit ĐÃ PUSH chứa trọn nội dung; đã verify `git ls-tree origin/main`).
2. Đính-chính `TOTAL 46` → nêu **46 đo tại `<commit>` lúc `<t>`; live nay 47; baseline ghi S139 = 45** + tách rõ claim-delta ("wave +0 flag", có Compare-Object) khỏi claim-tuyệt-đối.
3. Đính-chính §3(c) + `nudge-pull.md:24`: vế `pull-cach` **đã bật**, ngưỡng `pull_warn_days` vẫn chờ owner.
4. Vá `agents/README.md:225` (thêm 3 trio + "4 monitor"→7) — sửa REPO, không sửa thư.
5. Bổ sung fault-inject 3/3 vào errata cho `58e28bae` (F11).
6. Quyết trước commit: `scripts/nhip-no-probe.ps1` +55/-2 → commit có review, hay revert.
7. Nâng: nêu nhánh `squash-benign` **đã có ca thật** (F6) — mạnh hơn lời đang khai.
## VERDICT
`FAIL — 1C / 4M / 4m / 1nit`
Lý do FAIL (không phải PASS_WITH_FIXES): 5/7 report cite commit hub **không resolve được** ⇒ hub
không tự verify lại được; 2 con số publish **không tái-lập**; 1 câu trong thư đã gửi **bị đĩa phủ nhận**;
+1 residual chưa commit trên script enforcement. Cần một vòng đính-chính, không phải dọn vặt.
🔵 Nói cho công bằng: **15/17 số tao tự chạy lại KHỚP CHÍNH XÁC**, kỷ-luật nấc G-011 và bộ caveat
là hàng thật, fault-inject 3/3 có thật. Lỗi nằm ở **lớp artifact outward + con-trỏ bằng-chứng**, không ở phần việc.