# sub-lead-stale — BOOKEND @OPEN S154 (phiên-logic L7) · 2026-07-26

**Vai:** H24 §2(1) vai-STALE (view LỆCH source). **Nhịp:** hình-B vô-điều-kiện @open (KHÔNG theo counter).
**Nền máy (KHÔNG chạy lại):** `governance-detectors.ps1` phiên này TOTAL **43** + INFORM-only **4** (C11 FLAG-khuôn ×4 tại runs S151/S152). Lane của tao = NGỮ-NGHĨA máy mù.
**Phủ máy (đọc `scripts/governance-detectors.ps1:204-282`):** canonical-resolve CHỈ gồm `{mig, table, gotcha, test, menu, policy}` ⇒ các row `User memory` · `Sub-agents` · `RAG chunks` · `API endpoints` · `FE pages` · `Master data` **NGOÀI tập-đo máy** — tin máy tới đâu thì tới đó, "0 flag" ở các row này KHÔNG đọc thành sạch.
**Kỷ luật:** ghi TỪNG finding ngay khi thấy (anti-#53 + anti-pin-bản-cắt 4-A@S152). File này LUÔN hợp-lệ giữa chừng; chỉ dòng `END+TOTAL` cuối mới là bản chốt.

---

## FLAG-1 — `view-stale-count` — HIGH

- **view:** `docs/STATUS.md:454` — row canonical `| User memory | **31** |`, note gần nhất neo ở `+S84` (`feedback_derived_flush_execution`), re-ground gần nhất khai `S71 (H1 disk-count: 25 feedback_* + 3 project_*)`.
- **source (đĩa, 2026-07-26):** `.claude/auto-memory/` = **53** file `.md` trừ `MEMORY.md` (**47** `feedback_*` + **6** `project_*`); `.claude/auto-memory/MEMORY.md` cũng có **53** dòng index `^- \[`.
- **Lệch:** view nói **31**, source nói **53** — thiếu **22**, tức ~41% corpus không có trong con số canonical. Đơn-vị KHỚP (cùng phép đếm mà chính note dùng ở lần re-ground S71: file `feedback_*` + `project_*` trên đĩa), nên đây KHÔNG phải lệch-định-nghĩa mà là stale thật.
- **Vì sao máy mù:** `Get-StatusValue` (detectors:204-208) chỉ map `{mig,table,gotcha,test,menu,policy}` → row `User memory` không có token, `[OK] canonical matches disk` không hề cross-check nó. Đây đúng lớp **canonical-poison** đã cắn ở S148 (row `Tests` 528 sai suốt 2 phiên) — nhưng lần này row NGOÀI tập cross-check nên không có ai bắt hộ.
- **resolve:** row `:454` = 53 (hoặc chốt lại định-nghĩa đếm), + note ghi rõ lần re-ground S154; hết flag khi `Value` khớp `ls .claude/auto-memory/*.md | grep -v MEMORY.md | wc -l`.

---

## FLAG-2 — `view-residual-asym` — HIGH

- **view:** `.claude/agents/lead-stale-auditor.md:4` **VÀ** `.claude/agents/lead-gap-auditor.md:4` — frontmatter `description:` cả HAI file còn câu *"Chạy theo NHỊP (`h24_cadence`), KHÔNG mỗi phiên."*
- **source (cùng file, phần thân):** `lead-stale-auditor.md:51` `## Nhịp — mày chạy **MỖI phiên, ở CẢ HAI bookend** (HÌNH B @S149)` + `:52` *"spawn **VÔ-ĐIỀU-KIỆN** … Không cửa-người nào phải mở, không bộ-đếm nào phải tới hạn"*; song song `lead-gap-auditor.md:44` + `:46`. Nghi-thức: `session-start §2.1.8(e)` + `session-end §L.b(j)(ii)`.
- **Lệch:** view (description) nói cadence-GATED "KHÔNG mỗi phiên", source (thân cùng file + nghi-thức) nói VÔ-ĐIỀU-KIỆN mỗi bookend. **Một file, hai chỗ, nói ngược nhau** — bác được mà không cần ra khỏi file.
- **Bằng-chứng sửa-một-phía (git, không suy đoán):** `git show 11db5ef -- .claude/agents/lead-stale-auditor.md` = **2 hunk, cả 2 nằm trong khối `## Nhịp`** (đổi tiêu-đề + thay dòng `light_every`/`deep_every`); `-- lead-gap-auditor.md` tương tự. **0 hunk chạm dòng 4.** Tức đợt vá M-1 @S153 (do `ring2-audit` thách-CLEAN bắt) sửa THÂN, bỏ MÔ-TẢ — dư-lượng đúng một phía, ×2 file.
- **Vì sao HIGH (không phải cosmetic):** `description` là bề-mặt **định-tuyến** — harness nạp nó để quyết có spawn vai hay không, và chính thân file `:53` cảnh-báo đúng hại này (*"persona auto-inject ⇒ đọc đúng chữ rồi tự tính 'light chưa tới hạn ⇒ chưa tới lượt tao' — sai NGAY tại bookend"*). Vá M-1 mà chừa đúng bề-mặt gây hại ⇒ lỗ hổng vẫn sống, chỉ đổi chỗ trú.
- **Tự-phê (điểm mù tự-quy-chiếu, bài M-1@S153):** đây là lượt đầu tao đưa `.claude/agents/lead-*-auditor.md` vào tập-đo theo đúng bài đã học — và nó ra ca THẬT ngay lượt đầu.
- **resolve:** dòng `:4` của CẢ HAI file bỏ mệnh-đề "KHÔNG mỗi phiên", thay bằng "chạy MỖI phiên ở CẢ HAI bookend (hình B); `h24_cadence` chỉ còn cổng `deep_every`". Hết flag khi `grep -n "KHÔNG mỗi phiên" .claude/agents/lead-*-auditor.md` = 0 hit.

---

## FLAG-3 — `view-stale-status` — HIGH

> 🔴 **ERRATA — bản đầu của FLAG này SAI CHIỀU, tao tự khai:** lượt đầu tao đọc `HANDOFF (39)` + `STATUS:471` rồi kết luận "STATUS:457 khai alive trong khi RAG DOWN". Sai vì tao **suy từ doc, không chạm nguồn sống** — đúng cái bẫy `resume_premise_reverify` ("khẳng-định trạng-thái = phải chạm 1 lệnh"). Lead đính chính; tao **tự đo lại bằng `list_projects` (không nhận số qua relay)** và viết lại chiều lệch bên dưới.

- **Đo sống của tao (2026-07-26, `mcp__rag-unified__list_projects`):** `proj_solution_erp` **TRẢ LỜI** — `chunk_count = 2449`, `last_indexed_at = 2026-05-29T23:26`, `current_cwd_project = solution_erp`; server trả **7 collection**, 5 sister có `last_indexed_at` **hôm nay 17:02–17:05** ⇒ Qdrant **UP**, không phải 6333-refused.
- **view (bề-mặt owner-facing, ĐANG stale):** `docs/HANDOFF.md:7` khoản **(39)** — *"RAG Qdrant DOWN (6333 refused, gotcha #14 off-after-reboot; charter AI_INFRA — anh tự chạy `rag-infra.ps1 -Action ensure` / để AI_INFRA / cho em chạy cross-repo?)"* — đây là **câu hỏi đang treo bắt owner quyết**.
- **view thứ 2 (cùng lớp):** `docs/STATUS.md:471` dòng State S153 — `… · **RAG DOWN (defer AI_INFRA)** · prod 37 NCC/17 user.`
- **source:** chính phép đo trên (`list_projects` trả 2449 + 6 collection sister tươi hôm nay) + `docs/STATUS.md:457` — ô canonical khai *"alive … rerank sống"*, **và ô này ĐÚNG**.
- **Lệch:** view nói **DOWN**, source nói **UP**. Tức bề-mặt sai là **HANDOFF (39) + STATUS:471**, KHÔNG phải ô canonical `:457`. Đúng luật B1: derived lệch canonical ⇒ flag derived.
- **Hại cụ-thể (nặng hơn một số sai):** (39) đang **bắt owner trả lời một câu hỏi dựng trên tiền-đề đã chết** — 3 lựa-chọn ("anh tự chạy ensure / để AI_INFRA / cho em chạy cross-repo") đều vô nghĩa nếu dịch-vụ đang chạy. Owner tốn một lượt quyết cho việc không tồn tại; và nếu anh chọn "chạy `ensure`" thì đó là thao-tác thừa lên hạ-tầng đang sống.
- **Vì sao máy mù:** `RAG chunks` không nằm trong `$canonRows` (`scripts/governance-detectors.ps1:204-208` chỉ `{mig,table,gotcha,test,menu,policy}`) ⇒ 0 cross-check; và không detector nào ping 6333. Trục này **chỉ có người đo mới biết**.
- **Caveat trung-thực:** (39) có thể ĐÚNG lúc viết (S153) — RAG lên lại sau đó là hoàn toàn có thể. Flag không nói lead "bịa"; flag nói **nhãn chưa lật khi trạng-thái đã đổi**, đúng định-nghĩa `view-stale-status`.
- **resolve:** đo lại 1 lệnh `list_projects` @open (rẻ), rồi (a) gạch/đóng (39) ở HANDOFF nếu UP, (b) sửa `STATUS:471` khỏi "RAG DOWN". Hết flag khi 3 bề-mặt (`:457`, `:471`, HANDOFF (39)) cùng nói một trạng-thái với phép đo sống.

---

## FLAG-4 — `view-stale-count` — LOW

- **view:** `docs/STATUS.md:457` — `| RAG chunks | **2447** | re-verify S151 (…, +6 vs S126's 2441; …)`.
- **source:** `list_projects` hôm nay = **2449** cho `proj_solution_erp`.
- **Lệch:** view **2447** vs source **2449** = **+2** (2 chunk `store_memory` ghi thêm sau S151 — khớp cơ-chế "store_memory stopgap" mà chính ô này mô-tả).
- **Vì sao vẫn đáng ghi dù nhỏ:** ô này nằm trong bảng CURRENT STATE = nguồn `/tiep` nạp lại (`memory-budget.json → tiep_reload.sources[0]`), và nó **ngoài tập cross-check của máy** ⇒ không ai bắt hộ; drift +2/phiên-vài-lượt sẽ tích lại đúng như row `User memory` (FLAG-1) đã tích thành +22.
- **KHÔNG lẫn với `last_indexed 05-29`:** ô đã khai đúng chỗ đó là stale-index CÓ CHỦ-ĐÍCH (chờ VOYAGE_API_KEY / AI_INFRA) ⇒ **không flag phần đó** (trap #3 đóng-băng-có-chủ-đích).
- **resolve:** `:457` = 2449 + đổi neo "re-verify S154". Hết flag khi số ô khớp `chunk_count` của `list_projects` tại lần re-ground gần nhất.

---

## FLAG-5 — `view-residual-asym` — MED

**Một gốc, hai lá còn sót** — đợt vá @S153 (FLAG-4 của chính tao: *trio-memory bị khai là chưa-chạy/consent-gated*) chỉ sửa **STATUS**, hai bề-mặt sinh-đôi đứng nguyên.

- **Bằng-chứng gốc đã vá một phía:** `git show c2d01f0:docs/STATUS.md` (bản S152) còn chuỗi *"CHƯA spawn-probe lần nào (cần restart CLI + anh consent; KHÔNG được đọc thành verified-runtime)"*; bản hôm nay `grep -c "CHƯA probe lần nào" docs/STATUS.md` = **0** ⇒ STATUS đã sạch.
- **Lá 1 — view:** `.claude/commands/session-start.md:65` — *"+3 vai trio-memory (S141) **CHƯA probe lần nào** — lần probe đầu = phiên SAU restart (đừng đọc con số cũ thành 'đủ roster hôm nay')."*
- **Lá 2 — view:** `.claude/agent-memory/memory-budget.json:185` (`measured._note`) — *"3 row nay = SEED-STATE (vai chua chay lan nao: first-run cho restart Claude Code + consent anh @session-start §2.1.9 / session-end §L.b(k)) nen l1_hot ~1.5KB va l2_* = 0 la DUNG"* + `:200`/`:201`/`:202` field `rollout` cả ba = *"S141 seed - first-run pending restart+consent"*.
- **source (đĩa, 3 nguồn độc-lập):**
  1. run-folder: `.claude/workflows/runs/2026-07-22-S144-trio-first-run/` · `…/2026-07-25-S151-trio-memory/` · `…/2026-07-25-S152-trio-memory/` — mỗi folder có đủ `harness-eval-return.md` + `harness-refine-return.md` + `harness-audit-return.md` + `trio-synthesis.md` ⇒ **đã chạy ≥3 vòng**, không phải "chưa lần nào".
  2. diary: `harness-eval 4.492B` · `harness-refine 4.813B` · `harness-audit 4.530B` — **KHÔNG còn ~1.5KB** như `_note:185` khẳng-định.
  3. cổng consent: `.claude/commands/session-start.md:169` + `:276` + `:280` đã ghi *"AUTO 1 vòng/phiên … owner @S151 — 🧊 consent-gated S141 **superseded**"*, và `:271` ghi *"Từ S152: cả 5 vòng … đều AUTO, 0 cổng consent"*.
- **Lệch:** view nói *chưa chạy lần nào + đang chờ consent + diary ~1.5KB*; source nói *chạy 3 vòng + consent đã gỡ từ S151 + diary ~4.5KB*. Riêng lá-2 còn **tự mâu-thuẫn với chính file lệnh** đã tuyên bố superseded.
- **Vì sao đây là `view-residual-asym` chứ không phải `view-stale-status` đơn thuần:** tiền-đề "chưa chạy/consent" ĐÃ được nhận diện và ĐÃ được vá — nhưng chỉ ở 1 trong 3 nơi nó sống. Đúng chân-dung "sửa nguồn quên gương" (S124), và cùng khuôn với FLAG-2 phiên này (vá thân persona quên frontmatter) ⇒ **2/5 FLAG hôm nay cùng một tật: acceptance của đợt vá dừng ở file đầu tiên tìm thấy**.
- **Không lấn turf:** phần `measured` **con-số byte** đang defer có chủ-đích tới drift-audit 2026-08-01 (`_note:185` khai rõ) ⇒ **KHÔNG flag các số đo**; chỉ flag **mệnh-đề trạng-thái** "chua chay lan nao / pending restart+consent".
- **resolve:** (a) `session-start.md:65` đổi sang "trio đã chạy S144/S151/S152 (run-folder chứng); mốc S122 giữ nguyên là lịch-sử"; (b) `memory-budget.json:185` + 3 field `rollout` bỏ mệnh-đề "chua chay lan nao / pending consent", giữ nguyên số + giữ nguyên hẹn re-measure 2026-08-01. Hết flag khi `grep -n "CHƯA probe lần nào" .claude/commands/session-start.md` = 0 **và** `grep -c "pending restart+consent" .claude/agent-memory/memory-budget.json` = 0.

---

## TỔNG-KẾT (phân-rã theo class — để tính `jump_on_class_repeat`)

| class | số FLAG | FLAG# |
|---|---|---|
| `view-stale-count` | 2 | FLAG-1 (HIGH), FLAG-4 (LOW) |
| `view-residual-asym` | 2 | FLAG-2 (HIGH), FLAG-5 (MED) |
| `view-stale-status` | 1 | FLAG-3 (HIGH) |
| `view-stale-header` | 0 | — |
| `view-stale-role-desc` | 0 | — |

**TOTAL = 5 FLAG** (3 HIGH · 1 MED · 1 LOW).

### VERIFIED-CLEAN (kèm LỆNH — bài ring2 @S151: VC không có lệnh = không tính)
- `agents/README.md` roster-count: `grep -n "roster" .claude/agents/README.md` → `:3`/`:6`/`:27`/`:242`/`:253` **cố ý BỎ số**, trỏ canonical; đếm đĩa `ls .claude/agents/*.md | wc -l` = **24** trừ README = **23** = khớp `STATUS:456` **23** và `memory-budget.json:28` "roster nay = 23". **0 flag.**
- `STATUS:441` tiêu-đề CURRENT STATE: đọc *"mốc gần nhất **S153**"*, và re-ground giá-trị mới nhất trong section = S153 ⇒ **đã bump, 0 `view-stale-header`** (ca này ĐÃ là FLAG-2 @S153, nay sạch).
- `HANDOFF:7` khoản **(38)**: đã `~~(38)~~ ✅ anh đã VETO + chốt hub-form 3-vai` ⇒ nhãn đã lật đúng, **0 flag**.
- Cổng consent 5 vòng ở `session-start.md:169/:188/:271/:276/:280`: mọi vế retired đều có dấu 🧊 + lineage + ngày ⇒ **0 stale-status** (đây là mẫu ĐÚNG mà FLAG-5 lá-2 nên copy).
- `STATUS:452` row `Tests **532 PASS** | 45 Domain + 487 Infra`: khớp `:471` "532 test" ⇒ ca canonical-poison S148 **đã đóng, không tái phát**.
- 🔴 **KHÔNG kết luận sạch trục H24-3 session-label** (bài S150): `STATUS` vẫn dùng anchor `CURRENT` chứ không `Last updated`, `HANDOFF:5` viết `(**S153**` nên regex `\(S` trượt ⇒ máy im ở trục này **KHÔNG đọc thành sạch**; tao không đo được nó trong lượt @open này ⇒ khai là **chưa phủ**, không khai là clean.

<!-- END sub-lead-stale-S154 · TOTAL=5 FLAG -->
