# sub-invest-3-vong-2lo — S149 lane L3 "2 lỗ cuối + eval use-side"

> Lane: `investigator-codebase` (read-only). Nguồn: ĐÚNG 2 thư outbox AI_INFRA.
> Mục tiêu: trích VERBATIM để bước sau viết spec — diễn giải sai = code sai.

## 0. Nguồn + kiểm toàn vẹn (hash-verify TRƯỚC khi áp — H18)

| # | File | bytes | stamp verdict |
|---|---|---|---|
| T1 | `D:/Dropbox/CONG_VIEC/AI_INFRA/broadcasts/outbox/all/2026-07-19-Governance-harness-dong-du-vong-audit-va-eval-use-side.md` | 7249 (59 dòng, LF, 0 CRLF) | `OK (canonical match)` — declared `c034a916eb92b0c1…` == canonical |
| T2 | `D:/Dropbox/CONG_VIEC/AI_INFRA/broadcasts/outbox/all/2026-07-15-Governance-phuong-phap-dem-token-tien-de-vong4.md` | 12037 (75 dòng, LF, 0 CRLF) | `OK (canonical match)` — declared `e0bb5bbf1f18464f…` == canonical |

Lệnh: `python scripts/stamp_verify.py <file>` (bản port local repo SE), exit 0 cả hai. ⇒ nội dung trích dưới đây là bản **chưa bị sửa sau khi đóng dấu**.

T1 frontmatter: `type: update` · `to/targets: all-fit` · `status: "PUBLISHED s105 (2026-07-19) — anh-lệnh gỡ-defer 19-07 · gate PASS-W-FIXES folded · stamp exit-0 · sister pull /adap-apply."` (T1:11) · `reviewer_gate: "PASS-W-FIXES (gate-sub s105 2026-07-19 — 2-MINOR {52-exact · floor-phrasing} + C-3-generalize + C-4-clarify ĐÃ fold · falsify 5/5 HELD, khoản-③ verified nhất-quán bản checklist trước)"` (T1:13).

T2 frontmatter: `type: new` · `status: published` · `content_sha256: "e0bb5bbf…"` (T2:10) — **nhưng** `reviewer_gate` (T2:12-13) vẫn kết bằng `content_sha256 PENDING_STAMP -> stamp below.` (vết stale nội-thư, xem §6 Surprise).

---

## (a) KHOẢN ① — vai-KIỂM cho MỖI vòng-ĐO

### a.1 Bối cảnh lỗ (T1:24, VERBATIM)

> Bài học gốc (đã phát trong khung trước): vòng-3 có con thứ-ba kiểm lại 2 con đo, và ngay lượt chạy đầu nó bắt được verdict sai trước khi vào sổ vĩnh viễn. Các vòng còn lại (tooling/harvest · soi-lead · nén-ngủ) khi đó vẫn là "2 con đo, 0 con soi" — lỗi của con đo sẽ vào sổ mà không ai biết. Owner đã defer; nay chốt đóng. (Vòng thứ-năm — sàn-sự-thật — không cần vai-audit riêng: nó là floor chính-sách áp tại chỗ lúc viết artifact, không phải vòng-đo có con-đo để kiểm.)

⇒ **Vòng KHÔNG cần vai-kiểm = vòng thứ-năm (sàn-sự-thật)**, lý do VERBATIM: *"nó là floor chính-sách áp tại chỗ lúc viết artifact, không phải vòng-đo có con-đo để kiểm"*.
⇒ **Vòng-3 (memory) đã có sẵn** con thứ-ba → không phải thêm mới.
⇒ **3 vòng phải bổ vai-kiểm: tooling/harvest · soi-lead · nén-ngủ.**

### a.2 Sàn chính xác từng vòng (T1:26-29, VERBATIM)

> **Cách hub đóng:** thêm cho MỖI vòng-đo còn thiếu một vai-audit riêng, cùng khuôn với vai kiểm của vòng-3:
> - **Audit vòng tooling/harvest** — soi báo-cáo 2 con đo vòng đó: spot-check từng con số bằng tay mình (đếm lại plugin, grep lại record-map, wc lại byte), chủ động tìm cách bác ≥2 claim.
> - **Audit vòng soi-lead** — kiểm từng FLAG có evidence thật không, VÀ **thách vùng CLEAN** (chọn ≥1 lens đang báo sạch, tự re-check mẫu — chống "sạch giả", lens xoay vòng giữa các phiên).
> - **Audit vòng nén-ngủ** — kiểm máy-archive 2 tầng (gates bảo-toàn byte khi có move; no-op thì verify no-op-đúng-vì-dưới-ngưỡng chứ không phải máy chết im) + chất-lượng bản nén theo content-diff (không tin mtime).

**Bóc thành yêu-cầu kiểm-được (parse của tao, KHÔNG phải chữ hub):**

| Vòng | Vai-kiểm phải làm | Cụm chữ khoá bắt buộc trong output |
|---|---|---|
| tooling/harvest | đọc báo-cáo 2 con đo → **spot-check TỪNG con số BẰNG TAY MÌNH**: "đếm lại plugin", "grep lại record-map", "wc lại byte" | ≥2 claim bị **chủ động tìm cách bác** |
| soi-lead | (i) mỗi FLAG có evidence thật không; (ii) **thách vùng CLEAN** = chọn ≥1 lens đang báo sạch, tự re-check mẫu | "lens xoay vòng giữa các phiên" (không lặp lens cũ) |
| nén-ngủ | (i) máy-archive **2 tầng**: có move ⇒ gate bảo-toàn byte; **no-op ⇒ verify no-op-ĐÚNG-VÌ-dưới-ngưỡng**, không phải máy chết im; (ii) chất-lượng bản nén theo **content-diff** | 🔴 **KHÔNG tin mtime** |

### a.3 Dogfood lần đầu (T1:31, VERBATIM — dùng làm mẫu acceptance)

> **Dogfood thật (lần chạy đầu, cùng ngày phát bản này):** các audit mới đều trả PASS-kèm-cờ-nhỏ với đòn falsify có răng — một con re-đo 11/11 claim khớp chính xác từng byte; một con xác nhận 2 FLAG của con đo là true-positive và fix của lead đúng+đủ; một con tự định-lượng lại nợ-nén và xác nhận bounded. Không con nào rubber-stamp: mỗi verdict kèm mục "đã-thử-phá-gì, đòn nào giữ".

⇒ Mỗi verdict audit **bắt buộc có mục "đã-thử-phá-gì, đòn nào giữ"** (chống rubber-stamp). Chuẩn hình-dạng: `PASS-kèm-cờ-nhỏ`.

---

## (b) KHOẢN ② — eval phía SỬ-DỤNG (phần SE nghi = 0)

### b.1 Vì sao (T1:35, VERBATIM)

> Đo presence (nạp có mặt trong ngữ cảnh) không trả lời câu "cái đã nạp có được DÙNG thật khi ra quyết định không". Hub bổ phép đo **cross-session theo evidence**: lấy mẫu các guard/mark đang active, quét sổ các phiên gần nhất xem từng cái có được trích/fire thật không.

**Cơ chế đo cross-session (bóc từ câu trên):** (1) **lấy mẫu** các guard/mark **đang active** → (2) **quét sổ các phiên gần nhất** (cửa sổ N phiên) → (3) với TỪNG cái, hỏi: **có được trích/fire thật không**.

### b.2 Ba nhãn (T1:37, VERBATIM)

> - Kết quả trả 3 nhãn trung thực: `APPLIED` (có evidence trích/fire trong cửa sổ) · `DORMANT` (0 evidence — **KHÔNG đồng nghĩa MISS**: có thể đơn giản là chưa gặp tình huống) · phần DORMANT được đánh dấu chờ judge-layer phân xử MISS-vs-DORMANT khi cần.

| Nhãn | Định nghĩa VERBATIM | Ghi chú implement |
|---|---|---|
| `APPLIED` | "có evidence trích/fire trong cửa sổ" | phải là evidence **trích/fire**, không phải "có mặt" |
| `DORMANT` | "0 evidence — **KHÔNG đồng nghĩa MISS**: có thể đơn giản là chưa gặp tình huống" | 0-hit ≠ hỏng |
| (nhãn-3, không phải label riêng) | "phần DORMANT được đánh dấu **chờ judge-layer phân xử MISS-vs-DORMANT** khi cần" | = **cờ chờ-judge ĐẶT TRÊN tập DORMANT**, KHÔNG phải nhãn thứ ba song song |

🔴 Đọc kỹ: hub viết *"3 nhãn"* nhưng liệt kê 2 label (`APPLIED`/`DORMANT`) + 1 trạng-thái phái-sinh (DORMANT **chờ judge**). Spec nên hiện đúng: `APPLIED` · `DORMANT` · `DORMANT@pending-judge`.

### b.3 Caveat "floor không phải ceiling" — NẰM Ở ĐÂU (T1:38, VERBATIM)

> - Con số % đi kèm caveat NẰM TRONG payload: *"% = FLOOR theo evidence, không phải ceiling"* — chống đọc nhầm số thấp thành hệ hỏng.

⇒ Vị trí **KHÔNG phải** ở doc/README/report rời: caveat phải **NẰM TRONG payload** (cùng object/JSON/output mà máy trả ra kèm con số %). Chuỗi chuẩn để nhúng: `% = FLOOR theo evidence, không phải ceiling`. Lý do: *"chống đọc nhầm số thấp thành hệ hỏng"*.
(Đối chiếu: `reviewer_gate` T1:13 ghi 1 trong 2 MINOR đã fold là **`floor-phrasing`** ⇒ câu chữ này là bản đã được gate sửa, giữ nguyên chữ.)

### b.4 Hai control bắt buộc (T1:39, VERBATIM)

> - Test đi kèm bắt buộc có **negative-control** (bơm id giả → máy PHẢI trả 0-hit; trả APPLIED = matcher rác = test đỏ) và **positive-control grep-verify-trước-khi-pin** (điểm đáng học từ chính lượt build: minh hoạ trong spec không hold trên sổ sống → builder tự phát hiện nhờ kỷ luật verify-trước-pin và thay bằng cặp có thật).

| Control | Cách chạy | Điều kiện ĐỎ |
|---|---|---|
| **negative-control** | **bơm id giả** vào máy đo | máy trả `APPLIED` ⇒ "matcher rác" ⇒ **test đỏ**. Đúng = **0-hit** |
| **positive-control** | **grep-verify TRƯỚC KHI PIN** cặp (guard, phiên) làm ví dụ | ví dụ minh-hoạ **không hold trên sổ sống** ⇒ phải **thay bằng cặp có thật**, KHÔNG được pin |

### b.5 Mẻ đo đầu của hub (T1:40, VERBATIM)

> - Mẻ đo đầu của hub: 52 item, 4 APPLIED (cả 4 spot-verify đúng), floor 7.7% — số thấp là NHẤT-QUÁN với nhãn floor (chưa tự-động nghĩa là hệ hỏng): phần lớn guard không được re-trích bằng token trong 5 phiên gần, không có nghĩa là chúng chết.

**Số chốt:** `52` item · `4` APPLIED (4/4 spot-verify đúng) · **floor `7.7%`** · cửa sổ = **5 phiên gần**.
Kiểm số học: 4/52 = 7.6923% → làm tròn **7.7%** ✅ nhất quán. (`reviewer_gate` T1:13: MINOR **`52-exact`** đã fold ⇒ con số 52 là bản đã đối chiếu.)

---

## (c) 4 KHOẢN SÀN — VERBATIM ĐẦY ĐỦ (T1:42-47)

> ## 3. Khung sàn (function-floor — 4 khoản)
>
> 1. **Mỗi vòng-ĐO có ≥1 vai-KIỂM độc lập**, đọc OUTPUT con đo (không re-chạy việc đo), spot-check bằng tay mình + chủ động falsify ≥2 claim; vòng nào báo CLEAN phải có phép **thách-CLEAN** (re-check mẫu 1 lens sạch).
> 2. **Audit = propose-only**: trả TEXT, lead là người duy nhất ghi; kèm rào tường minh chống sub tự ghi sổ.
> 3. **Tuần-tự trong-vòng, song-song giữa-vòng**: audit chờ đúng con đo vòng mình xong (chống chấm bản stale); các vòng khác nhau chạy song song thoải mái.
> 4. **Eval 2 phía**: presence (nạp) + use (dùng, cross-session, evidence-based) — nhãn floor trung thực, DORMANT ≠ MISS, negative-control bắt buộc trong test.

*(lưu ý bản gốc T1:44 in đậm cụm "≥1 vai-KIỂM độc lập" — trong dòng `re:` frontmatter hub gọi là "vai-KIỂM độc-lập"; nghĩa như nhau.)*

**Hai khoản kèm — hình-thức + nấc adopt (T1:49-51, T1:57-59, VERBATIM):**

> ## 4. Hình-thức tự quyết
>
> Số vai, tên vai, gộp hay tách audit (1 con kiểm nhiều vòng hay mỗi vòng 1 con), ngôn ngữ label — mỗi dự-án tự quyết theo roster mình. Dự-án đã adopt khung 5-vòng: bổ vai kiểm cho vòng còn thiếu. Dự-án chưa adopt: khoản ①②③④ vẫn là sàn đáng áp cho bất kỳ cặp đo-kiểm nào.

> ## 6. Nấc adopt
>
> Pull bằng quy trình thường (`/adap-apply`), tự báo nấc per-khoản trong report-back định kỳ. Khoản ① có thể adopt dần từng vòng — báo nấc theo vòng.

**Falsifier chạy được (T1:53-55, VERBATIM) — dùng làm acceptance-test của chính spec:**

> ## 5. Kiểm nhanh (falsifier chạy được)
>
> Chọn 1 vòng-đo bất kỳ trong hệ của bạn → hỏi: *"báo-cáo lượt gần nhất của vòng này, AI NGOÀI con đo đã re-check con số nào bằng tay chưa?"* Không chỉ ra được ai + con số nào = vòng đó còn hở đúng lỗ thứ nhất. Với eval: hỏi *"số % của mình là floor hay ceiling, và test có negative-control chưa?"* — không trả lời được = lỗ thứ hai.

---

## (d) PHƯƠNG PHÁP ĐẾM TOKEN CHO VÒNG-4 (T2)

### d.1 Chốt phương-pháp (T2:36-40, VERBATIM)

> **Phương-pháp chốt — dùng cận-trên bảo-toàn:**
>
> - Con số đếm cục-bộ (ở hub là thông-báo cắt-ngắn của Read) **đếm THỪA** (đo được `≈ số-ký-tự/2`) ⇒ nó là **CẬN-TRÊN**. Quy-tắc an-toàn **DUY-NHẤT** nên dùng: **nếu nó < 100% trần → token thật chắc-chắn an-toàn** (thật thấp hơn). 🔴 **ĐỪNG đảo thành "còn dư tới 180–200%"**: hệ-số đếm-thừa là **cận-trên (~1.4–2×, KHÔNG cố-định)**, nên token thật có thể **cao hơn** "nó ÷ 2" — hub chốt **dừng-rót NGAY khi cận-trên chạm 100% trần**, không đợi cao hơn (đó là biên an-toàn chủ-sở-hữu đã ký).
> - Báo một **DẢI `[sàn = char4 (đếm thiếu) — trần = tín-hiệu-cắt-ngắn (đếm thừa)]`**. Token thật nằm **BÊN TRONG**. Đừng ép dải thành "một con số đã-đo" — dải-ở-lại **CHÍNH LÀ** câu trả lời thành-thật (chỉ một lần gọi API mới thu dải về một điểm, và ta đã chọn không gọi).
> - Bỏ mọi nhãn *"đo thật / token thật / ground-truth"* cho con số cục-bộ. Gọi đúng tên: **heuristic, cận-trên bảo-toàn.**

Kèm nguyên-lý (T2:42): *"để phép đo trả lời, đừng đặt tham-số"* — phép đo cục-bộ trả lời được *"đã an-toàn chưa"*; nó **không** trả lời *"chính-xác bao nhiêu"*.

### d.2 Negative-control của phép đếm (T2:48-50, VERBATIM)

> > Một con số mang nhãn **"đã-đo" phải kèm một PHÉP KIỂM PHỦ-ĐỊNH mà một heuristic sẽ TRƯỢT.**
>
> Ở hub, phép kiểm đó là: dựng một chuỗi **dư-thừa tối-đa** (một ký-tự lặp) rồi kiểm — nếu con số đếm cho ~1.0/ký-tự thì nó là heuristic (đúng, an-toàn); nếu tụt xuống «0.5 thì nó đã hoá "bộ token thật" và **cả khung "cận-trên bảo-toàn" sụp**, phải rà lại nhãn. Phép kiểm này **fail-loud**, và đã **thử-đột-biến** (mutation-test) để chắc nó thật-sự nổ khi con số đổi bản-chất — chứ không phải một `assert` luôn-đúng vô-dụng.

🔴 **BẪY TRANSCRIPTION (đo được, không đoán):** ký tự `«` ở T2:26 và T2:50 là **U+00AB**, đứng đúng chỗ ngữ nghĩa của `<` (nhỏ hơn). Đọc đúng: `phải cho <1.0` (T2:26) và `nếu tụt xuống <0.5` (T2:50). Cùng file, T2:38 dùng `<` thật (U+003C) ⇒ đây là lỗi glyph cục bộ, KHÔNG phải ký hiệu riêng. Copy nguyên `«` vào code/spec = ngưỡng vô nghĩa.

### d.3 Vì sao là TIỀN-ĐỀ của vòng-4 (T2:54-60, VERBATIM)

> > **Phương-pháp đếm là ĐƠN-VỊ ĐO CHUNG mà cả VÒNG-ĐO lẫn VÒNG-NÉN đều nói bằng nó.** Vòng-đo (eval) **sản-xuất** con số; vòng-nén **tiêu-thụ** nó (nén khi % gần trần). Nó là **output của vòng-đo = input của vòng-nén**.
>
> ⇒ Nếu đơn-vị đo sai, **CẢ HAI vòng sai một cách tương-quan**, và bạn không thấy — vì "đo sai" trông y hệt "không có vấn đề". Bằng-chứng sống ở hub: con số 111%-giả kia, **nếu vòng-nén đã tồn-tại**, sẽ khiến nó **nén/cắt lịch-sử trên một báo-động-giả** — hoặc tệ hơn, **không nén khi thật cần** (nếu con số đếm thiếu như tầng-1). Cận-trên bảo-toàn còn có tính-chất đẹp cho vòng-nén: nó khiến bạn **nén hơi SỚM** (an-toàn) chứ không **muộn** (tràn).
>
> **Nên khoá phương-pháp đếm TRƯỚC khi dựng vòng-nén — nó là nền, không phải chi-tiết.** Đây là thứ-tự hub đang theo: chốt đơn-vị đo (bản này) → rồi mới xây vòng-nén.

### d.4 Bằng-chứng + phần KHÔNG biết + PHẠM-VI (T2:64-67, VERBATIM)

> - **Đo được, chắc:** con số cắt-ngắn ≈ số-ký-tự/2 ≈ **2.2–2.3× `char4`** trên năm tệp thật; ~1.0/ký-tự trên chuỗi lặp; **content-independent** (chuỗi 'a' ≡ chuỗi 'x' cùng kích-thước) — dấu-hiệu heuristic, không phải bộ token.
> - **KHÔNG biết (và không giả-vờ biết):** token thật của mô-hình (cần API). Hệ-số ~2× là **cận-trên**, không phải điểm chính-xác; nó trôi theo mật-độ ký-hiệu/emoji. Tệp nhỏ (không kích-hoạt cắt-ngắn) vẫn phải ước bằng `char4` — cũng là một cận-dưới, nên **dải vẫn bao token thật**.
> - **Chỉ cần API một lần NẾU** bạn muốn số thật để tính **chi-phí** hay biết **dư chính xác bao nhiêu** — KHÔNG cần cho an-toàn-không-tràn.
> - 🔴 **PHẠM-VI (quan-trọng):** bản này đếm phần **TĨNH** (hot-load nạp đầu phiên). Token trong cửa-sổ còn phần **ĐỘNG** (sinh trong phiên: reasoning + **kết-quả tool** + output) — **char KHÔNG đo được** phần này (nó **không phụ-thuộc char**: một câu hỏi đơn-giản vẫn có thể sinh token vượt mốc), và phần động **do harness lo** (nén khi cửa-sổ đầy). ⇒ đếm-tĩnh chỉ kiểm **nền**; nó **KHÔNG (và không thể) dự-đoán** phần động. Đừng đầu-tư quá nhiều vào đếm-tĩnh-thật-chính-xác — nó không phải chỗ cửa-sổ thật-sự đầy.

*(nguyên văn T2:67 in "dư chính-xác bao nhiêu" ở gạch đầu dòng 3 — trích trên giữ nguyên chữ hub.)*

### d.5 Vì sao hub bỏ "token thật" (T2:22-30, tóm + trích cốt)

Ba tầng tiến-hoá của con số, **bệnh chỉ ở 2 tầng sau**:
1. `char4` (char/4) — **đếm THIẾU**, tự khai *"không phải token chính-xác"* ⇒ **SÀN thành-thật, KHÔNG gây bệnh**.
2. dải nhân `×2.76–4.05` — tự dán *"empirical / đo thật"*, **42 phiên không ai đo lại**, đo lại **không tái-lập được**.
3. con số trong thông-báo **cắt-ngắn của công-cụ Read** — tự dán *"token Claude THẬT / đã-đo"*, thực chất = **heuristic đếm ký-tự** (`≈ số-ký-tự/2`, ~2.2–2.3× `char4`).

Câu chốt bệnh (T2:28 VERBATIM):
> **Con bệnh lặp HAI lần (hai lần chữa `char4`, cách nhau 42 phiên): nhãn "đã-đo" trở thành thứ THAY THẾ cho việc đo.** Một con số tự-nhận "đã-đo" được tin nhiều hơn một ước-lượng thành-thật, nên **bị đo lại ÍT hơn** — chính vì nhãn nó nói "đo lại là thừa".

Giá phải trả (T2:30 VERBATIM, rút gọn cite): hub báo **hot-load 111% trần suốt một ngày** (đo lại ~63% — mà 63% đó *cũng chính là con số cắt-ngắn, tức cận-trên*), leo thang *"khủng-hoảng chạm trần" không có thật*, **suýt chặn một thao-tác chủ-sở-hữu đã duyệt**; *"Ba con sub độc-lập (đo / đề-xuất / kiểm) đều lý-luận TRÊN con số sai và không con nào nghi-ngờ"* — vì nó tự dán *"Grounded in real measurements, NOT a guess"*, và **toàn-bộ test vẫn xanh** khi đổi con số (*"chưa test nào canh bản-chất của nó"*).

Trạng thái pháp-lý của T2 (T2:9 + T2:18): **"Bản này là TINH-THẦN + bằng-chứng, KHÔNG phải lệnh adopt"** / **"không yêu-cầu bạn adopt gì"** ⇒ khác T1 (`type: update`, có sàn 4 khoản + nấc adopt per-khoản).

---

## §6 SURPRISE (ngoài câu hỏi chính)

1. **T2 tự mâu thuẫn nội-thư về stamp:** `content_sha256` có thật + verify OK (T2:10), nhưng `reviewer_gate` (T2:13) vẫn kết *"content_sha256 PENDING_STAMP -> stamp below."* ⇒ vết stale trong chính frontmatter. Đối chiếu nội bộ SE: `.claude/workflows/runs/2026-07-16-S125-fable-real-adap-review/run.md:19` khai *"`do-token` + `h17-cadence-bookend` publish **thiếu content_sha256** (script hub: NO-DECLARED-SHA)"* — **claim đó nay STALE**: hub đã stamp, `stamp_verify.py` exit 0.
2. **`«` = `<`** (U+00AB) tại T2:26 và T2:50 — ngưỡng negative-control `<0.5` và `<1.0`. Nếu spec copy nguyên glyph → ngưỡng chết.
3. **"3 nhãn" thực chất 2 label + 1 cờ** (§b.2) — dễ code thành enum 3 giá trị song song, sai mô hình.
4. **`reviewer_gate` T1:13 tiết lộ 2 MINOR đã fold: `52-exact` và `floor-phrasing`** ⇒ đúng 2 chỗ mà spec dễ diễn giải lệch nhất (con số mẻ đầu + câu caveat) đã được gate soi; giữ NGUYÊN CHỮ, đừng "viết lại cho gọn".
5. **Khoản ③ (tuần-tự trong-vòng)** là ràng buộc lịch chạy, không phải nội dung audit — nó chặn "chấm bản stale". Fan-out song song giữa vòng thì tự do. Đây là khoản dễ vi phạm nhất khi spawn ensemble một phát 5 lane.
6. **Khoản ② (propose-only)** trùng chính xác luật SE đang có (`G-015` residual-write containment, memory `feedback_monitor_residual_write_containment.md`) ⇒ SE không cần cơ chế mới, chỉ cần **rào tường minh trong prompt vai-audit**.

## §7 KHÔNG CHẮC

- **Số thứ tự vòng 1 và 2** (tooling/harvest vs soi-lead — cái nào là vòng-1) KHÔNG có trong 2 thư này. Vòng-3 = memory (T1:24), vòng-5 = sàn-sự-thật (T1:24). Vòng-4 = nén/chưng-cất trí-nhớ: suy từ tên file T2 (`…tien-de-vong4`) + T2:52 *"TIỀN-ĐỀ cho vòng nén-trí-nhớ"*, đối chiếu 1 dòng ngoài 2 thư (`2026-07-15-Governance-bon-vong-tu-bao-tri-hat-nhan-harness.md:33`: *"vòng 4 chưa đóng — lần nén gần nhất cách đây 27 ngày, và chỉ 2/14 con sub có bản nén"*). Xác nhận numbering đầy đủ = việc lane L1.
- **Cửa sổ "phiên gần nhất"**: T1:35 nói *"các phiên gần nhất"*, T1:40 nói *"5 phiên gần"*. Hub KHÔNG khai 5 là hằng-số bắt buộc hay chỉ là tham số mẻ-đầu ⇒ **để owner chốt N cho SE**, đừng hardcode 5 như thể là sàn.
- **Định nghĩa chính xác "sổ"** để quét evidence (WAL? runs/? session log? auto-memory?) — hub chỉ nói *"quét sổ các phiên gần nhất"*, không chỉ đích danh artifact. SE phải tự chọn + khai trong spec.
- **"máy-archive 2 tầng"** (T1:29): hub không định nghĩa "2 tầng" là gì (L1/L2 memory? gate+archive?). Suy đoán = 2 tầng L1 index/L2 archive, **chưa xác nhận**.
- **content_sha256 của T1/T2 verify OK** chỉ chứng minh file khớp dấu của chính nó — KHÔNG chứng minh đây là bản mới nhất của chủ đề (không đọc `supersedes` chain ngoài 2 file: T1 khai `supersedes: null`).
