# sub-review — adversarial review CHECKLIST P1 (YC-017, S185 P2)

- vai: reviewer (Fable 5, /fable-real) · ts-mở: 2026-08-09T21:0x+07:00
- input: `sub-invest-email-adap-fable.md` (§1 bảng 39-id · §2 nợ+re-verify · §3 checklist 16C+5W)
- artifact-first chống #53: GHI TRONG LÚC LÀM. Trạng thái: **XONG** — verdict `PASS_WITH_FIXES`, 13 finding (9 MAJOR / 4 minor), §G cuối file
- ranh: read-only ngoài file này. Verdict-only.

## §A Kế hoạch đo (R1 re-đo bằng lệnh KHÁC invest)

| # | Claim invest | Lệnh invest dùng | Lệnh TÔI dùng (khác) |
|---|---|---|---|
| A1 | 39 id > watermark · 33/39 report cùng-tên | `ls + đếm tay` | python set-intersection |
| A2 | C-13 report 08-08 UNTRACKED | `git status ??` | `git ls-files` trực tiếp |
| A3 | C-6 ring2 24.793B = 96,8% cap 25.600 | `ls -la` (suy đoán) | `wc -c` + đọc cap từ memory-budget.json |
| A4 | C-3 masthead 0-codify | grep 3 nhà | `git grep -il` toàn tracked-tree |
| A5 | C-4 suggest-1-dòng 0-codify | grep 3 nhà | `git grep` token khác (non-blocking/suggest) |
| A6 | C-7 3/14 run tháng-8 có label | (không ghi rõ) | `grep -l` + `ls -d` đếm 2 vế |
| A7 | C-1 tien-kiem-cua `:3` "LUON exit 0" | đọc | Read trực tiếp + grep exit |
| A8 | C-14 điều-kiện-3 ĐÃ GHÉP @S181 | đọc ACTIVE-MARKS | grep token "Điều-kiện-3" + đọc block |
| A9 | C-15 carry ctx-t9 STALE | HANDOFF:20 | grep carry token trong HANDOFF |
| A10 | C-16 owner-LUẬT 0-hit error-ledger | grep error-ledger | `git grep` toàn repo tìm nhà thật |

## §B R1 — Dương-giả (re-đo)

| # | Kết quả re-đo | Verdict |
|---|---|---|
| A1 | python set-intersection: post-watermark = **39** ✓ · same-name = **33** ✓ · 6 thiếu = đúng 4×08-04 + 2×08-05 (phủ bởi pack/gộp) ✓. ⚠️ NHƯNG tổng outbox = **101, KHÔNG phải 105** (`ls -1\|wc -l` xác nhận 101; dir mtime 08-08 00:47 — không file nào đổi từ trước lúc invest đo) → §Log invest ghi 105 là SỐ SAI, may là số-nền không load-bearing | claim-39 ĐỨNG · số-nền lệch |
| A2 | `git ls-files … \| grep 08-08` exit=1 + porcelain `??` — untracked THẬT; adap-reports tracked=106 +1 untracked = 107 ✓ | C-13 THẬT |
| A3 | 🔴 `wc -c` = **30.781 B** · python chars = **26.673** · mtime **08-08 12:20** (TRƯỚC khi invest chạy 08-09 20:4x) · cap `autoinject_cap_bytes=25600`, `soft_cap_bytes=30720` → ring2-audit **ĐÃ VƯỢT autoinject-cap (120% bytes / 104% chars), vượt cả soft-cap** — KHÔNG phải "96,8% gần cap". Invest chép số 24.793B từ report 08-08 mà không đo tươi (vi phạm chính header §2.1 của mình "CẦN re-verify hôm nay từng dòng"); đối chứng: tooling-auditor 29.962B invest đo TRÙNG khớp tôi ⇒ đo tươi chỗ này, chép stale chỗ kia | C-6 THẬT nhưng **con-số sai HƯỚNG NGƯỢC — đang truncate NGAY BÂY GIỜ, phải nâng ưu-tiên** |

| A4 | `git grep -iln masthead` toàn tracked-tree: 3 hit = 2 inbox-letter + chính report (đều MENTION, 0 rule-file) | C-3 THẬT ✓ |
| A5 | `git grep "non-blocking\|suggest.*1 dòng"`: hit = chính report + engine §N.8 (predicate probe, KHÁC việc — đúng như report tự khai) + README cosmetic | C-4 THẬT ✓ |
| A6 | runs tháng-8 = **14** · có "label" trong run.md = **3** → khớp đúng 3/14 invest | C-7 THẬT ✓ |
| A7 | `head -12 tien-kiem-cua.ps1`: `:3` "LUON exit 0 — lop INFORM" · **`:4` "Cong chan bang ma loi = W3b (khoan C3-04 + thang 4 trang thai), dang cho owner (P1)"** · **`:5` "Ai sua file nay de tra ma != 0 la da doi lop, phai qua W3b truoc"** | C-1 THẬT nhưng → finding routing §D |
| A8 | `ACTIVE-MARKS.md:65` §LT3 bậc-2 nguyên văn **"+ Điều-kiện-3 (ghép @S181, anh gật)"** — grep token trực tiếp | C-14 THẬT ✓ (report 08-07 stale thật) |
| A9 | HANDOFF:9 carry `[carry:ctx-t9-dogfood]` còn trong re-stamp @S181; **định nghĩa carry ở HANDOFF:206 = ĐA VẾ**: "dogfood **4-cửa THẬT** + spawn-probe CẢ 3 vai ctx + **mồi-ngầm xuyên-cửa-sổ** + checklist #18/#19/#20/#22/#23 + wall-clock" | C-15 → finding §B-F5: evidence invest chỉ phủ vế spawn-3-vai |
| A10 | `git grep owner-LUẬT` ngoài runs: lead-gap archive + HANDOFF + chính report; trong runs: S144 spec + S149 owner-gated-3-khoan ×3 file → nhà thật nằm trong runs 07-22/07-24 | C-16 THẬT ✓ (kèm đầu mối sẵn cho Opus) |
| A11 | `.claude/commands/day.md` → No such file | W-1 premise ✓ |

**Kết R1:** 0 item dương-giả THUẦN (không item nào "đã đóng rồi mà vẫn nằm trong checklist"). Nhưng 2 con-số sai: C-6 (stale NGƯỢC hướng — thật ĐÃ VỠ cap) + §Log outbox 105→101 (số-nền). Invest re-verify §2.2 tốt ở 12 dòng, nhưng C-6 và C-15 lọt lưới chính quy-trình đó.

## §C R2 — SÓT (thách-CLEAN: mở 2 thư "applied-per-id" cluster 07-17 + đối chiếu BINDING)

**Verdict per-id `0/39` ĐỨNG** (2/2 cặp mở ra đều có report thật, binding-floor phủ per-item, nấc khai đúng). **NHƯNG tầng-MỤC có SÓT hệ-thống:**

### C.1 Cặp 1 — `master-checklist-hai-tang` (thư 5 sàn + 4 self-check)
Report phủ 5/5 sàn per-item, honest-caveat MẪU MỰC — và chính caveat đó khai 2 nợ mà invest KHÔNG harvest:
- **SELF-CHECK ô1 + ô2 = PENDING** nguyên văn *"cần 1 chu-kỳ đóng→mở phiên thật để chấm, chưa có dữ-liệu"* — 22 ngày / ~45 phiên sau, CHƯA AI quay lại chấm. Dữ liệu nay ĐÃ CÓ, kể cả **ca-âm vàng**: HANDOFF:8 *"re-stamp carry rơi 4 kỳ liên tiếp, gap-carry-dropped = 12 = 4× ngưỡng JUMP ⇒ nghi-thức này không có răng"* — đúng phép thử ô2 (mục chưa xong có tự xuất hiện lại không) và đúng sàn-4 (vòng carry khép kín) của thư.
- **Sàn-2 mới chứng 2/4 cửa** kèm điều-kiện tự-đặt *"nếu lần đó không in đúng khuôn, nấc phải hạ lại executed-partial"* — chưa ai flip caveat.
- (Vocab-nit sàn-5 THÌ ĐƯỢC nhặt → W-5. Tức invest ĐỌC report này mà chỉ nhặt 1/3 khoản caveat.)

### C.2 Cặp 2 — `chuan-hoa-stamp-decode` (report 4.920B < nửa thư 11.162B)
Binding phủ TỐT (3-dạng 7/7 re-đo + byte-safe + phản-hồi BOM ngược hub). Nhưng caveat khai nợ máy-thiếu bị bỏ lọt: **`stamp_verify.py` là bản MIRROR — "hub đổi §N canon mà SE quên re-pull thì 2 bên lệch IM LẶNG — không có máy nào canh drift, chỉ có header-note nhắc người."** Đo hôm nay: `git grep stamp_verify scripts/` + grep governance-detectors → **0 watcher** (C9 `:1550` chỉ canh hmw WIDTH mirror — khác đối tượng). Nợ còn nguyên, cùng họ C-8, không có trong §2.1 lẫn §3.

### C.3 Hệ-thống: §2.1 → §3 RƠI DÒNG không disposition
§2.1 tự khai harvest bằng *"grep debt-marker"* ⇒ nợ diễn đạt không-marker ("PENDING", "không có máy nào canh") lọt lưới — 2/2 report tôi mở ngoài-§2.1 đều dính. Và ngay TRONG §2.1, đối chiếu từng dòng a-y với {§2.2-đóng · C · W · Ghi-chú} ra **≥5 dòng biến mất không dấu vết**:
- **(h) session-model** — §2.1 ghi "CHỜ-ANH + đối-chiếu reply" nhưng §3 KHÔNG có item nào. §1 kể "wire ĐÃ xảy ra SAU (hub reply 07-22 + owner)" nhưng report trên đĩa vẫn `agreed` = cùng class STALE như C-14, và **evidence owner-duyệt VC-1/2/3 chưa được trưng** (direction S140: CẤM wire trước mẫu-hub + anh duyệt) ⇒ cần item đối-chiếu reply + flip report kèm evidence, thiếu evidence → W.
- **(c) tong-hop-loi** — (c1) carry mark-S123 "chờ anh 1 chữ" + (c2) recipe body-sha adap-request chờ-hub: cả 2 không vào đâu.
- **(f) khung-nhip-wording** — vế máy-thiếu "bất-biến +1 KHÔNG máy canh nhãn-reuse" rơi (vế annex-phép-8 event-driven thì chấp nhận được).
- **(g) khung-nhip-nam-vong** — dangling-tick treo anh/hub, invest tự ghi "①a có thể đã đóng" nhưng KHÔNG re-verify ở §2.2 và không disposition.
- **(o) harness-dong-du** — JUMP {4,3,3} + view-residual FROZEN-chờ-anh không có chỗ; **(t)** slot (36)(38) chờ-anh (nhịp phóng vai + vai gộp) không rõ còn sống ở queue nào.

## §D R3 — Routing (trục quan trọng nhất)

Chuẩn đối chiếu = **§LT3 3 bậc** (`ACTIVE-MARKS.md:57-65`, anh gật nguyên văn @S181): ranh bậc-2 ⟂ bậc-3 = **tính PHÁ HUỶ (đảo ngược được?)**, KHÔNG phải độ khó. + uỷ-quyền sẵn: HANDOFF:7 NEXT-em · slot-71 gom-auto (HANDOFF:78) · derived-flush-execution.

| Item | Verdict routing | Căn cứ |
|---|---|---|
| W-1 day-wake | ✅ ĐÚNG chờ-anh | 3 chạm canonical session-continuity (`tiep.md §0` · CLAUDE.md câu "DUY-NHẤT /tiep" · nhịp 4→5 cửa) = đổi policy/nhịp-số |
| W-2 ring5 slot(41) | ✅ ĐÚNG | roster/persona mới — tiền lệ slot 75 (cap roster) đều owner |
| W-3 owner-SỐ 4.3 | ✅ ĐÚNG | chữ "owner-SỐ" nằm ngay trong định nghĩa khoản |
| W-4 điền bảng thẩm-quyền + duyệt gửi hub | ✅ ĐÚNG | outward + bảng thẩm-quyền = quyền anh. NHƯNG ràng thứ-tự: **C-16 phải xong TRƯỚC** (bảng chưa locate thì anh điền vào đâu?) — ghi tường minh vào W-4 |
| **W-5 vocab sàn-5** | 🔴 **DEMOTE → C-item** | LT3 bậc-2 chuẩn: 2 nhánh đọc được, cả 2 ĐẢO-NGƯỢC ĐƯỢC; nhánh-an-toàn có tiền-lệ S93 = đăng-ký alias-map (additive, không rename canonical). Lưu ý thi công: `vocab-alias-map.md` **chưa tồn tại trên đĩa** (git grep chỉ ra mention) — tạo file 1-entry vẫn additive. Giữ ở W = đốt 1 slot chờ-anh cho việc tự khai "LOW, cosmetic" — đúng chiều đề bài cảnh báo |
| **C-1 W3b mã-thoát** | 🔴 **GIỮ Opus NHƯNG SIẾT SPEC, thiếu evidence thì ĐẨY LÊN CHỜ-ANH** | Xung đột 2 nguồn chưa hoá giải: HANDOFF:7 NEXT-em *"tự chạy, không cần anh — khi soak đủ"* ⟂ chính file đích `tien-kiem-cua.ps1:4-5` *"đang chờ owner (P1)"* + *"Ai sửa file này để trả mã != 0 là đã đổi lớp, PHẢI QUA W3b TRƯỚC (khoản C3-04 + thang 4 trạng thái)"* + PHẠM-VI-KÝ seal @S181 LOẠI TRỪ W3b tường minh. Spec C-1 hiện chỉ có guard soak mềm. Phải thêm: (i) trưng evidence P1/W3b đã được anh đóng (tìm trong 8 câu P1-P8 @S181) — không tìm thấy ⇒ DỪNG, chuyển W; (ii) đi đúng thang 4-trạng-thái C3-04; (iii) flip header `:3-5` của file CÙNG lượt |
| C-3 (bậc-2 chọn nhánh) · C-7 (siết khuôn) · C-14 (flip stale có evidence RC-mark) · C-6 · còn lại | ✅ Opus OK | đảo ngược được + khai; C-6 xem F-2 (phải đi qua máy gate, không nén tay) |

## §E R4 — Effort + thứ tự

- **F-10a:** C-13 (commit report 08-08, S) phải chạy **ĐẦU TIÊN toàn checklist** — nó là evidence-protection: report 08-08 đang untracked là NGUỒN cite của C-6 (số cap) + W-2 + C-1 (soak note); mất nó là mất chân nhiều item khác. Hiện xếp Ưu-tiên-3 = ngược.
- **F-10b:** C-16 (S) là tiền-đề W-4 — invest CÓ ghi chú nhưng để ở Ưu-tiên-3 cuối; phải ràng "trước khi trình W-4".
- **F-1-hệ-quả:** C-6 nâng lên Ưu-tiên-1 (đang truncate LIVE mỗi spawn ring2-audit — xem §B A3).
- Ước S/M/L nhìn chung hợp lý; C-12 (L) xếp cuối khối là đúng; C-10 "S" hơi lạc quan nếu phải wire thật (verify = S, wire = M) — chấp nhận được vì có nhánh "khai".

## §F R5 — Khả-thi cho máy

- **F-2:** C-6 thiếu con đường MÁY: `scripts/memory-archive-gate.ps1` strike-protocol — HANDOFF:39 ghi rõ *"strike 1/2 @S179; 🔴 KHÔNG tự archive, gate cố ý đòi 2 lượt over-cap liên tiếp. Chạy lại gate phiên sau để lên strike 2"*. Opus nén tay = bypass đúng cái máy governance sở hữu ca này. Sửa: route qua gate (chạy → strike 2 → archive theo gate) + trình-tự curate chuẩn (append-archive TRƯỚC → probe moved-not-cut bằng token THÂN-BÀI → cắt).
- **F-13:** C-8 + C-11 = detector MỚI nhưng acceptance không đòi **positive-control fault-inject** (luật nhà `feedback_faultinjection_proves_teeth`; C-12 có ghi "positive-control", 2 con này không). C-3/C-4 acceptance cần đo được: grep-pattern đích + flip nấc report tương ứng trong CÙNG lượt.
- **F-5 (C-15):** carry `ctx-t9-dogfood` là carry ĐA VẾ (HANDOFF:206: dogfood **4-cửa THẬT** + spawn-probe 3 vai ctx + **mồi-ngầm xuyên-cửa-sổ** + checklist #18/#19/#20/#22/#23 + wall-clock). Evidence C-15 chỉ phủ vế spawn-3-vai, và list lẫn 3 diary `harness-{eval,audit,refine}` — đó là trio 07-21, KHÁC trio ctx. Sửa acceptance: đóng TỪNG VẾ có bằng-chứng; vế thiếu → thu hẹp thành đóng-một-phần, giữ carry scope còn lại (guard claim-mạnh-hơn-việc).
- Còn lại (C-2 site-list cụ thể · C-5 · C-9 · C-10 · C-13 · C-14 · C-16): đủ {file đích + acceptance đo được}. ✓

## §G Findings đánh số + verdict

| F | Mức | Trục | 1 câu |
|---|---|---|---|
| F-1 | MAJOR | R1 | C-6 số stale-NGƯỢC: ring2 = 30.781B/26.673c — ĐÃ VƯỢT autoinject-cap 25.600 cả 2 đơn vị (+vượt soft-cap 30.720 theo byte), không phải "96,8% gần cap"; mtime 08-08 12:20 TRƯỚC lúc invest đo ⇒ chép số cũ, vi phạm chính header §2.1 của mình |
| F-2 | MAJOR | R5 | C-6 phải route qua `memory-archive-gate.ps1` strike-2 (HANDOFF:39 "KHÔNG tự archive"), không nén tay |
| F-3 | MAJOR | R3 | C-1: xung đột HANDOFF:7 NEXT-em ⟂ `tien-kiem-cua.ps1:4-5` "phải qua W3b trước, đang chờ owner (P1)" + seal loại trừ W3b — siết spec {P1-evidence · thang C3-04 · flip header}, thiếu evidence → CHỜ-ANH |
| F-4 | MAJOR | R3 | W-5 demote → C-item theo LT3 bậc-2 (đảo-ngược-được, nhánh an toàn alias-map tiền-lệ S93; file chưa tồn tại — tạo 1-entry vẫn additive) |
| F-5 | MAJOR | R1/R5 | C-15 evidence hụt vế so định nghĩa carry đa-vế HANDOFF:206 + lẫn trio harness-* ≠ trio ctx → đóng-từng-vế |
| F-6 | MAJOR | R2 | SÓT: master-checklist SELF-CHECK ô1/ô2 PENDING + sàn-2 2/4-cửa chưa ai chấm — dữ liệu 22 ngày sẵn (ca-âm HANDOFF:8 carry-rơi-4-kỳ đúng sàn-4) → +1 item S |
| F-7 | MAJOR | R2 | SÓT: chuan-hoa-stamp mirror-drift `stamp_verify.py` "lệch im lặng, không máy canh" — đo hôm nay 0 watcher → +1 item S/M cùng họ C-8 |
| F-11 | MAJOR | R2 | §2.1(h) session-model "CHỜ-ANH + đối-chiếu reply" BIẾN MẤT khỏi §3; report còn `agreed` sau wire = STALE cùng class C-14; evidence owner-duyệt VC-1/2/3 chưa trưng → +1 item (flip-kèm-evidence hoặc W) |
| F-12 | MAJOR | R2 | ≥4 dòng §2.1 khác rơi không disposition: (c1)(c2) · (f)-máy · (g) · (o)-FROZEN · (t)(36)(38) → mỗi dòng cần 1 trong {C · W · Ghi-chú-khai · verify-đóng} |
| F-8 | minor | R1 | §Log "outbox 105" — đo 2 cách hôm nay = 101 (dir không đổi từ 08-08); số load-bearing 39 ĐÚNG |
| F-9 | minor | R2 | Phương-pháp harvest grep-marker hụt nợ không-marker (2/2 sample dính) → Opus completeness-pass ~10 report chưa có dòng §2.1 (chỉ cần đọc section honest-caveat) hoặc lead khai residual-risk |
| F-10 | minor | R4 | C-13 chạy ĐẦU TIÊN (evidence-protection) · C-16 ràng TRƯỚC W-4 · C-6 lên Ưu-tiên-1 |
| F-13 | minor | R5 | C-8/C-11 thiếu positive-control fault-inject trong acceptance; C-3/C-4 acceptance cần grep-pattern + flip-report đo được |

**VERDICT: `PASS_WITH_FIXES`** — khung C/W đúng, 0 dương-giả thuần, §2.2 re-verify 12 dòng làm việc tốt (3 nợ tự đóng có bằng-chứng); nhưng 4 SÓT-MAJOR tầng-MỤC (F-6/7/11/12) + 2 routing (F-3/4) + 2 spec C-6 (F-1/2) phải vá TRƯỚC khi giao Opus. Fix bounded — không cần dựng lại.

- Trục: **R1 ĐẠT** (0 item bịa; 2 số phải sửa) · **R2 TRƯỢT** (2/2 sample + 5-6 dòng rơi) · **R3 TRƯỢT** (1 chiều-nguy-hiểm + 1 chiều-đốt-quyền) · **R4 ĐẠT** (2 chỉnh thứ-tự) · **R5 TRƯỢT** (5/16 item spec-gap, 2 load-bearing).
- Sau vá: checklist ước ~21 → ~24-25 item (+F-6/7/11 + tách F-12), 5 W → 4 W (bỏ W-5, có thể +1 nếu C-1 thiếu evidence).
- ts-đóng: 2026-08-09T21:3x — trạng thái: **XONG**.
