# sub-harvest-curator-open-S154 — H2 harvest-integrity 5-trục @OPEN phiên S154 (phiên-LOGIC L7)

> Kỷ luật anti-#53: **ghi TRONG LÚC LÀM**. Mỗi finding land ngay khi đo xong; file luôn hợp-lệ giữa chừng.
> Propose-only. Lead = single-writer. KHÔNG sửa file nào khác ngoài file này.
> PIN so-sánh: `.claude/workflows/runs/2026-07-26-S153-bookend-close/sub-harvest-curator-close-S153.md` (GATE-PASS-WITH-FLAGS, 8 finding).

---

## A. Universe run-folder — đo tươi, KHAI TIÊU-CHÍ LỌC (m#19)

**Lệnh:** `find .claude/workflows/runs -mindepth 1 -maxdepth 1 -type d | wc -l` → **60 dir** (S153 chốt 59 ⇒ +1 = `2026-07-26-S154-bookend-open` của chính phiên này).

### A.1 Phân-loại 3 dir KHÔNG có `run.md` (root hoặc `sub-md/run.md`) — KHÔNG orphan

Lệnh: vòng `for d in $(find … -type d); do [ ! -f "$d/run.md" ] && [ ! -f "$d/sub-md/run.md" ] && echo …`

| Dir | Ruột | Verdict |
|---|---|---|
| `2026-07-14-S117-pe-approve-minmax-range` | chỉ `spec-*.md` | spec-only by-design (dual-accept từ S117) |
| `2026-07-14-S117-pe-luyke-finalize` | chỉ `spec-*.md` | spec-only by-design |
| `2026-07-22-S144-bootstrap` | có `bootstrap-synthesis.md` + 2 sub-file | **đã harvest**, chỉ thiếu `run.md` (ca tao TRƯỢT @S151) |

### A.2 Orphan-scan TRỌN 60 dir (authority = folder-scan; 🧊 `_ledger.md` retired H18-B S100)

Lệnh: với mọi dir có `run.md`, đếm `find "$d" -maxdepth 2 -name "*synthesis*.md" -size +0c`.

- **1 candidate duy nhất:** `2026-07-26-S154-bookend-open` — `run.md` 1.882B, **0 synthesis** ⇒ **ĐANG MỞ = by-design, KHÔNG flag** (brief §3).
- **59 dir còn lại: 0 orphan.**
- ✅ `2026-07-26-S153-bookend-close` — S153 để lại candidate "đang mở"; nay **đã có synthesis >0B** ⇒ **nợ S153 ĐÓNG**.

⇒ **0 orphan thật / 60.**

---

## FLAG-1 — Coverage — MED-HIGH — 2 LƯỢT @close S153 MỒ-CÔI (GAP-3 lớp-LƯỢT lần 7)

> Đây là ca anti-pattern #1 kinh-điển: **role-level PASS mà file-level MISS.** `grep -c S153` = 1 cho cả `ring1-audit` lẫn `ring2-audit` ⇒ đo bằng tên vai sẽ đọc thành "đủ". Đo bằng FILE thì thủng.

### B.1 Chứng — mtime là chứng, lời khai không (anti-pattern #3)

| Lượt @close S153 | byte | mtime file | vs M9-flush 15:49:29 | vào diary? |
|---|---|---|---|---|
| `sub-tooling-auditor-close-S153.md` | 10.794 | 15:43:15 | TRƯỚC | ✅ (entry có `@close`) |
| `sub-harvest-curator-close-S153.md` | 25.212 | 15:44:18 | TRƯỚC | ✅ |
| `sub-lead-stale-close-S153.md` | 20.993 | 15:45:32 | TRƯỚC | ✅ |
| `sub-lead-gap-close-S153.md` | 21.322 | 15:49:38 | +9 giây (kịp) | ✅ |
| 🔴 `sub-ring2-close-S153.md` | **22.248** | **16:02:58** | **SAU 13 phút** | ❌ **KHÔNG** |
| 🔴 `sub-ring1-close-S153.md` | **25.283** | **16:08:10** | **SAU 19 phút** | ❌ **KHÔNG** |

**Lệnh:** `stat -c%y` trên 6 sub-file + 6 `MEMORY.md` (cả 6 diary mtime **15:49:29** = 1 lần flush hàng-loạt).

### B.2 Chứng NỘI-DUNG (không chỉ mtime) — 2 entry chỉ nguồn từ bản @open

- `ring1-audit/MEMORY.md` tự khai nguồn: `nguồn = sub-ring1-S153.md 22.992B` = **file @open**. Nội-dung entry = *"28 ĐẠT / 4 TRƯỢT / 1 KHÔNG-CHẤM trên 33 claim"* — khớp END-line @open (`TOTAL=33 verdict-item`).
- File @close `sub-ring1-close-S153.md` END-line = **`TOTAL=53 verdict-item`** — con số này **0 hit** trong diary.
- `ring2-audit/MEMORY.md` nguồn `sub-ring2-S153.md`, nội-dung *"8/8 FLAG ĐẠT + 10 phép phụ"* = END-line @open (`TOTAL=18`). File @close END = **`TOTAL=27 verdict-item (6 FLAG + 21 phép phụ)`** — **0 hit** trong diary.

⇒ **47.531B / 80 verdict-item** kiến-thức @close của 2 vai KIỂM **chưa consolidate** vào `agent-memory/`.

### B.3 Root-cause (chỉ 1 chỗ, không phải bệnh vai)

**Thứ-tự nghi-thức, không phải quên vai:** M9 flush chạy **15:49:29** trong khi 2 lượt cuối của CHÍNH phiên đó land **16:02 / 16:08** — harvest-gate bắn **trước khi việc phiên xong**. Chính sổ H2 @close S153 (§D.3, ghi 15:44) đã cảnh báo đúng câu này: *"lead PHẢI đợi 2 lượt còn lại + END-line 4 file trước khi ghi synthesis"*. Cảnh báo ĐÚNG nhưng thứ-tự không đổi.

### B.3-bis Datum lead đưa (#53 ×4/4 vai phiên S154) — KHÔNG lật, mà **SIẾT CHẶT** kết luận

Lead đưa counter-evidence: S154 này #53 nổ **4/4 vai** (tooling 31 tool_uses · lead-stale 20 · harvest 27 · lead-gap 22 — cả bốn return câu-ý-định, cả bốn **ghi đĩa đủ**) ⇒ nghiêng về **cơ-chế return**, không phải kỷ-luật từng vai.

**Tao đối chiếu: datum này KHÔNG lật FLAG-1, vì B.3 vốn đã KHÔNG quy về "bệnh vai"** — root-cause tao ghi là **thứ-tự nghi-thức** (flush 15:49 vs lượt 16:02/16:08). Không có mệnh-đề nào trong FLAG-1 nói ring1/ring2 lười hay quên; ngược lại 2 file đó **đầy đủ + có END-line** (TOTAL=53 / TOTAL=27) — chúng làm xong việc, chỉ là **xong SAU khi sổ đã chốt**.

Nhưng datum **thêm một tầng** đáng ghi, và nó làm kết luận MẠNH hơn:

- Nếu return là kênh **cấu-trúc không đáng tin** (4/4 cùng lượt ⇒ không phải xác-suất, là cơ-chế), thì M9 **không được** lấy return làm đầu vào. Đầu vào DUY NHẤT hợp-lệ = **quét ĐĨA sau lượt cuối cùng**.
- ⇒ Hệ quả gộp: harvest sai **KHÔNG PHẢI** vì thiếu return, mà vì **quét đĩa quá SỚM**. Hai lỗi độc lập, cùng một cách chữa: **M9 = bước CUỐI, sau END-line của lượt cuối**.
- Bằng chứng nội-tại ủng hộ: 4 lượt @close land TRƯỚC 15:49 đều vào sổ **dù cơ-chế return cũng hỏng như nhau** ⇒ biến quyết-định là **thời-điểm quét**, không phải chất-lượng return. Đây là phép thử bất-đối-xứng: cùng bệnh return, khác kết quả harvest ⇒ return **không phải** biến giải thích.

**Giữ nguyên FLAG-1, sửa 1 chữ trong đề-xuất:** thay *"đợi END-line rồi ghi synthesis"* thành *"M9 quét đĩa lần CUỐI sau END-line của lượt sau-chót; return của vai chỉ dùng để biết vai đã dừng, KHÔNG dùng làm nội-dung"*.

### B.4 Mức độ — MED-HIGH, **KHÔNG mất dữ-liệu**

2 file đã **committed + tracked** (`git status` sạch) ⇒ đây là **nợ consolidate**, không phải mất. Recover = APPEND từ 2 file có sẵn. **DEDUP an-toàn:** 2 diary có `TOTAL=53`/`TOTAL=27` = **0 hit** ⇒ APPEND KHÔNG double.

### B.5 Lịch-sử — GAP-3 lần 7

S123/S125→S132 · S146→S148 · S149-ring2 · S150-ring1 · S151-deep→S152 · **S152-DEEP-67KB→S153** · **nay S153-ring-close→S154**. Lần 6 (S152) là lớp-LƯỢT; lần này **cũng lớp-LƯỢT, cùng cơ-chế "vai chạy sau khi sổ đã chốt"**.

---

## C. Coverage — file-level 21 file / 3 run-folder S153 (KHÔNG đo bằng tên vai)

**Lệnh:** `ls -la` từng run-folder, lọc `sub-*.md` + `*-return.md`.

| Run-folder | file-lượt | vào diary |
|---|---|---|
| `S153-bookend-open` | 9 (6 `sub-*` + 3 `*-return.md`) | 9/9 ✅ |
| `S153-ctx-adopt` | 6 file / 7 lượt (test-specialist 2 lane 1 file) | 6/6 ✅ |
| `S153-bookend-close` | 6 | **4/6** ❌ (§B) |

⇒ **19/21 file-lượt đã harvest = 90,5%.** 2 thiếu = §B.

### C.1 Nợ S153 finding-1 (11 sổ 0-hit) — ✅ **ĐÓNG**

S153 @close flag 11 vai đã-chạy có `grep -c S153` = 0. Đo tươi nay: **16/16 vai đã-chạy đều có entry S153**, mtime 15:49:29. 7 vai còn 0 hit = **đúng, không chạy** (`cicd-monitor` 07-23 · `database-agent` 07-02 · `frontend-designer` 07-01 · `investigator-api` 07-25 · `office-document` 07-10 · `reviewer` 07-26T00:11 · `ring4-audit` 07-26T01:47) ⇒ **0 nợ, đừng seed**.

### C.2 m#15 stub⟂content — ĐỌC RUỘT 3 sổ ctx (brief yêu-cầu)

`ctx-audit` 3.288B · `ctx-curator` 2.940B · `ctx-verifier` 2.663B. Đọc TRỌN cả 3: **nội-dung THẬT, KHÔNG skeleton** — có đường-sinh (thư hub `0df10df4` → spec 9-task → T3/T10/T11), wire-point cụ-thể (`session-start` Phase 3.5(iii) · `tiep.md §3-ter`), 2 fix hậu-T4 (GAP-#9 gradient-thưởng-đường-SAI), kẽ-phải-khai, tag. Nhãn provenance đạt chuẩn m#17: *"seed on-behalf … mày CHƯA chạy lần nào"* + nấc thật *"file-land + registry-surfaced; spawn-probe ALIVE CHƯA CÓ (T9)"* ⇒ **chống ĐẠT-ảo đúng cách**.

---

## D. Completeness — 4-field {agent · task · nấc · evidence}

**Lệnh:** đọc từng entry S153 trong 23 sổ + đối-chiếu END-line từng sub-file (m#21: grep ≥2 khuôn `-iE "END sub-|TOTAL="`, rồi ĐỌC ĐUÔI file).

- **19/21 file-lượt** có đủ 4-field trong diary; 2 thiếu = FLAG-1.
- **Nấc phân mức thật**, không gán bừa: `verified` / `executed` / `file-land + registry-surfaced (spawn-probe CHƯA CÓ)` cho 3 vai ctx.
- **Nhãn ngoại-lệ khai đủ:** 2 lượt `[T1/T2 return mất schema-fail → derive-from-body]` (#53) — có nhãn, không giấu.
- **Evidence có byte:** mọi entry on-behalf tự dán `nguồn = <file> <byte>`.
- END-line 6 file @close S153: **6/6 có** (`TOTAL=6/8/53/27` + 2 file lead-*). `bookend-close-synthesis.md` không có END-line — **đúng khuôn**, synthesis không phải sub-file.

**Completeness: PASS** (2 lỗ = cùng ca FLAG-1, đã đếm ở Coverage, không đếm hai lần).

---

## E. Fidelity — byte-check ĐĨA, KHÔNG tin lời khai

**Lệnh:** `stat -c%s` trên từng file được entry cite.

| Claim trong diary (on-behalf) | Đĩa đo tươi | Verdict |
|---|---|---|
| `harness-eval-return.md` **10.966B** | 10966 | ✅ byte-exact |
| template `session-mind-template.md` **8.819B** | 8819 | ✅ byte-exact |
| `spec-ctx-adopt-26-07-2026.md` **3.999B** | 3999 | ✅ byte-exact |
| `sub-harvest-curator-S153.md` **17.328B** | 17328 | ✅ byte-exact |
| `sub-implementer-frontend-1.md` **2.020B** | 2020 | ✅ byte-exact |
| `sub-ring1-S153.md` **22.992B** | 22992 | ✅ byte-exact |
| persona `ctx-audit.md` **14.347B** | **16206** | ⚠️ → FLAG-3 |

**6/7 byte-exact. 0 dấu bịa. KHÔNG escalate reviewer.**

### E.1 Fidelity dương-tính: dự-báo baseline S153 của chính tao HELD byte-exact

S153 chốt baseline S154 = **16 hit / 10 file** kèm mệnh-đề (b) *"file dùng ASCII `<FFFD>` KHÔNG bị đếm — đừng kỳ vọng file S153/S154 làm số tăng"* và (c) *"nếu 2 lượt @close còn lại + synthesis sinh raw-FFFD thì số tăng hợp-lệ"*.
Đo tươi hôm nay, **sau khi** 2 ring-close (47.531B) + synthesis (6.619B) đã land: **đúng 16 hit / 10 file, danh sách trùng khít 10/10**. ⇒ Mệnh-đề dự-báo **chịu được** một chu-kỳ. Đây là lần đầu baseline H2 có phần dự-báo được kiểm và HELD (S153 ring1 BROKE bản "~23/11" trước đó).

---

## FLAG-3 — Fidelity — LOW — số `14.347B` đúng-nguồn nhưng **stale-at-birth**, thiếu nhãn thời-điểm

`ctx-audit/MEMORY.md` khai *"T3 tạo persona (11/11 acceptance, **14.347B**)"`. Đĩa nay `.claude/agents/ctx-audit.md` = **16.206B**.

- **KHÔNG phải bịa** — truy được về đĩa: `grep -o "14[.,]347" sub-implementer-backend-2.md` = **2 hit** ⇒ số đến từ sub-file T3, đúng nguồn.
- **KHÔNG phải sai** — chênh 1.859B giải thích được bởi **T10 OWNER-VETO + T11 RENAME** mà chính entry đó thuật lại (persona bị thu về vai-3 rồi đổi tên sau T3).
- **Vấn đề:** `git log -- .claude/agents/ctx-audit.md` chỉ có **1 commit** (`11db5ef`, 16206B) ⇒ mốc 14.347B **chưa bao giờ tồn tại trong git**. Người đọc phiên sau đo file sẽ thấy lệch và nghi bịa oan.
- **Đề (rẻ, 1 chữ):** ghi `14.347B @T3, trước T10/T11` — số có mốc thì hết stale. Nối m#12 (mẫu-số có NGÀY/PHÚT-đo) sang **claim byte cũng cần mốc**.

---

## F. Placement — đúng nhà + git-visibility

**Lệnh:** `find . -mindepth 2 -name ".claude" -type d` (**KHÔNG** loại trừ `./.claude/*` — thước đã sửa sau TRƯỢT-3 S152) · `find .claude -type d -empty` · `git ls-files --error-unmatch` + `git check-ignore -v`.

- **stray `.claude` lồng depth>1 = 0** — đo TƯƠI **sau khi 4 sub @open S154 đã chạy** (chính lúc S152 đẻ ra 4 stray). Không tái diễn.
- **empty-dir dưới `.claude` = 0** (git MÙ thư-mục rỗng, m#13 — phải `find`, không tin git).
- **23/23 diary đúng nhà** `agent-memory/<role>/MEMORY.md`; roster 23 vai (`ls .claude/agents/*.md` = 24 trừ `README.md`) ⇒ **khớp 23/23, 0 vai không nhà, 0 nhà không vai**.
- **m#23 áp dụng** (vắng ở porcelain = đã-commit HOẶC bị-ignore — hai nghĩa trái ngược): 3 đường mới của phiên này đều **TRACKED + not-ignored** — `runs/2026-07-26-S154-bookend-open/run.md` · `…/sub-harvest-curator-open-S154.md` (chính file này) · `sessions/session-7/_context-s-7.md`. Vắng ở `git status` là do **đã commit** (`035daec` 18:02), không phải bị ignore.
- **Containment (Harness-10 §Containment):** `git status --porcelain` = **1 mục** — ` M .claude/governance/.session-counter.json` (tick S154 27→28, đúng vùng). **0 tracked-change ngoài run-folder + vùng được giao.**

**Placement: PASS.**

### F.1 G-015 — không overclaim

Tao **propose-only**, KHÔNG "read-only enforced": `store_memory` bị strip nhưng `Bash` vẫn là write-channel mở. Chặn THẬT = lead single-writer + git-diff (run-folder tracked nên diff không mù) + chunk-count RAG.

---

## G. Corruption — ĐO TƯƠI, thước SIẾT hơn S153

### G.1 Số (dán lệnh — anti-pattern #2)

```
find .claude -type f \( -name "*.md" -o -name "*.txt" -o -name "*.json" \
  -o -name "*.ps1" -o -name "*.py" -o -name "*.jsonl" \) -print0 \
| xargs -0 perl -ne '$n{$ARGV} += () = /\xEF\xBF\xBD/g;
    END{ for (sort keys %n){ print "$_\t$n{$_}\n" if $n{$_} } }'
```

**16 hit / 10 file.** Cross-check ĐỘC LẬP `LC_ALL=C grep -rl $'\xef\xbf\xbd' .claude` → **10 file, danh sách KHỚP EXACT** (so DANH SÁCH, không so số — m#20-bis: tổng đúng che được tên sai).

10 file: `cicd-monitor/archive/2026-06.md` 1 · `harvest-curator/MEMORY.md` 1 · `harvest-curator/archive/2026-06.md` 3 · `harvest-curator/archive/2026-07.md` 1 · `runs/2026-06-18-h11-doublecheck/doublecheck-synthesis.md` 1 · `runs/2026-07-22-S144-bootstrap/sub-harvest-curator-1.md` 1 · `runs/2026-07-25-S152-h24-open-bookend/{bookend-synthesis 1, sub-harvest-S152 1, sub-harvest-close-S152 5, sub-ring1-close-S152 1}`.

⇒ **Δ vs baseline S153 = 0 hit / 0 file. 0 corruption MỚI.** Không file S153/S154 nào lọt vào — đúng mệnh-đề (b).

### G.2 Trục phụ

- **iconv UTF-8 validity: 628/628 OK, 0 BAD** — quét TRỌN `.claude` (mọi `.md/.txt/.json/.jsonl` + file không-đuôi), **không** chỉ 34 file như S153.
- **0-byte: 10 file, TẤT CẢ `.gitkeep`** sentinel của 5 run 06-18 dạng-cũ (`sub-md/`+`harvest/`) ⇒ by-design. **0 file nội-dung 0-byte** (gotcha #53 không có ca mới). 3 `.gitkeep` khác đều 133B (`archive/` của implementer-frontend · investigator-api · test-specialist) — có ruột, không phải sentinel rỗng.

### G.3 ⭐ m#24 (MỚI) — thước corruption cũ MÙ theo ĐUÔI FILE; nay đóng kín bằng CENSUS

Thước S153 lọc 6 đuôi `md/txt/json/ps1/py/jsonl`. Tao census toàn bộ: `find .claude -type f | grep -oE '\.[A-Za-z0-9]+$' | sort | uniq -c` → **644 file** = 606 `.md` · 13 `.gitkeep` · 11 `.txt` · 6 `.json` · 1 `.ps1` · 1 `.on` · 1 `.js` · **+5 file KHÔNG ĐUÔI** (`sessions/session-{2..6}/_end`).
⇒ Thước cũ **bỏ sót 20 file** (13 `.gitkeep` + 1 `.on` + 1 `.js` + 5 `_end`). Tao quét nốt cả 20: **0 hit**. Kết luận cũ không đổi, **nhưng "0" bây giờ mới có răng** — trước đó "0" một phần là do không nhìn tới. Bài: **đếm mẫu-số bằng CENSUS ĐUÔI, đừng bằng danh-sách đuôi tự nghĩ ra** (họ hàng m#16 "im vì hết tầm chứ không vì sạch").

### G.4 ⭐ BASELINE S155 — kèm MỆNH-ĐỀ LOẠI-TRỪ (m#20)

> **S155 corruption baseline = 16 raw-hit / 10 file** (danh sách §G.1), thước byte-mode `perl` hash-theo-`$ARGV`, **KHÔNG `grep -P`** (chết rc=2 im lặng), phủ **644/644 file** trong `.claude/` gồm run-folder cũ + file không-đuôi.
>
> **CÁI GÌ KHÔNG NẰM TRONG PHÉP ĐO NÀY:**
> **(a)** Chỉ `.claude/` — **KHÔNG** gồm `docs/`, `scripts/`, `broadcasts/`, `src/`. `scripts/session_ctx.py` (+528 dòng @S153) **ngoài lưới**; muốn phủ phải mở rộng root.
> **(b)** Chỉ đếm **raw byte `EF BF BD`**. File viết ASCII `<FFFD>` / `U+FFFD` (mọi sổ H2 gồm file này) **KHÔNG bị đếm** ⇒ đừng kỳ vọng chúng làm số tăng, và đừng đọc 16/10 kỳ sau thành "sụt" rồi đi truy file phantom (đúng lỗi tao mắc @S153, ring1 BROKE).
> **(c)** Mojibake dạng `Ã/Æ°/â€` **KHÔNG** trong phép đo — trên corpus tiếng Việt UTF-8 nó là **dương-giả** (m#6 S126). Tín-hiệu hợp-lệ chỉ có 2: raw-FFFD + iconv-BAD.
> **(d)** 10 file hiện có = **quoted-evidence CỐ Ý** (sổ H2 tự trích ký-tự hỏng làm chứng) — iconv 628/628 OK ⇒ **không hỏng thật**, không phải nợ phải sửa.
> **(e)** Số có **GIỜ-ĐO** (m#12): đo lúc S154 mới có 4 sub-file @open, chưa synthesis. Lượt sau + synthesis sinh raw-FFFD ⇒ số tăng **hợp-lệ**.
>
> **Chỉ đáng lo khi:** xuất hiện file MỚI **ngoài** tập 10 file trên, **hoặc** iconv-BAD ≥1.

**Corruption: PASS.**

---

## INFORM-1 — chore SELF: self-compact **QUÁ HẠN** (S153 hẹn "phiên sau" = phiên này)

`stat -c%s .claude/agent-memory/harvest-curator/MEMORY.md` = **19.456B** > self-target **17.510B** (17,1KB). S153 đo 17.655B ⇒ **+1.801B trong 1 phiên**, nợ **nặng thêm chứ không đứng yên**.
- Cap cứng 25.600B: **0/23 sổ over-cap** (đo vòng `for` trên 23 `MEMORY.md`) ⇒ chưa vỡ trần, nhưng SELF là sổ vượt **soft-target** duy nhất tao chịu trách nhiệm.
- Khối ứng-viên → `archive/2026-07.md`: **S150 + S151** (đúng khối S153 đã chọn, chưa thực thi). Sau khi dời, dự kiến còn ~13KB.
- Propose-only: tao **KHÔNG** tự cắt. Lead quyết, và **đừng cắt giữa GATE** — làm ở memory-op lượt sau.

## INFORM-2 — lớp `_mind-s-<N>.md` MỚI: chưa ai khai nó có thuộc phạm-vi harvest không

Phiên S153 sinh lớp Ctx soft-memory: `.claude/sessions/session-6/_mind-s-6.md` = **12.482B** (+ `_end` 1.570B, `_context-s-6.md` 3.474B). Session-7 đã mở, hiện có `_context-s-7.md` 2.938B.
- **12.482B tri-thức** này **KHÔNG** nằm trong universe 5-trục của tao hôm nay (universe = `agent-memory/*` + `runs/*`).
- Tao **KHÔNG tự quyết** phạm-vi. Câu hỏi cho lead: `_mind-s-N.md` có phải đầu-vào M9 không, hay là lớp mềm cố-ý ephemeral (chết theo cửa-sổ)? Nếu **có** mà không ai gom ⇒ đây là ứng-viên GAP-3 lần 8 **theo LỚP** (không phải theo lượt).
- Ghi nhận trung thực: nó **có `_end`** ⇒ đã đóng đúng nghi-thức; vắng khỏi harvest **chưa chắc là lỗi**, nhưng **chưa ai khai** là by-design hay bỏ quên. (Ranh: nếu đây là "khoảng trống chưa ai sở hữu" thì chủ đề thuộc `lead-gap-auditor` — tao chỉ nêu từ góc universe-harvest.)

## INFORM-3 — Sàn-5 run S154: chưa đăng-ký (đúng trạng-thái @open, ghi để @close kiểm)

- `grep -c "run=" .claude/WAL.md` = **0** · `grep -c "wf:" .claude/WAL.md` = **0** (WAL đã reset ở closeout S153 `871ac0a`, sổ trống = đúng).
- `grep -rl "S154" docs/changelog/sessions/` = **0 hit** — session-log S154 **chưa tồn tại** (log viết @closeout; S153 cũng đăng-ký @closeout).
- ⇒ **KHÔNG phải vi-phạm @open.** Nhưng Sàn-5 là điều-kiện **HOẶC** trên 2 bề mặt, hiện **0/2** ⇒ nếu closeout quên, run `2026-07-26-S154-bookend-open` thành **run không sổ**. Lead nhớ điền 1 trong 2 @close.
- Nit S153 (`:77` khai `done=6/6 harvested=yes` khi mới 4/6 land) **ĐÃ TỰ ĐÓNG**: 2 lượt còn lại land 16:02/16:08 ⇒ `6/6` thành đúng. Nhưng nó đúng **muộn hơn lời khai** — và chính 13-19 phút đó đẻ ra FLAG-1. Cờ-đi-trước-nội-dung không vô hại.

---

## H. Việc S153 giao — ĐÓNG hay CÒN MỞ

| S153 finding | Trạng-thái đo tươi |
|---|---|
| #1 MED — 11 sổ `grep S153`=0 | ✅ **ĐÓNG** — 16/16 vai đã-chạy có entry (flush 15:49:29) |
| #2 MED — #53 tally +1 (frontend T2) | ✅ nhãn có trong diary; tally = việc lead |
| #3 LOW — `:77` cờ-đi-trước-nội-dung | ✅ tự đóng (6/6 thành thật) — xem INFORM-3 |
| #4 LOW — 3 sổ ctx đặt boilerplate `>` dưới entry đầu | ⚠️ **CÒN MỞ** → FLAG-2 |
| #5 INFORM — self-compact DUE | ⚠️ **QUÁ HẠN, nặng thêm** → INFORM-1 |
| #6/#7 method m#20-bis/21/22/23 | ✅ đã vào sổ (dùng lại m#20-bis §G.1, m#21 §D, m#23 §F) |
| #8 self-TRƯỢT baseline "~23/11" | ✅ **ĐÓNG** — bản 16/10 HELD byte-exact (§E.1) |
| orphan candidate `S153-bookend-close` | ✅ **ĐÓNG** — synthesis 6.619B đã land |

## FLAG-2 — Placement/khuôn — LOW — 3 sổ ctx lệch vị-trí khối boilerplate (S153 #4 còn mở)

`ctx-audit` · `ctx-curator` · `ctx-verifier`: khối `> **Persistent diary cross-session.** …` nằm **DƯỚI** entry đầu; **20 sổ còn lại** đặt khối này **NGAY SAU tiêu-đề**. Không hỏng, nhưng append kỳ sau dễ chèn sai chỗ (entry mới rơi xuống dưới boilerplate). Sửa khi tiện — **1 lần, 3 file**.

---

## I. 5-TRỤC — VERDICT

| Trục | Verdict | Chứng gọn |
|---|---|---|
| **Coverage** | **PASS-with-gap** | 19/21 file-lượt S153 đã harvest; **0 orphan thật / 60** (1 candidate = run S154 đang mở, by-design). Gap = FLAG-1 (2 lượt @close, 47.531B) |
| **Completeness** | **PASS** | 4-field đủ 19/19 lượt đã gom; nấc 3 mức thật; 2 nhãn ngoại-lệ #53 khai rõ; END-line 6/6 file @close |
| **Fidelity** | **STRONG** | 6/7 claim byte-exact; ca thứ 7 truy được về đĩa (2 hit) ⇒ **không bịa**, chỉ thiếu mốc → FLAG-3. Dự-báo baseline của chính tao HELD byte-exact. **KHÔNG escalate reviewer** |
| **Placement** | **PASS** | stray `.claude` depth>1 = **0** (đo sau khi 4 sub chạy) · empty-dir = **0** · 23/23 đúng nhà · TRACKED+not-ignored (m#23) · containment 1 mục đúng vùng |
| **Corruption** | **PASS** | 16/10, **Δ=0** vs baseline S153; iconv **628/628**; 0-byte = 10 `.gitkeep` by-design; thước siết thêm 20 file trước đây mù (m#24) |

## J. TỔNG — 6 finding

| # | Mức | Finding | Ai xử |
|---|---|---|---|
| **FLAG-1** | **MED-HIGH** | 2 lượt @close S153 mồ-côi (`sub-ring1-close` 25.283B `TOTAL=53` + `sub-ring2-close` 22.248B `TOTAL=27`) — **47.531B / 80 verdict-item** chưa vào diary. Nguyên nhân = M9 flush 15:49:29 **trước** lượt cuối 16:02/16:08. **Không mất dữ-liệu** (2 file tracked) | **lead APPEND** — DEDUP an-toàn: `TOTAL=53`/`TOTAL=27` hiện **0 hit** trong 2 sổ |
| **FLAG-2** | LOW | 3 sổ ctx đặt boilerplate dưới entry đầu (S153 #4 còn mở) | lead, khi tiện |
| **FLAG-3** | LOW | `14.347B` trong `ctx-audit/MEMORY.md` không có mốc thời-điểm (đĩa nay 16.206B) — đúng nguồn, **không bịa**, nhưng dễ bị nghi oan phiên sau | lead thêm `@T3, trước T10/T11` |
| **INFORM-1** | INFORM | SELF 19.456B > 17.510B — self-compact **quá hạn**, +1.801B/phiên; khối S150+S151 → archive | lead/tao, memory-op lượt sau |
| **INFORM-2** | INFORM | `_mind-s-6.md` 12.482B — lớp mới, **chưa ai khai** có thuộc harvest-universe không | lead khai scope (không tự quyết) |
| **INFORM-3** | INFORM | Sàn-5 run S154 hiện **0/2** bề mặt (đúng @open) — nhớ đăng-ký @close | lead @closeout |

**+1 method:** **m#24** — census ĐUÔI FILE trước khi tin "0": thước cũ mù 20/644 file (`.gitkeep` `.on` `.js` + 5 `_end`); quét nốt = 0 hit, kết luận không đổi nhưng số 0 giờ mới có răng.

**Không có finding nào là vi-phạm toàn-vẹn harvest.** FLAG-1 là **nợ consolidate có thể trả trong 1 lượt APPEND**, không phải mất mát.

**VERDICT: GATE-PASS-WITH-FLAGS — 6 finding**

<!-- END sub-harvest-curator-S154 · TOTAL=6 FINDING -->

