# sub-harvest-curator-S153 — H2 @session-start bookend (phiên-logic 6, cửa-sổ 1, vòng V1)

> Vai: harvest-curator (H2, INFORM-only, **propose-only**). Read-only + không ghi file nào ngoài file này (Mirror C1).
> Baseline chốt S152 = commit `c2d01f0` @ **2026-07-26 01:58:30 +0700**. HEAD lúc đo = `1b7386d` (wal: flush 20260726T0200) @ 02:00:55.
> Ghi TRONG LÚC LÀM. Mọi con số dán kèm LỆNH tái-lập (anti-pattern #2 của vai).

---

## §0. Phạm-vi + universe (khai tiêu-chí lọc — bài m#19 @S151)

Universe run-folder = **MỌI thư-mục con depth-1** của `.claude/workflows/runs/`, KHÔNG lọc theo `run.md`.
Lý do khai rõ: @S151 tao TRƯỢT vì lấy universe = "dir có run.md" ⇒ `S144-bootstrap` lọt lưới (53 dir vs 50).

```bash
find .claude/workflows/runs -mindepth 1 -maxdepth 1 -type d | wc -l
# => 57
```

**57 dir** (không tính `README.md`, `_ledger.md` là file root-level — 🧊 ledger RETIRED H18-B S100, KHÔNG dùng làm orphan-authority).

---

## §1. Trục COVERAGE — run-folder mới + orphan (DUAL-ACCEPT)

### 1.1 Lệnh orphan-scan (dual-accept dạng-1 flat + dạng-2 C8 `harvest/`)

```bash
for d in $(find .claude/workflows/runs -mindepth 1 -maxdepth 1 -type d | sort); do
  syn1=$(find "$d" -maxdepth 1 -name "*synthesis*.md" -size +0c | wc -l)
  syn2=$(find "$d/harvest" -maxdepth 1 -name "*synthesis*.md" -size +0c 2>/dev/null | wc -l)
  [ $((syn1+syn2)) -eq 0 ] && echo "ORPHAN-CAND: $d"
done
```

### 1.2 Kết quả — 3 candidate, **0 orphan THẬT**

| # | Folder | run.md | synthesis | Phán | Căn-cứ |
|---|---|---|---|---|---|
| 1 | `2026-07-14-S117-pe-approve-minmax-range` | **VẮNG** (0) | 0 | ✅ by-design | spec-only fable-real, dual-accept đã chốt @S117-end (đã ghi diary L1) |
| 2 | `2026-07-14-S117-pe-luyke-finalize` | **VẮNG** (0) | 0 | ✅ by-design | như trên, cặp sinh-đôi cùng phiên S117 |
| 3 | `2026-07-26-S153-bookend-open` | CÓ (1321B) | 0 | ✅ **ĐANG MỞ** | run của CHÍNH phiên này; lead ghi synthesis @close. KHÔNG flag (lệnh brief §1) |

⇒ **0 orphan / 57 dir.** Khớp probe NHIP-NO `run-chua-gom 1` = chính folder S153 đang mở (#3) — **verify HELD**, không phải nợ tồn.

### 1.3 Folder MỚI kể từ chốt S152 (`c2d01f0` @ 01:58:30)

Chỉ **1** folder mới: `2026-07-26-S153-bookend-open` (tạo 11:50, run.md 11:50) = run đang mở của phiên này.
2 folder S152 (`S152-h24-open-bookend`, `S152-trio-memory`) đều có synthesis non-0-byte ⇒ đã đóng:
- `bookend-synthesis.md` 6703B + `close-synthesis.md` 6245B (S152-h24-open-bookend)
- `trio-synthesis.md` 2339B (S152-trio-memory)

---

## §2. Trục CORRUPTION — thước NÂNG @S153 (NEXT-em ⑤, từ ring1 BROKE-2/3)

### 2.1 🔴 FINDING-1 [HIGH — METHOD] Detector đầu tay của tao là **SỐ-0 GIẢ**, đã tự bắt tại chỗ

Lần chạy đầu tao dùng:
```bash
grep -rlaP '\xEF\xBF\xBD' .claude/     # => in ra RỖNG
```
Trông y hệt "sạch tuyệt đối". **Sai.** Chạy lại lấy rc + stderr:
```
grep: -P supports only unibyte and UTF-8 locales
rc=2
```
`grep -P` **KHÔNG khả-dụng** trong locale của Git Bash máy này ⇒ lệnh chết, in rỗng, và rỗng-vì-chết đọc y hệt rỗng-vì-sạch (đúng bệnh `feedback_absence_looks_like_clean` + anti-pattern #3 của vai).

**Bẫy phái sinh (suýt dính):** `grep -oaP '...' file 2>&1 | wc -l` trả **1** — tao suýt đọc thành "1 hit", nhưng đó là **1 dòng ERROR** bị `2>&1` gộp vào rồi `wc -l` đếm. Số-đo đếm đúng thứ rác.

### 2.2 Fault-injection: chứng detector CÓ RĂNG trước khi tin số 0

Canary (scratchpad, NGOÀI repo):
```bash
printf 'hello \357\277\275 world\n'                 > canary_fffd.txt   # 1 hit
printf 'a \357\277\275 b \357\277\275 c\nline2 \357\277\275\n' > canary_multi.txt  # 3 hit / 2 dòng
printf 'clean vietnamese: Nguyen Van A dieu chinh\n' > canary_clean.txt  # 0 hit
```
| Detector | Canary-1 | Canary-multi | Canary-clean | Verdict |
|---|---|---|---|---|
| A `grep -rlaP` | ❌ rc=2 chết | ❌ | ❌ | **MÙ — loại** |
| B perl byte-mode + `close ARGV` | ✅ 1 | ✅ **3** | ✅ im | **DÙNG** |
| C `LC_ALL=C.UTF-8 grep -rl $'\xEF\xBF\xBD'` | ✅ bắt | ✅ bắt | ✅ im | dùng đối-chứng |

Detector B đếm đúng **occurrence** (3), không phải dòng (2) — giữ đúng phân-biệt `grep -c` vs `-o|wc -l` (bài S130).

```bash
find .claude -type f -print0 | xargs -0 perl -ne \
 '$c+=()=/\xEF\xBF\xBD/g; if(eof){ printf("%d  %s\n",$c,$ARGV) if $c; $c=0; close ARGV }'
```

### 2.3 Số TƯƠI vs baseline

| | Baseline (đo @S152) | Tươi @S153 | Delta |
|---|---|---|---|
| File | 8 | **10** | +2 |
| Hit | 10 | **16** | +6 |

Danh-sách tươi ĐẦY-ĐỦ (dán từng phần tử, không chỉ tổng):

| Hit | File |
|---|---|
| 1 | `.claude/agent-memory/cicd-monitor/archive/2026-06.md` |
| 1 | `.claude/agent-memory/harvest-curator/MEMORY.md` |
| 3 | `.claude/agent-memory/harvest-curator/archive/2026-06.md` |
| 1 | `.claude/agent-memory/harvest-curator/archive/2026-07.md` |
| 1 | `.claude/workflows/runs/2026-06-18-h11-doublecheck/doublecheck-synthesis.md` |
| 1 | `.claude/workflows/runs/2026-07-22-S144-bootstrap/sub-harvest-curator-1.md` |
| 1 | `.claude/workflows/runs/2026-07-25-S152-h24-open-bookend/bookend-synthesis.md` |
| 1 | `.claude/workflows/runs/2026-07-25-S152-h24-open-bookend/sub-harvest-S152.md` |
| 5 | `.claude/workflows/runs/2026-07-25-S152-h24-open-bookend/sub-harvest-close-S152.md` |
| 1 | `.claude/workflows/runs/2026-07-25-S152-h24-open-bookend/sub-ring1-close-S152.md` |

### 2.4 Phân-loại 16/16 hit — **100% quoted-evidence, 0 corruption THẬT**

Mở ruột từng hit bằng `perl -ne 'while(/(.{0,50})\xEF\xBF\xBD(.{0,50})/g){print}'` (cửa-sổ 2 phía — KHÔNG dùng
`cut -c` vì mép cắt tự sinh FFFD giả, bài S152). Trích ngữ-cảnh:

| File | Ngữ-cảnh (rút gọn) | Phán |
|---|---|---|
| `cicd-monitor/archive/2026-06.md` | ``console showed `C<FFFD>ng` = sqlcmd codepage mangle of `ô`, **NOT dat**[a]`` | quoted, có nhãn |
| `harvest-curator/MEMORY.md` | ``inv-cb "<FFFD>24.1KB" = m#6 tail-cut artifact tự-bắt`` | self-quote, baseline |
| `harvest-curator/archive/2026-06.md` ×3 | ``NOTE: chứa U+FFFD quoted-evidence … **CỐ Ý**`` · ``tail -c N cắt giữa UTF-8 in `<FFFD>` GIẢ`` | quoted, tự-khai |
| `harvest-curator/archive/2026-07.md` | ``Method-#6 tái: grep byte-window in `<FFFD>` GIẢ`` | quoted |
| `2026-06-18-h11-doublecheck/doublecheck-synthesis.md` | ``Anti-finding: C3 console mojibake "D? tr<FFFD>" = console-codepage artifact, KHÔNG…`` | quoted, có nhãn |
| `S144-bootstrap/sub-harvest-curator-1.md` | ``entry S132 trích `"<FFFD>24.1KB"` làm **chứng-cứ m#6**`` | quoted |
| `S152/bookend-synthesis.md` | ``(2 hit **LÀNH**: … lead trích lại)`` | quoted, có nhãn |
| `S152/sub-harvest-S152.md` | ``**LỆNH:** `grep -c $'<FFFD>'` từng file`` | quoted (use⟂mention) |
| `S152/sub-harvest-close-S152.md` ×5 | bảng census của chính tao, mỗi dòng trích 1 mẫu | quoted (use⟂mention) |
| `S152/sub-ring1-close-S152.md` | ``cả 2 là **quoted-evidence có nhãn**`` | quoted (use⟂mention) |

⇒ **0 corruption mới.** Mọi hit là `use ⟂ mention` — văn-bản NÓI VỀ ký-tự hỏng, không phải văn-bản BỊ hỏng
(đúng discriminator `feedback_citation_trap_selfreference`).

### 2.5 🟡 FINDING-2 [MED — METHOD, m#20 mới] Delta +6/+2 giải-thích TRỌN: **baseline có mệnh-đề tự-vô-hiệu**

Không dừng ở "delta = +6, chắc là file mới". Tao **đối-chiếu TỪNG PHẦN TỬ** (bài m#19: "khớp exact phải dán từng phần tử")
bằng cách đọc lại chính 2 nguồn baseline trên đĩa:

- `sub-harvest-close-S152.md:139-150` — census của tao: **8 line-hit / 6 file**
- `sub-ring1-close-S152.md:166-182` — ring1 phản-biện: raw **15 hit / 9 file**, *"sau khi trừ drift: **10 hit / 8 file**"*
- `sub-ring1-close-S152.md:305` — chốt: *"baseline đúng = **10 hit / 8 file** (**trừ file đang-ghi**)"*

**Phép cộng khớp không dư một hit nào:**

| Nấc | Hit | File | Ghi-chú |
|---|---|---|---|
| Baseline ổn-định (ring1 chốt) | 10 | 8 | 6 file census tao + 2 file run-folder CŨ ring1 bắt sót |
| + `sub-harvest-close-S152.md` (5 hit) | **15** | **9** | = **đúng con số raw 15/9 ring1 đo lúc 01:30** ✅ |
| + `sub-ring1-close-S152.md` (1 hit) | **16** | **10** | = **đúng số tươi tao đo hôm nay** ✅ |

🔑 **Bản-chất:** baseline 10/8 được định-nghĩa kèm mệnh-đề loại-trừ *"trừ file đang-ghi"*. Nhưng file đang-ghi
**không biến mất — chúng ĐÓNG BĂNG rồi tái-nhập universe ở phiên sau**. Nên baseline kiểu này **luôn** làm phiên
kế đọc ra "tăng", đúng bằng phần đã loại trừ. Đây là m#12 (*mẫu-số có NGÀY-ĐO*) nới thêm một nấc:

> **m#20 — mẫu-số có MỆNH-ĐỀ-LOẠI-TRỪ thì phải mang phần loại-trừ ĐI THEO như nợ-cộng-dồn.**
> Baseline chỉ được ghi "10/8" nếu kèm "+2 file in-flight sẽ nhập vào kỳ sau ⇒ kỳ sau kỳ-vọng 16/10".
> Không mang theo ⇒ kỳ sau đọc **tăng-trưởng lành thành hồi-quy**, hoặc tệ hơn: quen tay bỏ qua vì "chắc lại file mới".

**Baseline đề-xuất cho S154** (kèm mệnh-đề, để không lặp bẫy): **16 hit / 10 file**, quét TRỌN `.claude/`,
**cộng thêm** phần in-flight của phiên này (`sub-harvest-curator-S153.md` — chính file này trích mẫu FFFD ở §2.4,
sẽ đóng băng thành hit mới). ⇒ **kỳ-vọng S154 ≈ 16 + (hit của file này) / 11 file**, mọi phần vượt = điều-tra.

---

## §3. Trục COMPLETENESS — delta mồ-côi chưa-APPEND

### 3.1 FLAG-A @S152 (`harvest-delta-orphan` deep-S151 3-lane, HIGH) — ✅ **ĐÓNG, verify từ đĩa**

@S152 tao flag: trọn lượt DEEP @close S151 (3 lane · 67.056B) **0 dòng** vào diary (GAP-3 lớp-LƯỢT lần 6).
M9 @close S152 seed 3 pointer hồi-tố. **Kiểm lại ruột (không tin token-hit — m#1):**

| Lane | Dòng | Entry | Nhãn provenance |
|---|---|---|---|
| `lead-gap-auditor` | :39-41 | `## S151-deep … deep-sweep` | `[bổ-ghi hồi-tố @S152 M9 — harvest-close FLAG-A]` ✅ |
| `lead-stale-auditor` | :29-31 | `## S151-deep … deep-sweep 5-trục` | `[… FLAG-A: lượt này 0 sổ nào ghi tới nay]` ✅ |
| `ring2-audit` | :57-59 | `## S151-deep … KIỂM deep-sweep` | `[bổ-ghi hồi-tố @S152 M9 — harvest-close FLAG-A]` ✅ |

Cả 3 đều là **pointer hồi-tố tự khai nguồn = đĩa**, KHÔNG tái-dựng từ trí nhớ (lead-stale ghi thẳng
*"nguồn = đĩa, KHÔNG tái-dựng thêm từ trí nhớ"*) ⇒ đúng chuẩn Fidelity on-behalf đã chốt @S143.

### 3.2 FIDELITY cite-verify — 🟢 **STRONG (khớp byte tuyệt-đối)**

3 entry trên cite 3 file kèm byte-size. Test-exist + đo lại (bài m#18: rename-sweep sinh cite-dead có hệ-thống):

| Cite trong diary | Đĩa | Khớp |
|---|---|---|
| `sub-lead-gap-deep-S151.md` **22.157B** | 22157B | ✅ |
| `sub-lead-stale-deep-S151.md` **22.056B** | 22056B | ✅ |
| `sub-ring2-deep-S151.md` **22.843B** | 22843B | ✅ |
| tổng lượt DEEP **67.056B** (số tao khai @S152) | **67056B** | ✅ exact |

3/3 cite sống, tổng khớp tới từng byte ⇒ **0 cite-dead, 0 số bịa**.

### 3.3 FLAG-B @S152 (spawn-record 10 diary) — ✅ **ĐÓNG**; 5 vai `S152=0` là **không-spawn, không phải nợ**

```bash
for d in .claude/agent-memory/*/; do echo "$(basename $d) $(grep -c S152 $d/MEMORY.md) $(stat -c %y $d/MEMORY.md)"; done
```
11 vai có record S152 (mtime 00:11–01:48, đều **TRƯỚC** commit chốt 01:58:30 ⇒ đã vào commit).
5 vai `S152-hit=0`: `cicd-monitor`(mtime 07-23) · `database-agent`(07-02) · `frontend-designer`(07-01) ·
`office-document`(07-10) · `test-specialist`(07-17) — **không spawn ở S152**, chứng: 0 file `sub-*` mang tên
chúng trong cả 2 run-folder S152. **Không-chạy ⇒ không nợ** (không phải silent-miss).

### 3.4 Delta MỚI sau chốt S152 — **0**

```bash
find .claude/agent-memory .claude/workflows/runs -type f -newermt "2026-07-26 01:58:30"
```
Chỉ ra file của **chính phiên S153 đang chạy** (run.md 11:50 · 8 `instrument-*.txt` 11:52-53 · 3 sub-file
đang ghi 11:57-58) + `.mfe-state.json`. **0 diary nào bị ghi sau chốt** ⇒ không có delta rơi ngoài commit.

---

## §4. Trục PLACEMENT — thước SỬA @S153 (từ TRƯỢT-3 của chính tao @S152)

### 4.1 🔴 Nhắc lỗi cũ: thước S152 **MÙ BY-CONSTRUCTION**

@S152 tao khai "0 empty-dir / 0 stray" bằng:
```bash
find . -mindepth 2 -name ".claude" -type d -not -path "./.claude/*"    # ❌ loại TRỪ chính vùng cần soi
```
Thực-tế lúc đó có **4 dir rỗng + stray `.claude` LỒNG TRONG run-folder** (4 sub @close tự đẻ). Mệnh-đề
`-not -path "./.claude/*"` cắt đúng vùng chứa vật-chứng ⇒ số 0 là **tất-yếu hình-thức**, không phải quan-sát.

### 4.2 Thước mới + **chứng có RĂNG** (fault-injection, không tin happy-path)

Dựng cây bẩn trong scratchpad (NGOÀI repo) mô-phỏng đúng ca S152:
```
straytest/.claude/workflows/runs/RUNX/.claude/agent-memory/foo   ← stray LỒNG (ca S152)
straytest/subdir/.claude                                          ← stray thường
```
| Thước | Bắt stray-LỒNG | Bắt stray-thường |
|---|---|---|
| CŨ (`-not -path "./.claude/*"`) | ❌ **SÓT** | ✅ |
| MỚI (`find . -mindepth 2 -name ".claude" -type d`) | ✅ | ✅ |

⇒ thước mới **đã chứng bắt được đúng thứ nó từng để lọt**, rồi mới đem chạy thật.

### 4.3 Kết-quả trên repo — 🟢 **PASS (0/0), số 0 CÓ RĂNG**
```bash
find . -mindepth 2 -name ".claude" -type d          # RỖNG → 0 stray
find .claude -type d -empty                          # RỖNG → 0 empty-dir (git MÙ dir rỗng — m#13)
```
20/20 role-dir `agent-memory` có nhà, 0 delta lạc chỗ.
*(Stray-scan ĐẦY-ĐỦ ở bước CHỐT theo brief; @open đã chạy bản đủ vì rẻ và vì đây đúng chỗ tao trượt kỳ trước.)*

---

## §5. 0-BYTE scan (gotcha #53)

```bash
find .claude/workflows/runs -type f -size 0c    # 10 hit
find .claude/agent-memory  -type f -size 0c    # 0
find .claude -type f \( -name "*.md" -o -name "*.txt" -o -name "*.json" \) -size 0c    # 0
```
**10 file 0-byte = 10 `.gitkeep`** trong 5 run-folder dạng-2 cũ (`2026-06-18-h10-{implement,invest,review}`,
`h910-{curate,finalize}`, mỗi folder 2 cái ở `harvest/` + `sub-md/`) ⇒ **placeholder by-design**.
🟢 **0 file `.md`/`.txt`/`.json` nào 0-byte** ⇒ **0 dấu closeout-truncate #53**. Khớp y baseline S152.

---

## §6. INFORM (không phải flag của lane tao)

- **FINDING-3 [LOW]** `.claude/agent-memory/.mfe-state.json` — tracked, đổi lúc **11:53**, cùng phút với
  `instrument-mfe.txt` ⇒ side-effect **có chủ-đích** của instrument đo memory phiên này, KHÔNG phải sub ghi lén.
  Ghi nhận để git-diff @close không đọc nhầm thành residual-write.
- **FINDING-4 [LOW, ngoài lane]** 2 broadcast MỚI chưa xử ở `broadcasts/inbox/`:
  `2026-07-25-Governance-model-default-opus-5-max.md` · `2026-07-25-Governance-pause-tiep-upgrade-vong-ctx.md`.
  ⚠️ Đây là lane **`tooling-auditor` (H1)** — tao chỉ trỏ, **KHÔNG audit** (H1⟂H2, overlap=0).
- `.claude/sessions/session-6/` untracked = folder phiên-logic 6 mới, đúng nhịp.

---

## §7. 5-TRỤC GATE — tổng

| Trục | Verdict | Chứng |
|---|---|---|
| **Coverage** | 🟢 PASS | 0 orphan / **57 dir** (universe = mọi dir, KHÔNG lọc run.md — vá m#19). 3 cand đều by-design |
| **Completeness** | 🟢 PASS | FLAG-A đóng 3/3 lane · FLAG-B đóng · 0 delta mồ-côi mới · 5 vai `S152=0` = không-spawn |
| **Fidelity** | 🟢 **STRONG** | cite 3/3 sống, byte khớp exact (67056=67056), pointer tự khai nguồn-đĩa |
| **Placement** | 🟢 PASS | 0 stray · 0 empty-dir — **thước đã sửa + chứng răng bằng FI** (vá TRƯỢT-3 @S152) |
| **Corruption** | 🟢 PASS (0 mới) | 16/10 tươi; **delta +6/+2 khớp trọn** 2 file in-flight; 16/16 = quoted-evidence |

**VERDICT: GATE-PASS-WITH-FLAGS — 4 finding** (0 finding nào là vi-phạm toàn-vẹn; 2 method + 2 inform).

### Đề-xuất cho em main (propose-only, KHÔNG tự ghi)
1. **Ghi baseline corruption S154 kèm mệnh-đề** (m#20): `16 hit/10 file + phần in-flight S153`, đừng ghi trần "16/10".
2. **Loại `grep -P` khỏi mọi checker chạy trên Git Bash máy này** — nó chết rc=2 và im lặng. Nếu `governance-detectors.ps1`
   hay script nào dùng `-P`, cùng-lớp phải grep hết (bài `root-cause-over-symptom`: được-chỉ-1-chỗ ⇒ grep MỌI matcher cùng lớp).
3. **Thước stray mới** (`find . -mindepth 2 -name ".claude" -type d`, KHÔNG loại trừ `./.claude/*`) nên thay bản cũ ở chỗ nào còn dùng.
4. 2 broadcast inbox → giao `tooling-auditor`.

<!-- END sub-harvest-curator-S153 · TOTAL=4 finding -->

