# sub-review-fidelity-2 — LENS FIDELITY (reviewer adversarial)

> Vai: reviewer ADVERSARIAL. Nhiệm vụ: chấm ĐỘ TRUNG THỰC bảng §3 của `sub-invest-bch-1.md`
> so với bảng 21 bước ở `run.md` (= BẢN TRÍCH SƠ ĐỒ GỐC, nguồn sự thật duy nhất; PDF gốc là ảnh).
> KHUNG RỖNG ghi @lượt 1 TRƯỚC KHI ĐỌC (chống #53 return-garble) — nội dung append dần bên dưới.

## 0. Trạng thái file (append-log)
- [x] Lượt 1: khung rỗng đã ghi đĩa.
- [x] Lượt 2-5: đọc 2 file nguồn + 4 phép đo máy (lane-diff, SLA-col, disclaimer-count, grep drop).
- [x] Chốt: verdict `CO-VAN-DE — 10 điểm` (2 HIGH · 3 MAJOR · 5 MINOR). Khung xương SẠCH.

## 1. Nguồn đo (2 file, KHÔNG đọc gì khác)

| Ký hiệu | Đường dẫn | Vai trò |
|---|---|---|
| SRC | `.claude/workflows/runs/2026-07-27-S156-bch-post-ceo-flow/run.md` | bảng 21 bước `:18-40` + SLA `:42-43` + ghi-chú `:45-56` = NGUỒN SỰ THẬT |
| TGT | `.claude/workflows/runs/2026-07-27-S156-bch-post-ceo-flow/sub-invest-bch-1.md` | §3 `:106-137`, bảng `:112-128` (15 hàng b.7→21) = BỊ CHẤM |

**Chênh lệch cấu trúc (gốc của mọi vấn đề bên dưới):** SRC bảng có **3 cột** (`| # | Lane | Nội dung |`,
`run.md:18`). TGT bảng có **9 cột** (`| # | Lane | Actor | Trigger | Input | Output | Điều kiện chuyển |
Nhánh lỗi | SLA |`, `sub-invest-bch-1.md:112`). ⇒ **5 cột (Actor/Trigger/Input/Điều-kiện-chuyển/Nhánh-lỗi)
được DỰNG HOÀN TOÀN bởi invest**, `Output` bán-dẫn-xuất từ cột `Nội dung`. Legend `:108-110` chỉ khai
xuất-xứ cho **1 cột duy nhất là SLA** ("Cột SLA = đúng những gì sơ đồ ghi (3 mốc), '—' = sơ đồ không ghi").

## 2. Bốn phép đo máy (chạy trên đĩa, không đọc bằng mắt)

| # | Phép | Lệnh | Kết quả |
|---|---|---|---|
| P1 | Tập bước | so `awk` cột 1 TGT `:114-128` vs SRC `:26-40` | **15 vs 15, khớp 7..21, 0 gap 0 thừa** |
| P2 | Lane | so cột 2 từng hàng | **15/15 KHỚP TUYỆT ĐỐI** (kể cả `Procurement + CCM` b.17) |
| P3 | Disclaimer | `awk NR 114-128 /sơ đồ (KHÔNG\|không) (vẽ\|ghi)/` | **5/15 hàng** có khai (b.8,10,11,12,15); **10/15 im lặng** |
| P4 | Rơi ghi-chú | `grep -c` 5 cụm ghi-chú BCH-lane của SRC trong TGT | `năng lực`0 · `khảo sát`0 · `loại bớt`0 · `THAM VẤN`0 · `danh sách mời thầu`0 — **0-hit toàn file** |

## 3. Bảng đối chiếu từng hàng (15/15)

| # | Lane SRC→TGT | Nội dung | Điều kiện chuyển | Nhánh lỗi | Phán |
|---|---|---|---|---|---|
| 7 | Proc→Proc ✅ | khớp `run.md:26` | "Gửi xong → 8" (suy từ số) | sự-thật-hệ-thống (SMTP TODO) ✅ | OK |
| 8 | PROJECT ✅ | khớp `:27` | suy từ số | **KHAI** "sơ đồ KHÔNG vẽ vòng lặp" ✅ | OK · Input bịa xuất-xứ → m7 |
| 9 | PROJECT ✅ | khớp `:28` | suy từ số | ⚠ neo ghi-chú SRC `:51-52` vào b.9 → **M3** | LỖI |
| 10 | Proc ✅ | khớp `:29` | suy từ số | **KHAI** "(sơ đồ không vẽ nhánh trả)" ✅ | OK |
| 11 | CCM ✅ | khớp `:30` | suy từ số | **KHAI** "sơ đồ không vẽ" ✅ | OK |
| 12 | CEO ✅ | khớp `:31`, giữ "CEO **hoặc** CCM" | suy từ số | **KHAI** "sơ đồ KHÔNG ghi ❓Q3" ✅ | OK |
| 13 | Proc ✅ | khớp `:32` | suy từ số | sự-thật-hệ-thống ✅ | OK · SLA chủ-thể → M5 |
| 14 | PROJECT ✅ | khớp `:33` | suy từ số | ⚠ "lặp 13↔14 (sơ đồ ghi PHỐI HỢP)" → **M4** | LỖI |
| 15 | Proc ✅ | `:34` MƠ HỒ | ⚠ "TP đồng ý + **ký nháy**" → **H2** | KHAI "sơ đồ không vẽ ❓Q13" ✅ | LỖI |
| 16 | PROJECT ✅ | `:35` | — | ⚠ Trigger/Input chốt "TP đã ký nháy" → **H2** | LỖI |
| 17 | Proc+CCM ✅ | khớp `:36`, trích nguyên ngoặc | suy từ số | sự-thật-hệ-thống ✅ | OK |
| 18 | CEO ✅ | khớp `:37` ">5 tỷ" | "Ký (hoặc ≤5 tỷ: skip ❓Q4)" ✅ | ⚠ "CEO từ chối→TuChoi/TraLai" **0 disclaimer** → m6 | ~ |
| 19 | Proc ✅ | khớp `:38` | suy từ số | "—" ✅ | OK |
| 20 | CCM ✅ | khớp `:39` | suy từ số | "—" ✅ | OK |
| 21 | Proc ✅ | khớp `:40` | suy từ số | "vận đơn ngoài hệ thống ❓Q14" (thêm, có ❓) | OK |

## 4. Năm câu hỏi bắt buộc — trả lời

### Q1 — BỊA (có ở §3, KHÔNG có ở nguồn)? → **KHÔNG có bước bịa.**
P1: tập bước TGT = {7..21} = tập SRC. 0 bước phát minh. Ở cấp **nội dung ô** thì có 1 ca nhỏ (m7).

### Q2 — RƠI (có ở nguồn, mất khỏi §3)? → **0 bước rơi**; nhưng **5 cụm ghi-chú BCH-lane rơi im lặng** (m8).
`run.md:46-49` khối *"Phối hợp BCH dự án"* (cập nhật danh sách thầu phụ · gom tóm tắt tiến độ/scope/bản vẽ FC ·
kiểm tra bổ sung trước khi mời thầu · **bố trí khảo sát dự án** · **kiểm tra năng lực thầu phụ / loại bớt đơn vị
làm không đạt**) + `:50` *THAM VẤN* → P4 cho **0-hit trên TOÀN file TGT**. Đây là việc của ĐÚNG lane được giao
(PROJECT/BCH), rơi trước b.7 nên ngoài dải §3 — nhưng file **không hề khai** "các ghi-chú BCH này nằm trước b.7,
ngoài phạm vi". Người đọc không biết chúng tồn tại.

### Q3 — Lane/actor gán SAI? → **Lane: 15/15 ĐÚNG (P2). Actor: 1 ca sai/mơ-hồ (H2, b.15-16).**
Không hàng nào đổi lane. `Procurement + CCM` (b.17) và `CEO hoặc CCM` (b.12) đều giữ nguyên hình dạng lai của
nguồn thay vì ép về 1 lane — đây là điểm **làm tốt**, chống được cám dỗ đơn-giản-hoá.

### Q4 — SUY DIỄN không khai (ĐIỂM NGUY NHẤT) → **CÓ, cả cấp CỘT lẫn cấp Ô.**
- **Cấp CỘT (H1):** SRC không có bất kỳ điều-kiện-chuyển nào (3 cột, `run.md:18`) ⇒ **15/15 ô 'Điều kiện chuyển'
  là suy diễn từ THỨ-TỰ-SỐ**, không ô nào khai. Cột 'Nhánh lỗi' chỉ 5/15 khai (P3). Legend `:108-110` khai
  xuất-xứ cho **mỗi cột SLA** ⇒ đọc ngược lại: im-lặng ở 2 cột kia không phân biệt được "sơ đồ có" vs "em suy".
- **Cấp Ô:** M3 (neo sai chỗ), M4 (trích-dẫn nguỵ-trang suy diễn), m6 (bất đối xứng khai báo), m7 (bịa xuất-xứ).

### Q5 — SLA 3 mốc → **Khoảng gán ĐÚNG 3/3; nhưng CHỦ-THỂ mốc "3 ngày" chốt 1 chiều không khai (M5).**
| Mốc SRC `run.md:42-43` | Neo SRC | TGT gán | Phán |
|---|---|---|---|
| `10-14 ngày` | b.1→4 | không xuất hiện (ngoài dải 7-21) | ✅ đúng — không kéo bừa vào |
| `3 ngày` | b.13-14 (`:53-54`) | `:120` b.13 + `:121` b.14 | ✅ khoảng đúng · ⚠ chủ-thể → M5 |
| `7-10 ngày` | b.13→18 | `:120` b.13 … `:125` b.18 "kết khúc" | ✅ khoảng đúng · ô 15/16/17 "trong khúc 7-10d" = nội suy (m9) |

## 5. Danh sách điểm (10)

**H1 [HIGH] — Không có khai xuất-xứ ở CẤP CỘT cho 2 cột suy-diễn-nặng-nhất.**
`sub-invest-bch-1.md:112` bảng 9 cột vs `run.md:18` nguồn 3 cột ⇒ 5 cột dựng mới. Legend `:108-110` chỉ khai
cho SLA. Đo: 'Điều kiện chuyển' **15/15 ô** không có neo nguồn (nguồn 0 điều-kiện); 'Nhánh lỗi' **10/15 ô**
không có disclaimer (P3). Hệ quả: người đọc §3 để viết spec sẽ tưởng sơ đồ CÓ vẽ các nhánh này.
*Tiêu chí nhận:* thêm 1 dòng legend đúng kiểu dòng SLA đã có, cho cả 2 cột; hoặc gắn ký-hiệu `[SĐ]`/`[SUY]`
từng ô. (Khuôn đã tồn tại ngay trong chính file — chỉ chưa áp cho 2 cột kia.)

**H2 [HIGH] — b.15/16: gán "THẦU PHỤ ký nháy" trong khi nguồn mơ hồ, có thể là BCH ký nháy.**
Nguồn `run.md:34`: *"thầu phụ chuyển về BCH dự án ký nháy gửi về công ty"* — đọc B (chuỗi động từ đổi chủ ngữ
sau "về BCH dự án": **BCH** ký nháy rồi gửi về công ty) ít nhất ngang bằng đọc A của invest, và ăn khớp hơn với
`run.md:36` b.17 *"CCM - Kiểm tra, ký nháy"* (chuỗi ký nháy NỘI BỘ: BCH → CCM → CEO ký chính). `run.md:35` b.16
*"BCH nhận hợp đồng ký nháy"* cũng đọc được cả 2 chiều. TGT chốt đọc A **3 lần, 0 lần khai mơ hồ**:
`:122` "TP đồng ý + ký nháy → 16" · `:123` "Nhận bản **TP đã ký nháy**" · `:212` Q12 "b.16 (TP ký nháy)".
*Vì sao chặn:* nếu đọc B đúng thì hệ thống cần **vai ký-nháy nội bộ của BCH** (user + trạng thái + chứng từ),
khác hẳn với "chứng từ do bên ngoài ký" — Q12 đang hỏi sai đối tượng.
*Tiêu chí nhận:* biến thành câu hỏi owner (Q15) hoặc khai "2 cách đọc, em chọn A vì …".

**M3 [MAJOR] — b.9: neo ghi-chú nhánh-lỗi vào bước 9, trình bày như thể sơ đồ đặt nó ở đó.**
`:116` viết `Ghi chú sơ đồ: "hồ sơ sai sót thiếu khối lượng, sai spec, thiếu phạm vi → gửi mail làm rõ xác nhận"`.
Nội dung CÓ trong nguồn (`run.md:51-52`) ⇒ trích đúng, **nhưng nguồn để nó KHÔNG NEO BƯỚC** (nằm trong khối
"Ghi chú phối hợp (chữ nhỏ trên sơ đồ)"). Chỉ dấu ngược: nội dung trùng gần hết với **b.3** `run.md:22`
*"Nhận và kiểm tra hồ sơ báo giá (có thể **làm rõ** - update giá nếu chưa đủ **phạm vi**)"* ⇒ nhiều khả năng
ghi-chú thuộc khúc 1-4 (nhận báo giá), không phải b.9. Prefix "Ghi chú sơ đồ:" biến 1 phỏng-đoán-vị-trí thành
1 trích-dẫn-có-thẩm-quyền. *Tiêu chí nhận:* "sơ đồ có ghi-chú nhánh lỗi **không neo bước**; em gán vào 9 vì …".

**M4 [MAJOR] — b.14: trích-dẫn nguỵ-trang suy diễn (citation-laundering).**
`:121` "Thiếu info → **lặp 13↔14** (sơ đồ ghi PHỐI HỢP)". Nguồn `run.md:53-54` chỉ nói *BCH gửi full thông tin
bản vẽ/khối lượng/tính toán để PMH soạn HĐ gửi BCH trong vòng 3 ngày* — **không có vòng lặp**, không có nhánh
"thiếu info". Dấu ngoặc đơn dẫn nguồn ở ngay sau mệnh đề suy diễn ⇒ đọc lướt thành "sơ đồ có vẽ vòng lặp".
Đây đúng lớp M3 nhưng nguy hơn vì phần được dẫn nguồn (PHỐI HỢP) là THẬT, phần suy diễn (vòng lặp) là mới.

**M5 [MAJOR] — SLA "3 ngày": chủ-thể đồng-hồ chốt 1 chiều, không khai mơ hồ.**
Nguồn `run.md:53-54`: *"BCH gửi full thông tin … **để PMH soạn HĐ gửi BCH trong vòng 3 ngày**"* — trạng ngữ
"trong vòng 3 ngày" đứng NGAY SAU "PMH soạn HĐ gửi BCH" ⇒ đọc tự nhiên nhất là **deadline của PMH**. TGT chốt
ngược: `:120` "**BCH gửi info** trong 3 ngày", `:121` "3 ngày", và `:200` Q10 cũng chỉ ghi 'SLA "3 ngày" (13-14)'
⇒ owner không được hỏi lại. *Vì sao chặn:* SLA gắn sai vai = đếm ngược sai người, thông báo trễ hạn sai người,
và Q10 (có nên ENFORCE) đang hỏi trên tiền-đề chưa chắc.

**m6 [MINOR] — b.18 thiếu disclaimer trong khi hàng cùng loại thì có.**
`:125` "CEO từ chối → TuChoi/TraLai" — sơ đồ `run.md:37` chỉ vẽ "CEO ký HĐ nếu >5 tỷ", không vẽ nhánh từ chối.
b.10/b.11 (`:117`,`:118`) cùng tình huống thì CÓ ghi "sơ đồ không vẽ". Kỷ luật khai báo không đều ⇒ củng cố H1.

**m7 [MINOR] — b.8 Input bịa xuất-xứ.** `:115` "Mẫu **vật liệu** + shopdrawing **từ TP/NCC**" — `run.md:27` chỉ
có "Duyệt mẫu + shopdrawing với TVGS". "vật liệu" và "từ TP/NCC" là bổ sung của invest (hợp lý về nghiệp vụ,
nhưng vẫn là thêm dữ kiện vào ô trình bày như mô tả sơ đồ).

**m8 [MINOR] — 5 cụm ghi-chú BCH-lane rơi im lặng (P4 = 0-hit).** Xem Q2 ở trên. Không vi phạm dải §3 (7→21)
đã khai, nhưng file không có 1 dòng nào nói chúng tồn tại và nằm ngoài dải — với deliverable mang tên
"lane PROJECT (BCH)" thì đây là khoảng trống người đọc không thấy được.

**m9 [MINOR] — legend "3 mốc" quá lời so với chính bảng.** `:110` "Cột SLA = đúng những gì sơ đồ ghi (3 mốc),
'—' = sơ đồ không ghi" — bảng chỉ chứa **2 mốc** (mốc `10-14 ngày` thuộc b.1→4 ngoài dải, đúng khi bỏ), và 3 ô
b.15/16/17 ghi "trong khúc 7-10d" = **nội suy thành-viên-khoảng**, không phải chữ trên sơ đồ, cũng không phải "—".
Suy diễn ở đây minh bạch ("trong khúc") nên rủi ro thấp, nhưng legend tự nó bị vi phạm.

**m10 [MINOR/INFO] — lane ⑥ KÝ KẾT HỢP ĐỒNG (và lane ① TENDER) không có bước số nào neo vào.**
`run.md:14` khai 6 lane; bảng 21 bước `run.md:20-40` chỉ dùng 4 (Procurement/CCM/CEO/PROJECT). Lane ⑥ — đích
của cả đề bài ("→ Ký kết HĐ") — chỉ sống trong ghi-chú `run.md:55-56`. TGT kế thừa đúng (không bịa lane) nhưng
KHÔNG nêu mâu thuẫn nội tại này của nguồn. Nửa "Thầu phụ ký song song HĐ chủ đầu tư" chỉ xuất hiện lạc trong
Q11 `:208-209`, nửa "NCC phải duyệt mẫu mới ký" ở prose `:137` — cả hai **không có ô nào trong bảng**, nên ràng
buộc THỜI ĐIỂM ký (song song / ký trước) không vào được §3.

## 6. Điều làm ĐÚNG (ghi để không hạ chuẩn nhầm chỗ — Smart-Friend guard 2 chiều)
- Khung xương **SẠCH 15/15**: 0 bước bịa, 0 bước rơi, 0 lane sai (P1+P2). Đây là trục dễ sai nhất và nó đúng.
- Giữ nguyên **hình dạng lai** của nguồn thay vì ép chuẩn hoá: b.12 "CEO **hoặc** CCM", b.17 "Procurement + CCM".
- **Không kéo** mốc `10-14 ngày` (ngoài dải) vào bảng — đúng kỷ luật phạm vi.
- 5 hàng khai thẳng "sơ đồ không vẽ/không ghi" + 14 câu ❓Q neo vào ô ⇒ khuôn khai-báo **đã có sẵn**, vấn đề
  chỉ là **áp không đều** (H1/m6). Chi phí vá thấp.
- Trích nguyên văn có ngoặc kép ở b.17 ("ký nháy hoặc ký chính") — đúng cách phân biệt trích vs diễn giải.

## 7. Verdict

**`LENS-FIDELITY: CO-VAN-DE — 10 điểm`** (2 HIGH · 3 MAJOR · 5 MINOR).

Khung xương trung thực; **sai lệch tập trung TRỌN ở trục KHAI-BÁO XUẤT-XỨ**, đúng chỗ đề bài cảnh báo là
nguy nhất. Không có điểm nào đòi sửa nội dung nghiệp vụ — 8/10 điểm vá bằng cách **thêm nhãn/câu hỏi**, 2 điểm
(H2, M5) phải **hỏi owner** vì nguồn thật sự mơ hồ và invest đã chốt hộ.

**Chặn:** H2 + M5 nên thành câu hỏi owner TRƯỚC khi lead ghi spec — cả hai đang là tiền-đề im lặng cho Q10/Q12.
