# sub-lead-stale-auditor — S152 @open bookend (hình B, vô-điều-kiện)

> Vai: H24 §2(1) vai-STALE — soi **VIEW LỆCH SOURCE** trên bề-mặt lead. Propose-only, không sửa file nào ngoài file này.
> Nền máy: `machine-baseline.md` cùng thư-mục (TOTAL 47; canonical mig=67 test=532 gotcha=83 table=89 menu=54 policy=216). **KHÔNG chạy lại việc máy đã làm** — chỉ thêm lăng-kính ngữ-nghĩa.
> Luật ghi: **APPEND TỪNG FINDING NGAY KHI THẤY** (anti-#53). Mỗi số kèm LỆNH sinh ra nó, kể cả VERIFIED-CLEAN (bài S151: ring2 BROKE đúng dòng thiếu lệnh).
> Nhịp: counter 26 · light_at 25 (đã qua) · deep_at 25 → deep KHÔNG tới hạn theo direction; đây là **light @open**.

---

## D-0 (disposition MED của máy) — `broken-gotcha-ref` #91 = **KHÔNG PHẢI FLAG của vai này**

Máy in: `C1 MED broken-gotcha-ref` tại `docs/changelog/sessions/2026-07-25-1930-S151-bootstrap-trio-auto-fixes.md:25` cite **#91** > max **83**.

Lệnh:
```bash
grep -n 'gotcha 91' docs/changelog/sessions/2026-07-25-1930-S151-bootstrap-trio-auto-fixes.md
# 25: ... — **FI 8-ca**, ... ("gotchas 111.616B" lùi match "11") → chốt `(?!\d)`. Live: #111 tắt, positive-control "gotcha 91" giữ răng.
grep -o '^### [0-9]\+\.' docs/gotchas.md | tail -3     # -> ### 81. / ### 82. / ### 83.
grep -c '^### [0-9]\+\.' docs/gotchas.md               # -> 83
```

**Bản-chất (máy mù đúng chỗ này):** dòng :25 **không hề khẳng-định** tồn tại gotcha #91. Nó **thuật lại chuỗi positive-control của fault-injection** cho chính detector C1 — `"gotcha 91"` nằm trong ngoặc-kép, vai trò **mention**, không phải **use**. Không có cặp view↔source nào lệch: view nói "test fixture tên `gotcha 91` vẫn bị bắt", source (`gotchas.md`) không mâu-thuẫn câu đó.

- KHÔNG phải `view-stale-count`: `view-stale-count` cần view **trỏ một con-số cũ của cùng đại-lượng** mà source đã đổi. Ở đây view không trỏ số-lượng gotcha, nó trỏ **một literal đầu vào của test**.
- KHÔNG phải cite nhầm AS-17/E-013 thành gotcha#: đọc nguyên câu thì chủ-ngữ là *positive-control giữ răng*, không phải một bài-học được viện-dẫn.
- Đây là **dương-giả lớp citation-trap** đã có tên trong auto-memory (`feedback_citation_trap_selfreference`: doc mô-tả matcher tất-yếu chứa mẫu matcher bắt; discriminator = **enclosure use⟂mention**). Trớ-trêu đúng-lớp: chính bản vá thêm `(?!\d)` (chống backtracking `111.616B`) lại đẻ ra văn-bản làm detector kêu.
- Sửa detector = **turf tooling/máy**, KHÔNG phải turf tao. Tao chỉ đóng dấu: **MED này không sinh FLAG lead-view nào**, đừng đếm nó vào tally H24 của vai-STALE.

**INFORM cho lead (1 dòng để chuyển tiếp, không phải FLAG):** nếu muốn triệt lớp này, discriminator rẻ nhất là bỏ qua match nằm trong `"..."`/`` `...` `` — nhưng đó là quyết-định của lane máy, và nó có đánh-đổi (mention thật-sự-stale trong ngoặc sẽ lọt).

---

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

**view:** `docs/HANDOFF.md:7` mục **(29)** — NEXT anh, owner-facing, đang hỏi anh "close-sweep hay giữ tiếp?"
Trích (cắt, không dán nguyên khối để tránh bẫy tự-tham-chiếu @W0.4): *(29) 3 carry già máy vừa bắt lại (uat-s134-luyke streak **8** · uat-s133-budget-freeze **10** · hook-vs-budget-cap **13** — số tươi @close S151, segment mới +1; số 7/9/12 là lúc đo @giữa-phiên)*

**source:** `machine-baseline.md:27` (đo tươi tối nay) **+ tao tự re-implement từ đĩa** → `hook-vs-budget-cap` **12** · `uat-s133-budget-freeze` **9** · `uat-s134-luyke` **7**.

**view nói "8/10/13 là số tươi @close, 7/9/12 đã cũ" vs source "7/9/12 mới là số trên ĐĨA lúc này, 8/10/13 không tồn tại ở bất kỳ thời điểm nào".**

Lệnh (re-implement đúng 2 regex của detector, không chạy lại detector):
```bash
python -c "
import re,io
raw=io.open('docs/HANDOFF.md',encoding='utf-8').read()
marks=[m.start() for m in re.finditer(r'(?m)^\*\*(?:[^\x00-\x7F]+\s*)?NEXT\s+(?:anh|em)\b',raw)]
segs=[raw[marks[i]:(marks[i+1] if i+1<len(marks) else len(raw))] for i in range(len(marks))]
cl=[]
for s in segs:
    ks=set(re.findall(r'\[carry:([a-z0-9][a-z0-9._-]*)\]',s))
    if ks: cl.append(ks)
print('segments=%d carry-lines=%d'%(len(segs),len(cl)))
for k in ['hook-vs-budget-cap','uat-s133-budget-freeze','uat-s134-luyke']:
    n=0
    for c in cl:
        if k in c: n+=1
        else: break
    print('  %-26s streak=%d'%(k,n))
print('above-first-anchor keys DROPPED =',len(set(re.findall(r'\[carry:([a-z0-9][a-z0-9._-]*)\]',raw[:marks[0]]))))
"
# segments=18 carry-lines=15
#   hook-vs-budget-cap         streak=12
#   uat-s133-budget-freeze     streak=9
#   uat-s134-luyke             streak=7
# above-first-anchor keys DROPPED = 26
```

**Vì sao "+1" KHÔNG xảy ra (phần máy im — nó chỉ in streak, không in mô-hình):** streak đếm **carry-line**, và carry-line = **logic-segment CÓ chứa `[carry:*]`**, mà segment **bắt đầu TỪ anchor `**NEXT anh/em` đầu tiên** (`governance-detectors.ps1:894-898`: `$segs` dựng từ `$marks[0].Index` trở đi). ⇒ toàn bộ phần file **TRÊN** anchor đầu tiên **không thuộc segment nào**. Dòng re-stamp tươi nhất — `HANDOFF.md:6` "Carry MỞ re-stamp @S151", **26 slug** — nằm ở dòng 6, tức TRÊN anchor dòng 7 ⇒ **bị bỏ trọn khỏi phép đo** (số 26 in ở dòng cuối lệnh trên). Thêm một dòng re-stamp mới ở đầu file **không cộng 1**; cái cộng 1 là thêm một **anchor** mới.

**Đánh-giá mức-độ (không hạ chuẩn vì "lead chắc có lý do"):** đây không chỉ lệch 1 đơn-vị. Câu view còn **đảo ngược thứ-tự tin-cậy** — nó dán nhãn "@giữa-phiên" (= cũ) lên đúng bộ số ĐANG đúng, nên anh đọc xong sẽ tin 8/10/13. Cả 3 số cùng lệch cùng chiều +1 ⇒ không phải typo lẻ mà là **một mô-hình sai được áp cho cả bộ**.

**resolve:** hết flag khi `HANDOFF.md:7` mục (29) mang đúng bộ số đo-được (12/9/7 tại thời-điểm ghi) **và** bỏ mệnh-đề "segment mới +1" (hoặc thay bằng "streak chỉ tăng khi thêm anchor NEXT, không tăng khi thêm dòng re-stamp"). Không cần chạm detector — sửa detector/anchor là **turf máy (H1)**, tao không đề-xuất ở đây.

---

## D-1 (disposition RAG +1) — **KHÔNG PHÁT FLAG**: số-tự-nhiên-trôi, không phải view-stale-count

Lệnh (tao tự gọi, không đọc lại baseline):
```
mcp__rag-unified__list_projects
# -> proj_solution_erp chunk_count = 2448 ; last_indexed_at 2026-05-29T23:26:13 (stale-known)
```
```bash
grep -n '244[78]' docs/STATUS.md | cut -c1-150
# 453: | RAG chunks | **2447** | re-verify S151 (`list_projects` - alive, +6 vs S126's 2441; ...)
# 465: - State: ... RAG 2447 ...
grep -n -o 'RAG 2447' docs/STATUS.md          # -> :6 va :465
```

**Ba bề-mặt trong STATUS đều ghi 2447 (`:6` header · `:453` ô canonical · `:465` recap) ⇒ 0 bất-đối-xứng nội-bộ.** Đây là điểm khác căn-bản với ca CANONICAL-POISON @S148 (khi đó `:6` và `:448` cùng file nói hai số khác nhau về test) — nay ba nơi đồng-thanh, chỉ cùng lệch so với live +1.

**Vì sao KHÔNG phải FLAG (phán, không né):**
1. Đại-lượng này là **bộ-đếm runtime tăng đơn-điệu** do chính lead ghi (`store_memory`, lead = sole RAG-writer). Chunk +1 khớp đúng nhịp: STATUS ghi 2447 lúc soạn closeout S151, rồi closeout S151 tự `store_memory` ⇒ 2448. Không có "đổi source rồi quên vá view" — view đo đúng tại thời-điểm đo.
2. Ô canonical mang **dấu-vết provenance tường-minh** ("re-verify S151", "+6 vs S126's 2441") ⇒ người đọc biết đây là **snapshot có mốc**, không phải khẳng-định live.
3. Nếu tao flag cái này, flag đó **không bao giờ resolve bền** — mỗi closeout lại +1. Đúng thứ nhiễu-vĩnh-viễn mà trap#3 cấm, và là mồi Goodhart (vá bằng cách gỡ số khỏi bảng = rời tập-đo).
4. **Không có máy nào ăn số này làm thước:** canonical-resolve của detector chỉ có mig/test/gotcha/table/menu/policy (baseline:21) — RAG không nằm trong đó.

**INFORM cho lead (1 dòng, KHÔNG tính vào tally):** consumer duy-nhất là `.claude/commands/session-start.md:294` — nó dặn "so LIVE với row RAG chunks trong STATUS". Cấu-trúc so-sánh-với-snapshot này sẽ **luôn** lệch ở lần mở phiên kế (vì closeout vừa +N). @S151 mày đã gỡ thước cứng "~3076" ở đúng dòng đó; nếu muốn dòng này khỏi kêu-giả mãi thì nó cần **ngưỡng/ngữ-nghĩa** ("live ≥ row, chênh nhỏ = bình thường; live SỤT = báo động") chứ không phải khớp-tuyệt-đối. Đó là turf tooling/gap, tao chỉ đặt lên bàn.

---

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

**view:** `docs/STATUS.md:455` — dòng **`**Bundle hash live (prod):**`** nằm TRONG §CURRENT STATE (ngay dưới bảng canonical), ghi admin **`BVCukFP5`** · user **`DoxyEOxh`**, tự đóng mốc "(S134 — `6664a61` …)".

**source:** `docs/STATUS.md:6` (header CURRENT) · `docs/STATUS.md:465` (recap S151) · `docs/HANDOFF.md:13` (segment S147) — cả ba: bundle **FROZEN admin `B2j1LQ-v` / user `C3wbJegk`**, land @S147 (`7d39d8d`+`4510cea`, CI #407, rotate ×2 **verify 2-nguồn** curl em-main khớp cicd-monitor).

**view nói "bundle prod = `BVCukFP5`/`DoxyEOxh` (S134)" vs source "prod = `B2j1LQ-v`/`C3wbJegk` từ S147, và FROZEN suốt S148→S151".**

Lệnh:
```bash
grep -rn 'B2j1LQ-v' docs/STATUS.md docs/HANDOFF.md | cut -c1-90
#  docs/STATUS.md:6   (header CURRENT S151)
#  docs/STATUS.md:465 (recap S151)
#  docs/HANDOFF.md:13 (segment S147)
grep -rn 'BVCukFP5' docs/STATUS.md | cut -c1-70
#  docs/STATUS.md:455  <-- o CANONICAL trong §CURRENT STATE
#  docs/STATUS.md:491 / :497 / :514 / :528  <-- recap S140/S141-143 (frozen, DUNG de yen)
sed -n '455p' docs/STATUS.md | grep -o 'B2j1LQ-v\|C3wbJegk\|BVCukFP5\|DoxyEOxh' | sort | uniq -c
#  2 BVCukFP5
#  2 DoxyEOxh      <-- 0 lan xuat hien cap S147 trong TOAN BO 13.120 ky-tu cua dong nay
```

**Vì sao là `view-residual-asym` chứ không phải class khác:** dấu-hiệu định-danh ở đây là **bất-đối-xứng của một đợt sửa**: S147 rotate bundle → cập-nhật **3 bề-mặt** (header STATUS, recap STATUS, HANDOFF) nhưng **bỏ đúng 1 bề-mặt** là dòng canonical `:455`, rồi 4 nhãn phiên sau (S148 · S149-S150 · S151) mỗi lần đều khai "bundle FROZEN" mà không ai quay lại dòng đó. Không xếp `view-stale-count` vì vật lệch là **cặp định-danh hash**, không phải con-số đếm được.

**Ranh-giới canonical (tao không tự phán bừa):** luật của tao là *derived ghi khác canonical ⇒ flag derived*. Ở ca này **chính dòng canonical mới là dòng lệch** — nhưng tao không phải "nghi canonical sai": (a) nó **tự đóng mốc "(S134"**, tức tự khai vintage cũ hơn S147; (b) sự-thật prod S147 có **2 nguồn độc-lập** đã verify; (c) 3 bề-mặt muộn hơn đồng-thanh. Nên đây là **canonical tụt hậu có bằng-chứng**, cùng lớp CANONICAL-POISON tao bắt @S148 (khi đó `:448` test 528 vs `:6` 532) — chỉ khác trục.

**Máy mù ở đâu:** trục bundle **không nằm trong canonical-resolve** của detector (`machine-baseline.md:21` chỉ có mig/test/gotcha/table/menu/policy) ⇒ 0 flag máy, mãi mãi. Trong khi `.claude/commands/session-start.md:347` xếp **"bundle hash prod" vào Critical signal** phải đọc mỗi phiên ⇒ ai đối chiếu prod với `:455` sẽ kết-luận sai ("bundle rotate ngoài ý muốn" / nghi deploy regression).

**Vì sao MED không HIGH:** dòng tự-khai "(S134" nên người đọc cẩn-thận thấy được vintage, và hiện chưa có máy nào ăn số này làm thước. Nếu sau này wire bundle vào cross-check thì ca này thành HIGH.

**resolve:** hết flag khi `:455` mang cặp `B2j1LQ-v`/`C3wbJegk` với mốc S147 (giữ lineage S134 dạng ghi-chú, **đừng xoá** — chuỗi rotate history có giá-trị), hoặc dòng đó được đổi tiêu-đề thành "Bundle hash (mốc S134, lịch-sử)" và cặp live chuyển lên bảng canonical thành 1 row riêng.

---

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

**view:** `.claude/agents/README.md:5` — **CÙNG MỘT DÒNG** chứa hai khẳng-định ngược nhau về model của lead:
- offset ~179: *"em main **lead DEFAULT Opus 5 MAX** (thư `59ce1d0f` @S149; Fable = anh `/model`·`/fable-real` — 🧊 idiom "anh chọn per-session" **superseded-VALUE**)"* ← đã vá, và **tự tuyên-bố idiom kia đã chết**
- offset ~1224: *"**Lead runtime = per-session owner-choice (Fable ↔ Opus)**"* ← **in đậm, không nhãn, đọc như luật đang sống** = đúng cái idiom mà offset 179 vừa khai là superseded

**source:** ô canonical `docs/STATUS.md:452` §Sub-agents — làm ĐÚNG: giá-trị sống = *"…Opus 5 MAX (thư `59ce1d0f` @S149; anh chốt ô canonical hiển-thị DEFAULT-fleet @S151…)"*, và mọi vết `owner-choice` trong ô đó **đều bọc nhãn** *"🧊 Lineage owner-choice/flip-chain FROZEN tới flip-8…"*.

**view nói "lead runtime = per-session owner-choice (Fable ↔ Opus)" (không nhãn, đậm) vs source "default-fleet = Opus 5 MAX; owner-choice là LINEAGE đã 🧊 FROZEN".**

Lệnh:
```bash
sed -n '5p' .claude/agents/README.md | grep -o 'lead DEFAULT Opus 5 MAX[^)]*)'
#  lead DEFAULT Opus 5 MAX** (thu `59ce1d0f` @S149; Fable = anh `/model`.`/fable-real` - 🧊 idiom "anh chon per-session" superseded-VALUE)
sed -n '5p' .claude/agents/README.md | grep -o 'Lead runtime = per-session owner-choice[^)]*)'
#  Lead runtime = per-session owner-choice (Fable <-> Opus)

python -c "
import io
s=io.open('.claude/agents/README.md',encoding='utf-8').read().split('\n')[4]
for n in ['lead DEFAULT Opus 5 MAX','superseded-VALUE','Lead runtime = per-session owner-choice','Lineage:']:
    print('%6d  %s'%(s.find(n),n))
print('line len =',len(s))"
#     179  lead DEFAULT Opus 5 MAX
#     296  superseded-VALUE
#    1224  Lead runtime = per-session owner-choice     <-- NAM NGOAI moi nhan
#    1662  Lineage:                                    <-- clause lineage bat dau SAU no
#  line len = 1830

# doi chung: o canonical lam dung
sed -n '452p' docs/STATUS.md | grep -o '.\{40\}Lineage owner-choice.\{60\}'
```

**Điểm chốt (máy không phán được):** offset 1224 **không** được bọc bởi mệnh-đề `Lineage:` — mệnh-đề đó chỉ bắt đầu ở offset 1662, tức **sau** nó. Nên đây không phải "đóng-băng-có-chủ-đích" (trap#3): nó là **dư-lượng của đợt value-update sửa nửa đầu dòng, quên nửa sau cùng dòng**. Detector C3 vocab-fork đếm token `two-tier/all-inherit/worker-tier-pin` nên **cụm `owner-choice` không nằm trong tập-đo của nó** ⇒ máy im.

**Vì sao MED:** `.claude/agents/README.md` nằm trong `memory-budget.json → crystallized_backfill.hotload_sources` = **hot-feed always-on của lead**, nên câu in-đậm sai này được nạp lại **mỗi phiên**; và nó nói về đúng thứ phiên nào cũng phải quyết (model của lead). Không HIGH vì cùng dòng đã có câu đúng đứng trước, người đọc kỹ tự thấy mâu-thuẫn.

**resolve:** hết flag khi cụm ở offset ~1224 được (a) gỡ, hoặc (b) đổi thành "Lead runtime = **default Opus 5 MAX**; `/model`·`/fable-real` là lượt-gõ của anh", hoặc (c) đưa vào trong nhãn 🧊 lineage như `STATUS:452` đã làm. **Không đổi ô canonical** — canonical đang đúng.

---

## VERIFIED-CLEAN (đã soi, KHÔNG phát flag — kèm lệnh, per bài S151)

**VC-1 — trục CANONICAL-vs-HEADER (chính ca đã cắn @S148): SẠCH trên mọi trục ĐẾM.**
```bash
sed -n '6p' docs/STATUS.md | grep -o 'Mig 67\|89 bảng\|532 test\|gotcha 83\|menu 54' | sort -u
#  532 test / 89 bảng / Mig 67 / gotcha 83 / menu 54
awk 'NR>=441 && NR<=453 {match($0,/^\| [^|]+\| [^|]+\|/); print substr($0,RSTART,RLENGTH)}' docs/STATUS.md
#  | Migrations | **67** | · | SQL tables | **89** | · | Menu keys | **54** |
#  | Tests | **532 PASS** | · | Gotchas | **83** | · | Sub-agents | **20** | · | Policies | **216** |
```
⇒ header `:6` khớp 5/5 ô canonical. **Ca canonical-poison test-count 528-vs-532 tao bắt @S148 đã vá và GIỮ vá** (nay cả hai nơi = 532, khớp `dotnet test` tươi 532 ở baseline:40). Ghi rõ: kết-luận "sạch" này **tính từ số đo trên**, không phải dán nhãn (anti-META-COUNT).

**VC-2 — roster 20: SẠCH cả hai phía, và tránh được đúng 2 bẫy đã cắn người.**
```bash
ls -1 .claude/agents/*.md | grep -v README | wc -l      # -> 20   (glob thô se ra 21 = bay README:6)
sed -n '452p' docs/STATUS.md | grep -o '^| Sub-agents | \*\*[0-9]*\*\*'   # -> | Sub-agents | **20**
```
⇒ đĩa 20 == canonical 20. Và `agents/README` **không chép số** (dòng :3/:5/:6 tự cấm chép, trỏ canonical) ⇒ trục `view-stale-role-desc` **không có ca nào** phiên này. Đây là điểm khác S143/S151: hai lần đó README tự khai roster bằng **liệt-kê TÊN** nên grep-theo-SỐ mù; lần này tao đếm **phần-tử trên đĩa** rồi mới so.

**VC-3 — menu 54: SẠCH, và tao đo bằng HAI thước khác nhau vì máy KHÔNG cross-check trục này.**
```bash
grep -c 'public const string' src/Backend/SolutionErp.Domain/Identity/MenuKeys.cs          # -> 54
sed -n '147,220p' src/Backend/SolutionErp.Domain/Identity/MenuKeys.cs \
  | sed -n '/All =/,/};/p' | grep -o '[A-Za-z_][A-Za-z0-9_]*\s*,' | wc -l                  # -> 54  (dem PHAN-TU)
```
⇒ const-count 54 == element-count 54 == canonical 54. 🔴 Lý do phải đo 2 thước: baseline in `[OK] canonical matches disk (**mig+gotcha**)` — **menu/test/table/policy KHÔNG được máy cross-check** (đúng bài "cross-check phủ tới đâu mới tin tới đó" @S148). Đính-chính sổ của chính tao: diary S150 ghi "const-count 51 ≠ element 54"; **đo lại hôm nay cả hai đều 54** ⇒ vế "51" không còn đúng trên đĩa hiện tại, đừng mang đi dùng lại.

**VC-4 — dư-lượng sweep model @S151: SẠCH trên 3/4 bề-mặt sống (bề-mặt thứ 4 = FLAG-3).**
```bash
grep -rn 'owner-choice\|all-inherit\|two-tier\|Opus 4\.8' docs/STATUS.md .claude/agents/README.md \
  .claude/commands/session-start.md .claude/commands/session-end.md CLAUDE.md | cut -c1-165
```
- `session-start.md:41-42` — có `🔄 VALUE-update @S149` + `🧊 Lineage: MTv3 owner-choice … superseded-VALUE` ⇒ **nhãn đủ, CLEAN**.
- `STATUS:452` (ô canonical) — `🧊 Lineage owner-choice/flip-chain FROZEN tới flip-8` ⇒ **CLEAN**.
- `STATUS:17/:198/:205/:576/:579/:587`, `HANDOFF:31/:56/:63/:80/:242` — đều nằm trong khối **`Prev Sxxx` / recap đóng-băng** ⇒ **KHÔNG flag** (trap#3: recap kẹt ở phiên GHI là đúng thiết-kế; bài S140 "nấc advance ở phiên KẾ, recap đứng yên").
- `agents/README:12/:13/:15` — là các dòng **`> Upgrade <ngày>:`** = mục changelog theo mốc, ngày cũ là **mục-đích** ⇒ **KHÔNG flag**. Khác hẳn `:5` (dòng **Architecture**, thời hiện-tại) — nên chỉ `:5` bị bắt.
- `CLAUDE.md` root — 0 hit; nó **cố ý không chép** giá-trị posture (khối "🎛️ Chế-độ đang hiệu-lực" chỉ trỏ nơi tra) ⇒ **CLEAN by design**.

**VC-5 — `.claude/governance/ACTIVE-MARKS.md`: 0 ca trong turf tao.**
```bash
grep -rn 'owner-choice\|all-inherit\|two-tier\|Opus 4\.8\|B2j1LQ\|BVCukFP5' .claude/governance/ACTIVE-MARKS.md
# -> 0 hit (chi 1 hit 'fable-{real,clone}' o :19 = ten COMMAND, khong phai gia-tri model)
```

**VC-6 — RAG/gotcha/mig: xem D-0 (dương-giả citation-trap) và D-1 (số-tự-nhiên-trôi) ở trên — cả hai có lệnh riêng, cả hai KHÔNG phát flag.**

### Không soi (khai thẳng, đừng đọc thành "sạch")
- `.claude/commands/session-end.md` — chỉ chạm qua grep VC-4 (trục model), **không** soi toàn-diện.
- Thân `HANDOFF:29` (mega-line 10.389 ký-tự) — chỉ soi mục (29) theo PIN; các mục khác trong dòng đó không rà.
- Trục H24-3 session-label (bài đắt @S150: `STATUS` 0 chuỗi `Last updated`, `HANDOFF:5` viết `(**S147**` nên regex `\(S` trượt) — **không đo lại phiên này**; "0 flag" ở trục đó vẫn KHÔNG được đọc thành sạch.

---

## Tally đề-xuất

*(để lead đưa vào `h24-signal-write`; tao **không** ghi ledger — propose-only)*

| class | fire? | số FLAG |
|---|---|---|
| `view-residual-asym` | ✅ | **2** (FLAG-2 bundle-hash canonical · FLAG-3 `agents/README:5` nửa-dòng-sót) |
| `view-stale-count` | ✅ | **1** (FLAG-1 carry-streak 8/10/13 vs 12/9/7) |
| `view-stale-status` | ❌ | 0 |
| `view-stale-header` | ❌ | 0 |
| `view-stale-role-desc` | ❌ | 0 (VC-2: README bỏ-số, roster đĩa 20 == canonical 20) |

**TOTAL: 3 FLAG** · SEV cao nhất **MED** (3/3 đều MED, 0 HIGH, 0 LOW).
**Ngoài tally:** 2 disposition KHÔNG-phát-flag (D-0 `broken-gotcha-ref` #91 = dương-giả citation-trap, **đề-nghị đừng đếm vào H24**; D-1 RAG +1 = số-tự-nhiên-trôi) + 2 INFORM chuyển turf khác (discriminator use⟂mention cho C1 · ngữ-nghĩa ngưỡng cho thước RAG ở `session-start:294`).

**Ghi chú cho `jump_on_class_repeat`:** `view-residual-asym` fire lần này với **2 instance nhưng CÙNG MỘT GỐC-LOẠI** = "đợt value-update/rotate sửa một-phía, sót bề-mặt còn lại". Đừng đọc 2 instance thành 2 lần tái-phát độc-lập — đó là bài tao đã ghi @S124 (8 instance = 1 flip).
