# sub-review-n2-S180 — Phản biện bản đồ áp dụng N1 (deep-pass N2)

> **Vai:** reviewer (N2, `/fable-real`, Fable 5) · **Phiên:** S180 (2026-08-07)
> **Vật soi:** `sub-invest-fitmap-S180.md` (48.433 B, 256 dòng — ĐÃ ĐỌC TRỌN 2 lượt Read)
> **Đối chiếu:** 4 thư gốc `broadcasts/inbox/ai_infra/2026-08-04-*` (đọc lại TỪ GỐC, không tin N1 thuật) + spec + run.md
> **Chế độ ghi:** GHI DẦN TRONG LÚC LÀM — mỗi finding append ngay khi chốt. File này KHÔNG có heading chờ-điền.

## Ghi nhận mở màn (đã chốt trước khi mở thư gốc)

- N1 fitmap cấu trúc: §0 tóm 4 thư · §1 7 GĐ · §2 12 TC · §3 9 lớp · §4 phát hiện/VƯỢT-KHUNG/datum · §5 fit-map 7 dòng đề xuất · §6 wave sơ bộ · §7 vét ô CHƯA ĐO (6 mục). END-line VERDICT có.
- N1 tự khai trung thực đáng ghi nhận: (a) datum LỚP-7 tự thân §4.2 (bị coordinator bắt skeleton 15%); (b) 3 chỗ nhãn `CHƯA ĐO` ở đợt 1 được vét lại ở §7 bằng lệnh thật; (c) nhãn `lead-measured` cho 3 ca LỚP-2 không tự đo lại — khai tin-có-điều-kiện; (d) bác-một-phần nền lead (pull_warn_days) có lệnh + trích chữ.
- Điểm sẽ soi nặng theo đề: T2 claims chống lưng cho "GĐ-2 ~70%", "GĐ-5 gần xong nhất", "GĐ-3 nửa" — từng file:line phải giải được; T5 phải tự tìm xung đột thứ 2 (N1 tuyên "xung đột lớn DUY NHẤT" §4.3 + GĐ-1/GĐ-2 đều ghi "Xung đột: không").

<!-- findings append từ đây xuống -->

## F-01 [T1+T4 · MAJOR] §6 W5 "có thể ghép W2" vi phạm cả điều-kiện-vào của hub LẪN OD-2 owner

- **Chữ N1** (`sub-invest-fitmap-S180.md:243`): *"W5 (GĐ-5 phần thiếu)... Nhẹ, có thể ghép W2."*
- **Chữ hub** (thư chính GĐ-5, dòng 220): điều kiện vào GĐ-5 = *"GĐ-1 **và GĐ-2** ở nấc đã thi công hoặc đã khai không áp dụng"*. Ghép W5 vào W2 nghĩa là GĐ-5 chạy khi GĐ-2 CHƯA ở nấc đã-thi-công (đang chạy cùng lượt) ⇒ vi phạm luật điều-kiện-vào — đúng loại "nợ nấc" mà OD-2 mua bằng giá "giá trị thấy được chậm hơn".
- **Chữ owner** (spec OD-2): *"thứ tự N5 = ĐÚNG GĐ-0 → GĐ-6 của hub, KHÔNG nhảy cóc... wave nào chạy hết phiên thì dừng đúng ranh nấc, không ăn lẹm sang wave sau."* — "ghép W5 vào W2" là ăn lẹm 3 bậc (GĐ-5 nhảy qua GĐ-3, GĐ-4 chưa mở).
- **Giảm nhẹ:** §6 tự khai "cho N4 tham khảo — N4 mới là người chốt". Nhưng bất-biến gói #2 trong spec (kiểm ở N4) là "không nhảy cóc nấc" — N1 đề xuất một nước đi mà chính spec cấm, không kèm cờ "vi phạm OD-2 nếu làm". N4 đọc nhanh sẽ chép nhầm.
- **Acceptance sửa:** xoá vế "có thể ghép W2" hoặc thay bằng "SAU W4, trước W6 — thứ tự tuyệt đối theo OD-2".

## F-02 [T1 · ghi nhận ĐÚNG] §0 tóm thư chính — đối chiếu từng claim, KHỚP

Đã đối chiếu N1 §0 với thư chính nguyên gốc (317 dòng): luật nấc 5 bậc + nấc cuối chỉ-hub-cấp (thư dòng 103/313) ✓ · điều-kiện-vào "đã thi công HOẶC không-áp-dụng có khai" (:101) ✓ · 12 TC = hợp đồng, GĐ không trỏ TC = đồ chơi (:72) ✓ · 4 ô để chữ đúng danh sách TC-02/03/07/10 (:89-93) ✓ · GĐ-4 kéo sớm + độc lập GĐ-2/3/5 (:197) ✓ · GĐ-5 không-hạn-mức = không-áp-dụng ≠ tụt lại (:220) ✓ · sàn = in đậm món 2 + 6 luật (:281-296) ✓ · se thuộc nhóm hub hỏi mỗi phiên (:36) ✓ · track 6 kho (:266-273) ✓ · CẤM chép hình thức hub (:283) ✓. Tóm tắt §0 của N1 về thư chính KHÔNG trượt nghĩa ở các trục đã soi.

## F-03 [T1+T3 · MAJOR] §5 fit-map đề xuất: 3/7 ô Quyết định trộn nhiều giá trị — trượt luật điền Phần A của chính khuôn

- **Chữ khuôn** (món 3, `:31`): *"Mỗi dòng chọn **một** trong ba giá trị ở cột quyết định: `áp dụng` · `không áp dụng` · `hoãn`."* Đây là luật CHỨC NĂNG (Phần A), không phải hình thức tự do.
- **Chữ N1** (`:225-227`): GĐ-3 = *"áp dụng MỘT PHẦN — phần cổng-mã-lỗi HOÃN"* (2 nhãn trong 1 ô) · GĐ-4 = *"áp dụng — sổ TRƯỚC, chấm điểm CHỜ ANH GẬT wire"* · GĐ-5 = *"áp dụng phần THIẾU nhỏ; phần lõi khai 'đã có tương đương/mạnh hơn'"*. GĐ-0/1/2/6 hợp lệ.
- **Vì sao không phải chuyện chữ nghĩa:** khuôn có đường thoát CHÍNH THỨC mà N1 không dùng — nấc *đã đồng ý* định nghĩa là *"nói rõ adopt tới đâu"* (món 3 `:209`), tức scope-per-GĐ khai ở nấc + cột lý do + mục 4/8/10 báo cáo (kết luận per-KHOẢN `đã áp`/`không áp dụng`/`chưa làm`). Trộn "MỘT PHẦN/HOÃN" vào ô Quyết định làm: (a) máy soi hub không parse được 1-trong-3; (b) mơ hồ điều-kiện-vào GĐ-6 ("mọi GĐ trong phạm vi áp dụng đã thi công" — thi công TRỌN hay thi công PHẦN-ĐÃ-ĐỒNG-Ý?).
- **Acceptance sửa:** 3 ô đổi về `áp dụng`; scope hẹp ghi ở cột "Lý do/điều kiện" + khoản cổng-mã-lỗi và khối chấm-điểm-wire xuống mục 8 (phản biện) + mục 10 (nợ có mốc) của khuôn B.

## F-04 [T3 · MAJOR] N1 bỏ sót bẫy A1 (dấu-hiệu-adapt-thiếu ĐÃ XẢY RA THẬT Ở HUB) — đúng chỗ N1 đang gợi nguồn dữ liệu cho sổ 3 khối

- **Chữ Phần C A1** (món 3 `:278`): *"Dấu hiệu adapt thiếu, **đã xảy ra thật ở hub**: đổ hàng loạt khoản việc từ một sổ nội bộ sang cột lời nguyên văn. Những khoản đó là nhãn do đội đặt, không phải câu chủ dự án nói — đổ vào đó là tiêm diễn giải vào đúng cột cấm diễn giải... Cách đúng là đưa chúng vào một phụ lục riêng."*
- **Chữ N1** (GĐ-4, `:120`): *"Mảnh dữ liệu rải: việc-được-giao → WAL chain + HANDOFF + `docs/changelog/migration-todos.md`; sở-thích → 61 file auto-memory... có Why/How-to-apply nhưng KHÔNG nguyên-văn"* — N1 liệt các sổ nội bộ này như NGUYÊN LIỆU cho sổ 3 khối (W4) mà không kèm cảnh báo A1. Người thi công W4 đọc N1 sẽ làm đúng động tác hub đã ngã: migrate-đổ WAL/HANDOFF/auto-memory (toàn nhãn-do-đội-đặt) vào cột lời-nguyên-văn.
- N1 có chữ "KHÔNG nguyên-văn" (nhận diện thuộc tính) nhưng KHÔNG có luật cấm-đổ + không nhắc "phụ lục riêng" — bẫy được hub viết sẵn, N1 đọc trọn món 3 (tự khai dòng 4) mà không chép về.
- **Acceptance sửa:** W4 spec phải có dòng: dữ-liệu-cũ từ WAL/HANDOFF/auto-memory chỉ được vào PHỤ LỤC của sổ, cột nguyên-văn chỉ nhận chữ anh gõ từ thời điểm dựng sổ trở đi.

## F-05 [T3 · minor] A10 chỉ được map NỬA khoản — vế "đường ghi lại khi chấm sai" không có trong bản đồ

- N1 GĐ-4 (`:122`) map A10 = *"Bảo vệ tập-tín-hiệu-đóng... h24-signal-write.ps1 từ chối class ngoài enum"* — đúng vế PHÉP THỬ của A10 và là claim mạnh (máy thật).
- Nhưng A10 sàn (món 3 `:329`) còn vế chính: *"khi chủ dự án điều chỉnh điểm, có một quy trình: phân tích nguyên nhân ngắn xác định TẦNG NÀO SAI, gắn nhãn lớp lỗi riêng, ghi một dòng vào nhật ký của vai đã sai"* — quy trình thành văn này SE chưa có và N1 không liệt vào "SE thiếu" GĐ-4. (SE có error-ledger làm chỗ chứa — đúng ý "lớp lỗi sống ở sổ lỗi" — nhưng quy-trình-khi-chấm-sai chưa thành văn.)
- Mức minor vì GĐ-4 tổng thể N1 đã khai "hổng nhiều nhất" + chấm điểm "0 tồn tại"; vế này nằm trong vùng đã khai hổng, chỉ thiếu tên khoản.

## F-06 [T3 · MAJOR] GĐ-2 khoản sàn (v) "Khai luôn điểm mù" — N1 bỏ sót TRỌN một khoản sàn in đậm

- **Chữ phụ lục** (GĐ-2 sàn `:161`): *"**(v) Khai luôn điểm mù.** Vật chứng của **chính vai điểm danh** sinh ra sau khi nó chạy xong, nên nó không tự soi được. Cần một vai khác cùng phiên, cộng lượt soi ở đầu phiên sau, mới phủ hết."* — đoạn in đậm ⇒ thuộc SÀN BẮT BUỘC (thư chính `:281`: sàn = các đoạn in đậm món 2).
- **N1 GĐ-2** liệt "Hub đòi" 6 ý (lane nguyên văn · vai cấm-sửa · máy 4 vị từ · 3 nhịp · sổ 2 tầng · điểm danh 2 nguồn) — khoản (v) KHÔNG có mặt ở cả "Hub đòi" lẫn "SE thiếu". SE thật ra có họ hàng gần (closeout-sentinel là máy soi cửa-sau + bookend @open bắt lọt phiên trước — N1 chính nó map ở TC-08) — tức khoản này SE có nguyên liệu để khai "đã có tương đương", N1 bỏ thì mất một khoản dễ ăn điểm chứ không chỉ thiếu cảnh báo.
- **Acceptance sửa:** thêm khoản (v) vào bản đồ GĐ-2 + map với closeout-sentinel/bookend làm ứng viên tương-đương.

## F-07 [T3+T1 · minor×2] GĐ-3: khoản sàn (vii) "guard vắng tệp = vị từ máy" bị bỏ sót; N1 đánh số khoản LỆCH so phụ lục

- **(a) Bỏ sót khoản (vii):** phụ lục GĐ-3 `:204`: *"**(vii) Guard vắng tệp phải là vị từ máy** — kiểm sự tồn tại của tệp rồi bỏ qua và khai. **Đừng dùng mệnh đề 'cái đó chưa làm'**: mệnh đề đó sai ngay giây tệp kia hạ cánh."* — in đậm = sàn. N1 GĐ-3 "Hub đòi" liệt 7 ý nhưng không có ý này. (SE thực tế giàu vị-từ-đĩa — khoản dễ khai tương-đương, cùng dạng F-06.)
- **(b) Cite lệch số:** N1 `§7.1` gọi luật tự-trị 3-bậc là *"Khoản GĐ-3(vii)"* — trong phụ lục, tự-trị 3-bậc là khoản **(vi)** (`:202`), còn (vii) là guard-vắng-tệp. Nội dung claim đúng, con trỏ sai — đúng lớp "cite sai ≠ claim sai" (bài S171), nhưng người thi công W3 dò theo số khoản sẽ trỏ nhầm.

## F-08 [T1 · minor] Phạm vi BẤT BIẾN của luật chấm điểm: N1 trích câu hẹp (`:23`), khối chữ ký liệt RỘNG hơn (`:140`)

- N1 §0: *"hình thức đổi được, công thức + 3 mốc + ranh giới tầng thì KHÔNG"* — đúng nguyên văn món 4 `:23`.
- Nhưng khối chữ ký món 4 `:140` liệt phạm vi luật: *"công thức · **nguồn đếm** · bốn tầng · ba mốc niêm phong · **đường ghi lại khi chấm sai**"* — RỘNG hơn 2 khoản (nguồn đếm SỔ-chính-transcript-gương; quy trình khi chủ chỉnh điểm). Nếu W4b thiết kế theo câu N1 trích, có thể tưởng "nguồn đếm" là hình-thức đổi được — trong khi nó nằm trong phạm vi đã ký. Sửa: bản đồ W4b ghi phạm vi bất biến theo `:140` (5 khoản), không theo câu tóm `:23`.

## F-09 [T3 · minor] GĐ-5 khoản (iii) vế "tổng hợp bằng MỘT LƯỢT GỌI MỚI, không nối lại lượt cũ" không có trong bản đồ

- Phụ lục GĐ-5 `:304`: chuỗi 5 tầng kết bằng *"tổng hợp bằng một lượt gọi MỚI, không nối lại lượt cũ (nối lại làm rớt tham số mô hình đã ghi đè)"*. N1 GĐ-5 không nhắc vế này ở cả "đã có" lẫn "thiếu". Đáng nhắc vì SE có nghi thức resume-in-session (recovery #53) = nối-lại-lượt-cũ — hai thứ KHÁC MỤC ĐÍCH (recovery vật chứng ≠ tổng hợp), ranh cần một câu khai để người sau không viện resume làm cớ nối-lại khi tổng hợp.

## F-10 [T5 · MAJOR] Xung đột triết lý THỨ HAI có thật — và N1 TỰ CHỨA nó rồi phủ nhận bằng câu "duy nhất"

- **N1 §4.3:** *"Xung đột lớn duy nhất: exit-0-advisory ⟂ cổng-chặn-mã-lỗi... **Các mục còn lại là THIẾU chứ không NGƯỢC.**"*
- **Nhưng chính N1 §4.4(c)** mô tả một cặp NGƯỢC thật: hub đòi sổ-3-khối là **NGUỒN** ở lane quản trị — món 4 `:63` còn nâng cấp thành *"Cuốn sổ là **đường ghi chính**"* (nguồn đếm của chấm điểm, thuộc PHẠM VI ĐÃ KÝ `:140`) và khối việc-được-giao mang {trạng thái · số lần nhắc · con trỏ} — trong khi SE có luật ĐÃ RATIFY chiều ngược: `tiep.md:181` *"Checklist = VIEW derive tươi — **CẤM tạo file checklist nguồn-đôi (sàn-3)**"* (đo lại nguyên văn hôm nay, còn sống; bản sao thứ 2 ở `pause.md:115`). Một việc anh giao sẽ sống ở CẢ sổ-3-khối (trạng thái mở/đóng) LẪN WAL (mạch `[!]/[x]`) ⇒ đúng hình file-nguồn-đôi mà sàn-3 sinh ra để cấm — trừ khi vẽ ranh REQUEST-level (sổ) ⟂ TASK-level (WAL) + luật ai-derive-ai, và VẼ RANH = sửa phạm vi luật đã ratify = quyền anh.
- **Vì sao đây là xung-đột chứ không phải thiếu:** "thiếu" = SE chưa có vật, cứ xây là xong; ở đây xây-theo-chữ-hub thì VI PHẠM luật SE đang sống, xây-theo-luật-SE (sổ = view derive) thì mất tính "đường ghi chính" mà luật chấm điểm đã ký đòi. Phải CHỌN — cùng cấu trúc với cặp exit-0 ⟂ cổng-chặn mà N1 gọi là xung đột.
- **Hệ quả nếu không vá:** N4 đọc câu "duy nhất" sẽ xếp W4-sổ là wave thi công thẳng (N1 §5 GĐ-4 ghi *"sổ 3 khối + máy dò + 2 vế đèn = **việc máy**"*) — bỏ qua bước ra-quyết-định-ranh cần anh, đúng loại lỗi "áp một nửa" mà GĐ-6 hub soi.
- **Acceptance sửa:** §4.3 đổi thành "2 xung đột"; W4 thêm điều-kiện-vào: "ranh sổ⟂WAL được anh duyệt (1 quyết định: sổ = NGUỒN cho lời-anh + đếm-nhắc; WAL giữ NGUỒN mạch-việc; trạng-thái việc trong sổ = DERIVE từ WAL hoặc chỉ lật lúc đóng)".
- **Đã thử tìm xung đột 3 (không thành — khai phép):** luật-nấc ⟂ bookend (không ngược — nấc per-GĐ, bookend per-phiên, trực giao) · chấm-điểm ⟂ h24_cadence/2-strike (hoà: luật hub cấm nhét lớp "chấm sai" vào tập-tín-hiệu-đóng — h24-signal-write enum-đóng + error-ledger là đúng chỗ hub chỉ; 2-strike đếm per-class nên thêm class không đổi ngữ nghĩa class cũ) · GĐ-1 lane-đơn-trị ⟂ 2 kho adap-report (đo: `docs/governance/adap-reports/`=103 file hồ-sơ-adoption ⟂ `broadcasts/outbox/ai_infra/`=47 thư-gửi-hub — KHÁC chức năng, không phải 1 loại sổ 2 thư mục) · GĐ-1 giữ-tên-cũ ⟂ vocab-alias-map (HOÀ — frozen-set 5 vùng khớp luật hub) · tầng-1-lead-tự-chấm ⟂ meta-count-blind-spot S119 (không ngược — chính tầng-2 độc lập của hub là thuốc cho bệnh S119).

## F-11 [T2 · minor, gộp 4 vết vệ-sinh-thước] Claims đứng nhưng 4 vết đo-lường nhỏ trong artifact bền

1. **Số control sai:** N1 §124 khai control-dương *"'điểm dừng' cùng fileset = 3 file"* — đo lại: **5 file** (`check-email/pause/session-end/snapshot/tiep.md`), cả glob 1-cấp `.claude/commands/*.md` lẫn đệ quy đều 5, không có subdir để đổ lỗi mẫu số. Control chỉ cần >0 nên KẾT LUẬN 0-hit không đổ, nhưng con số control là số-đo-in-vào-artifact — sai 3≠5 đúng LỚP-5 mini.
2. **Cite lệch 1 dòng:** N1 GĐ-3 trích *"Exit 0 always..."* tại `governance-detectors.ps1:1963` — đo thật: **`:1962`** (`:1964` = `exit 0`). Nội dung đúng, neo số-dòng lệch — N1 đang map LỚP-6 cho SE mà tự giẫm LỚP-6 nhẹ trong chính artifact bền.
3. **Lệnh grep alternation không khai dialect:** §7.1 `"bậc|tự vá|mơ hồ"` · §7.6 `"roster|đăng ký"` — nếu tái lập bằng git-bash `grep` (BRE) thì `|` là literal ⇒ 0-hit dương-giả-kép. Đã tái lập TÁCH TỪNG VẾ bằng ripgrep: `roster`=0 (control `AS-17`=4) · `đăng ký|đăng-ký`=0 · `bậc`=1 hit đúng "bậc-MẠNH" · `viện dẫn`=0 (control `How to apply`=48/61) · `chấm điểm`=0 (control "điểm dừng"=5) ⇒ **mọi kết luận 0-hit của N1 ĐỨNG**, chỉ lệnh-như-ghi không tự-chứng.
4. **"~70%" GĐ-2 không mẫu số:** con số duy nhất kiểu ước trong fit-map (§5 GĐ-2 *"nâng từ ~70%"* + TC-05 *"ĐÃ CÓ 70%"*) — không kèm phép đếm tử/mẫu. Đếm thô theo 8 bước GĐ-2 thư chính: (i)✓ (ii)nửa (iii)✓ (iv)nửa-agent-memory-có-runs-không (v)✓ (vi)2/4-vị-từ (vii)2.5/3 (viii)✗ ≈ 5.5-6/8 ≈ 65-72% — số N1 KHÔNG sai thô nhưng vi phạm A11/bẫy-5-GĐ-1 (in số kèm mẫu). Sửa: thay "~70%" bằng phân số khoản "x/8 bước, liệt tên" hoặc bỏ số.

## Bảng verify T2 — mọi claim "SE ĐÃ CÓ" chống lưng 3 kết luận lớn (đã mở tận nơi, ~60 phép)

| Claim N1 | Phép đo | Kết quả |
|---|---|---|
| GĐ-5: fable-real/clone.md tồn tại + runbook §2.1-bis INVOCATION + H21 "vai = ANH GÁN" | ls + Grep `:11-14,:68` | ✅ ĐỨNG |
| GĐ-5: `hmw.js:73` TIER2_EXPECTED + 2-key `spawn-model-audit.ps1:102` + PA-2b INFORMATIONAL | Read/Grep | ✅ ĐỨNG (2 giá trị `claude-opus-5` đồng bộ) |
| GĐ-5: đo S126 0-mismatch + control no-tier→opus (`session-start.md:51`) | Read `:50-53` | ✅ ĐỨNG đúng dòng |
| GĐ-5: chung-gốc runs/ (90 folder) + scaffold @P1 (`hmw.js:9`) | ls wc + Read | ✅ ĐỨNG |
| GĐ-5: ctx-verifier chống-nạp-giả + B1 tiep_reload (`tiep.md:183`) | Read | ✅ ĐỨNG đúng dòng (câu "đã nạp suông KHÔNG tính" nguyên văn) |
| GĐ-2: nhip-no `run-chua-gom` + DUAL-ACCEPT port `tiep.md:40-53` + CONFIG-THIEU no-default | Read header `:1-53` | ✅ ĐỨNG (header tự khai đúng như N1 tả) |
| GĐ-2: archive-gate A7 substring-resolve SimpleMatch + size>0 | Grep `:16-19,:233-276` | ✅ ĐỨNG |
| GĐ-2: khối instruments closeout (`session-end.md:164`) 5 máy + mfe-eval AUTO | Read | ✅ ĐỨNG đúng dòng |
| GĐ-2: obs-pair UNCONDITIONALLY (`closeout-sentinel.ps1` header Roles) | Read `:14-15` | ✅ ĐỨNG |
| GĐ-2: secrets_sweep rglob (`session_ctx.py`) | Grep `:173,:180` | ✅ ĐỨNG |
| GĐ-2/TC-04: WAL "#53: 6/6... mất 0 byte" | Grep WAL `:22` | ✅ ĐỨNG |
| GĐ-3: nhip-no gọi 4 cửa `session-start:269 · session-end:118 · tiep:154 · pause:113` + "KHÔNG chặn" cả 4 | Read 4 file | ✅ ĐỨNG cả 4 dòng CHÍNH XÁC |
| GĐ-3: cặp auditor VÔ-ĐIỀU-KIỆN 2 đầu (`session-start:269` + `session-end:119`) + ring2 PIN đích-danh | Read | ✅ ĐỨNG |
| GĐ-3: tick fail-loud + fault-inject 5/5 (`session-start:246`) · M5 + positive-control 5/5 (`session-end:125`) · gate đo nguyên văn (`session-end:207`) · mind-check không chặn (`tiep:169`) | Read | ✅ ĐỨNG cả 4 |
| GĐ-3: h24-signal-write exit≠0 ngoài enum + `_frozen_until_owner` + "may NOT invent a class" | Grep `:13-22,:49,:157` | ✅ ĐỨNG (exit 2 tường minh) |
| GĐ-3: error-ledger 2-strike + AS-17 promote S150/S151 | Grep `:12,:42,:74` | ✅ ĐỨNG |
| GĐ-3: detectors exit-0 doctrine + tách TOTAL⟂INFORM (`:65-72`, `:1941+`) | Read | ✅ ĐỨNG (vết ở `:1960-1962`; cite `:1963` lệch 1 → F-11.2) |
| GĐ-1: detectors 1964 dòng · Write-Section=20 · C11 regex + vết ctx-audit-FLAG-6 (`:1091,:1102,:1769`) | wc/grep | ✅ ĐỨNG |
| GĐ-1: vocab-alias-map append-only single-writer + frozen-set + cột lý-do | Read `:1-21` | ✅ ĐỨNG |
| GĐ-0: 0-hit `_index` + control harness-22=3 + byte 4 thư khớp | Grep + ls | ✅ ĐỨNG (tái lập y nguyên) |
| GĐ-4: 4 phép 0-hit (chấm điểm · viện dẫn · roster · đăng ký) + "bậc"=1 hit | Grep tách vế + 3 control | ✅ ĐỨNG (→ F-11.3) |
| §4.6: runs=90 ≠ 87 đề bài · auto-memory=61 ≠ 60 | wc | ✅ ĐỨNG — số N1 đúng, đề bài lệch |
| GĐ-3: WAL Sàn-3 5/5 + 3 ERRATA | Grep `:7,:19-21` | ✅ ĐỨNG |

**KHÔNG một claim "SE ĐÃ CÓ" nào đổ.** Rủi ro trục T2 (khai miễn dựa trên "đã thi công" giả) — KHÔNG kích hoạt trên mẫu đã soi.

## Kết luận T4 — 4 khoản VƯỢT-KHUNG: 4/4 gán ĐÚNG cấp

- (a) exit-0→gate: ĐÚNG vượt-khung (đổi cơ chế doctrine đang sống ở ≥3 máy + 4 cửa — đo thật ở F-10/T2). Không phải né việc: N1 vẫn giữ phần 4-nhãn/vòng-hỏi là việc áp được (W3).
- (b) wire chấm điểm 2 cửa + vai tầng-2/3: ĐÚNG — "áp thẳng" của hub chỉ miễn chữ ký HUB (`món 4:133` "không cần hỏi hub ký lại"), không miễn quyền anh với nghi-thức 2 cửa + roster (nguyên tắc S119/S145). N1 tách W4 (trong khung) ⟂ W4b (gated) là tách chuẩn.
- (c) sổ-3-khối: cấp ĐÚNG (cần anh vẽ ranh) — nhưng bị chính N1 phân loại nhầm "không NGƯỢC" ở §4.3 → F-10.
- (d) đẻ vai mới: ĐÚNG — đụng roster + GĐ-6(iii) trọn-gói-1-commit.
- Không khoản nào bị thổi lên để né, không khoản nào bị hạ để tự làm.

---

# TỔNG KẾT N2

**Verdict: PASS_WITH_FIXES — 0 CRITICAL / 5 MAJOR (F-01 · F-03 · F-04 · F-06 · F-10) / 6 minor (F-05 · F-07a · F-07b · F-08 · F-09 · F-11)**

Bản đồ N1 là bản đồ TỐT: ~60 phép đo độc lập trên ~45 claim — không claim nào đổ; 3 phép 0-hit tái lập đứng cả khi tách vế; số kho (90/61) N1 đúng còn đề-bài-lead lệch. Chỗ phải vá TRƯỚC KHI N4 tiêu thụ: (1) xoá "W5 ghép W2" — vi phạm OD-2 + điều-kiện-vào GĐ-5; (2) fit-map 3 ô về đúng 1-trong-3 giá trị; (3) chép bẫy A1 (cấm đổ sổ-nội-bộ vào cột nguyên-văn) vào spec W4; (4) bổ khoản sàn GĐ-2(v) điểm-mù + GĐ-3(vii) guard-vắng-tệp; (5) §4.3 đổi "xung đột duy nhất" → "2 xung đột" (thêm sổ-NGUỒN ⟂ sàn-3-CẤM-nguồn-đôi) + W4 thêm điều-kiện-vào "anh duyệt ranh sổ⟂WAL".

**END sub-review-n2-S180 — VERDICT=PASS_WITH_FIXES-0C-5M-6m; mọi claim SE-ĐÃ-CÓ đứng sau ~60 phép; 2 xung đột triết lý (N1 khai 1); 4/4 VƯỢT-KHUNG đúng cấp; 5 vá bắt buộc trước N4.**
