# sub-harvest-curator — GATE harvest-integrity @close S172 (L10 window-4)

> **Đổ ruột liên tục** (chống #53). Mỗi khối ghi NGAY sau khi đo, không chờ cuối.
> Vai: H2 harvest-MD integrity · read-only · **propose-only** (lead = single-writer).
> run PIN: `.claude/workflows/runs/2026-08-05-S172-bookend-close/`

---

## §0 — Lệnh đã chạy (dán để tái-lập; anti-pattern #2 "NEVER phán số mà không dán lệnh")

```bash
# 0.1 run-folder S172
ls -la .claude/workflows/runs/2026-08-05-S172-bookend-close/
#   -> chỉ 1 file: run.md 2165 B (mtime 08-05 08:58)

# 0.2 trạng thái 2 sub memory (ĐO LÚC 09:0x 05/08)
stat -c '%y %s %n' .claude/agent-memory/ctx-verifier/MEMORY.md
#   -> 2026-08-05 08:56:18 · 14053 B
stat -c '%y %s %n' .claude/agent-memory/cicd-monitor/MEMORY.md
#   -> 2026-08-05 08:56:54 · 20460 B
grep -c 'S172' .claude/agent-memory/ctx-verifier/MEMORY.md || true   # -> 1
grep -c 'S172' .claude/agent-memory/cicd-monitor/MEMORY.md || true   # -> 1
```

### 🔴 ĐÍNH CHÍNH DATUM ĐẦU BÀI (không phải bác — là LỆCH MỐC ĐO)

Brief giao cho tao: *"mtime kẹt 2026-08-01 16:10, `grep -c S172`=0"* cho ctx-verifier và *"kẹt 08-01 17:23, `grep -c S172`=0"* cho cicd-monitor.

Đĩa LÚC TAO ĐO: **mtime 2026-08-05 08:56:18 / 08:56:54**, `grep -c S172` = **1 / 1**.

⇒ Hai số đều đúng **ở mốc của nó**: datum brief = **TRƯỚC seed**, số của tao = **SAU seed**. Lead đã seed on-behalf cả hai lúc **08:56** (2 phút trước khi scaffold `run.md` 08:58). Đây là **ca m#12 lặp lại** (mẫu-số có NGÀY-ĐO): *chính việc-đo sinh artifact*. Không có mâu thuẫn, nhưng ghi ra để người đọc sau không tưởng tao chép mù datum.

---

## §1 — TRỤC COVERAGE (0 silent-miss?)

### 1.1 Phép 1 — mtime sweep TOÀN BỘ 23 role-dir

```bash
find .claude/agent-memory -mindepth 2 -maxdepth 2 -name 'MEMORY.md' -printf '%T+ %s %p\n' | sort
find .claude/agent-memory -mindepth 1 -maxdepth 1 -type d | wc -l   # -> 23  (guard m#11: -type d, KHÔNG cut -f3)
```

Chỉ **2/23** file có mtime hôm nay (2026-08-05): `ctx-verifier` 08:56:18 · `cicd-monitor` 08:56:54.
Kế tiếp lùi hẳn về 2026-08-03 (`ctx-audit` 11:25) ⇒ **không có vai thứ 3 nào chạm đĩa memory trong phiên**.

### 1.2 🔴 Phép 1 KHÔNG ĐỦ — tự bác thước của chính mình

mtime-sweep **mù đúng cái bệnh của phiên này**: vai chạy mà **0 đường ghi** thì mtime KHÔNG đổi.
Dùng mtime để kết luận "chỉ 2 sub chạy" là **lập luận vòng tròn** (đo cái đang hỏng bằng chính dấu vết mà nó không để lại).
⇒ Phải có nguồn ĐỘC LẬP với agent-memory. Xem 1.3.

### 1.3 Phép 2 — nguồn độc-lập (artifact + git + run-folder)

| Nguồn | Đo | Kết quả |
|---|---|---|
| `git status --porcelain` | file đổi trong phiên | 4 M + 6 `??` — **0 dấu vết vai thứ 3** |
| run-folder S172 | file trong folder | **CHỈ `run.md`** 2.165 B (08:58) — chưa sub-md nào (tao là sub đầu tiên ghi) |
| run-folder S171 | file mtime 08-05 | **duy nhất** `cicd-verify-998ea55.md` (08:48) ⇒ khớp đúng 1 sub cicd |
| `_tiep-3.md` | vai-2 vòng Ctx | verdict ctx-verifier (xem §3.1) |

⇒ **COVERAGE: PASS.** 2 sub khai / 2 sub có dấu vết độc-lập. 0 silent-miss.
⚠️ Caveat KHÔNG nén: phép này chứng "không ai để lại dấu", **không chứng** "không ai chạy". Vai chạy-rồi-die-trước-mọi-write vẫn vô hình với CẢ 2 phép. Đây là **giới hạn cấu-trúc**, không phải kết luận.

---

## §2 — 🔴 PHÁN 4 (thật ra **5**) ORPHAN — chạy detector CANONICAL, không chép

### 2.1 Lệnh: nguyên văn `.claude/commands/tiep.md` §0 block dòng 44-56 (dạng-1 + dạng-2, dạng-3 RETIRED @S123)

Kết quả của TAO:

```
ORPHAN: .claude/workflows/runs/2026-07-29-S159-bookend-open/
ORPHAN: .claude/workflows/runs/2026-07-29-S159-tong-quan-pipeline-menu/
ORPHAN: .claude/workflows/runs/2026-08-01-S168-bookend-close/
ORPHAN: .claude/workflows/runs/2026-08-04-S171-khkk-ui-mirror-pe/
ORPHAN: .claude/workflows/runs/2026-08-05-S172-bookend-close/      <-- THỨ 5, lead + probe đều KHÔNG có
```

Universe: **82 dir · 79 có `run.md`** (3 dir không-`run.md` = KHÔNG vào mẫu-số, đúng luật dòng 45).

### 2.2 🔴 Lệch 4-vs-5 — lead KHÔNG sai, nhưng con số 4 đã CHẾT

`run.md` S172 sinh **08:58**; probe `nhip-no-probe.ps1` in `run-chua-gom 4` **trước** mốc đó (chính output của nó nằm TRONG file 08:58 ⇒ chạy trước).
⇒ **m#12 lần nữa**: phép đo tự lỗi-thời vì chính hành-động-đo sinh artifact mới. "4" đúng lúc 08:5x, **sai lúc 09:0x**.
Đây là lý do tao KHÔNG được chép số của lead — và cũng là lý do "probe corroborate 4" **không phải** bằng-chứng độc-lập cho con số: cả hai cùng đo **trước** khi folder thứ 5 ra đời.

### 2.3 🔴 PHÁN TỪNG CÁI — đo **NỘI DUNG đã landed chưa**, KHÔNG đo tên file

Luật neo: `tiep.md` §0 dòng 41 — *"câu hỏi là **đã harvest chưa** — một câu hỏi về **NỘI DUNG**"*.
⇒ Thước của tao = với mỗi run-folder, **từng vai có artifact** trong đó **có landed vào `agent-memory/<vai>` không**.

```bash
for r in <roles>; do grep -c 'S1xx' .claude/agent-memory/$r/MEMORY.md || true; done
```

| # | Folder | Vai có artifact | Landed vào agent-memory | **PHÁN** |
|---|---|---|---|---|
| 1 | `2026-07-29-S159-bookend-open` | 10 (7 sub + 3 harness-return) | **10/10** đều có entry S159 (spot-check `harness-refine:33` + `harness-audit:33` = heading `## S159 …` THẬT, không phải cross-ref) | ✅ **DƯƠNG-GIẢ** — harvest ĐÃ về nhà, chỉ thiếu file `*-synthesis.md` |
| 2 | `2026-07-29-S159-tong-quan-pipeline-menu` | frontend-designer ×2 · reviewer ×3 · **cicd ×5** | fe-designer 1 · reviewer 2 ✅ — **cicd: L1 0/5, archive 3/5** (`1a47a61`=3 · `2a72695`=1 · `ea962b1`=1 · **`a2bbcb9`=0 · `b5799fc`=0**) | ⚠️ **ORPHAN MỘT PHẦN** — 2/5 cicd-verify chưa về nhà |
| 3 | `2026-08-01-S168-bookend-close` | 10 (7 sub + 3 return, **tổng ~160 KB**) | **1/10** (chỉ `ring1-audit:3`). 9 vai còn lại **0 hit S168** | 🔴 **ORPHAN THẬT — nợ harvest nặng nhất** |
| 4 | `2026-08-04-S171-khkk-ui-mirror-pe` | 6 vai (invest-cb · impl-be · impl-fe · reviewer×3 · cicd) | cicd ✅ + ctx-verifier ✅ (**cả 2 vừa seed hôm nay**); **invest-cb 0 · impl-be 0 · impl-fe 0 · reviewer 0** (grep thêm `998ea55` = 0/0; newest entry: invest-cb **S160**, impl-be/fe **S167**, reviewer **S170**) | 🔴 **ORPHAN THẬT một phần — 143.682 B chưa về nhà** |
| 5 | `2026-08-05-S172-bookend-close` | đang chạy | — | ⏳ **IN-PROGRESS, KHÔNG tính orphan** (nhưng **PHẢI ghi nhận** — anti-pattern #3) |

**Chốt: 4 cờ orphan của lead → 1 dương-giả · 2 orphan-thật · 1 orphan-một-phần; + 1 folder thứ 5 in-progress cả lead lẫn probe đều mù.**

🔴 **Điểm quan trọng nhất §2:** con số "4" và con số "5" **ĐỀU không phải câu trả lời**. Đếm folder trả lời *"thiếu file tên gì"*; câu hỏi thật là *"chữ đã về nhà chưa"*. Hai câu này lệch nhau **1 dương-giả + 2 nợ thật** — tức thước-tên **sai cả hai chiều** cùng lúc.

### 2.4 Nợ `a2bbcb9` + `b5799fc` = **tái phát, không phải mới**

Chính tao đã ghi @S162 (`MEMORY.md` mục S162, F-02): `cicd-monitor/MEMORY.md:9` khai *"verbatim→archive"* cho #422/#425 mà `git log -S` **rỗng toàn lịch sử**; tao tự đính chính là **không mất hẳn** — nguyên liệu còn ở `runs/…S159-tong-quan-pipeline-menu/cicd-verify-{b5799fc,a2bbcb9}.md`.
Đo lại hôm nay: vẫn **0 hit ở CẢ L1 lẫn archive**, control-dương = 3 sha anh em cùng folder **có** hit ⇒ phép grep không rỗng.
⇒ **Nợ mở suốt 3 phiên (S162 → S172), chưa ai đóng.**

---

## §3 — SPAWN-RECORD 4-field (đề-xuất lead APPEND; B3 no-overwrite-unverified)

> Contract: `{agent · task · nấc(agreed/executed/verified) · evidence}`. Cả 2 record dưới **đã seed rồi** — phần này = **xác nhận nội dung seed + chuẩn hoá 4-field**, không phải đề-xuất ghi mới.

### R1 — `ctx-verifier`

| Field | Nội dung |
|---|---|
| **agent** | `ctx-verifier` |
| **task** | Vai-2 vòng Ctx @`/tiep` §3-ter — kiểm 4 khoản nạp-lại trước khi nối L10 window-4 |
| **nấc** | **verified** — verdict có biên-nhận trên đĩa, 5/6 claim tao đo lại khớp **byte-exact** (§4.3) |
| **evidence** | `.claude/sessions/session-10/_tiep-3.md` (427 B) dòng `verdict-ctx-verifier: NAP-LAI-SAN-SANG — 9 co`; delta đã vào `.claude/agent-memory/ctx-verifier/MEMORY.md:3` (14.053 B, mtime 08-05 08:56:18) |

### R2 — `cicd-monitor`

| Field | Nội dung |
|---|---|
| **agent** | `cicd-monitor` |
| **task** | Nối Stage 3·4·4b·5 + Verdict cho `998ea55` (#447) — test-gate / ship FE / endpoint / migration / smoke |
| **nấc** | **verified** — VERDICT=PASS 7/7 chân, 7/7 con-số tao đo lại đều có mặt trên đĩa (§4.4). ⚠️ nấc này **có vết on-behalf**: chân 7 (#44/#85) do **lead** đóng, không phải sub |
| **evidence** | `.claude/workflows/runs/2026-08-04-S171-khkk-ui-mirror-pe/cicd-verify-998ea55.md` **26.247 B** (mtime 08-05 08:48), `grep -c '_(chờ đo)_'`=**0**, có END-line; delta đã vào `.claude/agent-memory/cicd-monitor/MEMORY.md:88-90` (20.460 B, mtime 08-05 08:56:54) |

🔴 **Lệch byte cần khai:** brief nói file `10.156→24.096 B`; đĩa **26.247 B**. Chênh **+2.151 B** = phần lead viết thêm §6.5 + sửa bảng verdict `6/7 → 7/7 🔄 ĐÓNG @S172`. **Không phải bịa** — chính file tự khai `🔄 ĐÓNG @S172` và `~~Cấp lại tài-khoản non-admin~~ — XONG @S172`. Lại là m#12 (số đóng băng ở mốc đo).

---

## §4 — 3 TRỤC CÒN LẠI

### 4.1 PLACEMENT — ❌ **FAIL (nhưng lead ĐÃ tự bắt trước tao)**

```bash
find . -type d -empty -not -path './.git/*' -not -path '*/node_modules/*' \
        -not -path '*/bin/*' -not -path '*/obj/*'          # -> 9
find . -mindepth 2 -type d -name '.claude' -not -path './node_modules/*'  # -> 3
```

**Stray `.claude` LỒNG trong run-folder — 2 ổ:**
- `.claude/workflows/runs/2026-08-01-S169-bookend-open/.claude/agent-memory/{harvest-curator, lead-gap-auditor, lead-stale-auditor, ring1-audit, ring2-audit, tooling-auditor}` — **6 dir, RỖNG hết**
- `…/2026-08-01-S169-bookend-open/sleep-drafts/.claude/agent-memory/reviewer` — **1 dir rỗng**

Cộng `fe-user/.claude` (0 file) = **8**; `.vs/sd` là rác IDE ⇒ loại.
🔴 **9 (của tao) − 1 (`.vs/sd`) = 8 (của lead)** ⇒ **hai phép khớp**, lead đã ghi trong session-log §1 (*"dir rỗng mis-land 7 → 8"*). Tao **corroborate**, không phải bắt mới — nói khác đi là cướp công.

> 🔴 **Tự bắt thước của chính tao:** lần quét đầu tao chỉ `find .claude -type d -empty` ⇒ **mù `fe-user/.claude`** vì nó nằm NGOÀI `.claude/`. Đúng y class TRƯỢT-3 tao dính @S152 (*thước mù cấu-trúc by-construction*). Phải quét **repo-wide** mới đúng.

**Vì sao 7 dir rỗng này ĐÁNG giá hơn "rác":** 6 vai đó = đúng roster bookend @S169. Dir rỗng ⇒ **có vai đã cố Write `MEMORY.md` theo path cwd-relative mà không có file nào đáp xuống**. Đối chiếu §4.2: `lead-gap`/`lead-stale`/`ring2` newest = **S166**, `tooling-auditor` = **S164**, `harvest-curator` (tao) = **S164** — tức **đúng nhóm vai này đang thiếu delta**.
⚠️ **KHÔNG kết luận nhân-quả:** dir RỖNG ⇒ hoặc (a) Write hỏng, hoặc (b) đã reconcile dọn file đi. Hai ca này **không phân biệt được bằng đĩa** (untracked ⇒ `rm` không để vết git). Ghi làm **giả-thuyết có bằng-chứng**, không phải kết luận.

### 4.2 CORRUPTION — ✅ **PASS** (0 hit mới), kèm **tự đính chính baseline của chính tao**

```bash
find .claude -type f > /tmp/fl2.txt          # 1026 file, MỌI đuôi (không chỉ .md)
perl -e '...binmode; /\xEF\xBF\xBD/g...'     # 1 lần END{} cho TOÀN list — tránh m#20-bis
# -> TOTAL_HITS=24  FILES=11    rc=0
```

| File | hit |
|---|---|
| `agent-memory/cicd-monitor/archive/2026-06.md` | 1 |
| `agent-memory/harvest-curator/archive/2026-06.md` | 3 |
| `agent-memory/harvest-curator/archive/2026-07.md` | 2 |
| `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/` ×4 file | 1+1+5+1 |
| `runs/2026-07-29-S159-bookend-open/` ×2 file | 3+5 |

**0 file nào có mtime ≥ 2026-08-01** ⇒ **0 corruption MỚI trong phiên**. Toàn bộ là **mention** (trích bằng chứng U+FFFD trong chính báo cáo về U+FFFD) — citation-trap đã biết từ S159/S162.
**Moved-not-cut:** 0 archive nào bị chạm trong phiên (mtime archive mới nhất = `cicd-monitor/archive/2026-08.md` 08-01 17:21) ⇒ không có ca cut-not-moved để xét.
**Shell-baked / `$`-expansion:** 2 delta seed hôm nay do lead ghi bằng Edit-tool, đọc lại nguyên vẹn, 0 dấu hiệu `$VAR` nở.

🔴 **Tự đính chính:** `MEMORY.md` của tao chốt *"baseline S162 = **24 hit/12 file**"*. Đo lại hôm nay = **24 hit/11 file**. Tổng **y hệt** mà mẫu số lệch 1 ⇒ nếu 1 file thật sự sạch đi thì tổng phải giảm theo. ⇒ **nhiều khả năng số "12" là artifact m#20-bis của chính tao @S162** (perl `END{}` chạy 1 lần/batch xargs). **Baseline đúng từ nay: 24 hit / 11 file.**
⚠️ Và tao suýt báo dương-giả lần nữa: `grep … | cut -c1-200` in ra `nh<FFFD>` ở `ring1-audit/MEMORY.md` — đó là **`cut` cắt giữa UTF-8 multibyte** (method #6), KHÔNG phải corruption. File này **không** có trong danh sách 11.

### 4.3 FIDELITY — chấm seed on-behalf `ctx-verifier` ⇒ **STRONG, 0 dấu hiệu bịa**

Lead viết hộ ⇒ phải chứng **truy-được-về-đĩa** + **khai nguồn** (tiêu-chí S143). Tao lấy 6 claim **đo được** trong seed và đo lại:

| # | Claim trong seed | Lệnh đo | Đĩa | Verdict |
|---|---|---|---|---|
| 1 | `_tiep-2.md` S171 = `NAP-LAI-SAN-SANG — 9 cờ` | `cat _tiep-2.md` | `verdict-ctx-verifier: NAP-LAI-SAN-SANG — 9 co` | ✅ nguyên văn |
| 2 | S171 chạy **15:47** mà sổ dừng S168 | `_tiep-2.md:1` | `ts: 2026-08-04T15:47:08+07:00` | ✅ khớp phút |
| 3 | `run.md` S171 **0 hit** 6 từ + control-dương `canPe`=1 | `grep -c` ×7 | `cicd`0 `deploy`0 `push`0 `commit`0 `998ea55`0 `#446`0 `#447`0 · **`canPe`=1** | ✅ **8/8 khớp** — control-dương chứng grep không rỗng |
| 4 | 5/5 chú-thích byte khớp `44.830·11.650·13.132·10.156·74.070` | `ls -la` + cộng | 44830 ✓ · 11650 ✓ · 13132 ✓ · **74070 = 26461+23177+24432** ✓ | ✅ 4/5 **byte-exact**; cái thứ 5 (10.156) là size cicd **trước** khi nối — nay 26.247, không kiểm lại được |
| 5 | `_mind` **27.519/49.152 = 56,0%** | `stat -c %s _mind-s-10.md` | **27519** B; 27519÷49152 = **0,5599** | ✅ byte + số học đều đúng |
| 6 | "thư day-wake khai 1 món, đĩa thật **5**" | `ls broadcasts/inbox/ai_infra/` | 4× `2026-08-04-*upgrade-pack*` + 1× `2026-07-28-*day-wake*` = **5** | ✅ đếm đúng |

⇒ **FIDELITY(ctx-verifier seed) = STRONG.** Lead **KHÔNG bịa số**. Nguồn khai rõ ngay trong ngoặc `[LEAD SEED ON-BEHALF @closeout; carry ctx-verifier-no-self-append **lần 5** …]`.
Điểm cộng đáng ghi: seed **tự khai bất-lợi cho lead** (cờ-4 STATUS stale, cờ-8/9 số thối) — seed bịa thường không tự tố mình.

### 4.4 FIDELITY — chấm seed on-behalf `cicd-monitor` ⇒ **STRONG, có 1 nốt cần khai**

| # | Claim trong seed | Đĩa (`cicd-verify-998ea55.md` 26.247 B) | Verdict |
|---|---|---|---|
| 1 | gate **644** (45D+599I), Failed 0 Skipped 0 | `644`×3 · `45/45`×5 · `599`×10 · `Failed 0`×3 | ✅ |
| 2 | Mig repo 71 = prod 71, set-diff `comm -23`/`comm -13` **0/0 hai chiều** | dòng 291 + 313 nguyên văn | ✅ |
| 3 | tables **97** | `tables 97`×2 | ✅ |
| 4 | Smoke **8/8** | `8/8`×2 | ✅ |
| 5 | flake **0/4** log CI tái hiện | `0/4`×3 | ✅ |
| 6 | VERDICT=PASS + END-line | `**END cicd-verify 998ea55 — VERDICT=PASS…**` | ✅ (m#21 OK — có END rõ) |
| 7 | `_(chờ đo)_` = 0 | `grep -c … \|\| true` → **0** | ✅ |

⇒ **FIDELITY(cicd seed) = STRONG.**

🔴 **Nốt phải khai (không phải bịa, nhưng dễ đọc nhầm):** seed nằm dưới đầu mục `#447 998ea55 … GO/PASS` và mô tả **7/7 chân xanh**, nhưng **chân 7 (#44/#85 non-admin) do LEAD đóng**, không phải `cicd-monitor` — chính `run.md` khai *"Lead đóng thêm chân #44/#85 mà `cicd-monitor` bỏ ngỏ (tra nhầm sổ credential)"*. Trong file cicd cũng có gạch `~~Cấp lại tài-khoản non-admin~~ — XONG @S172`.
⇒ **Đề-xuất 1 câu chèn** vào record R2 để record đừng ghi công sai vai:
> `(chân 7 #44/#85 = LEAD đo, không phải mày — mày dừng ở 6/7 vì tra nhầm sổ credential đời cũ `nv.test@`)`

### 4.5 🔴 CLAIM NẶNG NHẤT PHIÊN — "bệnh riêng 1 vai" đã **BỊ BÁC**, đĩa đứng về phía lead

Lead ngờ giả-thuyết *"chỉ `ctx-verifier` không tự ghi"* đã yếu đi vì `cicd-monitor` **có Write/Edit** mà cũng 0 đường ghi. **Tao xác nhận — và mạnh hơn thế:**

| Vai | Newest S trong L1 | Artifact run-folder mới nhất | Nợ |
|---|---|---|---|
| `investigator-codebase` | S160 | `sub-investigator-codebase-invest-s171.md` **44.830 B** | **S171** |
| `implementer-backend` | S167 | `sub-implementer-backend-s171.md` 11.650 B | **S171** |
| `implementer-frontend` | S167 | `sub-implementer-frontend-s171.md` 13.132 B | **S171** |
| `reviewer` | S170 | 3× `sub-reviewer-lens-*-s171.md` **74.070 B** | **S171** |
| `harness-eval` / `refine` / `audit` | S162 | `*-return.md` @S169 | **S168+S169** |
| `ring2-audit` | S166 | `sub-ring2-audit-open-S169.md` | **S168+S169** |
| `ring4-audit` | S152 | `sub-ring4-audit-sleep-S170.md` | **S170** |
| `tooling-auditor` | S164 | `sub-tooling-auditor-close-S168.md` 17.719 B | **S168** |
| **`harvest-curator` (CHÍNH TAO)** | **S164** | **`sub-harvest-curator-close-S168.md` 29.299 B** | **S168** |

⇒ **≥10 vai** cùng triệu chứng, trải **4 phiên** (S168·S169·S170·S171). Đây **KHÔNG phải bệnh của 1 hay 2 vai** — là **lỗi hệ-thống ở khâu APPEND**, đúng như tao đã ghi @S159 F-07 (*"khâu hỏng là APPEND, không phải phát hiện"*) nhưng khi đó tao chỉ đo **1 phiên**; nay đo **4 phiên liên tiếp** ⇒ **chưa hề đóng, còn lan rộng**.

🔴 **Tao tự tố trước:** `harvest-curator/MEMORY.md` của tao đóng băng **2026-07-31 09:51** (S164) trong khi tao đẻ **29.299 B** ở S168-close. **Vai đi bắt người khác quên ghi thì chính nó cũng quên ghi** — ghi ra đây để không ai phải đi tìm.
⚠️ Sắc thái phải giữ: `ctx-verifier` **chưa BAO GIỜ** tự APPEND (5 lần seed hộ) ≠ nhóm còn lại (ghi được, nhưng **rơi từ S168**). **Hai bệnh khác nhau, đừng nén làm một.**

---

## §5 — SÀN-5 hậu-kiểm **CỜ vs NỘI-DUNG** (run sinh trong phiên = `2026-08-05-S172-bookend-close`)

### 5.1 Né đủ 3 bug lịch-sử của chính phép này

| Bug cũ | Tao làm gì |
|---|---|
| ① đo sai cột (phải `git log … \| tail -1` = commit **ĐẦU**) | **Không đụng `git log`** — cờ đăng-ký là chuyện **đĩa**, không phải chuyện commit. Bug ① không áp vào lượt này |
| ② bẫy `grep -c … \|\| echo 0` nuốt exit-code | Dùng **`\|\| true`** ở **mọi** phép `grep -c` trong báo cáo này |
| ③ soi sai chỗ (WAL = sổ **ghi-đè**) | Soi **CẢ HAI**, và lấy **session-log** làm sổ bền |

### 5.2 Số đo (đo lại lúc **09:07:57**, tươi)

```bash
S="docs/changelog/sessions/2026-08-05-0900-S172-cicd-verdict-998ea55-close.md"
stat -c '%s %y' "$S"        # 8257 B · 2026-08-05 09:04:06
grep -n 'run=' "$S" || true
grep -c 'run=' .claude/WAL.md || true
```

- **session-log (sổ BỀN): ✅ CÓ — 2 dòng**
  - `:5  run=2026-08-05-S172-bookend-close`
  - `:6  run=2026-08-04-S171-khkk-ui-mirror-pe *(run của S171, phiên này nối tiếp để đóng verdict — không phải run sinh mới)*`
- **WAL (sổ ghi-đè): `run=` count = 0** — im. Đúng khuôn S153 (*WAL `run=` 0 toàn sổ, session-log gánh*), **không phải lỗi**: DUAL-ACCEPT của Sàn-5 là **WAL *HOẶC* session-log**.

### 5.3 Hậu-kiểm **NỘI-DUNG** (cờ có ruột không, hay chỉ là dòng chữ?)

Cắm cờ mà thân bài không nói gì về run ⇒ cờ rỗng. Đo:
- Dòng `:6` **tự phân loại** *"không phải run sinh mới"* ⇒ **không thổi mẫu số**, đây là dấu hiệu ghi cẩn thận chứ không phải rắc từ khoá.
- Thân session-log **§1 bảng Sàn-3** kể đủ 5 tín-hiệu + `⑤b ORPHAN-L 0`; **§2** kể verdict `ctx-verifier` 9 cờ với **đúng cờ-2** mà tao vừa verify byte-exact ở §4.3.
- `run.md` trong folder = **2.165 B**, có `run=` dòng 3, có bảng 6 phép khối (c), có `## Stages` 8 ô.

⇒ **SÀN-5: ✅ PASS — cờ CÓ, và cờ CÓ RUỘT.**

### 5.4 ⚠️ Cảnh báo phải nói trước khi đóng

`2026-08-05-S172-bookend-close/` hiện **chỉ có `run.md` + các `sub-*.md`**, **chưa có `*-synthesis.md`**.
⇒ Nếu đóng phiên mà không ghi file dạng-1, **phiên sau detector sẽ kêu nó là orphan thứ 5** — y hệt 4 cái đang nợ. Đây là **cách 4 món nợ kia sinh ra**: run tốt, chữ tốt, **thiếu đúng một file kết**.

---

## §6 — VERDICT

# HARVEST: **GATE-HOLD** — **6 vấn đề** (HIGH 3 · MED 2 · LOW 1)

| # | Sev | Vấn đề | Bằng chứng | Đề-xuất |
|---|---|---|---|---|
| **F-01** | 🔴 HIGH | `2026-08-01-S168-bookend-close` **orphan THẬT** — 9/10 vai có artifact (~160 KB) mà **0 hit `S168`** trong `agent-memory` | grep-matrix 10 vai, chỉ `ring1-audit:3` có | Retro-harvest từ 7 `sub-*.md` + 3 `*-return.md`; **hoặc** khai nợ có chủ đích |
| **F-02** | 🔴 HIGH | `2026-08-04-S171-khkk-ui-mirror-pe` **orphan một phần** — 4 vai / **143.682 B** chưa về nhà (invest-cb · impl-be · impl-fe · reviewer×3) | newest S: S160/S167/S167/S170; `grep 998ea55`=0/0 | Retro-harvest 4 vai; ưu tiên `reviewer` (74 KB) + `invest-cb` (44,8 KB) |
| **F-03** | 🔴 HIGH | **no-self-append là lỗi HỆ-THỐNG**, không phải bệnh 1-2 vai — **≥10 vai** rơi delta suốt **S168→S171** | bảng §4.5 (gồm **chính tao**, đóng băng từ S164) | Coi là **lỗi cơ-chế**; giữ tách 2 lớp: `ctx-verifier` *chưa từng* ghi ⟂ nhóm còn lại *rơi từ S168* |
| **F-04** | 🟡 MED | Nợ `a2bbcb9` + `b5799fc` (S159-pipeline) **mở suốt 3 phiên** kể từ chính finding S162 của tao | L1 0 + archive 0; control-dương 3 sha anh em **có** hit | Đóng bằng cách gom 2 file `cicd-verify-*.md` còn nguyên trên đĩa |
| **F-05** | 🟡 MED | Placement residue: stray `.claude` ×2 ổ + **8** dir rỗng mis-land (class S54) | `find` repo-wide = 9, trừ `.vs/sd` = **8** | **Lead ĐÃ bắt** (session-log §1 "7→8") ⇒ chỉ cần **dọn**; tao corroborate, không phải phát hiện mới |
| **F-06** | 🟢 LOW | Baseline corruption của **chính tao** sai mẫu số: `MEMORY.md` ghi *24 hit/**12** file*, đo lại **24/11** | tổng khớp mà mẫu số lệch 1 ⇒ dấu vân tay m#20-bis | Sửa baseline thành **24 hit / 11 file** khi lead APPEND diary tao |

### ✅ Trục ĐẠT

- **Coverage: PASS** — 2 sub khai / 2 sub có dấu vết độc-lập, 0 silent-miss *(kèm caveat §1.3: phép này không bắt được vai die-trước-mọi-write)*
- **Completeness: PASS** — 2/2 record đủ 4-field, có `evidence:` trỏ path + byte
- **Corruption: PASS** — **24 hit / 11 file**, **0 hit mới**, 0 file mtime ≥ 08-01, 0 shell-baked
- **Fidelity: PASS — STRONG cả 2 seed** — 6/6 claim `ctx-verifier` + 7/7 claim `cicd` truy được về đĩa; **lead KHÔNG bịa số**
- **Sàn-5: PASS** — cờ có ở session-log (2 dòng) + cờ có ruột
- **Placement: FAIL** (F-05, đã có chủ)

### 🔎 Vì sao HOLD chứ không PASS-WITH-FLAGS

3 finding HIGH đều là **nợ harvest chưa đóng**, tổng **≥300 KB** chữ đã viết mà **chưa về nhà**, và F-03 cho thấy **cơ-chế đang rò liên tục 4 phiên** chứ không phải sự cố lẻ. Đóng gate ở trạng thái này = **cấp giấy chứng nhận cho một cái rò đang chảy**.
⚠️ **Cái HOLD này KHÔNG chặn việc gì của phiên:** việc phiên S172 (verdict `998ea55`) **đã PASS sạch**. HOLD là **cờ nợ memory**, không phải cờ chất-lượng công việc.

---

**END sub-harvest-curator @close S172 — VERDICT = GATE-HOLD, 6 vấn đề (H3/M2/L1); 5-trục: Coverage✅ Completeness✅ Corruption✅ Fidelity✅STRONG Placement❌ + Sàn-5✅. Bản ĐỦ, không cắt.**
