# sub-harvest-curator — @open bookend S173 (phiên-LOGIC L11)

- **Vai:** harvest-curator (H2 harvest-MD integrity) — INFORM-only, propose-only. Lead = single-writer.
- **Repo:** SOLUTION_ERP · branch `main` · HEAD `1b3bcaa` lúc bắt đầu
- **Thời điểm mở file:** 2026-08-05 10:45:53 (local)
- **Baseline git status lúc mở:** ` M .claude/governance/.session-counter.json` · `?? .claude/sessions/session-11/` · `?? .claude/workflows/runs/2026-08-05-S173-bookend-open/`
- **Chế-độ ghi:** ĐỔ RUỘT LIÊN TỤC (append từng trục ngay khi đo xong — chống #53 return-garble). Mọi số dưới đây dán kèm LỆNH đã chạy (anti-pattern #2).

---

## 0. Kế hoạch đo (chốt TRƯỚC khi chạy, để verdict tái-lập được)

| # | Trục / việc | Lệnh dự kiến | Ghi khi xong |
|---|---|---|---|
| 1 | Orphan run-folder (DUAL-ACCEPT) | `find .claude/workflows/runs -mindepth 1 -maxdepth 1 -type d` + test `-s` flat `*-synthesis.md` OR `harvest/*-synthesis.md` | §1 |
| 2 | Delta chưa-APPEND (nợ HANDOFF slot 71) | grep session-tag trong 12 sổ `agent-memory/*/MEMORY.md` | §2 |
| 3 | 5-trục GATE | Coverage / Completeness / Fidelity / Placement / Corruption | §3-§7 |
| 4 | Diary-0-delta (C11 `ring4-audit`) | `git log -1 --format=%ci -- <diary>` vs artifact mtime | §8 |
| 5 | Empty-dir mis-land | `find . -type d -empty` (repo-wide, git MÙ) | §9 |

> 🔴 **Thước phải đo NỘI DUNG, không đo TÊN** (anti-pattern #1 — bài S152/S172: 9/9 vai PASS role-level mà trọn lượt mồ-côi; `S159` dương-giả vì đếm theo tên).

---

## 1. ORPHAN run-folder — DUAL-ACCEPT · **XÁC NHẬN 0 / 79** (khớp số em main)

**Lệnh (dán nguyên văn, tái-lập được):**
```bash
find .claude/workflows/runs -mindepth 1 -maxdepth 1 -type d | sort | while read d; do
  hit=0
  for f in "$d"/*-synthesis.md;         do [ -s "$f" ] && hit=1; done
  for f in "$d"/harvest/*-synthesis.md; do [ -s "$f" ] && hit=1; done
  if [ $hit -eq 0 ]; then
    if [ -f "$d/run.md" ]; then echo "ORPHAN(run.md present): $d"; else echo "no-synth+no-runmd: $d"; fi
  fi
done
```

**Kết quả thô:**
- Universe: **83 dir** (`find … -type d | wc -l`)
- Có `run.md`: **79** → mẫu-số orphan = **79**
- Dòng `ORPHAN(run.md present):` in ra: **0** ⇒ **orphan = 0/79 ✅ VERIFY ĐỘC LẬP KHỚP**
- 4 dir KHÔNG `run.md` (⇒ ngoài mẫu-số, KHÔNG phải orphan) — đã mở ruột từng cái, không đọc theo tên:

| dir | ruột thật | phán |
|---|---|---|
| `2026-07-14-S117-pe-approve-minmax-range` | chỉ `spec-…-14-07-2026.md` 4.202 B | spec-only, tiền-lệ dual-accept S117/S153 → không orphan |
| `2026-07-14-S117-pe-luyke-finalize` | chỉ `spec-…-display-14-07-2026.md` 5.828 B | spec-only → không orphan |
| `2026-07-22-S144-bootstrap` | `bootstrap-synthesis.md` 1.239 B + 2 sub-file (18.326 + 16.732 B) | CÓ synthesis (chỉ thiếu `run.md`) → không orphan (ca tự-trượt @S151) |
| `2026-08-05-S173-bookend-open` | **IN-PROGRESS phiên này** (3 sub-file đang ghi) | KHÔNG flag orphan — **nhưng GHI NHẬN** (anti-pattern #3): folder này sẽ thành orphan thứ 1 nếu @close S173 không đẻ `*-synthesis.md`. Đúng cách 4 món S159/S168/S171 sinh ra. |

**Xác nhận 4 orphan cũ ĐÃ ĐÓNG** bằng `1b3bcaa` — file có thật trên đĩa, byte>0:
`bookend-open-synthesis.md` 1.330 B · `pipeline-menu-synthesis.md` 1.797 B · `bookend-close-synthesis.md` 2.525 B · `khkk-ui-mirror-synthesis.md` 2.878 B.

> ⚠️ Nhưng **synthesis tồn tại ≠ chữ đã về nhà** (bài lớn nhất S172). §2 đo NỘI DUNG trong `agent-memory`, không tin dòng commit-message.

---

## 2. DELTA CHƯA-APPEND — 🔴 **F-01 (HIGH): nợ S168 CHƯA đóng hết — còn 3 vai / 82.383 B**

### 2.a Số học nợ (dựng lại từ đĩa, không tin HANDOFF)

```bash
find .claude/workflows/runs/2026-08-01-S168-bookend-close -type f -name "sub-*.md" -printf "%s\n" | awk '{s+=$1} END{print s}'   # 143218
```
- `sub-*.md` = **143.218 B** (7 file/7 vai)
- `*-return.md` = harness-audit 4.553 + harness-eval 6.572 + harness-refine 8.573 = **19.698 B** (3 vai)
- **143.218 + 19.698 = 162.916 B** ⇒ **con số HANDOFF slot 71 CHÍNH XÁC**, và mẫu-số thật = **10 vai** (7 sub + 3 return), khớp "9/10 vai" của bản S172 nếu trừ 1.
- S171: `find … -name "sub-*.md"` = **143.682 B** (6 file / 4 vai: impl-BE, impl-FE, investigator-codebase, reviewer×3) ⇒ **khớp HANDOFF chính xác**.

### 2.b Đo NỘI DUNG (không đo tên): vai nào THẬT SỰ có entry S168 ở sổ mình

Thước 2 lớp: `grep -c "^- \*\*S168|^## S168|^### S168"` (**entry đầu dòng**) ⟂ `grep -c -i S168` (**hit bất kỳ = có thể chỉ là MENTION**). Phân biệt này là cốt lõi — bài S172 (mention ≠ landed).

| # | Vai | artifact S168 | ENTRY | hit | Verdict |
|---|---|---|---|---|---|
| 1 | `ctx-audit` | 6.521 B | 1 | 1 | ✅ ĐÃ GOM @S172 |
| 2 | `ring2-audit` | 9.740 B | 1 | 1 | ✅ ĐÃ GOM |
| 3 | `tooling-auditor` | 17.719 B | 1 | 1 | ✅ ĐÃ GOM |
| 4 | `harness-audit` | 4.553 B | 1 | 1 | ✅ ĐÃ GOM |
| 5 | `harness-eval` | 6.572 B | 1 | 1 | ✅ ĐÃ GOM |
| 6 | `harness-refine` | 8.573 B | 1 | 1 | ✅ ĐÃ GOM |
| 7 | `ring1-audit` | 26.855 B | **1** | 2 | ✅ ĐÃ CÓ TỪ TRƯỚC (entry `S168 (08-01) KIỂM @close — 52Đ/4T`) — **KHÔNG nằm trong 6 vai gom**, tự có |
| 8 | 🔴 `harvest-curator` (**CHÍNH TAO**) | **29.299 B** | **0** | 1 | ❌ **ORPHAN** — 1 hit duy nhất nằm BÊN TRONG entry S172 = **MENTION**, không phải entry |
| 9 | 🔴 `lead-gap-auditor` | **29.820 B** | **0** | **0** | ❌ **ORPHAN** — sổ nhảy thẳng S166 → S172 |
| 10 | 🔴 `lead-stale-auditor` | **23.264 B** | **0** | **0** | ❌ **ORPHAN** — sổ nhảy thẳng S166 → S172 |

**Còn nợ = 29.299 + 29.820 + 23.264 = 82.383 B / 3 vai** (≈ **50,6 %** khối 162.916 B).

**Chứng cứ phản-mention (probe chuỗi đặc-trưng lấy từ chính artifact, kèm control-dương):**
```
lead-gap : 'gap-carry-aged'=3 · 'gap-incident-unrecorded'=1 · '7 FLAG'=1 (→ dòng 52, thuộc entry S159!) · 'S168'=0   | control 'S172'=1 ✅
lead-stale: 'DLRf9TeA'=0 · 'C7TGA4Kn'=0 · '081557b'=0 · '0bfadc2'=0 · 'S168'=0                                        | control 'S172'=1 ✅
```
Control-dương khác 0 ⇒ **grep không rỗng vì lệnh chết** (bài F-09 @S159). Verdict 0-hit là THẬT.

### 2.c 🔴 Truy CƠ CHẾ (không dừng ở triệu chứng)

`bookend-close-synthesis.md` (S168, viết hồi-tố @S172) tự khai: *"Gom @S172 … : `harness-{eval,refine,audit}` · `ctx-audit` · `ring2-audit` · `tooling-auditor`"* = **đúng 6 vai**, và kết bằng dòng **"6 vai ĐÃ GOM @S172"**. Nhưng HANDOFF slot 71 + bản đo S172 nói **9/10 vai**. **Chênh 3 vai không phải ngẫu nhiên**:

> Diary S172 của **chính tao** đã tự khai: *"**bảng under-count 2 sổ H24 (53.084 B)** ⇒ tin kết-luận, đừng tin bảng"*.
> Đĩa xác nhận: `29.820 (lead-gap) + 23.264 (lead-stale) = **53.084 B**` — **khớp đến từng byte**.

⇒ **Cơ chế:** bảng liệt-kê @S172 under-count 2 sổ H24 → **lượt gom hồi-tố @S172 đọc từ BẢNG chứ không từ FOLDER** → 2 sổ H24 rơi khỏi lượt gom → nay vẫn mồ-côi. Đúng lớp lỗi tao đã cảnh báo (*"tin kết-luận, đừng tin bảng"*) mà **hệ vẫn dùng bảng làm nguồn thi-hành**. Vai thứ 3 (`harvest-curator`) rơi vì **điểm mù tự-quy-chiếu**: người gom không tự liệt mình.
⇒ Phép chặn đề xuất: **lượt gom phải lấy danh sách từ `ls runs/<id>/` (FOLDER), không từ bảng của lượt đo trước** — bảng là dẫn-xuất, folder là gốc.

### 2.d Các khối KHÁC — ĐÃ ĐÓNG, xác nhận bằng nội dung

| Khối | Vai | Verdict |
|---|---|---|
| **S171** `khkk-ui-mirror-pe` 143.682 B | impl-BE · impl-FE · investigator-codebase · reviewer | **4/4 CÓ ENTRY `S171` đầu dòng** ✅ ĐÓNG |
| S171 phụ: `cicd-verify-998ea55.md` 27.032 B | cicd-monitor | ✅ landed — `cicd-monitor/MEMORY.md:90` `#447 998ea55 S171→S172 GO/PASS` |
| **2 sha nợ 3 phiên** `a2bbcb9` · `b5799fc` | cicd-monitor | ✅ ĐÓNG — `MEMORY.md:3` entry `S159 đợt-1 b5799fc + đợt-4 a2bbcb9 — CẢ HAI PASS 9/9 [LEAD HARVEST HỒI-TỐ @S172]`; grep 1 hit/sha |
| **S172** `bookend-close` (9 sub + 2 return) | 10 vai | **10/10 ENTRY** ✅ ĐÓNG |
| `S159-bookend-open` | 10 vai | ✅ **KHÔNG gom** theo lệnh — xác nhận dương-giả (đo lại thấy vai đều có nội-dung S159) |

---

## 3. TRỤC **COVERAGE** — 🔴 **FAIL. F-02 (HIGH): khối `S169/S170` 501.300 B / 10 vai MỒ-CÔI — HANDOFF slot 71 KHÔNG HỀ CÓ món này**

Quét toàn bộ run-folder từ 08-01 → nay, **đối chiếu từng artifact ↔ sổ vai** (không đọc theo tên folder).

```bash
find .claude/workflows/runs/2026-08-01-S169-bookend-open -type f -printf "%s\n" | awk '{s+=$1} END{print s}'   # 823033 (ca folder)
find … \( -name "sub-*.md" -o -name "*-return.md" \) -printf "%s\n" | awk '{s+=$1} END{print s}'                 # 574260
```

| Vai | artifact S169/S170 | B | ENTRY | Verdict |
|---|---|---|---|---|
| `ctx-audit` | `sub-ctx-audit-open-S169.md` | 34.793 | **1** — `S169/S170 (08-03) SOI-CHUỖI @open — TRUOT — 9 FLAG` | ✅ LANDED |
| `reviewer` | `sub-reviewer-sleep-fidelity-S170.md` | 38.167 | **1** — `S170 GATE Fidelity … PASS-WITH-FIXES` | ✅ LANDED |
| 🔴 `harvest-curator` (**TAO**) | `open-S169` + `sleep-batchA-S170` + `sleep-batchB-S170` | **263.388** | 0 | ❌ **ORPHAN** |
| 🔴 `harness-audit` | `harness-audit-return.md` | 36.119 | 0 | ❌ ORPHAN |
| 🔴 `ring1-audit` | `sub-ring1-audit-open-S169.md` | 34.806 | 0 (1 hit = mention trong entry S168) | ❌ ORPHAN |
| 🔴 `ring2-audit` | `sub-ring2-audit-open-S169.md` | 32.197 | 0 | ❌ ORPHAN |
| 🔴 `harness-refine` | `harness-refine-return.md` | 26.596 | 0 (2 hit `S170` = mention) | ❌ ORPHAN |
| 🔴 `harness-eval` | `harness-eval-return.md` | 24.015 | 0 | ❌ ORPHAN |
| 🔴 `tooling-auditor` | `sub-tooling-auditor-open-S169.md` | 23.236 | 0 | ❌ ORPHAN |
| 🔴 `lead-stale-auditor` | `sub-lead-stale-open-S169.md` | 22.503 | 0 | ❌ ORPHAN |
| 🔴 `ring4-audit` | `sub-ring4-audit-sleep-S170.md` | 20.122 | 0 | ❌ ORPHAN (= ca C11, §8) |
| 🔴 `lead-gap-auditor` | `sub-lead-gap-open-S169.md` | 18.318 | 0 | ❌ ORPHAN |

**Số học tự kiểm:** LANDED 34.793 + 38.167 = **72.960** · ORPHAN = **501.300** · tổng **574.260** = đúng con số `find` đo được ⇒ **không sót phần tử nào**.

**Chống dương-giả (bài S159 — cấm kết luận từ nhãn phiên):** probe chuỗi đặc-trưng lấy từ chính artifact, kèm control-dương:
```
ring4-audit    : '4af3414'(HEAD lúc ring4 đo)=0 · 'sleep-S170'=0 · '16 gist'=0   | control 'S152'=3 ✅ grep sống
tooling-auditor: 'S169'=0 · 'drift-audit 2026-08-01'=0                            | control 'S168'=1 ✅ grep sống
ring1-audit    : 'S169' 1 hit → nằm TRONG dòng entry S168 = MENTION, không phải entry
```

**Tổng nợ harvest thật @open S173 = 82.383 (S168) + 501.300 (S169/S170) = `583.683 B` / 10 vai riêng biệt.**
⇒ Món HANDOFF biết (162.916 + 143.682 = 306.598 B) **đã đóng 224.215 B**, nhưng món HANDOFF **không biết lớn hơn gần gấp đôi phần còn nợ đã biết**.

### 🔴 F-03 (HIGH) — vì sao 501.300 B VÔ HÌNH: **thước orphan đo TÊN FILE synthesis, không đo CHỮ về nhà**

`2026-08-01-S169-bookend-open/` **CÓ** `bookend-open-synthesis.md` (4.182 B) ⇒ qua cửa orphan-scan ⇒ **"5/5 tín hiệu Sàn-3 im"** đọc là SẠCH. Nhưng 10/12 vai trong đúng folder đó chưa có chữ nào về sổ.
⇒ Đây là **đời-2 của đúng con bệnh S172** (*đếm folder trả lời "thiếu file tên gì"; câu hỏi thật là "chữ đã về nhà chưa"*). Vá ở tầng file-synthesis **không** chạm tầng memory.
⇒ **Đề xuất phép máy** (propose-only): tín hiệu harvest phải là **`∀ artifact ∈ runs/<id>/ : ∃ entry trong `agent-memory/<role>/MEMORY.md``**, KHÔNG phải `∃ *-synthesis.md`. Hai thước đo hai thứ khác nhau — đang bị dùng thay nhau.

---

## 4. TRỤC **COMPLETENESS** — ✅ PASS (10/10)

Các entry ĐÃ về nhà có đủ khung 4-field `{task · verdict · learned · surprise}`:
```bash
for r in <10 vai S172>; do sed -n "$(grep -n '^- \*\*S172' …|head -1|cut -d: -f1)p" … | grep -c "runs/\|nguồn\|evidence"; done
```
- **10/10** entry S172 có **ref nguồn** (`runs/<id>/sub-*.md` + số byte) — F-04 của S162 (*2/4 vai thiếu `Evidence:`*) **ĐÓNG**.
- **10/10** có **verdict** trong backtick ngay đầu entry + **Tag `[…]`** cuối ⇒ END-line hợp khuôn (m#21).
- 6/6 entry S168 gom hồi-tố + 4/4 entry S171 cùng khuôn, có nhãn `[LEAD HARVEST HOI-TO @S172]` = **khai nguồn on-behalf minh bạch** (tiêu-chí Fidelity S143).

---

## 5. TRỤC **FIDELITY** — ✅ **STRONG** (lead KHÔNG bịa) + 1 **FLAG trình-bày**

Mọi con số lead/HANDOFF đưa đều **truy được về đĩa, khớp đến byte**:

| Claim | Nguồn claim | Đo lại từ đĩa | Verdict |
|---|---|---|---|
| S168 = 162.916 B | HANDOFF slot 71 | 143.218 (7 `sub-*`) + 19.698 (3 `*-return`) = **162.916** | ✅ EXACT |
| S171 = 143.682 B | HANDOFF slot 71 | `sub-*.md` = **143.682** | ✅ EXACT |
| under-count 2 sổ H24 = 53.084 B | diary `harvest-curator` @S172 | 29.820 + 23.264 = **53.084** | ✅ EXACT |
| "6 vai gom @S172, `grep -c S168` ≥1 toàn bộ" | `bookend-close-synthesis.md` | **6/6 = 1 hit + entry đầu dòng** | ✅ ĐÚNG |
| 2 sha `a2bbcb9`/`b5799fc` đã gom | commit `1b3bcaa` | `cicd-monitor/MEMORY.md:3` entry S159, 1 hit/sha | ✅ ĐÚNG |
| **"S159-bookend-open = DƯƠNG-GIẢ, cấm gom lại"** | lệnh lead + ring1 | **10/10 vai của folder đó có ENTRY `S159`** (ctx-audit · harvest-curator · lead-gap · lead-stale · ring1 · ring2 · tooling + harness-audit/eval/refine) | ✅ **XÁC NHẬN ĐỘC LẬP — tuân lệnh, KHÔNG gom** |
| 16 gist ADDITIVE @08-03 | `_mind-s-10.md:180` | 16 `.gist.md` mtime 08-03 ⟂ **16 draft** trong `sleep-drafts/` (+1 note) — khớp 1-1; **2 file lệch byte** (`investigator-codebase-q4` 8.269→8.455 · `implementer-backend-q3` 11.504→11.974) = đúng vết *PASS-WITH-FIXES* của reviewer, mtime 11:03 > 10:51 | ✅ nhất-quán |

🔶 **FLAG-F (không phải bịa, là thu-hẹp im-lặng):** `bookend-close-synthesis.md` mở đầu khai *"ORPHAN THẬT 9/10 vai"* rồi kết bằng **"6 vai ĐÃ GOM @S172"** — **không có dòng nào nói 3 vai còn lại vẫn nợ**. Người đọc sau (và commit `1b3bcaa`) đọc dòng cuối thành *đã xong*. ⇒ Đề: synthesis đóng-nợ phải ghi **"gom X/Y — còn Z: <danh sách>"**, cấm bỏ trống phần dư.

---

## 6. TRỤC **PLACEMENT** — 🔶 PASS-WITH-FLAG

```bash
find . -type d -empty -not -path "./.git/*"        # 6
find . -type d -name ".claude" | grep -v "^./.claude$"   # 1
```
- **8 dir rỗng HANDOFF NEXT-em #4 (7 dưới `S169-bookend-open/` + `fe-user/.claude`) → ĐÃ SẠCH, còn 0.** ✅ ĐÓNG.
- 🔴 **F-06 (LOW) — tái-phát NGAY trong phiên vá:** `./.claude/workflows/runs/2026-08-05-S173-bookend-open/.claude/agent-memory/tooling-auditor` — **stray `.claude` LỒNG trong run-folder, sinh lúc 10:45 hôm nay** (sub `tooling-auditor` chạy với cwd = run-folder → Write memory rơi cwd-relative). Đúng lớp m#13 / `feedback_agent_cwd_relative_memory_misland`. **git MÙ** (dir rỗng ⇒ `git status` không thấy) ⇒ chỉ `find -type d -empty` bắt được. ⇒ 8 cũ đóng mà lớp lỗi **chưa bị chặn**.
- 5 dir rỗng còn lại = hạ-tầng build/IDE (`.vs/sd`, `node_modules/.vite-temp` ×2, `obj/*/staticwebassets` ×2) — **ngoài turf**, không flag.
- Delta đúng nhà: 0 ca ghi nhầm sổ vai khác (mọi entry kiểm ở §2/§3 đều nằm trong `agent-memory/<role>` của chính vai).

---

## 7. TRỤC **CORRUPTION** — ✅ PASS (0 hit MỚI)

```bash
find .claude -type f -name "*.md" -print0 | xargs -0 -n1 perl -e '$f=$ARGV[0]; open(F,"<:raw",$f); local $/; $c=<F>; $n=()=$c=~/\xEF\xBF\xBD/g; print "$n\t$f\n" if $n>0;'
```
- **24 hit / 11 file** — **KHỚP CHÍNH XÁC baseline S172** (`24 hit/11 file`, bản tao tự sửa từ `24/12`). ⇒ **0 corruption mới** kể từ S172; và baseline tự-sửa hôm đó nay **được tái-lập độc lập** ⇒ đúng.
- Phân bố: `S159/sub-ring1`(5) · `S152/sub-harvest-close`(5) · `S159/sub-harvest-curator`(3) · `harvest-curator/archive/2026-06.md`(3) · `…/2026-07.md`(2) · 6 file còn lại 1 hit — **toàn bộ là U+FFFD tự-trích-dẫn (mention) trong chính artifact của vai H2**, lành theo lai-lịch đã lập từ S153/S162.
- 🔴 Dùng **perl per-file** (`xargs -n1`), KHÔNG `END{}` batch — tránh m#20-bis (tổng đúng mà tên file bịa).
- **0-byte:** `find .claude -type f -size 0 -not -name ".gitkeep"` = **0**. `.gitkeep` = **10** (đúng số S153) → lành.
- Mojibake `Ã|Æ°|â€`: **KHÔNG chạy** — m#6 đã chứng là dương-giả trên VN-UTF8; tín hiệu thật chỉ là U+FFFD.

---

## 8. DIARY-0-DELTA (C11) — ✅ **XÁC NHẬN**, và **KHÔNG phải ca cá biệt: 10 vai cùng lớp**

**Ca C11 lead nêu — đúng:**
- Artifact: `.claude/workflows/runs/2026-08-01-S169-bookend-open/sub-ring4-audit-sleep-S170.md` — **20.122 B**, mtime **2026-08-03 11:02** ✅
- Diary: `.claude/agent-memory/ring4-audit/MEMORY.md` — **2.315 B**, last commit `c2d01f0` **2026-07-26**, entry cuối = **S152** ✅
- Vòng nén THẬT có chạy: **16 `.gist.md` sinh 2026-08-03 10:51/11:03** + 16 draft trong `sleep-drafts/` ⇒ **không phải NO-OP fail-safe** ⇒ vai CÓ việc để kiểm và ĐÃ kiểm (artifact tự khai *"Ngày đo: 2026-08-03. HEAD lúc đo `4af3414`"*).
- ⇒ **role ran, memory not seeded — ĐÚNG.**

🔴 **Cơ chế (chính vai này đã tiên-đoán):** `ring4-audit/MEMORY.md` dòng cuối, viết @S152, ghi nguyên văn: *"Lỗ vận-hành tự lộ: **return-only ⇒ verdict BỐC HƠI nếu lead không scribe**"*. **Lời cảnh báo đó nay ứng nghiệm đúng như mô tả, 8 ngày sau.** Vai đã tự chỉ ra lỗ + đề xuất cách chặn (*"cân nhắc cho vai ghi-đĩa như các ring khác"*) — lần này vai **CÓ** ghi đĩa (20.122 B) nhưng **lead vẫn không scribe** ⇒ chặn 1 nửa không đủ: cần **cổng ép-seed** ở cửa `/sleep-recovery-memory-l2`, giống kết luận FLAG-6 của `lead-gap` (*cổng C2 chỉ có ở `/session-end`, `/pause` 0/5 token*).

**Quét toàn 23 vai tìm ca cùng lớp** (`git log -1 --date=short` trên từng `MEMORY.md` ⟂ artifact gần nhất trên đĩa):

| Nhóm | Vai | Kết luận |
|---|---|---|
| ❌ **Cùng lớp C11 (ran, 0 seed)** — 10 vai | `harvest-curator` · `lead-gap` · `lead-stale` · `ring1` · `ring2` · `tooling-auditor` · `harness-audit` · `harness-eval` · `harness-refine` · `ring4-audit` | = đúng tập F-02 §3. **C11 không phải bắt 1 con, nó bắt phần nổi của 1 khối 501.300 B.** |
| ✅ Sổ cũ nhưng **KHÔNG spawn** ⇒ không phải finding | `office-document` (07-10) · `investigator-api` (07-26) · `ctx-curator` (08-01) · `ctx-verifier` (08-05) | `find runs/ -name "*<role>*"` = KHÔNG-CÓ artifact mới ⇒ NO-OP hợp lệ, cấm đọc thành lỗi |
| ✅ Sổ khớp lần chạy cuối | `database-agent` (diary 07-29 ⟂ `S161-khkk-w1-schema/sub-database-agent-1.md` 07-29) · `frontend-designer` (07-30 ⟂ `S162-cay-4-folder-gd/sub-frontend-designer-0.md` 07-30) | KHỚP |
| ✅ | `test-specialist` (08-01) — vết 08-03 chỉ là **gist-draft do vai khác nén**, không phải lượt chạy của nó | không phải finding |

🔴 **F-04 (MED) — thiệt hại cụ thể của F-02, không chỉ là "thiếu ghi chép":** artifact `sub-tooling-auditor-open-S169.md` tự khai *"**monthly drift-audit 2026-08-01 DUE** (lần trước S96 @2026-07-01)"*. Đây là **nghĩa-vụ định-kỳ do `CLAUDE.md` quy định**. Sổ `tooling-auditor` có `'drift-audit 2026-08-01'` = **0 hit** ⇒ kỳ audit tháng 8 **không có dấu vết ở bất kỳ sổ bền nào**; kỳ sau tra "lần chạy gần nhất" sẽ đọc ra **S96 @07-01** và kết luận sai là **quá hạn / chưa chạy**. Mất ghi chép ở đây **đẻ ra việc làm lại**, không chỉ mất trí nhớ.

---

## 9. EMPTY-DIR MIS-LAND — ✅ 8 cũ ĐÓNG · 🔴 1 mới sinh trong chính phiên này

```bash
find . -type d -empty -not -path "./.git/*"   # => 6 dòng
```
```
./.claude/workflows/runs/2026-08-05-S173-bookend-open/.claude/agent-memory/tooling-auditor   <-- MIS-LAND, sinh 10:45 hôm nay
./.vs/sd                                                    <-- IDE
./fe-admin/node_modules/.vite-temp                          <-- build
./fe-user/node_modules/.vite-temp                           <-- build
./src/Backend/SolutionErp.Api/obj/Debug/net10.0/staticwebassets    <-- build
./src/Backend/SolutionErp.Api/obj/Release/net10.0/staticwebassets  <-- build
```
- HANDOFF NEXT-em #4 (**7 dưới `S169-bookend-open/` + `fe-user/.claude`** = 8): **0/8 còn tồn** ⇒ ✅ ĐÓNG.
- 🔴 **1 ca MỚI cùng lớp, sinh 10:45 ngày 2026-08-05** — tức **sau khi vá, trong chính phiên vá**. Thước cũ (`-not -path "./.claude/*"`, T-3 @S152) **mù cấu-trúc**; thước dùng ở đây quét **repo-wide + `.claude` lồng depth>1** nên bắt được.
- Chỉ **1** stray `.claude` trong toàn repo (`find . -type d -name ".claude" | grep -v "^./.claude$"`) ⇒ đúng 1 ca, không có ca ẩn khác.
- 🔴 Nhắc: **git MÙ thư-mục rỗng** (m#13) — `git status` sạch KHÔNG chứng minh gì ở trục này.

---

## 10. GHI NHẬN — folder phiên này

`2026-08-05-S173-bookend-open/` hiện **chưa có `run.md`, chưa có `*-synthesis.md`** ⇒ nếu @close S173 không đẻ synthesis, nó thành **orphan thứ 1**, đúng cách 4 món S159/S168/S171 đã sinh ra. **Lead đã xác nhận sẽ đẻ synthesis @close.** Ghi nhận, KHÔNG tính finding.

---

## 11. VERDICT

```
HARVEST: GATE-FAIL — 6 finding
```

| # | Mức | Finding | Bằng chứng |
|---|---|---|---|
| **F-01** | 🔴 HIGH | **S168 chưa đóng hết — 3 vai / 82.383 B** (`harvest-curator` 29.299 · `lead-gap` 29.820 · `lead-stale` 23.264). Cơ chế: lượt gom @S172 đọc từ **BẢNG** (under-count đúng 53.084 B) chứ không từ **FOLDER**; vai thứ 3 rơi vì người gom không tự liệt mình | §2 |
| **F-02** | 🔴 HIGH | **Khối `S169/S170` mồ-côi 501.300 B / 10 vai — HANDOFF slot 71 KHÔNG có món này.** Tổng nợ thật = **583.683 B** | §3 |
| **F-03** | 🔴 HIGH | **Thước orphan đo TÊN file synthesis, không đo CHỮ về nhà** ⇒ S169 có synthesis nên "Sàn-3 im" trong khi 10 vai chưa về sổ. Đời-2 của con bệnh S172 | §3 |
| **F-04** | 🟠 MED | **`ring4-audit` C11 XÁC NHẬN** (ran 08-03, diary đóng băng S152) — và **không cá biệt**: 10 vai cùng lớp. Cộng thiệt hại thật: **monthly drift-audit 2026-08-01 mất dấu khỏi mọi sổ bền** ⇒ kỳ sau sẽ tra ra sai | §8 |
| **F-05** | 🟠 MED | **Synthesis đóng-nợ thu-hẹp im-lặng**: mở đầu "9/10 vai" → kết "6 vai ĐÃ GOM", không nêu 3 vai dư ⇒ commit `1b3bcaa` đọc thành đã-xong | §5 |
| **F-06** | 🟢 LOW | **Stray `.claude` mis-land tái-phát trong chính phiên vá** (`runs/…S173…/.claude/agent-memory/tooling-auditor`, 10:45 hôm nay). 8 dir cũ đã sạch nhưng lớp lỗi chưa bị chặn; git mù | §6·§9 |

**5-trục:** Coverage ❌ **FAIL** · Completeness ✅ PASS · Fidelity ✅ **STRONG** (+1 flag trình-bày) · Placement 🔶 PASS-WITH-FLAG · Corruption ✅ PASS (24/11 khớp baseline).

**Đề-xuất cho lead (propose-only — tao KHÔNG APPEND sổ vai nào):**
1. Seed **13 entry** on-behalf: 3 vai × S168 + 10 vai × S169/S170 (danh sách + byte ở §2.b và §3). **Idempotent** — đã đối-chiếu, 0 ca trùng.
2. Nguồn danh sách gom **PHẢI** là `ls runs/<id>/`, **cấm** dùng bảng của lượt đo trước (cơ chế F-01).
3. Tín hiệu harvest đổi từ `∃ *-synthesis.md` → `∀ artifact ∃ entry trong sổ vai` (F-03).
4. Cổng ép-seed cho `/sleep-recovery-memory-l2` (F-04) — hiện chỉ `/session-end` có.
5. `rm` stray dir ở §9 + xem lại cwd của sub khi spawn (F-06).

**Tự khai giới hạn:** ① tao **nằm trong danh sách bị cáo** ở CẢ F-01 lẫn F-02 (263.388 B của chính tao mồ-côi) — tự-tố chứng **mẫu đủ rộng**, KHÔNG chứng **chẩn đoán đúng**. ② Thước ENTRY = `^- \*\*S<n>` / `^## S<n>`; entry ghi bằng khuôn khác sẽ bị đọc nhầm thành 0 — đã bù bằng probe chuỗi đặc-trưng + control-dương cho 4/10 ca, **6 ca còn lại chỉ có thước ENTRY + tag = SÀN, không phải TỔNG**. ③ Chưa soi RAG-corpus (ngoài turf, thuộc `cicd-monitor`).

**END sub-harvest-curator-open-S173 — GATE-FAIL 6 finding, artifact trọn vẹn.**
