# LEAD-STALE @open S189 (L15, window 1) — DEEP sweep

LEAD-STALE: 11 FLAG (deep)

- vai: `lead-stale-auditor` (H24 §2(1) vai-STALE) · nấc: **DEEP** (`nhip-no-probe` in `light 3/6 deep 1/1 OVERDUE:deep`)
- propose-only · 0 Write/Edit ngoài file này · 0 RAG-write (lead = sole writer, B3)
- enum class ĐỌC TỪ KHOÁ: `.claude/agent-memory/memory-budget.json` → `lead_self_audit.flag_classes`
  đo tại chỗ: 12 class = 6 `view-*` + 6 `gap-*` (niêm phong P3B @S181). 6 `view-*` là địa phận của tao.
- 🔴 luật ghi: **đổ ruột NGAY mỗi FLAG** (chống #53 — bookend S188 có 5/8 vai chết non).

## NỀN MÁY (đọc, KHÔNG chạy lại)

`scripts/governance-detectors.ps1` — TOTAL 58 FLAG / INFORM-ONLY 26. Đã đọc, dùng làm nền:
- C2/B3 canonical resolve: `mig=72 test=680 gotcha=88 table=97 menu=120 policy=480`, khớp đĩa (mig+gotcha) ⇒ baseline an toàn.
- 18 dòng derived-stale (đều LOW, hầu hết skill-local false-positive theo chính note của máy).
- H24-1 title-freshness: 2 anchor stale (`rag-setup-plan.md:4` · `form-engine/SKILL.md:15`).
- H24-2 carry-age: 19 carry, streak cao nhất 4 < M=6 ⇒ im.
- H24-3 session-label lag: `[skip] no doc carries BOTH a session label and an S-heading` ⇒ **trục này máy KHÔNG đo được**, không đọc thành sạch.
- C5 WAL guardrail: 23 dòng ≤ 40 ⇒ OK.

🔴 **KHÔNG FLAG nào dưới đây lặp lại máy.** Tất cả nằm ở phần máy im: ngữ-nghĩa, tự-mâu-thuẫn nội-file, enumeration thiếu phần-tử, trạng-thái chưa lật.

---

## FLAG-1 · HIGH · `view-stale-status` — `_end` ⟂ WAL: hai vật nói ngược về CÙNG một sự thật

- **view:** `.claude/WAL.md:2` → `session: S188 (phiên-LOGIC L14, window 3 — GIỮ MỞ theo YC-026)`
  và `.claude/WAL.md:4-5` → *"Phiên GIỮ MỞ chờ việc kế của anh … KHÔNG đóng phiên"*
- **source:** `.claude/sessions/session-14/_end` **TỒN TẠI** (940 B, mtime 20:43, commit `c7b7ca45` 20:44).
  Ngữ nghĩa của vật này do `.claude/commands/session-end.md:410` định: *"FROZEN, ghi MỘT lần, CẤM sửa về sau"*;
  `session-end.md:417` *"đã tồn-tại ⇒ NO-OP … phiên-logic đã khép"*.
- **lệch:** view nói phiên-LOGIC L14 **ĐANG MỞ (window 3)** · source nói L14 **ĐÃ CHỐT-KẾT**.
- **bằng chứng thời gian (WAL viết SAU, nên không phải ca 'chưa kịp cập nhật'):**
  - `_end` land `c7b7ca45` @2026-08-10 20:44
  - WAL header đổi thành `— GIỮ MỞ theo YC-026` ở `ef1d4fbb` @21:30 (**46 phút SAU** `_end`)
  - `git show c7b7ca45:.claude/WAL.md` dòng 2 = `session: S188 (phiên-LOGIC L14, window 3)` **không có** cụm GIỮ MỞ
    ⇒ cụm "GIỮ MỞ" được **thêm vào sau khi** `_end` đã đóng băng.
- **chính lead đã tự giải ca này ở nơi khác, rồi không lật WAL:**
  `docs/governance/so-yeu-cau-chu-du-an.md:58` (hàng `YC-026`) ghi:
  *"`_end` phiên-LOGIC L14 đã ghi TRƯỚC lệnh này ~15 phút — dấu frozen không gỡ được; hiệu lực thực tế = **conversation tiếp tục làm việc**, mạch mới ghi WAL như thường."*
  ⇒ Sổ phân biệt đúng **conversation** (tiếp tục) ⟂ **phiên-LOGIC** (đã khép). WAL gộp hai thứ đó lại làm một.
- **và lead ĐÃ tự bác WAL trong chính lượt này:**
  `.claude/workflows/runs/2026-08-10-S189-bookstart-open/run.md:3` → `phien-logic: L15 (session-15) · window 1 · nhan-phien S189`
- **hại THẬT (không phải sạch-sẽ hình thức):** WAL là nguồn #3 của `tiep_reload.sources` và là đường nối mạch DUY NHẤT của `/tiep`.
  Một `/tiep` đọc WAL sẽ nạp *"L14 window 3 đang mở"* ⇒ ghi tiếp vào `session-14/` — thư-mục mà máy đã coi là đóng
  (`.claude/commands/tiep.md:103`: `{ [ -f "$d/_end" ] || [ -f "$d/closed.md" ]; } && continue`, và `tiep.md:115` *"`_end` nay ĐÓNG TRỌN thư-mục"*).
  Tức **người đọc WAL và máy đọc `_end` sẽ đi hai hướng khác nhau** về cùng một thư-mục.
- **lệnh đo tái lập:**
  ```
  ls .claude/sessions/session-14/_end
  sed -n 2p .claude/WAL.md
  git show c7b7ca45:.claude/WAL.md | sed -n 2p     # bản TRƯỚC: không có "GIỮ MỞ"
  git log --format="%h %ad %s" --date=format:"%H:%M" -- .claude/sessions/session-14/_end
  sed -n 3p .claude/workflows/runs/2026-08-10-S189-bookstart-open/run.md
  ```
- **resolve:** WAL:2 đổi sang phiên-LOGIC **L15 / window 1 / S189** (khớp `run.md:3` + `_end`), và nếu muốn giữ tinh thần YC-026 thì
  viết đúng vế còn sống: *"conversation KHÔNG đóng"* — **không** viết "phiên-LOGIC L14 giữ mở", vì vế đó đã bị `_end` bác vật lý.
  Hết flag khi `sed -n 2p .claude/WAL.md` không còn chứa `L14` **và** không còn chứa `GIỮ MỞ`.

🔸 **Khai ranh (không lấn):** tao **KHÔNG** phán `_end` viết đúng hay sai lúc 20:43 — đó là câu hỏi nghi-thức thuộc `ring5-audit`.
Tao chỉ phán: **hai bề mặt đang nói ngược nhau, và bề mặt viết SAU (WAL) là bề mặt sai** so với vật frozen + so với chính `run.md` lượt này.

---

## FLAG-2 · HIGH · `view-stale-header` — `STATUS:8` "mốc SỐNG" còn neo S185/L13 sau khi S188/L14 đã đóng

- **view:** `docs/STATUS.md:8` → `🔴 **mốc SỐNG = S185, phiên-LOGIC L13, window 4** (2026-08-10)`
- **source (cùng file, cách 2 dòng):** `docs/STATUS.md:6` → `✅ **S187→S188 ĐÓNG (2026-08-10, phiên-LOGIC L14 window 2-3)**`
  và `docs/HANDOFF.md:5` → `**🆕 Last updated:** 2026-08-10 (**S187→S188 ĐÓNG** — phiên-LOGIC **L14** window 2-3)`
- **lệch:** view nói mốc SỐNG = **S185 / L13 / window 4** · source nói mốc mới nhất = **S188 / L14 / window 3**.
- **bằng chứng "sửa một phía" (đây là điểm đắt):** commit `c7b7ca45` (closeout S188) chạm `docs/STATUS.md` đúng 3 hunk:
  `@@ -5,0 +6 @@` (chèn row S188 mới) · `@@ -475 +476 @@` · `@@ -482 +483 @@`.
  ⇒ **row mới được CHÈN, dòng `:8` không nằm trong hunk nào** ⇒ anchor không advance.
- **chứng row này CÓ hợp đồng phải advance (không phải dòng lịch sử):** chính `:8` mang lineage
  `🧊 mốc cũ S179/L11/window-7 … → xem segment Recently-Done` ⇒ nhiệm vụ của row = *giữ mốc hiện hành + đẩy mốc cũ xuống 🧊*.
  Nó đã advance S179→S185 ở lượt trước; lượt S188 thì không.
- **máy MÙ chỗ này, có đối chứng:** `H24-1` in `moc-phai (newest governance milestone) = 2026-08-01 from docs/HANDOFF.md:183`
  ⇒ máy thậm chí không thấy mốc 08-10; nó không đọc `:8`.
- **lệnh đo tái lập:**
  ```
  awk 'NR>=6 && NR<=8 {print NR": "substr($0,1,90)}' docs/STATUS.md
  git show c7b7ca45 --unified=0 -- docs/STATUS.md | grep "^@@"
  ```
- **resolve:** `:8` đổi thành `mốc SỐNG = S188, phiên-LOGIC L14, window 3`, đẩy `S185/L13/window-4` xuống nhánh 🧊.
  Hết flag khi `sed -n 8p docs/STATUS.md` chứa `S188` và `L14`.

---

## FLAG-3 · HIGH · `view-stale-count` — `STATUS:480` row canonical Sub-agents tự chép số roster SAI, ngay trong row ra luật cấm chép số

- **view:** `docs/STATUS.md:480`, trong ô mô tả:
  `⚠️ ~~roster 26 > hmw_width.cap 20~~ ✅ ĐÓNG @S181: cap 30, **roster 23** ≤ 30 ⇒ 0 lane bị bỏ`
- **source:** cột giữa của **CHÍNH ROW ĐÓ**: `| Sub-agents | **29** |` · đĩa `.claude/agents/*.md` trừ README = **29** · `hmw.js` VALID_ROLES = **29**.
- **lệch:** view nói roster **23** · source (cùng dòng, và đĩa) nói **29** — lệch **6**.
- **vì sao đắt hơn một số sai thường:**
  ① đây là **ô canonical** mà B1 bắt mọi derived-doc trỏ về — số sai ở đây lan xuống, không lan lên;
  ② chính row này ra luật *"số vai = cột giữa của chính row này — KHÔNG chép lại vào narrative"* rồi vi phạm nó ở narrative của mình;
  ③ kết luận *"0 lane bị bỏ"* hiện vẫn ĐÚNG nhưng **đúng do may** (29 ≤ 30), không phải do phép tính đã ghi.
- **tái phạm:** đã bắt @S186 (khi đó ở `:479`). Sau `c7b7ca45` chèn 1 dòng ở đầu file, ô này trôi `:479 → :480` mà nội dung không đổi
  ⇒ **kèm bài học con-trỏ:** mọi cite `file:line` vào STATUS viết cho lượt này chắc chắn thối ở lượt sau (chèn-đầu-file).
- **lệnh đo tái lập:**
  ```
  awk 'NR==480' docs/STATUS.md | grep -o "ĐÓNG @S181[^*]*"
  ls .claude/agents/*.md | grep -v README | wc -l          # 29
  grep -c "" /dev/null; # control
  ```
- **resolve:** bỏ hẳn con số trong mệnh đề đó (viết `roster ≤ cap ⇒ 0 lane bị bỏ`, trỏ cột giữa) — **bỏ số, đừng đổi số**
  (đúng thuốc `agents/README.md:3` đã kê: *"Vá @S122 bằng cách bỏ số, không phải bằng cách đổi số"*).
  Hết flag khi `grep -c "roster 23" docs/STATUS.md` = **1** (chỉ còn 1 hit lineage S153 ở cùng dòng, hợp lệ).

---

## FLAG-4 · MED-HIGH · `view-stale-role-desc` — `agents/README.md:264` tự xưng "ĐỦ roster" nhưng liệt THIẾU 3 vai

- **view:** `.claude/agents/README.md:264` → `**VALID_ROLES (whitelist hmw.js — ĐỦ roster; …)**` rồi liệt tên.
  Đếm phần-tử có mặt trên dòng đó = **26**.
- **source:** `.claude/workflows/hmw.js` mảng `VALID_ROLES` (dòng 22..60) = **29** phần-tử; đĩa `.claude/agents/*.md` trừ README = **29**.
  Giao 2 tập: `disk NOT in VALID_ROLES = []`, `VALID_ROLES NOT on disk = []` ⇒ máy và đĩa KHỚP; chỉ **doc** lệch.
- **lệch:** thiếu đúng 3 tên: `ring5-audit` · `score-counter` · `score-count-auditor` (26 vs 29).
- 🔴 **BẰNG CHỨNG VỀ THƯỚC — theo yêu cầu ghi cả 2 số + chênh lệch:**
  | phép đếm | kết quả |
  |---|---|
  | regex ngây thơ `VALID_ROLES\s*=\s*\[([\s\S]*?)\]` (non-greedy, KHÔNG strip comment) | **18** |
  | strip `//` + `/* */` TRƯỚC, rồi bắt `'...'` trong khoảng dòng 22..60 | **29** |
  | **chênh lệch** | **11** |
  Nguyên nhân: dấu `]` nằm trong **comment** (`hmw.js:39` … `KHÁC H1 tooling / H2 harvest / H24 lead / reviewer diff`;
  cùng lớp ở `:35` `:37`) ⇒ non-greedy dừng sớm, cắt mảng làm đôi.
  `agents/README.md:28` **đã cảnh báo đúng bẫy này** (*"dấu ']' trong comment hmw.js:39 cắt regex naive thành 18"*) — tao xác nhận nó còn sống, số khớp nguyên văn.
  ⇒ Ai đi vá FLAG này mà đếm bằng regex thô sẽ ra 18 và tưởng hmw.js mới là chỗ hỏng. **Không phải.** hmw.js ĐÚNG; doc sai.
- **tái phạm + xấu đi:** @S186 tao báo *"README:264 thiếu ring5"* (1 tên). Đo lại hôm nay: thiếu **3** tên
  ⇒ báo cũ là **cận-dưới**, và 2 vai `score-*` (land @S181) chưa bao giờ vào dòng này.
- **cảnh báo nằm ngay dưới, chưa được thi hành:** `agents/README.md:266`
  *"Đổi roster = đổi 2 BỀ-MẶT ĐỘC-LẬP: (1) file .md … (2) hằng VALID_ROLES trong hmw.js … Sửa 1 quên 1 = vai spawn được tay nhưng THROW trong workflow"*.
  Ở đây cả 2 bề-mặt MÁY đều đúng — cái lệch là **bề-mặt DOC mô tả chúng**, tức lớp thứ 3 mà câu cảnh báo không nhắc tới.
- **lệnh đo tái lập:** (node, strip comment trước)
  ```
  node -e "const fs=require('fs');const L=fs.readFileSync('.claude/workflows/hmw.js','utf8').split('\n');
  let s=L.findIndex(l=>l.includes('const VALID_ROLES')),e=-1;
  for(let i=s+1;i<L.length;i++){if(L[i].replace(/\/\/.*/,'').includes(']')){e=i;break}}
  const items=[...L.slice(s,e+1).map(l=>l.replace(/\/\/.*/,'')).join('\n').matchAll(/'([^']+)'/g)].map(x=>x[1]);
  const disk=fs.readdirSync('.claude/agents').filter(f=>f.endsWith('.md')&&f!=='README.md').map(f=>f.replace(/\.md$/,''));
  const l264=fs.readFileSync('.claude/agents/README.md','utf8').split('\n')[263];
  console.log(items.length, disk.length, disk.filter(d=>!l264.includes(d)));"
  ```
- **resolve:** thêm 3 tên vào `:264`. Hết flag khi lệnh trên in mảng thiếu = `[]`.

---

## FLAG-5 · MED · `view-stale-count` — `CLAUDE.md:77` bảng module KHKK dừng ở Mig 71, thiếu Mig 72

- **view:** `CLAUDE.md:77` cột Migration của row `**ContractSigningPlans (Kế hoạch Ký kết HĐ — KHKK)**` = `**69, 71**`
- **source:** đĩa có `src/Backend/SolutionErp.Infrastructure/Persistence/Migrations/20260806070242_AddMaHangMucToContractSigningPlanLines.cs`
  — commit `530af229` 2026-08-06 *"KHKK màn duyệt — … + mã hạng mục (Mig 72)"*.
  `docs/STATUS.md:469` (canonical) = `| Migrations | **72** |` ⇒ **canonical ĐÚNG, derived SAI** (đúng chiều B1: flag derived).
- **lệch:** view liệt 2 mig cho module KHKK (**69, 71**) · source: module này có **3** (69, 71, **72**) — Mig 72 sửa đúng
  bảng `ContractSigningPlanLines` của chính module này, không phải mig của module khác.
- **lệnh đo tái lập:**
  ```
  awk 'NR==77' CLAUDE.md | grep -o "| \*\*69, 71\*\* |"
  ls src/Backend/SolutionErp.Infrastructure/Persistence/Migrations/ | grep MaHangMuc
  git log -1 --format="%h %ad %s" --date=short -- "*MaHangMuc*"
  sed -n 469p docs/STATUS.md | grep -o "Migrations | \*\*72\*\*"
  ```
- **resolve:** `**69, 71**` → `**69, 71, 72**`. Hết flag khi `awk 'NR==77' CLAUDE.md | grep -c "69, 71, 72"` = 1.

---

## FLAG-6 · MED · `view-stale-count` — cùng lớp FLAG-5, bề mặt thứ hai: `CLAUDE.md:69` "Lịch sử mig gần đây" dừng ở 71

- **view:** `CLAUDE.md:69` → `Lịch sử mig gần đây: **+S164/S165 Mig 70 … + Mig 71 …** · **+S161 Mig 69** …`
  ⇒ phần tử **mới nhất** trong danh sách "gần đây" là Mig **71**.
- **source:** đĩa = Mig **72** (`530af229`, 2026-08-06) · `STATUS:469` = 72.
- **lệch:** danh sách tự xưng "gần đây" **thiếu đúng phần tử gần đây nhất** — dạng hỏng nguy hơn số-sai, vì
  người đọc dùng nó để suy "72 là gì" sẽ không tìm thấy và kết luận nhầm là 72 chưa land.
- **grep 0-hit kèm control dương (chống đọc-vắng-thành-sạch):**
  ```
  grep -c "Mig 72" CLAUDE.md      # 0   <- vắng THẬT
  grep -c "Mig 71" CLAUDE.md      # >0  <- control dương: thước đọc được file này
  ```
- **resolve:** thêm `Mig 72 AddMaHangMucToContractSigningPlanLines (S177, KHKK Line +mã hạng mục, AddColumn no new table)` vào đầu danh sách.

🔸 **CARVE-OUT có chủ đích — KHÔNG flag `ef-core-migration/SKILL.md`:** bảng mig ở skill đó cũng dừng Mig 71, nhưng `:25` đã
**tự khai tường minh**: *"Bảng dưới chỉ để tra lịch sử; nó sẽ luôn tụt sau và điều đó **hợp lệ** — cái sai là câu tự nhận nó là mới nhất"*
(câu tự-nhận đã bị gỡ @S181). Đóng-băng-CÓ-KHAI ⇒ theo bẫy #3, flag nó là nhiễu vĩnh viễn. Ngoài ra `SKILL.md:102`
*"last schema-changing Mig 70"* vẫn **ĐÚNG** vì Mig 72 là AddColumn, không đổi số bảng (97 giữ).
Nợ này đã có sổ riêng: `docs/HANDOFF.md:127` F-7. Không tính vào TOTAL của tao.

---

## FLAG-7 · MED-HIGH · `view-stale-status` — `CLAUDE.md` 3 site vẫn giới thiệu `migration-todos.md` như tracker SỐNG, trong khi chính file đó tự khai ĐÃ CHẾT

- **view (3 site, cùng file lệnh mà mọi phiên đọc đầu tiên):**
  - `CLAUDE.md:17` — nằm trong khối **"5 file đọc trước tiên"**: `4. docs/changelog/migration-todos.md ← Atomic tasks theo phase (active-work đọc TRONG file …)`
  - `CLAUDE.md:143` — bảng tài liệu: `| migration-todos.md | Roadmap 5 phase + atomic tasks |`
  - `CLAUDE.md:166` — **bước 2 của nghi-thức Kết thúc session**: `Tick checklist tương ứng trong docs/changelog/migration-todos.md`
- **source (chính file đó, dòng 6-14):**
  - `:6` `🔴 **FILE NÀY ĐÓNG BĂNG Ở S168 — ĐỌC CẢNH BÁO TRƯỚC KHI TIN BẤT KỲ DÒNG NÀO (vá @S186).**`
  - `:8` `⇒ ~18 nhãn phiên việc ĐÃ SHIP chưa bao giờ VÀO tracker này. **Nợ dựng lại tracker = việc riêng, chưa làm.**`
  - `:10` `🧊 Dòng Active-work cũ — **SAI**, giữ nguyên văn làm vết`
  - `:14` `✅ **MẠCH SỐNG cho tới khi tracker được dựng lại:** docs/STATUS.md dòng CURRENT + .claude/WAL.md + docs/HANDOFF.md`
- **lệch:** view nói *đọc active-work TRONG file* + *tick checklist ở đó mỗi closeout* · source nói *đừng tin dòng nào, dòng active-work SAI, mạch sống ở chỗ khác*.
- **hại THẬT, 2 tầng:**
  ① `:17` nằm trong 5-file-đọc-trước **và** file này là nguồn #9 của `tiep_reload.sources`
  (`memory-budget.json:25` — *"header Active-work + section Phase hiện hành"*) ⇒ câu đã-được-khai-là-SAI được **tái sinh vào context lead mỗi lần `/tiep`**;
  ② `:166` là **một bước nghi-thức**. Dưới `YC-027` (*"command phải đc thực hiện trọn vẹn tao ko chấp nhận bất cứ 1 lý do nào"*,
  `so-yeu-cau-chu-du-an.md:57`), một bước trỏ vào file chết đặt closeout vào thế **hoặc bỏ bước (vi phạm YC-027) hoặc tick vào sổ đã khai là sai**.
- **lệnh đo tái lập:**
  ```
  grep -n "migration-todos" CLAUDE.md
  awk 'NR>=6 && NR<=14 {print NR": "substr($0,1,120)}' docs/changelog/migration-todos.md
  python -c "import json;print([s for s in json.load(open('.claude/agent-memory/memory-budget.json',encoding='utf-8'))['tiep_reload']['sources'] if 'migration-todos' in s])"
  ```
- **resolve:** 3 site đều gắn nhãn trạng thái thật (vd `:17` → *"⚠️ ĐÓNG BĂNG @S168 — đọc cảnh báo đầu file; mạch sống = STATUS CURRENT + WAL + HANDOFF"*),
  và `:166` đổi thành có-điều-kiện (*"tick nếu tracker đã dựng lại; chưa thì ghi mạch vào STATUS/WAL"*) để bước nghi-thức không còn bất khả thi.
  Hết flag khi 3 site đều mang nhãn đóng-băng hoặc tracker được dựng lại thật.

---

## FLAG-8 · LOW · `view-stale-count` — khối cảnh báo ở `migration-todos.md:7` tự vô hiệu hoá bằng chứng của chính nó ngay khi land

- **view:** `docs/changelog/migration-todos.md:7` — *"Bằng chứng, 2 đường độc lập:*
  ① *quét toàn bộ nhãn `S\d{2,3}` … tập nhãn **max = S168, 0 ngoại lệ***;
  ② *`git log -1 -- docs/changelog/migration-todos.md` = **`a2b37dcc` 2026-08-01** ⇒ file chưa được chạm **9 ngày***"
  (kèm `824 dòng / 88.151 B`)
- **source (đo hôm nay):**
  - `git log -1 -- docs/changelog/migration-todos.md` = **`5a77f4f1` 2026-08-10** (chính commit đã land khối cảnh báo này) — **không phải** `a2b37dcc`, **không phải** 9 ngày.
  - `wc -l` = **833** · `wc -c` = **90.161** (view ghi 824 / 88.151)
  - `grep -o "S[0-9]\{2,3\}" … | sort -u` ⇒ có **S186** trong file ⇒ mệnh đề *"max = S168, **0 ngoại lệ**"* nay sai literal
    (S186 đến từ chữ "vá @S186" trong chính khối cảnh báo).
- **lệch:** cả 3 con số/mệnh đề chứng minh đều đo trên bản TRƯỚC khi khối cảnh báo được thêm vào ⇒ **self-referential count**
  (cùng lớp tao đã bắt @S153 FLAG-3: *"nguồn = chính đoạn vừa append"*).
- 🔴 **KHÔNG đọc thành 'cảnh báo sai':** KẾT LUẬN của khối (*nội dung tracker dừng ở S168*) vẫn **ĐÚNG** — cái hỏng là **phép đo được trích dẫn**.
  Người đi kiểm chạy đúng lệnh được ghi sẽ nhận kết quả khác và có thể bác nhầm cả khối, hoặc tệ hơn: đọc `git log 2026-08-10` thành "file vừa được cập nhật".
- **lệnh đo tái lập:**
  ```
  sed -n 7p docs/changelog/migration-todos.md | fold -w 200 | head -5
  git log -1 --format="%h %ad" --date=short -- docs/changelog/migration-todos.md
  wc -l docs/changelog/migration-todos.md ; wc -c docs/changelog/migration-todos.md
  grep -c "S186" docs/changelog/migration-todos.md
  ```
- **resolve:** thêm 1 vế miễn trừ vào `:7` — *"(số đo trên bản TRƯỚC khối cảnh báo, `a2b37dcc`; commit land khối này = `5a77f4f1` 08-10 — nội dung tracker vẫn dừng S168)"*.
  Bỏ số dòng/byte hoặc gắn ngày đo. Hết flag khi `:7` có vế miễn trừ.

---

## FLAG-9 · HIGH · `view-residual-asym` — ĐIỂM MÙ TỰ-QUY-CHIẾU: frontmatter của CHÍNH 2 vai H24 còn câu đã bị tuyên là SAI, qua 2 đợt vá khác nhau

🔴 Đây là FLAG tao phải tự soi mình. Diary của tao ghi đúng lớp này 3 lần (S153 M-1 · S173 FLAG-10 · S180 FLAG-15) và nó **vẫn còn**.

- **view (2 file, cùng 1 trường `description:` của frontmatter):**
  - `.claude/agents/lead-stale-auditor.md:4` → `… Chạy theo NHỊP (\`h24_cadence\`), **KHÔNG mỗi phiên**. …`
  - `.claude/agents/lead-gap-auditor.md:4` → **cùng nguyên văn** `Chạy theo NHỊP (\`h24_cadence\`), KHÔNG mỗi phiên.`
- **source (THÂN của chính file đó, cách 50 dòng):**
  - `.claude/agents/lead-stale-auditor.md:54` → `## Nhịp — mày chạy **MỖI phiên, ở CẢ HAI bookend** (HÌNH B @S149)`
  - `:56` → `Mày spawn **VÔ-ĐIỀU-KIỆN** … **không bộ-đếm nào phải tới hạn**.`
  - `:60` (khối 🧊 vá @S153) → bản cũ *"mày KHÔNG chạy mỗi phiên"* bị tuyên là **"khẳng-định phủ-định SAI"**
  - bề mặt LỆNH đồng ý với thân: `.claude/commands/session-start.md:175` *"cặp light = **VÔ-ĐIỀU-KIỆN mỗi bookend** (hình B)"* · `session-start.md:274` *"spawn **VÔ-ĐIỀU-KIỆN mỗi đầu phiên** — KHÔNG còn cổng OVERDUE(light)"*
- **lệch:** view (frontmatter) nói **KHÔNG chạy mỗi phiên** · source (thân + 2 site lệnh) nói **chạy VÔ-ĐIỀU-KIỆN mỗi bookend**.

### Vì sao đây là `view-residual-asym` chứ không phải stale thường: **HAI đợt vá, cả hai đều sửa một phía**

| đợt vá | sửa được | BỎ SÓT |
|---|---|---|
| **S153** (M-1, `ring2-audit` thách-CLEAN bắt) — lật mệnh đề nhịp | thân `:54` `:56` + `STATUS` + `session-start`/`session-end` | trường `description:` `:4` của **cả 2** persona |
| **S180** (W3 gói-B) — mở `view-claim-broader-than-sample`, bỏ số khỏi heading + thêm dòng bảng | bảng class trong thân (đo: **6** dòng `view-*`) | `:4` vẫn liệt **5** dạng dấu-hiệu, thiếu đúng dạng *suy-luận-vượt-mẫu* |

⇒ Cùng một ô (`:4`) sống sót **2 lần vá độc lập** vì cả 2 lần đều grep/sửa trong THÂN.

- **hại THẬT, không phải sạch-sẽ hình thức:** `description:` là trường **harness đọc để chọn/điều-phối vai** — nó là chỗ lead tra
  *"khi nào gọi con này"*. Câu *"KHÔNG mỗi phiên"* nằm đúng ở đó ⇒ một lead đọc đúng chữ sẽ tự suy
  *"light chưa tới hạn ⇒ chưa tới lượt cặp H24"* và **bỏ spawn ngay tại bookend** — đúng cơ chế hỏng mà S153 đã mô tả.
  Lần này còn cứng hơn: `deep_every` đã bị owner hạ **15→1** @S185 (`memory-budget.json:252`, YC-019(5) *"cứ end/start là cứ chạy"*)
  ⇒ *"theo nhịp"* và *"mỗi phiên"* nay **trùng nhau về giá trị**, nhưng câu ở `:4` vẫn dạy cái mệnh đề phủ định.
- **lệnh đo tái lập:**
  ```
  awk 'NR==4' .claude/agents/lead-stale-auditor.md | grep -o "Chạy theo NHỊP[^.]*\."
  awk 'NR==4' .claude/agents/lead-gap-auditor.md   | grep -o "Chạy theo NHỊP[^.]*\."
  sed -n '54p;56p' .claude/agents/lead-stale-auditor.md
  grep -c "^| \`view-" .claude/agents/lead-stale-auditor.md     # 6 dòng bảng
  awk 'NR==4' .claude/agents/lead-stale-auditor.md | grep -c "vượt mẫu\|broader-than-sample"   # 0 = vắng THẬT
  grep -c "broader-than-sample" .claude/agents/lead-stale-auditor.md                            # >0 control dương
  python -c "import json;print(json.load(open('.claude/agent-memory/memory-budget.json',encoding='utf-8'))['h24_cadence']['deep_every'])"   # 1
  ```
- **resolve:** ở `:4` của **cả 2** file: bỏ mệnh đề `KHÔNG mỗi phiên`, thay bằng *"chạy ở CẢ HAI bookend mỗi phiên (hình B @S149); độ sâu theo `h24_cadence`"*;
  và bỏ luôn phần liệt-kê dấu-hiệu (trỏ khoá `lead_self_audit.flag_classes` thay vì kể 5 dạng) — **bỏ liệt-kê, đừng thêm dạng thứ 6**,
  vì kể tay ở đây chính là cơ chế đã thối 2 lần.
  Hết flag khi `grep -c "KHÔNG mỗi phiên" .claude/agents/lead-*.md` = **0**.

🔸 **Ranh:** tao chỉ báo phần `lead-stale-auditor` là địa phận mình; site `lead-gap-auditor.md:4` tao báo vì **cùng một chuỗi ký tự, cùng một đợt vá bỏ sót** (bằng chứng bất-đối-xứng), không phải vì tao soi nội dung vai kia.

---

## FLAG-10 · HIGH · `view-residual-asym` — mốc "Last updated" MỚI bị trang trí ⇒ MÁY bám mốc CŨ 9 ngày; canonical-poison LÂY QUA MÁY

- **view:** `docs/HANDOFF.md:183` → `**Last updated:** 2026-08-01 tối (**S163→S168** — phiên-LOGIC **L9** windows 1-6)`
  — segment này **đã bị thay thế** nhưng vẫn mang **đúng dạng anchor** và **không** có nhãn 🧊 giáng cấp.
- **source:** `docs/HANDOFF.md:5` → `**🆕 Last updated:** 2026-08-10 (**S187→S188 ĐÓNG** — phiên-LOGIC **L14** window 2-3)`
- **lệch (đo được, không suy):** `governance-detectors.ps1` H24-1 in nguyên văn:
  ```
  anchors parsed: 3 doc(s) ; moc-phai (newest governance milestone) = 2026-08-01 from docs/HANDOFF.md:183
  ```
  ⇒ máy chốt "mốc governance mới nhất" = **2026-08-01**, trong khi mốc thật trên **CÙNG FILE** = **2026-08-10** (`:5`).
- **cơ chế (đọc từ chính detector, không suy đoán):** `scripts/governance-detectors.ps1:610`
  ```
  '\*\*Last updated:\*\*\s*(\d{4}-\d{2}-\d{2})'
  ```
  `:5` viết `**🆕 Last updated:**` — ký tự `🆕 ` nằm **BÊN TRONG** cặp `**` ⇒ chuỗi không còn là `**Last updated:**` ⇒ **không khớp**.
  `:183` giữ nguyên dạng trần ⇒ khớp. Máy vì thế lấy mốc cũ.
- **bất-đối-xứng ở đâu:** hai segment cũ hơn ĐÃ được giáng cấp đúng cách — `:218` và `:254` đều mở đầu `**🧊 (Last updated cũ)**`.
  Riêng `:183` — segment **liền trước** — không được giáng. ⇒ Lượt land segment mới **sửa một phía**: viết `:5` mới, quên hạ `:183`.
- **hại THẬT — đây là lớp `canonical-poison lây qua MÁY` (tao đã bắt cùng lớp @S166 F-1):**
  H24-1 tính *"N SESSIONS behind"* cho mọi doc dựa trên mốc-phải. Mốc-phải thấp 9 ngày ⇒ **mọi verdict title-freshness phiên này đều UNDER-report**.
  Cụ thể 2 dòng máy vừa in (`rag-setup-plan.md:4` · `form-engine/SKILL.md:15` — *"35 SESSIONS behind"*) là **cận-dưới**;
  đo lại theo mốc thật 08-10 thì cả hai còn tụt xa hơn. ⇒ **Không đọc output H24-1 phiên này thành "chỉ có 2 doc hơi cũ".**
- **lệnh đo tái lập:**
  ```
  grep -n "Last updated" docs/HANDOFF.md | head -5
  sed -n 610p scripts/governance-detectors.ps1
  powershell -Command "'**🆕 Last updated:** 2026-08-10' -match '\*\*Last updated:\*\*\s*(\d{4}-\d{2}-\d{2})'"   # False
  powershell -Command "'**Last updated:** 2026-08-01' -match '\*\*Last updated:\*\*\s*(\d{4}-\d{2}-\d{2})'"      # True
  ```
- **resolve (2 dạng đều hợp lệ, chọn 1 — đây là phần DOC, tao chỉ đề xuất phía doc):**
  ① hạ `:183` thành `**🧊 (Last updated cũ)** 2026-08-01 …` cho khớp `:218`/`:254` — máy hết bám nó; **hoặc**
  ② đưa `🆕` ra NGOÀI cặp `**` ở `:5` (`🆕 **Last updated:** 2026-08-10`) để anchor mới trở nên đọc-được.
  Làm **cả hai** thì chắc. Hết flag khi H24-1 in `moc-phai … = 2026-08-10`.
- 🔸 **KHÔNG lấn:** sửa regex của detector **không phải** việc tao đề xuất (turf `tooling-auditor` / chủ detector).
  Tao chỉ báo phía doc + khai rằng nền-máy của chính tao phiên này đã bị lệch vì ô này.

---

## FLAG-11 · MED · `view-stale-header` — khối `🔥 CURRENT` của STATUS còn đứng ở S168/L9 sau **3 lượt closeout**, và cửa thoát hiểm của nó trỏ vào ô đã hỏng

- **view:** `docs/STATUS.md:10` → `**🔥 CURRENT (S161→S168, 2026-07-31→08-01 — phiên-LOGIC **L9**: chuỗi SP-002 B0→B4 …`
- **source:** `docs/STATUS.md:6` (S187→S188 ĐÓNG, **L14**) · `docs/HANDOFF.md:5` (**L14**) · `runs/…S189…/run.md:3` (**L15**)
- **lệch:** khối tự xưng **CURRENT** đang mô tả **L9 / S161→S168** · thực tế đã sang **L14 đóng, L15 mở** — cách **5 phiên-LOGIC**.
- **CÓ carve-out tự khai, và tao xử thẳng chứ không lách:** `docs/STATUS.md:8` ghi
  *"Dòng CURRENT ngay dưới đây **advance @closeout** nên tụt sau — giữa phiên đọc `.claude/WAL.md`."*
  ⇒ Miễn trừ này chỉ hợp lệ cho **độ trễ trong phiên**. Nó **không** che được ca hiện tại vì:
  ① cơ chế được khai là *advance @closeout* mà **3 closeout đã chạy** kể từ đó (S185 · S188 `c7b7ca45` · chạy-bù `ef1d4fbb`) — **0 lần advance**;
  ② `git log -L 10,10:docs/STATUS.md` ⇒ chạm gần nhất **`d2918790` 2026-08-07** (S181) — nghĩa là khối đứng yên qua cả S185 lẫn S187-S188;
  ③ **cửa thoát hiểm bị nhiễm:** `:8` bảo *"giữa phiên đọc `.claude/WAL.md`"* — mà WAL:2 chính là **FLAG-1** (khai L14 GIỮ MỞ, sai).
  ⇒ người đọc đi theo đúng chỉ dẫn của STATUS sẽ rơi vào ô sai thứ hai. **Cùng hình dạng tao đã bắt @S179 FLAG-7** (*"con-trỏ giải-cứu trỏ vào ô cũng đã ô-nhiễm"*) — nay tái diễn.
- **lệnh đo tái lập:**
  ```
  awk 'NR==10 {print substr($0,1,80)}' docs/STATUS.md
  git log -3 --format="%h %ad" --date=short -L 10,10:docs/STATUS.md | grep -E "^[0-9a-f]{8}"
  git log --format="%h %ad %s" --date=short c7b7ca45 -1 ; git log --format="%h" ef1d4fbb -1
  ```
- **resolve:** advance khối CURRENT sang L14/S187-S188 (hoặc L15 khi phiên này có nội dung), đẩy L9 xuống `Recently Done`;
  và **sửa cửa thoát hiểm ở `:8`** cho trỏ vào ô còn sống. Hết flag khi `sed -n 10p docs/STATUS.md` không còn `S161→S168`.

---

# MỤC RIÊNG — ca `_end` ⟂ WAL: đếm nhân chứng, không đếm cảm giác

Lead pin ca này làm mồi. Tao **không** dừng ở "hai vật nói ngược" — tao đếm **mọi bề mặt đang khai trạng thái của L14** rồi xem bên nào đứng một mình.

| # | bề mặt | khai gì về L14 | phe |
|---|---|---|---|
| 1 | `.claude/sessions/session-14/_end` (tồn tại, FROZEN) | **đã chốt-kết** | ĐÓNG |
| 2 | `docs/STATUS.md:6` | `✅ S187→S188 **ĐÓNG** … phiên-LOGIC L14 window 2-3` | ĐÓNG |
| 3 | `docs/HANDOFF.md:5` | `**S187→S188 ĐÓNG** — phiên-LOGIC **L14** window 2-3` | ĐÓNG |
| 4 | `runs/2026-08-10-S189-bookstart-open/run.md:3` | `phien-logic: **L15** (session-15) · window 1` | ĐÓNG (L14 hết) |
| 5 | `.claude/sessions/session-15/` **TỒN TẠI** (`_context-s-15.md`, 23:50), **0 `_end`** | phiên-LOGIC SỐNG hiện tại = **L15** | ĐÓNG (L14 hết) |
| 6 | `docs/governance/so-yeu-cau-chu-du-an.md:58` (hàng `YC-026`) | *"`_end` … đã ghi TRƯỚC lệnh này ~15 phút — dấu frozen không gỡ được; hiệu lực thực tế = **conversation** tiếp tục"* | ĐÓNG (phân biệt đúng) |
| **7** | **`.claude/WAL.md:2`** | `phiên-LOGIC L14, window 3 — **GIỮ MỞ** theo YC-026` | **MỞ — đứng MỘT MÌNH 1/7** |

**Phán:** 6/7 bề mặt (trong đó có 1 vật frozen + 1 thư mục vật lý mới + chính `run.md` của lượt này) nói L14 đã khép.
`WAL.md:2` là bề mặt **duy nhất** nói ngược ⇒ **WAL là view SAI**, không phải "hai bên ngang nhau". → **FLAG-1**.

**Chỗ dễ đọc nhầm, khoanh rõ:** `YC-026` (*"ko đóng phiên với bất cứ lý do nào"*) là lệnh **CÒN HIỆU LỰC** —
nhưng đối tượng của nó là **conversation/lượt làm việc**, không phải nhãn `phiên-LOGIC`. Sổ `:58` đã tự khai đúng như vậy.
WAL đem lệnh đó **áp nhầm lên nhãn phiên-LOGIC**, tạo ra một trạng thái mà máy (`tiep.md:103`) không thể đồng ý.
⇒ **Vá WAL KHÔNG phải là "bỏ YC-026"** — YC-026 vẫn sống nguyên; chỉ là ghi đúng vật mà nó ràng buộc.

🔸 **Không lấn:** *`_end` viết lúc 20:43 có đúng nghi-thức không* (giữa lúc owner đang ra lệnh giữ phiên) = câu hỏi **nghi-thức**, turf `ring5-audit`.
*Không ai ghi mạch mới vào sổ nào* = turf `lead-gap-auditor`. Tao chỉ phán **view lệch source**.

---

# ĐÃ SOI MÀ SẠCH — tách rõ trục **ĐẠT** ⟂ trục **CHẾT NON / CHƯA ĐO**

🔴 Luật tao tự áp (bài S151 + S162): **VERIFIED-CLEAN phải KÈM LỆNH**. Không có lệnh = không được ghi là sạch.

### A. ĐẠT — có lệnh, có kết quả

| # | trục | lệnh | kết quả |
|---|---|---|---|
| VC-1 | canonical ⟂ đĩa (mig/gotcha) | output máy C2/B3 | `mig=72 gotcha=88` khớp đĩa ⇒ baseline an toàn |
| VC-2 | `CLAUDE.md` KHÔNG chép digit test/mig/gotcha | `grep -c "số hiện tại → \[\`docs/STATUS.md\`\]" CLAUDE.md` | **3** con-trỏ B1 đúng chuẩn (≠ FLAG-5/6 là cột *migration per-module*, trục khác) |
| VC-3 | `STATUS:6` ⟂ `HANDOFF:5` có khớp nhau về L14 | `sed -n 6p docs/STATUS.md` + `sed -n 5p docs/HANDOFF.md` | cả hai `L14 window 2-3` ⇒ **nhất quán**, 0 flag |
| VC-4 | counter ⟂ `_end` tick | `json['counter']` = **63** vs `_end` `counter=62` | đúng thứ tự (tick sau khi đóng) ⇒ 0 flag |
| VC-5 | roster: đĩa ⟂ `hmw.js` | node strip-comment | **29 = 29**, giao 2 tập rỗng 2 chiều ⇒ 2 bề mặt MÁY sạch (chỉ DOC lệch — FLAG-4) |
| VC-6 | WAL guardrail H22 | máy C5 | 23 dòng ≤ 40 ⇒ 0 flag |
| VC-7 | carry-age H24-2 | máy | 19 carry, streak max **4 < M=6** ⇒ im đúng |
| VC-8 | `so-yeu-cau` YC-026/YC-027 còn `mở` | `grep -c "| \*\*mở\*\*"` = 6 | đúng — đây là **luật đứng**, `mở` là trạng thái ĐÚNG, KHÔNG phải stale |

### B. CHẾT NON / CHƯA ĐO — cấm đọc thành sạch

| trục | vì sao chưa kết luận được |
|---|---|
| `H24-3 session-label lag` | **máy tự khai skip**: `no doc carries BOTH a session label and an S-heading — nothing to compare` ⇒ trục này **không ai đo**, cả máy lẫn tao |
| `H24-1 title-freshness` | máy CÓ chạy nhưng **mốc-phải sai 9 ngày** (FLAG-10) ⇒ 2 flag nó in là **cận-dưới**, không phải tổng |
| bundle hash prod `STATUS:483` | đo LIVE cần chạm VPS — tao **không chạm mạng**. Ô này vừa vá @S188 (19:53-19:55), tao **không xác nhận cũng không bác** |
| `ACTIVE-MARKS.md` | chỉ soi mặt ngoài (last-touch `936d1aed` 2026-08-07). **Chưa đối chiếu từng mark với trạng thái thật** ⇒ chưa đo |
| 26/29 persona `.claude/agents/*.md` | chỉ mở **3** (2 file `lead-*` + README). 26 file còn lại **chưa chạm** |
| `docs/STATUS.md` độ phủ | file **853+ dòng**; tao soi tập trung `:1-10`, `:465-496`, + grep có mục tiêu. Ước **< 10%** đọc thật |
| `docs/HANDOFF.md` độ phủ | **667 dòng**, có mega-line `:329` (10.672 ký tự). Tao soi `:1-12`, `:127`, `:183`, `:218`, `:254`, `:300` ⇒ **rất mỏng** |
| `migration-todos` thân (833 dòng) | chỉ soi khối cảnh báo `:1-16`. Phần Phase bên dưới **chưa đối chiếu** |

🔴 **Đối chứng lượt trước để khỏi tự lừa:** `bookend-close-synthesis.md` của S188 tự khai **`5/8 vai chết giữa chừng`**
(đo bằng `grep -o` trên chính file, không lấy từ trí nhớ — lưu ý: brief giao việc cho tao ghi *"4 vai chết non"*, **đĩa nói 5/8**).
Lượt NÀY tao **không** chết non: file này được ghi từ FLAG-1 và append từng FLAG ⇒ nếu tao đứt giữa chừng, phần đã ghi vẫn đứng.

---

# COVERAGE + nấc trung thực

- **11 FLAG này là SÀN, KHÔNG phải TỔNG.** Căn cứ: bảng B ở trên — 26/29 persona chưa chạm · STATUS <10% · HANDOFF rất mỏng · ACTIVE-MARKS chưa đối chiếu · 1 trục máy tự khai skip.
- Phân rã theo class (để lead tính `jump_on_class_repeat`, ngưỡng = **3**):

| class (enum ĐÓNG) | số FLAG | FLAG # |
|---|---|---|
| `view-stale-count` | **4** | 3 · 5 · 6 · 8 |
| `view-residual-asym` | **3** | 9 · 10 · (1 phần) |
| `view-stale-status` | **2** | 1 · 7 |
| `view-stale-header` | **2** | 2 · 11 |
| `view-stale-role-desc` | **1** | 4 |
| `view-claim-broader-than-sample` | **0** | — (không gặp ca nào; **0 thật**, không phải chưa soi) |

- 🔴 **Đơn-vị tally = phiên-LOGIC**: đây là đầu `@open` của L15. Nếu `@close` cùng phiên fire lại class nào thì
  `h24-signal-write.ps1` gộp thành **MỘT** quyết-định/class — **đừng đọc 2 lượt thành 2 tally**.
- 🔴 **Tao KHÔNG in nhãn `PASS`/`sạch` ở đâu cạnh số đo nói ngược** (bẫy META-COUNT, lead tái phạm 2 lần). Pass/fail tính từ số đo.
- 🔴 **0 Write/Edit ngoài file này · 0 `store_memory` · 0 RAG-write.** Mọi mục là **đề xuất**; lead VERIFY→APPEND (B3).

## Sợi chỉ chung của 11 FLAG

**8/11 FLAG sinh ra từ MỘT cơ chế: vá-một-phía.**
`_end` viết nhưng WAL không lật (1) · row S188 chèn nhưng anchor `:8` không advance (2) · thân persona vá 2 lần nhưng `description:` không đụng (9) ·
segment HANDOFF mới land nhưng segment cũ không hạ 🧊 (10) · roster đổi ở đĩa+`hmw.js` nhưng doc liệt tên không theo (4) ·
`STATUS:469` đúng 72 nhưng `CLAUDE.md` 2 site không theo (5, 6) · khối cảnh báo `migration-todos` vá nội dung nhưng bằng chứng của chính nó không đo lại (8).

⇒ Không phải "lead quên đo". Lead **đo đúng** (canonical mig/test/gotcha/roster đều khớp đĩa).
Chỗ đứt là **quãng đường từ phép đo về ĐỦ MỌI SỔ** — số đúng dừng lại ở nơi lead vừa làm việc, các bề mặt anh em không đi theo.
Đây là lần thứ **N** cùng hình dạng (S162 · S166 · S172 · S173 đều ghi câu này trong diary tao).

## END

LEAD-STALE: **11 FLAG (deep)** · HIGH 5 (1·2·3·9·10) / MED-HIGH 2 (4·7) / MED 3 (5·6·11) / LOW 1 (8)
class: `view-stale-count` 4 · `view-residual-asym` 3 · `view-stale-status` 2 · `view-stale-header` 2 · `view-stale-role-desc` 1 · `view-claim-broader-than-sample` 0
nấc: **SÀN, không phải TỔNG** (coverage khai thủng ở bảng B)
== HẾT ==
