# Lane D — h24-lead-self-audit

> RETURN-only tu /fable-clone ensemble wf_1f6bd5e2-478 (vai investigator-codebase, model opus).
> Lead ghi (B3 single-writer) — sub KHONG tu ghi. agentId=ac5b004b86fa8cd0b

---

VERDICT: SE ĐỦ 3 NỀN → adopt được; nhưng bẫy mega-line KHÔNG chỉ "có" mà là ca NẶNG NHẤT có thể — `docs/STATUS.md:6` (63,104 ký-tự/1 dòng vật-lý) chứa 37 date-token trong đó parse ngây-thơ trả `2026-08-01` (TƯƠNG-LAI → detector KHÔNG BAO GIỜ kêu = tự-giết positive-control, đúng y cảnh-báo hub) hoặc `1987-03-07` (bóng-ma từ chữ-số trong username `pqhuy1987`) — và SE có 1 positive-control SỐNG, THẬT, mà máy hiện-tại chứng-minh-được là MÙ (`permission-matrix/SKILL.md`, 42 flag baseline, 0 flag trên file này).

---

# 1. Ba NỀN (H24 §4) — verify từng nền bằng file:line

| Nền | SE có? | Bằng-chứng file:line | Ghi-chú |
|---|---|---|---|
| (1) Bộ rà-drift-governance dạng MÁY | ✅ CÓ | `scripts/governance-detectors.ps1` (23,838B) — C2/B3 `:15,:143,:202` · C1 `:17` · C3 `:19` · C4 `:20,:89-107` · C5 `:24`. Chạy THẬT @2026-07-15 → **TOTAL FLAGS: 42**, `exit 0` always (`:tail`) | Điểm cắm: `Write-Flag` `:43-53` · `Write-Section` `:55` · `Get-GovernanceMd` `:118-127` · summary tail |
| (2) Changelog có chuỗi-carry / khối work-state | ✅ CÓ | `docs/HANDOFF.md:5` — **21× `NEXT anh` + 22× `NEXT em`** · `docs/STATUS.md` In-Progress · tiering-rule `HANDOFF.md:3` + `STATUS.md:4` | ⚠️ carry là **văn-xuôi KHÔNG khoá** — xem GAP-2 |
| (3) Lead có nghi-thức mở/đóng phiên | ✅ CÓ | `session-start.md`: BƯỚC 0 `:10` · 0.5 `:19` · 0.5b `:27` · 0.6 `:37` · 0.7 `:47` · Phase1 `:56` · Phase2 `:71` · Phase3 `:183`. `session-end.md`: Phase1 `:19` · 1.5 §L `:39` · §L.a `:43` · §L.b 8-step `:45` · Phase5 `:109` · 5.0 squash `:111` | Móc treo SẴN: `§2.1.1 Monitor RE-REPORT` `:92` (sibling 2 monitor) · `§2.1.3 DÒ+BÁO governance-detectors` `:109` (display detector) |

→ **ĐỦ 3 NỀN → adopt được** (không phải SKIP=n/a).

---

# 2. Bảng 5 sàn §2

| Điểm | SE có nền? file:line | GAP | Đối ứng cụ-thể | Acceptance ĐO ĐƯỢC |
|---|---|---|---|---|
| **(1) 2 vai read-only** | ✅ sibling sẵn: `tooling-auditor.md:1-11` + `harvest-curator.md:1-11` (cả 2 `model: inherit` · `memory: project` · `maxTurns: 18` · `tools:` 4-RAG-read) — cả 2 soi PHẦN-KHÁC-LEAD | Chưa vai nào soi **chính LEAD**. **+ VA-CHẠM TỪ-VỰNG:** `governance-detectors.ps1:15` ĐÃ sở-hữu `derived-staleness` → đặt tên "vai-STALE" = trùng khoá. `GAP` cũng đã quá-tải (`session-end.md:48` "build-gap vs floor-rot" · `memory-selfimprove-audit.ps1` "CRITERIA+GAP") | Tạo `.claude/agents/lead-view-auditor.md` (H3) + `.claude/agents/lead-omission-auditor.md` (H4), cookie-cutter frontmatter của 2 monitor sẵn. Treo vào `session-start.md §2.1.1:92` (2→4 monitor) + `session-end.md §L.b`. **KHÔNG gộp** vào H1/H2 | (a) `ls .claude/agents/*.md` = **14**; (b) mỗi FLAG in ra khớp `^[A-Z0-9-]+ \| <class> \|` với class ∈ enum config; (c) **phép-thử-xoá-carry** (§2 :56): xoá thử 1 dòng carry đã-hứa khỏi `HANDOFF.md:5` → H4 PHẢI kêu `carry-dropped`, máy im (đúng) |
| **(2) 2 detector máy** | ✅ `governance-detectors.ps1` — nhưng **KHÔNG đọc config** (grep `memory-budget\|ConvertFrom-Json` = **0 hit**) | **GAP-1 (mega-line — NẶNG):** xem §3. **GAP-2 (carry KHÔNG khoá):** carry SE là văn-xuôi `(1)/(2)/(3)`, KHÔNG có khoá bền → detector tuổi-carry **không chạy được** khi chưa có quy-ước khoá. **GAP-3:** C2/B3 chỉ track **4 token** (`:154-157` mig/test/gotcha/table; regex `:209-212`) → `menu`/`policy` MÙ | (a) Wire `ConvertFrom-Json` đọc `memory-budget.json` vào script; (b) detector độ-tươi = **parse NEO-PHẠM-VI** (§3); (c) detector tuổi-carry: **định-nghĩa "dòng-carry" = đoạn LOGIC `NEXT anh|NEXT em` bên trong mega-line, KHÔNG phải dòng vật-lý** + cần quy-ước khoá (anh quyết format) | (a) đổi số trong config → output detector đổi theo, **0 số hardcode** trong `.ps1`; (b) chạy trên `STATUS.md:6` → in `2026-07-14` (KHÔNG `2026-08-01`, KHÔNG `1987-03-07`, KHÔNG `2026-20-42`); (c) `TOTAL FLAGS` ≥ 42+4 và **CÓ** dòng `permission-matrix/SKILL.md:16` |
| **(3) Scheduler nhịp** | ❌ **KHÔNG có bộ-đếm phiên**. grep `session[_-]?count\|counter\|tick` trong `session-start.md`/`session-end.md`/`memory-budget.json` = **0 hit**. Chỉ có: `session-start.md:165 §2.4 Audit cadence` = **THEO NGÀY** (mùng 1, thủ-công, cron ghost-wire gỡ S100) + `session-end.md:135 §6.3 cadence #4` = **theo SỰ-KIỆN** (nếu adopt infra) | Bộ-đếm phiên = **NET-NEW toàn-bộ** | State-file `.claude/governance/.session-counter.json` (mẫu sẵn: `.archive-strikes.json` / `.mfe-state.json` — xem `memory-budget.json:archive_gate._note` + `mfe.state_file`). Tick @`session-start` BƯỚC 0.7-bis; display 2 đầu (`§2.1.3:109` + `§L.b(c)`). Idempotent-key = **commit-sha HEAD @tick** (resume cùng sha → KHÔNG tick 2). **LEAD tự thực-thi, KHÔNG hook** | (a) chạy `/session-start` 2 lần cùng 1 HEAD → counter **+1** (không +2); (b) sửa tay counter LÙI → **fail-loud** (in `[!] counter went backwards`); (c) **bỏ 1 phiên đúng ngưỡng** → phiên kế in `OVERDUE` (chứng-minh `>=` chứ không `=`); (d) 2 lớp cross-check: fail-loud @end + cảnh-báo-mềm @tiêu-đề changelog |
| **(4) Positive-control SỐNG** | ✅ **CÓ — và MÁY HIỆN-TẠI CHỨNG-MINH-ĐƯỢC LÀ MÙ** | — | Xem §4 (3 control sống) | Chuỗi **fire → cổng chứng-kiến → vá → hết-fire**: (1) chạy detector MỚI **TRƯỚC** khi vá → PHẢI in `permission-matrix/SKILL.md:16`; (2) reviewer chứng-kiến output; (3) vá skill; (4) chạy lại → dòng đó BIẾN MẤT, `TOTAL FLAGS` giảm đúng số đã vá |
| **(5) Kết-nạp = 3 việc** | ✅ SE = **12/12 `model: inherit`** (Harness-8, anh-chốt S66). `hmw.js:50` `return undefined // role có frontmatter: tất cả inherit — KHÔNG override` · `hmw.js:22 VALID_ROLES` = 12 | VALID_ROLES 12 ≠ 14 → `hmw.js:104` **STOP-HARD** `vai ∉ VALID_ROLES — DỪNG HẲN` | Xem §6 (rút gọn) | (a) `hmw.js` VALID_ROLES = **14**; (b) spawn thử vai mới qua hmw → **KHÔNG** throw `:104`; (c) grep `12-agent\|12 sub` → 0 hit sót (5 chỗ, xem §6) |

---

# 3. 🔴 Mega-line `STATUS.md:6` — CÓ phá detector độ-tươi. Đã ĐO, không suy.

**Số đo thật** (`docs/STATUS.md:6` = **63,104 ký-tự / 1 dòng vật-lý**; `docs/HANDOFF.md:5` = **46,735**):

| Cách parse | Kết-quả trên `STATUS.md:6` | Hậu-quả |
|---|---|---|
| ISO-regex bất-kỳ-đâu trên dòng | **37 token**, 3/37 KHÔNG parse được | — |
| lexical `max` | **`2026-20-42`** | Không phải ngày → crash / vô-nghĩa |
| date `max` | **`2026-08-01`** (= hạn audit tháng tới, `CLAUDE.md` "Lần kế: 2026-08-01") | 🔴 **TƯƠNG-LAI → detector KHÔNG BAO GIỜ kêu → TỰ GIẾT positive-control** — đúng y `broadcast:62` |
| date `min` | **`1987-03-07`** | 🔴 Luôn kêu → nhiễu thuần |
| **NEO-PHẠM-VI** `\*\*Last updated:\*\*\s*(\d{4}-\d{2}-\d{2})` | **`2026-07-14`** ✅ | ĐÚNG |

**SE có 2 máy-đẻ-ngày-ma mà hub KHÔNG có** (giải-mã từ `ACTIVE-MARKS.md:15-20`, format `RC-<user>-DD-MM-YYYY-HH-MM-SS`):

1. **RC-stamp hoà năm + đồng-hồ:** `RC-pqhuy1987-11-07-2026-20-42-01` → ISO-regex bắt `2026-20-42` (năm `2026` + giờ `20` + phút `42`). Tương-tự `2026-11-43`, `2026-17-46`.
2. **Chữ-số trong USERNAME hoà DD-MM:** `pqhuy1987`+`-12-07` → `1987-12-07`. Tương-tự `1987-11-07`, `1987-03-07`.

**Kết-luận:** mega-line **KHÔNG chỉ** phá detector độ-tươi — nó phá **CẢ HAI** detector, vì detector tuổi-carry cũng đếm "dòng-carry" mà 21 dòng-carry của SE nằm gọn trong `HANDOFF.md:5` = **1 dòng vật-lý**. Cả hai phải parse theo **đoạn LOGIC**, không theo dòng vật-lý.

**Đối ứng bắt buộc:** (a) neo-phạm-vi (ngày phải **liền sau** token neo); (b) `TryParseExact` + **loại ngày TƯƠNG-LAI** (chặn `2026-08-01`); (c) tài-liệu KHÔNG neo → **BỎ QUA** (không bịa độ-phủ).

**Bối-cảnh liên-quan (đã có ghi nhận):** `memory-budget.json:token_governor.tier1_hotfeed_tokens.lead_note` — *"STATUS/HANDOFF mega-lines STILL cannot be fully Read until re-tiered (mega-line not line-paginatable)"*. Mega-line đã là nợ-kỹ-thuật đã-biết; H24 làm nó thành **nợ CHẶN**.

### Tập neo (độ-phủ TRUNG-THỰC — chỉ 6 tài-liệu đo được, còn lại BỎ QUA)

| file:line | Neo | Ngày | vs mốc-phải 2026-07-12 |
|---|---|---|---|
| `docs/STATUS.md:6` | `**Last updated:**` | 2026-07-14 | ✅ không kêu (đúng) |
| `docs/HANDOFF.md:5` | `**Last updated:**` | 2026-07-14 | ✅ không kêu (đúng) |
| `docs/rag-setup-plan.md:4` | `**Last updated:**` | 2026-05-12 | 🔴 KÊU |
| `.claude/skills/permission-matrix/SKILL.md:16` | `**Status (post Session 6 — …):**` | 2026-04-30 | 🔴 KÊU ← **positive-control** |
| `.claude/skills/form-engine/SKILL.md:15` | `**Status (post Session 6 — …):**` | 2026-04-30 | 🔴 KÊU |
| `docs/governance/README.md:4-5` | `**Adopted:**` / `**Status:**` | 2026-05-26 / cửa-sổ hết 2026-06-23 | 🔴 KÊU |
| `.claude/skills/contract-workflow/SKILL.md:20` | `**Status:**` **KHÔNG NGÀY** | — | ⚪ **BỎ QUA** (đúng sàn) |

**Chống Goodhart:** dạng neo `Status (post Session N — DATE)` phủ **2** tài-liệu (permission-matrix + form-engine), không phải chỉ mình control → độ-phủ THẬT, không may-đo-theo-bài-thi.

**Mốc-phải (đề-xuất):** `.claude/governance/ACTIVE-MARKS.md` RC-stamp mới nhất = **2026-07-12** (đã decode DD-MM→ISO). Lý-do chọn: (a) là sổ dấu-mốc governance anh-ký của CHÍNH SE; (b) `broadcasts/inbox/` (max 2026-07-15) **đã bị C4 loại** ở `governance-detectors.ps1:96` → dùng làm mốc sẽ mâu-thuẫn chính script. ⚠️ Parse RC-stamp phải đảo **DD-MM-YYYY**, KHÔNG ISO.

---

# 4. Positive-control SỐNG — SE có 3 cái, cái #1 là VÀNG

**#1 `permission-matrix/SKILL.md` — control HOÀN-HẢO, và máy hiện-tại CHỨNG-MINH-ĐƯỢC là MÙ:**

| file:line | Sai | Thật |
|---|---|---|
| `:3` (description vai/skill) | `~60 menu key` · `~240 policy` | **54** · **216** |
| `:81` | `register 48 policy` | 🔴 **TỰ MÂU-THUẪN với `:3` (~240)** |
| `:16` | `Status (post Session 6 — 2026-04-30)` | 2.5 tháng cũ |
| `:20, :23, :37, :56-58` | liệt-kê `Bg_List/Bg_Create/Bg_Pending` + "Budgets KHÔNG inherit" | module Budget **XÓA S61 (Mig 50)** |

**Vì sao máy hiện-tại MÙ (đã đo, không đoán):** C2/B3 chỉ resolve **4** canonical token — `governance-detectors.ps1:154-157` (`mig`/`test`/`gotcha`/`table`) + regex `:209-212`. **`menu` và `policy` KHÔNG phải canonical row** → 42 flag hôm nay, **0 flag** rơi vào `permission-matrix/SKILL.md`. Đây là điểm-mù có-thật, không phải giả-định.

→ Control này bao **3 class cùng lúc**: `header-date-stale` (:16) · `role-desc-count-stale` (:3) · `view-count-stale` (:81 tự-mâu-thuẫn). H1 tooling-auditor đã bắt tay phiên này → **đã có nhân-chứng độc-lập**.

**#2 `docs/governance/README.md:5`** — `**Status:** ✅ Active trial week 1-4 (2026-05-26 → 2026-06-23)`. Cửa-sổ trial **hết hạn 22 ngày trước**, vẫn ghi "Active trial" → class `status-annotation-unflipped` (dấu-hiệu #3 của lớp STALE). Control cho **class KHÁC** class của #1 → 2 control ĐỘC-LẬP.

**#3 `docs/rag-setup-plan.md:4`** — `**Last updated:** 2026-05-12 (Session 21 turn 1+)` — 2 tháng, thuần `header-date-stale`.

⚠️ **Thứ-tự BẮT BUỘC:** build detector → chạy → in ra 3 dòng này **TRƯỚC cổng review** → reviewer chứng-kiến → **RỒI MỚI** vá skill. Vá trước = mất chứng-nhân, quay về "xanh từ commit đầu" (`broadcast:81`).

---

# 5. Tên 2 vai + enum ĐÓNG + config key

## Tên vai (né va-chạm từ-vựng — memory `feedback_harness9` "vocab-collision-check on adopt")

| Vai | Nơi đặt | Vì sao KHÔNG dùng tên hiển-nhiên |
|---|---|---|
| **`lead-view-auditor`** (H3) | `.claude/agents/lead-view-auditor.md` | ❌ "vai-STALE" trùng `derived-staleness` đã sở-hữu bởi C2/B3 (`governance-detectors.ps1:15`). H3 = **mắt-người soi view LEAD phát-ra**; C2/B3 = **máy đếm count-token**. Hai thứ khác nhau → phải khác tên |
| **`lead-omission-auditor`** (H4) | `.claude/agents/lead-omission-auditor.md` | ❌ "GAP" đã quá-tải: `session-end.md:48` "build-gap vs floor-rot" · `memory-selfimprove-audit.ps1` "spec-audit CRITERIA+GAP" |

Đặt tên theo đúng quy-ước sibling sẵn có (`tooling-auditor`, `harvest-curator` = `<danh-từ>-<vai>`). Ghi vào `docs/governance/vocab-alias-map.md` là **khái-niệm MỚI, KHÔNG phải alias** (lesson S93: alias-map KHÔNG seed detector).

## Enum ĐÓNG — 11 class (sống trong config single-source)

**Lớp view (H3) — 5:** `view-count-stale` · `header-date-stale` · `status-annotation-unflipped` · `role-desc-count-stale` · `asymmetric-residue`

**Lớp omission (H4) — 6:** `workstate-item-dropped` · **`carry-dropped`** · **`carry-overage`** · `owner-req-generic` · `pending-decision-submerged` · `memory-underfill`

> 🔴 **Tách `carry-dropped` khỏi `carry-overage` là CÓ CHỦ-ĐÍCH** (hub gộp 1 bullet): caveat **(b)** nói máy **MÙ** với việc đã-rớt nhưng **THẤY** việc quá-già. Tách ra thì caveat (b) trở thành **đo được** — `carry-dropped` phải luôn 100% do mắt-người H4, `carry-overage` do máy. Nếu máy từng phát `carry-dropped` = bug.

## Config key (đặt trong `.claude/agent-memory/memory-budget.json` — single-source đã có, cùng nhà với `archive_gate`/`mfe`/`crystallized_backfill`/`harness_floor`/`token_governor`)

```
lead_self_audit: {
  flag_classes: [ …11 class… ],                 // enum ĐÓNG
  carry_age_threshold_lines: <M>,
  header_freshness: { anchor_patterns[], milestone_source, skip_if_no_anchor: true, reject_future_dates: true },
  cadence: { light_every_sessions, deep_every_sessions, jump_after_repeat, fire_history_cap },
  counter: { state_file: ".claude/governance/.session-counter.json", idempotent_key: "head_sha" }
}
```
Tài-liệu/persona **TRỎ key**, KHÔNG chép số (B1 derived-trỏ-canonical).

## Số nhịp — 🔴 **SỐ = QUYỀN ANH. Đây CHỈ là đề-xuất, em không tự chốt.**

Hub ví-dụ 6/15/3 — **KHÔNG CHÉP**. Đặt số của SE theo nhịp THẬT của SE:

| Key | Đề-xuất | Căn-cứ (đo được) |
|---|---|---|
| `light_every_sessions` | **8** | SE chạy ~2.4 phiên/ngày (S107=2026-07-10 theo `memory-budget.json:measured._note` → S118=2026-07-14 = 11 phiên/4 ngày) → 8 ≈ **3 ngày** |
| `deep_every_sessions` | **20** | ≈ 8 ngày — nằm GIỮA rà-nhẹ và audit-tháng sẵn có (`session-start.md:165`, kế 2026-08-01 ≈ 60-75 phiên) → không đụng, không nhiễu |
| `jump_after_repeat` | **3** | 1 class lặp 3 lần = tín-hiệu, chưa phải nhiễu |
| `fire_history_cap` | **10** | cap lịch-sử fire |
| `carry_age_threshold_lines` | **5** | HANDOFF giữ "2-3 session gần nhất" (`HANDOFF.md:3`); sống qua **5 dòng-carry liên-tiếp** ≈ 2 ngày ở nhịp SE = kẹt thật, không phải đang-làm |

---

# 6. (5)(a) Rút gọn cho SE (all-inherit) + 2 caveat

**SE = 12/12 `model: inherit`** (anh-chốt S66) → `broadcast:107` "chỉ dùng một model duy-nhất → (5) rút-gọn". 3 việc thành:

| H23 | SE rút gọn thành | Chỗ sửa (file:line) |
|---|---|---|
| **(a) pin model đầy-đủ** | Ghi **`model: inherit` tường-minh** trong frontmatter 2 vai mới (khớp 12/12 hiện có — `inherit` LÀ pin đầy-đủ của SE, là chính-sách, không phải bỏ sót) | 2 file `.md` mới |
| **(b) allowlist** | `hmw.js:22 VALID_ROLES` **12→14** — **BẮT BUỘC**, nếu quên thì `hmw.js:104` STOP-HARD `vai ∉ VALID_ROLES — DỪNG HẲN`. **+4 chỗ đếm roster:** `.claude/agents/README.md` · `CLAUDE.md` ("12 sub") · `session-start.md:73` ("12-agent topology — 10 product/quality + 2 monitor") · `memory-budget.json:measured` (12 entry→14) | 5 chỗ |
| **(c) ghi model tại spawn** | `hmw.js:50` trả `undefined` cho role-có-frontmatter → "tường-minh tại spawn" cho SE = **spawn-record ghi model runtime ĐÃ RESOLVE**, ⚠️ **KHÔNG hardcode** — `hmw.js:35` lesson S108: *"comment stale làm 2/4 worker đọc sai runtime"* | spawn-record 4-field |

⚠️ 2 vai mới có `memory: project` → **là vai-có-bộ-nhớ** → H23 áp đủ, không miễn.

**Caveat (b) — GIỮ NGUYÊN, và với SE còn NẶNG HƠN:** detector tuổi-carry MÙ với việc ĐÃ RỚT → `lead-omission-auditor` mắt-người là catch-layer **DUY NHẤT**. Với SE nặng gấp đôi vì carry là **văn-xuôi KHÔNG khoá** (GAP-2) — item rớt **không để lại dấu-vết nào cả**, kể cả khoá mồ-côi.

**Caveat (d) — GIỮ NGUYÊN, có số neo:** baseline SE hôm nay = **42 flag** (đo thật @2026-07-15). Thêm 2 detector-class → 42 sẽ tăng. **So detector-mới với CHÍNH NÓ chu-kỳ sau**, TUYỆT ĐỐI không so "42 → N" rồi kết-luận governance mục-ruỗng = mở-rộng-thiết-bị.

**Nấc trung-thực:** hub mới n=1 (mốc-0), chưa có chu-kỳ-2 → **KHÔNG bán quá**. SE adopt = cũng mốc-0 của SE; delta thật chỉ có từ run-2.

---

# 7. Ba GAP chặn, xếp theo độ ưu-tiên

1. **GAP-1 mega-line (CHẶN CẢ 2 DETECTOR).** `STATUS.md:6` + `HANDOFF.md:5`. Bắt buộc parse **neo-phạm-vi** + **đoạn-LOGIC** (không dòng vật-lý) + loại ngày tương-lai. Nếu bỏ qua → detector độ-tươi đọc `2026-08-01` = xanh vĩnh-viễn = **tự giết positive-control**, đúng y `broadcast:62`. *(Lối thoát triệt-để: re-tier mega-line — đã là nợ đã-biết ở `memory-budget.json:token_governor…lead_note`; nhưng đó là việc RIÊNG, không nên chặn H24.)*
2. **GAP-2 carry KHÔNG khoá (CHẶN detector tuổi-carry).** 21 carry-line văn-xuôi `(1)/(2)/(3)`, không khoá bền → không đo được "khoá sống qua ≥M dòng". Cần quy-ước khoá = **đổi format HANDOFF = quyền anh**. ⚠️ Hub đã dính "carry-token trùng khoá → máy đếm 1 việc thành 2" (`broadcast:28`) → khoá phải check trùng ngay từ đầu.
3. **GAP-3 detector chưa đọc config.** grep `memory-budget|ConvertFrom-Json` trong `governance-detectors.ps1` = **0 hit** → wire `ConvertFrom-Json` là net-new, cần cho "số đọc từ config single-source". ⚠️ Script là **pure-ASCII** (`:9` gotcha #30, `:76` builder `U`) — sửa qua **Edit + code-point**, không gõ chữ Việt.

**CHƯA VERIFY:** con-số thật `menu=54` / `policy=216` em lấy từ ground-truth lead cấp (đề-bài dặn không đo lại), không tự đếm từ code.