Files
solution-erp/.claude/workflows/runs/2026-08-05-S173-bookend-open/sub-lead-stale-open-S173.md
2026-08-05 11:08:07 +07:00

205 lines
27 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# H24 §2(1) vai-STALE — bookend @open S173 (phiên-LOGIC L11, 2026-08-05)
> INFORM-only · propose-only · KHÔNG Write/Edit ngoài file này · KHÔNG RAG-write.
> Nền máy (KHÔNG chạy lại): `governance-detectors.ps1` TOTAL 50 / INFORM-only 13 · counter tick S172→S173 = 47 (`squash-benign`) · `nhip-no-probe.ps1`: light 1/6 · deep 7/15 · trần-bộ-nhớ 0 over-cap · run-chưa-gom 0 · pull-cách 14 ngày.
> Class ∈ enum ĐÓNG `lead_self_audit.flag_classes` (`.claude/agent-memory/memory-budget.json:176-189`) — 12 phần tử (5 view-* + 6 gap-* + `view-claim-broader-than-sample` mở @S172 slot 68). Vai này chỉ dùng nhánh **view-***.
## Trạng thái ghi
- [x] file mở lúc bắt đầu (đổ ruột liên tục)
- [x] END + TOTAL (chốt cuối file) — 11 FLAG, 1 INFORM, 7 VERIFIED-CLEAN
- 🔴 Sống qua **2 lượt #53** (garble sau header 798 B, garble lần 2 sau FLAG-9) — recover bằng APPEND vào chính file này, **mất 0 B**.
---
## FLAG-1 — `view-stale-count` — MED
- **view:** `docs/STATUS.md:473` — row bảng CURRENT STATE: `| Gotchas | **86** | **+S168 #86** ...`
- **source:** `docs/gotchas.md` — đếm ground-truth `grep -c "^### [0-9]" docs/gotchas.md` = **87**; max-id `grep -o "^### [0-9]\+" | sort -n | tail -1` = **87**; heading mới nhất `docs/gotchas.md:1389` = `### 87. Mã lỗi PRE-AUTH (415/411) ... (Session 172)`
- **lệch:** view nói **86**, source nói **87** (thiếu đúng con vừa sinh @S172).
- 🔴 **Lệch NỘI-BỘ cùng file:** `docs/STATUS.md:6` (dòng CURRENT) ghi `gotcha **87**` = **ĐÚNG**. Vậy hai ô trong CÙNG `STATUS.md` nói hai số khác nhau ⇒ ô sai là **:473**, không phải `:6`.
- ⚠️ **Đây là ô CANONICAL** (bảng CURRENT STATE — B1 mọi derived trỏ về đây; `CLAUDE.md:` §gotchas trỏ `docs/STATUS.md`). Theo luật vai này *"nghi canonical sai ⇒ INFORM riêng, đừng tự phán"* — nhưng ở đây **không phải nghi**: số đếm được deterministic từ file vật-lý `gotchas.md`. Vẫn khai riêng để anh biết ô bị sửa là ô canonical.
- **resolve:** `:473` = **87** + note `+S172 #87``:6` giữ 87 ⇒ 3 nguồn (`:6`, `:473`, `gotchas.md`) cùng một số.
## FLAG-2 — `view-stale-count` — LOW
- **view:** `docs/STATUS.md:6` (mega-line, neo bằng trích): `counter **46** (tick S172; H24 light **2/6** deep **6/15** ok — \`light_at=44\` · \`deep_at=40\`)`
- **source:** `.claude/governance/.session-counter.json``counter = 47` · `last_ticked_session = "S173"` · `last_audit.light_at_counter = **46**` · `deep_at_counter = 40`. Suy ra light = 4746 = **1/6**, deep = 4740 = **7/15** (khớp `nhip-no-probe` phiên này).
- **lệch:** view nói `counter 46 · light 2/6 · deep 6/15 · light_at=44`; source nói `counter 47 · light 1/6 · deep 7/15 · light_at=46`. **4 con số lệch**, không phải 1.
- 🔴 **Hại thật (không phải nhiễu snapshot):** ô này nằm trong `tiep_reload.sources` (`memory-budget.json:17` = *"STATUS.md :: dòng CURRENT + bảng CURRENT STATE"*) ⇒ số sai **tái sinh vào context mỗi `/tiep`**. Ai tính "còn mấy nhịp tới deep" từ STATUS ra **9**, thật còn **8**.
- 🧊 Kèm: câu cảnh-báo nội-tuyến *"cặp light 2/6 trùng số với đợt S168 do tình cờ 4240 = 4644"* nay **tự vô hiệu** (light_at đã sang 46) — caveat sống lâu hơn dữ-kiện nó giải thích.
- **resolve:** `:6` mang `counter 47 · light 1/6 · deep 7/15 · light_at=46`, HOẶC bỏ hẳn 4 số khỏi dòng CURRENT và trỏ khoá `.session-counter.json` (B1 — hết drift vĩnh viễn, vì số này đổi MỖI phiên).
## FLAG-3 — `view-stale-count` — LOW
- **view:** `docs/HANDOFF.md:5``... Mig GIỮ **71** · counter **46**.`
- **source:** `.claude/governance/.session-counter.json``counter = 47` (tick S173, head `1b3bcaa2`).
- **lệch:** view nói `counter 46`, source nói `47`.
- **Vì sao vẫn phát dù `:5` có nhãn ngày:** dòng có `**Last updated:** 2026-08-05 sáng (S171→S172)` nên *phần thuật-lại* là snapshot hợp-lệ; nhưng `counter`**số máy sống**, không phải sự-kiện của S172 — và `:5` cũng nằm trong `tiep_reload.sources` (`memory-budget.json:18`). Cùng lớp với FLAG-2, khác file ⇒ **2 site cùng một sai số** (nếu chỉ vá 1 = `view-residual-asym` kỳ sau).
- **resolve:** hoặc bump 46→47 ở CẢ HAI site cùng lượt, hoặc gỡ `counter` khỏi cả hai và trỏ khoá.
## FLAG-4 — `view-stale-status` — HIGH
🔴 **Nặng nhất phiên này — bề-mặt LEAD đang xin lại thứ owner ĐÃ phán và code ĐÃ nuốt.**
- **view:** `docs/HANDOFF.md:9` tiêu-đề khối `## 🔴 CHỜ ANH @S172 — ĐÁNH SỐ (trả lời bằng số)`, dưới nó 6 slot còn nguyên dấu 🔴/dạng câu-hỏi: `:16` **(68)** · `:18` **(69)** · `:20` **(70)** · `:23` **(71)** · `:25` **(72)** (và `:11` **(67)**). Đo: `awk 'NR>=9 && NR<=26' docs/HANDOFF.md | grep -c "✅"` = **0****0/6 slot có dấu đóng**.
- **source (5 chứng độc-lập, mỗi slot một chứng):**
- commit **`6730eb4`** — `[CLAUDE] Skill: land 5 slot owner ratify @S172 (**68·69·70·71·72**)`, 18 file.
- **(68)** `.claude/agent-memory/memory-budget.json:190` `_class_added_S172`: *"`view-claim-broader-than-sample` MỞ @S172 … theo owner (slot 68 'OK')"* + `flag_classes` nay **12 phần-tử**`class_repeat.counts` **12 khoá** (đã seed = 0).
- **(69)** `.claude/commands/pause.md:24``### 2.5 🔴 C2 checklist artifact-vs-entry — ÉP SEED TRƯỚC KHI CHỐT (wire @S172, **owner slot 69**)`.
- **(70)** `scripts/h24-signal-write.ps1` **+39 dòng** ∧ `.claude/governance/.session-counter.json` sửa — trong cùng `6730eb4`.
- **(71)** `.claude/commands/session-end.md:82`*"UỶ-QUYỀN THƯỜNG-TRỰC (**owner slot (71) @S172**, nguyên văn: 'gom và sleep thì auto nhé, tự quyết')"*.
- **(72)** `.claude/agent-memory/.mfe-state.json` cập-nhật (`at: 2026-08-05`) trong cùng `6730eb4`.
- **lệch:** view nói **6 slot ĐANG CHỜ ANH**; source nói **5/6 đã được owner phán VÀ đã land vào đĩa**. Chỉ **(67)** là còn mở thật (đúng slot DUY NHẤT không có trong `6730eb4`).
- 🔴 **Hại đo được, không phải thẩm-mỹ:** `HANDOFF` nằm trong hot-load `crystallized_backfill.hotload_sources` **và** `tiep_reload.sources` ⇒ phiên kế mở ra sẽ đọc "CHỜ ANH ×6" và **hỏi lại anh 5 câu đã trả lời**. Đây đúng ổ bệnh đã ghi ở `.claude/auto-memory/feedback_absence_looks_like_clean.md` (*mất uỷ-quyền owner ⇒ hỏi lại 3 lượt*) — nay tái-phát ở quy-mô **5 slot/1 lượt**.
- ⚠️ Đối-chứng chống-vu-oan: **(67)** KHÔNG bị tính vào flag này — nó chờ thật, giữ 🔴 là đúng.
- **resolve:** `:16/:18/:20/:23/:25` mang `~~(68)~~ ✅ ĐÓNG @S172 — <đáp án owner> → <site land>` (khuôn slot-đóng đang dùng ở `:62`), tiêu-đề `:9` đổi thành `CHỜ ANH @S172 — CÒN 1 slot (67)`; slot đã đóng **giữ chỗ, cấm tái-dụng số**.
## FLAG-5 — `view-stale-status` — MED-HIGH
- **view:** `docs/STATUS.md:492``🔴 **Nợ harvest ~306 KB chưa gom:** S168-bookend-close 162.916 B (9/10 vai) + S171 143.682 B (4 vai) + a2bbcb9/b5799fc (mở từ S162)`
- **source:** `.claude/commands/session-end.md:84` (viết CÙNG cụm closeout S172) — `🧾 **Vết đã trả @S172:** gom trọn **11 vai / ~306 KB** — S168-bookend-close 6 vai (**162.916 B**) · S171-khkk-ui-mirror-pe 4 vai + reviewer×3 lens (**143.682 B**) · cicd-monitor 2 sha **a2bbcb9**+**b5799fc**. Sau gom: **0/23 vượt soft-cap**.`**cùng 3 khoản, cùng 2 con số byte, cùng 2 sha** ⇒ chắc chắn cùng một món nợ, không phải hai món.
- **chứng đĩa độc-lập (không tin lời cả hai bên):** `6730eb4` sửa đúng **11 file** `agent-memory/*/MEMORY.md` (cicd-monitor · ctx-audit · harness-{audit,eval,refine} · implementer-{backend,frontend} · investigator-codebase · reviewer · ring2-audit · tooling-auditor) = **khớp con số "11 vai"**; `grep -l S172 .claude/agent-memory/*/MEMORY.md | wc -l` = **16/23**.
- **lệch:** view nói **CHƯA GOM**, source + đĩa nói **ĐÃ GOM TRỌN**.
- **Cơ-chế sinh lỗi (để chặn tái-phát, không chỉ vá chữ):** `STATUS:492` land ở `3a6eb92` (closeout), việc gom land SAU ở `6730eb4` (slot 71) — **thứ-tự commit làm câu "chưa gom" hoá sai ngay trong cùng phiên** mà không ai quay lại lật. Cùng lớp với FLAG-4: *lệnh/`session-end` được cập-nhật, `STATUS`/`HANDOFF` thì không*.
- **resolve:** `:492` lật thành `✅ Nợ harvest ~306 KB ĐÃ TRẢ @S172 (11 vai; 0/23 vượt soft-cap)` — hoặc xoá hẳn và để `session-end.md:84` làm nhà duy nhất (B1).
## FLAG-6 — `view-stale-header` — MED
- **view:** `docs/STATUS.md:6` mở đầu bằng `**🔥 CURRENT (S161→S168, 2026-07-31→08-01 — phiên-LOGIC **L9** …` và tự khai `lineage L8 giữ dưới`.
- **source:** `docs/STATUS.md:486``## ✅ Recently Done (S171S172 — 2026-08-04 → 08-05, phiên-LOGIC **L10**)` · `docs/HANDOFF.md:5``Last updated: 2026-08-05 sáng (S171→S172 — phiên-LOGIC **L10**)` · `docs/HANDOFF.md:43``🧊 **Segment cũ (S163→S168, phiên-LOGIC L9) — giữ nguyên, KHÔNG đọc làm hiện-hành**` · git `523211f` *"S172 chốt-kết _end phiên-LOGIC **L10**"*.
- **lệch:** view gắn nhãn **🔥 CURRENT = L9**; source nói **L9 đã ĐÓNG và bị chính HANDOFF xếp là "segment cũ, KHÔNG đọc làm hiện-hành"**, còn **L10** — phiên-LOGIC mới hơn — bị xếp xuống mục **"Recently Done"**. Tức trên `STATUS`, cái MỚI hơn nằm dưới nhãn "đã xong" còn cái CŨ hơn giữ nhãn "đang là hiện tại".
- **Không phải đóng-băng-có-chủ-đích:** THÂN của chính `:6` đã được re-ground tới S172 (`counter … tick S172`, `Mig 71`, `97 bảng`, `644 test`) ⇒ dòng này ĐANG được dùng làm ô state SỐNG, chỉ riêng **nhãn phiên** không bump. Header ⟂ thân lệch nhau **trong cùng một dòng**.
- **resolve:** `:6` mang nhãn phiên-LOGIC **mới nhất đã đóng** (L10 / S169→S172) — hoặc bỏ hẳn số L khỏi nhãn CURRENT và để `HANDOFF:5` làm nhà duy nhất của "phiên-LOGIC hiện hành" (B1).
## FLAG-7 — `view-stale-header` — MED
🔴 **Luật chống-drift nằm CÙNG DÒNG với con số đang drift — lần thứ 3 cùng một ô.**
- **view:** `docs/STATUS.md:461``## 🎯 CURRENT STATE (baseline S40 — re-ground sống liên tục, mốc gần nhất **S168** [🔄 bump @S168 — … luật "bump theo lần re-ground **mới nhất**" … ; vá @S153 FLAG-2 … ; header bump @S157 ctx-verifier C3])`
- **source (trong CHÍNH bảng mà header này mô-tả):** `:479` — bundle `đo LIVE 2026-08-05 **@S172** bởi 3 nguồn độc-lập` · `:474``🔄 **re-ground S170**` (User memory 59). Đếm nhãn re-ground trong thân bảng `:465-480`: có **2 nhãn @S172**.
- **lệch:** view nói mốc re-ground **mới nhất = S168**; source nói **S172** (và có cả S170 > S168).
- **Vì sao đáng phát dù nghe nhỏ:** chính dòng này ghi luật *"bump theo lần re-ground mới nhất"* và liệt **3 đời đã bị bắt cùng lỗi** (F-8, `@S153 FLAG-2`, `@S157 ctx-verifier C3`). Sự-cố nay là **đời thứ 4**: giá-trị bên trong bảng được vá @S170@S172 nhưng con số ở header đứng yên ⇒ *bản vá lặp lại mà cơ-chế thì không đổi*. Ai đọc header sẽ nghĩ mọi ô đã đứng yên từ S168 và bỏ qua việc soi lại.
- **resolve:** `:461``mốc gần nhất **S172**`; **cách chặn tái-phát** (đề-xuất, quyền lead/owner): bỏ con số ra khỏi header, thay bằng *"mốc gần nhất = nhãn 🔄 lớn nhất trong bảng dưới"* — số tự dẫn-xuất thì hết đời thứ 5.
## FLAG-8 — `view-stale-status` — MED-HIGH
🔴 **Câu tự-khai "đã vá" của lead không khớp đĩa — và trớ trêu là khai về chính class "neo tự thối".**
- **view:** `docs/HANDOFF.md:36` (NEXT-em @S172 mục 7) — *"6 site neo tương-đối … `HANDOFF:70` sai DẤU · `:62` · slot (65) · `:402` — **đã vá 4 site @S172**; 2 site còn lại nằm trong `_mind` BẤT BIẾN theo luật ⇒ khai nợ, không sửa."*
- **source — đo từng site trên đĩa hôm nay** (offset file = **+40 dòng** đều-đặn ở cả 4 site do S172 chèn segment mới lên đầu, nên map 1-1 chắc chắn):
| site khai | dòng nay | chữ hiện tại | phán |
|---|---|---|---|
| slot (65) `:11` | `:51` | `hạn **2026-08-01**, CHƯA LÀM` + lineage 🧊 | ✅ **ĐÃ VÁ** |
| C-1 `:70` | `:110` | `Monthly drift-audit **hạn 2026-08-01 — CHƯA LÀM**` + lineage 🧊 | ✅ **ĐÃ VÁ** |
| C-2 `:62` | `:102` | `#7 **DUE hôm nay** — xem NEXT-em @S168 trên` | ❌ **CÒN NGUYÊN** |
| C-3 `:402` | `:442` | `consent /sleep-recovery-memory-l2 all (**8d quá hạn**, em không tự chạy)` | ❌ **CÒN NGUYÊN** |
- **lệch:** view nói **vá 4/4 site đã nêu tên**; đĩa nói **2/4**. Hai site `DUE hôm nay``8d quá hạn` vẫn là neo tương-đối nguyên-trạng, không lineage, không ngày tuyệt-đối.
- **Vì sao KHÔNG xếp `view-claim-broader-than-sample`:** class đó dành cho **suy-luận vượt mẫu** (chủ-ngữ kết-luận rộng hơn tập đã đo). Ở đây không có suy-luận — có một **con số hoàn-thành sai so với vật trên đĩa**. Đúng ổ `feedback_claim_stronger_than_work` (*"đã vá" = CLAIM ĐO ĐƯỢC, đo trước khi viết*), nên xếp `view-stale-status`.
- ⚠️ **Đối-chứng chống-vu-oan (2 site tao KHÔNG tính):** `HANDOFF:282` (*"bài-học của chính hôm qua"*) và `:519` (*"monthly 2026-07-01 (hôm nay)"*) vẫn còn neo tương-đối **nhưng ĐÚNG là phải giữ** — chúng nằm trong thuật-lại phiên đã đóng, `tooling-auditor` @S172 đã khoanh là FROZEN. Lead giữ nguyên 2 site này = **làm đúng**.
- **resolve:** hoặc vá nốt `:102` + `:442` (→ `hạn 2026-08-01 — CHƯA LÀM` / `hạn <ngày tuyệt-đối>`), hoặc sửa câu khai thành `đã vá 2/4 — :102 + :442 còn nợ` (nếu chủ-ý xếp chúng vào vùng bất-biến thì phải nói RA, vì `tooling-auditor` xếp chúng là LIVE-ROT chứ không FROZEN).
## FLAG-9 — `view-stale-count` — LOW
- **view:** `docs/HANDOFF.md:36` trỏ 3 con-trỏ nội-file: `HANDOFF:70` · `:62` · `:402`.
- **source:** cùng file hôm nay — `:70` = *"1. **K8-prep** theo spec-cụm3 …"* (không liên quan) · `:62` = *"Slot ĐÓNG @S167 (PAUSE-4 …)"* · `:402` = nội dung khác. Site thật đã dịch **+40** (→ `:110` · `:102` · `:442`).
- **lệch:** view trỏ 3 số dòng, source ở 3 số dòng đó nói chuyện khác ⇒ **3/3 con-trỏ chết**.
- **Vì sao đây là bệnh cấu-trúc chứ không phải xui:** `docs/HANDOFF.md` **chèn segment mới lên ĐẦU file** (`:5` = mới nhất, `:43` = "segment cũ") ⇒ **mọi** con-trỏ `HANDOFF:<n>` viết cho lượt này **chắc chắn thối ở lượt sau**. Ghi con-trỏ số-dòng vào chính file append-đầu = đẻ ra thứ mình vừa đi vá — cùng bài đã học ở WAL (*"con-trỏ phải theo NỘI-DUNG, không theo số dòng"*, `STATUS:10`).
- **resolve:** neo bằng **chuỗi duy-nhất** (`slot (65)` · `#7 Monthly drift-audit` · `sleep-recovery-memory-l2`) thay số dòng; nếu buộc dùng số thì kèm chuỗi mồi để Ctrl-F cứu được.
### ⤷ Bổ-sung FLAG-4 (đo thêm sau khi lead gửi dữ-kiện tươi — XÁC MINH, không chép)
- `git show --stat --name-only 6730eb4 | grep -c HANDOFF` = **0** ⇒ commit land 5 slot **KHÔNG chạm `docs/HANDOFF.md`** một dòng nào. Đây là **cơ-chế** của FLAG-4, không phải đãng-trí: việc land đi vào `pause.md` · `session-end.md` · `memory-budget.json` · `.session-counter.json` · `h24-signal-write.ps1` · `.mfe-state.json`**6 nhà máy**, và **0 nhà sổ**.
- 🔴 **Đã gây thiệt-hại THẬT trong chính phiên này** (lead khai): đầu S173 lead đọc `HANDOFF:9` rồi **trình owner "5 slot chờ anh"**; owner suýt phán lại thứ đã chốt @S172; lead phải đính-chính giữa phiên. ⇒ flag này **không còn là rủi-ro giả-định** — nó đã tiêu một lượt quyết-định của owner, cùng dạng thiệt-hại với FLAG-3 @S159 (báo-động-giả slot 45).
- Không nâng SEV vượt HIGH (đã HIGH), nhưng ghi vết: đây là hình dạng *"số/trạng-thái đúng nằm ở nơi lead LÀM VIỆC, sổ owner ĐỌC thì giữ bản cũ"* — S162 · S166 · S172 · nay S173 = **lần thứ 4**.
## FLAG-10 — `view-stale-count` — MED
🔴 **Điểm mù TỰ-QUY-CHIẾU — persona của chính vai này. Đúng bài `M-1 @S153` mà lần trước đã hứa không dẫm lại.**
- **view:** `.claude/agents/lead-stale-auditor.md:45` — ô *Ví-dụ SE* của class `view-stale-count`: `CLAUDE.md` ghi "~60 menu key" khi canonical `STATUS.md:19` = 54 (và `:33` nhắc lại cặp số *60 / canonical 54*).
- **source (3 phép, cả 3 bác):**
1. **Canonical menu-key** = `docs/STATUS.md:471``| Menu keys | **113** | 🔄 113 @S166 K4a (đo RUNTIME MenuKeys.All — test T2)`. Số **54** chết từ **S161** (`+KeHoachKyKet` → 55) và chết hẳn từ **S166** (→ 113).
2. **Con-trỏ `STATUS.md:19`** — dòng 19 hôm nay = *"⑥ `#53`: 7 garble / 10 first-return …"*, **không phải** row canonical ⇒ con-trỏ chết.
3. **Tiền-đề của ví-dụ**`grep -no "menu key\|~60" CLAUDE.md docs/CLAUDE.md` = **0 hit** ⇒ cái mà ví-dụ đang tố (`CLAUDE.md` ghi ~60) **không còn tồn tại ở đâu**.
- **lệch:** view dạy rằng canonical menu = **54** và nằm ở **`STATUS.md:19`**; source nói **113****`:471`**.
- **Vì sao KHÔNG bỏ qua với lý do "chỉ là ví-dụ minh-hoạ":** (a) file này **auto-inject mỗi lần spawn** ⇒ mọi bản tương-lai của vai nạp "canonical 54" làm nền rồi đi chấm số của người khác; (b) ví-dụ này **mang `file:line` trỏ vào bảng canonical** ⇒ nó là **khẳng-định về NƠI và GIÁ-TRỊ**, không phải minh-hoạ trừu-tượng; (c) chính file này, `:57-58`, ra lệnh *"tập-đo của mày PHẢI gồm `.claude/agents/lead-*-auditor.md` (điểm mù tự-quy-chiếu)"* — luật nằm cách chỗ vi-phạm **12 dòng**.
- **resolve:** `:45` → dùng cặp số SỐNG (`canonical STATUS.md:471 = 113`), hoặc **bỏ hẳn con số** khỏi ví-dụ (ví-dụ chỉ cần HÌNH DẠNG: *"doc chép số menu-key trong khi canonical đã đổi"*). Đề-xuất nghiêng về **bỏ số** — mọi ví-dụ chứa số sống đều là stale-hẹn-giờ.
-**INFORM cùng ổ, KHÔNG tính thành flag riêng** (tránh loãng thống-kê): `:48` ví-dụ `view-stale-role-desc` ghi *"`agents/README` ghi 12 sub khi roster = 14"* — roster nay **23**; `:46` ví-dụ mốc `2026-07-15` nay đã lùi 3 tuần. Hai chỗ này **không** kèm `file:line` vào canonical nên xếp là minh-hoạ, không phát flag — nhưng nếu vá `:45` thì vá cùng lô cho khỏi lệch một phía (`view-residual-asym` kỳ sau).
## FLAG-11 — `view-stale-status` — LOW-MED
- **view:** `CLAUDE.md:121` (root, auto-inject MỌI phiên) — *"**Audit định kỳ:** đầu mỗi tháng … em-main chạy thủ-công session đầu-tháng. **Lần kế: 2026-08-01** (S96 đã chạy 07-01)."*
- **source:** `docs/HANDOFF.md:110` (NEXT-em mục 7) — *"Monthly drift-audit **hạn 2026-08-01 — CHƯA LÀM** + re-sync `measured{}` (nay 17/23)"*. Hôm nay = **2026-08-05**.
- **lệch:** view dùng thì TƯƠNG-LAI (*"Lần kế"*) cho một ngày đã **QUÁ 4 ngày**, và **không có chữ nào báo đang nợ**; source nói thẳng **CHƯA LÀM**. Người chỉ đọc `CLAUDE.md` (bề-mặt duy nhất auto-inject cho MỌI phiên) sẽ xếp việc này vào *"chưa tới hạn"*.
- **Ranh giới — KHÔNG lấn:** (a) *việc audit chưa chạy* = **cái THIẾU** ⇒ turf `lead-gap-auditor`, không phát ở đây; (b) *hình-thức neo* của dòng này là **ngày tuyệt-đối = ĐÚNG chuẩn**, `tooling-auditor` @S172 đã phán vậy và **không lật**. Trục thứ ba mới là của vai này: **chú-thích trạng-thái chưa lật**. Ba trục khác nhau trên cùng một dòng.
- **resolve:** `:121``Lần kế: 2026-08-01 — QUÁ HẠN, CHƯA CHẠY (S96 đã chạy 07-01)`; chạy xong thì đẩy sang `2026-09-01`. Điều-kiện hết flag = trạng-thái ở `CLAUDE.md:121` khớp trạng-thái ở `HANDOFF` NEXT-em #7.
---
## ⚪ INFORM-1 (KHÔNG phát thành FLAG — nói rõ vì sao)
**Việc:** `lead-gap-auditor` cùng phiên khai *"8 dir rỗng … lead vừa dọn xong phiên này (đã đo: 0 dir rỗng còn dưới `runs/`)"*.
**Đo độc-lập, lệnh + kết quả nguyên văn:**
```
find .claude/workflows/runs -type d -empty | wc -l -> 4
find .claude -type d -empty | wc -l -> 4 (control: 4 đó nằm TRỌN dưới runs/)
```
4 dir còn sống, tất cả dưới `runs/2026-08-05-S173-bookend-open/.claude/agent-memory/`: `harness-eval` · `lead-gap-auditor` · `lead-stale-auditor` · `tooling-auditor`**class mis-land cwd-relative S54**, và chúng sinh **trong CHÍNH phiên này** (mtime hôm nay), tức lead **chưa dọn**, không phải "dọn rồi còn sót".
🔴 **Nghi-vấn cơ-chế (đưa để `ring2` truy, không tự kết-luận):** một phép `find` có lọc bỏ path chứa dấu chấm sẽ **mù đúng vùng `.claude/`** — mà 4/4 dir còn lại đều nằm sau một segment `.claude`. Nếu đúng, thước *"0 dir rỗng"***dương-giả có hệ-thống**, không phải sai một lần.
**Vì sao INFORM chứ không FLAG:** turf của vai này = **cái LEAD surface nói** (`STATUS`/`HANDOFF`/`CLAUDE.md`/persona/lệnh). Câu trên nằm trong **return của một vai ngang hàng**, chưa vào sổ nào — bắt nó là **lấn sang vai-KIỂM (`ring2-audit`)** và làm loãng enum. Nếu lead **chép câu đó vào `STATUS`/`HANDOFF`** thì lượt @close nó thành `view-stale-status` chính-hiệu và sẽ phát. Ghi sẵn để không ai mất dấu.
---
## ✅ VERIFIED-CLEAN (có LỆNH — chống dương-giả, và để lượt sau bác được)
| # | Chỗ từng nghi / từng lệch | Đo | Phán |
|---|---|---|---|
| VC-1 | `STATUS:479` bundle prod | `curl -s -k https://admin.solutions.com.vn/` -> `index-Ajv-MaCz.js` · `curl … https://eoffice.solutions.com.vn/` -> `index-YsXRkBSR.js` | **KHỚP 2/2** — control-âm ĐÚNG như dự đoán (0 deploy phiên này). Ô từng ô-nhiễm 2 lần (S166 F-2 · S172 F-1) **nay sạch**. |
| VC-2 | `agents/README.md:242` "ĐỦ roster" | trích 23 tên trong dòng -> `diff` với `ls .claude/agents/*.md` trừ README | **23/23 KHỚP, 0 thừa 0 thiếu**. Bài S143 (*"đếm PHẦN-TỬ, đừng grep SỐ"*) **đã ăn**; site này **hết stale**. |
| VC-3 | `CLAUDE.md:62` danh-sách mig | `grep -o "Mig 7[01]"` trên `:62` | có **cả 70 và 71** ⇒ nợ "thiếu 68+69" đời trước **đã đóng**. |
| VC-4 | `CLAUDE.md` "6 skill" | `ls -d .claude/skills/*/ \| wc -l` = **6** | KHỚP. |
| VC-5 | `session-start.md` §2.1.8 + `session-end.md` §L.b | grep `light_every` / `deep_every` / `h24_cadence` -> **chỉ TÊN KHOÁ, 0 chữ-số nhịp** | **0 hardcode**. `:244` ghi đúng *"cặp light chạy VÔ-ĐIỀU-KIỆN ở MỖI bookend, chỉ deep còn cổng"***FLAG-1 @S159 (6 site nói ngược) không tái-phát**. |
| VC-6 | 2 site neo tương-đối FROZEN | `HANDOFF:282` (*"hôm qua"*) · `:519` (*"2026-07-01 (hôm nay)"*) | **CÒN NGUYÊN = ĐÚNG** — thuật-lại phiên đã đóng. Lead **không** vá bừa ⇒ ghi công, không flag (đối-trọng của FLAG-8). |
| VC-7 | `memory-budget.json` enum | `flag_classes` = **12**`class_repeat.counts` = **12 khoá**, khoá mới = **0** | Ràng-buộc máy của slot (68) **đã thi hành đúng** (seed cùng nhịp, 0 lệch bất-biến). |
---
## 🔍 COVERAGE — khai THẲNG (đọc cùng TOTAL, cấm đọc phần chưa soi thành sạch)
| Bề-mặt | Nấc |
|---|---|
| `docs/STATUS.md` `:6` + bảng CURRENT STATE `:461-482` + Recently Done `:486-492` | ✅ CHẠM |
| `docs/HANDOFF.md` `:5-43` (segment sống) + 4 site neo được nêu tên | 🔶 **PARTIAL** — 529 dòng; **chưa soi `:44-101` + `:111-529`** (segment cũ) |
| `CLAUDE.md` root | ✅ CHẠM |
| `.claude/agents/README.md` | 🔶 PARTIAL — soi `:235-249` (roster/VALID_ROLES); **chưa soi** decision-tree |
| `.claude/commands/session-start.md` · `session-end.md` | 🔶 PARTIAL — soi khối H24/nhịp/roster; **chưa soi** toàn văn |
| 23 persona `.claude/agents/*.md` | 🔶 PARTIAL — **grep số-cứng cả 23 file** (roster/mig/test/gotcha/skill/nhịp) + đọc sâu **4 file** (`lead-stale`, `lead-gap`, `cicd-monitor:233`, `ring2`); **19 file chưa đọc toàn văn** |
| `.claude/governance/ACTIVE-MARKS.md` | ❌ **CHƯA CHẠM** |
| `docs/gotchas.md` (dùng làm SOURCE cho FLAG-1) | 🔶 chỉ đếm anchor, **không đọc thân** |
| `docs/changelog/migration-todos.md` · `.claude/WAL.md` · `_mind-s-<N>.md` | ❌ **CHƯA CHẠM** |
🔴 **Vì thế TOTAL dưới đây là SÀN (cận-dưới), KHÔNG phải TỔNG.** Ba mảng chưa chạm (`ACTIVE-MARKS`, `migration-todos`, `_mind`/`WAL`) đều là nơi từng đẻ flag ở S162/S166. Khai-thủng làm con số **mạnh hơn** theo chiều *"ít nhất có ngần này"*, và **vô hiệu** theo chiều *"độ phủ"* — cấm dùng nó để tuyên sạch.
## 📊 Phân-rã theo class (cho `jump_on_class_repeat`; ĐỀ-XUẤT, KHÔNG tự ghi `.session-counter.json`)
| class | lượt @open S173 | tally đang có (`class_repeat.counts`) |
|---|---|---|
| `view-stale-count` | **5** (F-1 · F-2 · F-3 · F-9 · F-10) | 9 |
| `view-stale-status` | **4** (F-4 · F-5 · F-8 · F-11) | 6 |
| `view-stale-header` | **2** (F-6 · F-7) | 4 |
| `view-stale-role-desc` | 0 | 0 |
| `view-residual-asym` | 0 | 9 |
| `view-claim-broader-than-sample` | 0 | 0 |
🔴 **Đơn-vị tally = phiên-LOGIC, KHÔNG phải lượt bookend.** Đây mới là đầu @open của L11 ⇒ **CẤM chốt reset cho `view-residual-asym` / `view-stale-role-desc` bây giờ** — chỉ reset khi **CẢ HAI** đầu bookend của L11 cùng sạch class đó (`h24-signal-write.ps1` thi hành). 3 class fire ở trên đều vượt ngưỡng jump nếu tính theo lượt — nhưng quyết-định **kéo audit tới sớm là của owner/lead**, không phải của vai này.
END
TOTAL: 11 FLAG