# H2 harvest-integrity GATE @close S188 — sub-harvest-curator

> Vai: `harvest-curator` (INFORM-only, propose-only, single-writer = lead).
> Phiên: S188 bookend-close (ONE-SHOT). Ngày đo: 2026-08-10.
> Run-folder PIN: `.claude/workflows/runs/2026-08-10-S188-bookend-close/` + `.claude/workflows/runs/2026-08-10-S187-duyet-hd-tu-khkk/`
> APPEND từng trục — chống #53 garble.

## 0. Trạng thái khởi động
- [ ] Census run-folder
- [ ] Trục Coverage
- [ ] Trục Completeness
- [ ] Trục Placement
- [ ] Trục Corruption
- [ ] Trục Fidelity-flag
- [ ] C2 checklist A∖B
- [ ] Nợ gom

## 1. CENSUS run-folder (đo từ ĐĨA, `ls`, không tin bảng)

Lệnh: `ls -la .claude/workflows/runs/2026-08-10-S187-duyet-hd-tu-khkk/` + `.../2026-08-10-S188-bookend-close/`

**S187 folder — 17 `sub-*.md` + run.md + spec (19 file):**
| # | artifact | B | mtime | vai |
|---|---|---|---|---|
| 1 | sub-invest-fe-fable.md | 21.981 | 15:41 | investigator-codebase |
| 2 | sub-invest-be-fable.md | 26.119 | 15:44 | investigator-codebase |
| 3 | sub-style-review-fable.md | 21.680 | 15:56 | back-end-reviewer-style |
| 4 | sub-plan-review-fable.md | 29.647 | 16:57 | reviewer |
| 5 | sub-test-specialist-0.md | 13.534 | 17:42 | test-specialist |
| 6 | sub-implementer-frontend-2.md | 14.481 | 17:54 | implementer-frontend |
| 7 | sub-implementer-backend-w1green.md | 8.874 | 17:56 | implementer-backend |
| 8 | sub-reviewer-dot1.md | 20.840 | 18:16 | reviewer |
| 9 | sub-cicd-dot1.md | 6.820 | 18:27 | cicd-monitor |
| 10 | sub-test-specialist-w3.md | 5.653 | 18:44 | test-specialist |
| 11 | sub-implementer-backend-w3.md | 3.005 | 18:46 | implementer-backend |
| 12 | sub-implementer-frontend-w5.md | 7.304 | 18:52 | implementer-frontend |
| 13 | sub-implementer-backend-w4.md | 5.811 | 19:04 | implementer-backend |
| 14 | sub-implementer-frontend-w6.md | 7.670 | 19:17 | implementer-frontend |
| 15 | sub-reviewer-cum.md | 4.795 | 19:44 | reviewer |
| 16 | sub-cicd-cum.md | 12.974 | 20:02 | cicd-monitor |
| 17 | sub-w10-dryrun.md | 8.913 | 20:11 | investigator-codebase(W10)/lead |

**S188 folder — 4 `sub-*.md` (đang chạy):** sub-tooling-auditor-close 487 B · sub-harvest-curator-close (của tao) · sub-lead-gap-deep 395 B · sub-lead-stale-deep 526 B.

🔴 **LƯỢT KHÔNG CÓ ARTIFACT (đọc từ WAL + run.md, không đọc từ folder):**
- `implementer-backend` **W2/t1** — WAL: *"t1 code LAND (+89 Features +76 Dtos, 0-mig ✓, return rỗng + KHÔNG sub-file)"* ⇒ lượt CHẠY THẬT + code đã ship, **0 artifact**.
- `reviewer` **cụm ×2 CHẾT TRẮNG** — WAL next: *"2 reviewer-cụm chết trắng ×2 → lead tự soi hẹp"*; đĩa chỉ có 1 `sub-reviewer-cum.md` 4.795 B.
- `investigator-codebase` **W10 ×4 đời chết non** — run.md S188:10 + WAL: *"lead tự chạy B2-B5 sau 4 đời agent chết non"*; đĩa 1 file (lead viết).
⇒ **Đếm folder = 17; đếm LƯỢT-VAI thật ≥ 17 + 1(W2) + 1(cụm-2) + 4(W10 chết) = 23.** Folder-count UNDER-COUNT — đúng bài S173 "lấy danh sách từ FOLDER, không từ BẢNG", nhưng ở đây FOLDER cũng thiếu ⇒ phải HỢP với WAL.

## 2. TRỤC 1 — COVERAGE ❌ **FAIL** (đo NỘI DUNG, không đo TÊN)

Lệnh: `for f in .claude/agent-memory/*/MEMORY.md; do grep -c "S187" / "S188"; stat -c%y; done` (29 vai)

**Đo TÊN (role-level):** 12 vai cột-A · 6 vai có entry S187/S188 ⇒ *"6/12 = 50%"*.
**Đo NỘI DUNG (turn-level):** **7 / 19 lượt-vai ĐÃ HOÀN THÀNH có bản ghi = 37%.**

🔴 **Vì sao KHÔNG được đọc con số role-level (bài F-03 @S181 — ĐẠT-ảo do CẤU TRÚC):**
6 vai "có nhãn" thì **5 vai nhãn đó là S187** và chỉ phủ lượt CỦA CỬA SỔ S187 (invest ×2 · style ·
plan-review · W1-GREEN · ctx-verifier). Chúng **KHÔNG phủ** lượt S188 của chính vai đó. Ví dụ chát nhất:
- `reviewer` CÓ entry (plan-review) ⇒ role-level tick XANH — nhưng `sub-reviewer-dot1.md` **20.840 B**
  (`PASS_WITH_FLAGS — 8`, F-1/F-2 vá ngay ×2 app) + `sub-reviewer-cum.md` + 2 lượt cụm chết trắng **0 bản ghi**.
- `implementer-backend` CÓ entry (W1-GREEN) ⇒ tick XANH — nhưng W2 (code LAND +89/+76) + W3 + W4/W6BE **0 bản ghi**.
- `investigator-codebase` CÓ 2 entry ⇒ tick XANH — nhưng W10 (4 đời chết non + dry-run PASS 5/5) **0 bản ghi**.
⇒ **Vai có nhãn lại che nợ LỚN HƠN vai vắng nhãn.** Thước phải là LƯỢT, không phải VAI.

**Chứng độc lập cho từng lượt (grep basename artifact trên toàn `.claude/agent-memory/`):**
`sub-cicd-cum.md` · `sub-cicd-dot1.md` · `sub-implementer-backend-w3.md` · `sub-implementer-backend-w4.md` ·
`sub-implementer-frontend-2.md` · `sub-implementer-frontend-w5.md` · `sub-implementer-frontend-w6.md` ·
`sub-reviewer-cum.md` · `sub-reviewer-dot1.md` · `sub-test-specialist-w3.md` · `sub-w10-dryrun.md`
→ **11/11 = `__NONE__`** (0 vai nào trích). Control dương cùng lệnh: `sub-invest-be-fable.md` →
`investigator-codebase/MEMORY.md` · `sub-plan-review-fable.md` → `reviewer/MEMORY.md` ⇒ phép grep KHÔNG rỗng.

⚠️ **1 ca phủ-bằng-NỘI-DUNG-không-bằng-CITE:** `implementer-frontend` entry `## S188` (dòng 35) mô tả đúng
ruột `sub-implementer-frontend-2.md` (W7-FINISH, tiền-đề sai 3/4, block nửa việc) nhưng **không trích tên file**
⇒ grep-theo-tên báo `__NONE__` **dương-giả**. Tao chấm nó **COVERED** theo nội dung. (Đây chính là chiều
ngược của bài S172: thước-TÊN sai CẢ HAI CHIỀU.)

### Bảng 19 lượt-vai đã hoàn thành
| # | lượt | vai | artifact | bản ghi? |
|---|---|---|---|---|
| 1 | /tiep lượt-12, 10 cờ | ctx-verifier | (WAL, no sub-file) | ✅ S187 seed |
| 2 | invest-FE ×Fable | investigator-codebase | sub-invest-fe-fable 21.981 | ✅ S187 |
| 3 | invest-BE ×Fable | investigator-codebase | sub-invest-be-fable 26.119 | ✅ S187 |
| 4 | style-review ×Fable | back-end-reviewer-style | sub-style-review-fable 21.680 | ✅ S187 |
| 5 | plan-review ×Fable | reviewer | sub-plan-review-fable 29.647 | ✅ S187 |
| 6 | t0 test W1a/W1b | test-specialist | sub-test-specialist-0 13.534 | ❌ |
| 7 | t1 W2 code LAND | implementer-backend | **0 artifact** | ❌ |
| 8 | t2 W7-FINISH | implementer-frontend | sub-implementer-frontend-2 14.481 | ✅ S188 |
| 9 | W1-GREEN 2 bom | implementer-backend | sub-...-w1green 8.874 | ✅ S187 |
| 10 | reviewer đợt-1 | reviewer | sub-reviewer-dot1 20.840 | ❌ |
| 11 | cicd đợt-1 | cicd-monitor | sub-cicd-dot1 6.820 | ❌ |
| 12 | test W3 | test-specialist | sub-test-specialist-w3 5.653 | ❌ |
| 13 | W3 roster | implementer-backend | sub-...-w3 3.005 | ❌ |
| 14 | W5 ruột-(88) | implementer-frontend | sub-...-w5 7.304 | ❌ |
| 15 | W4/W6BE guard | implementer-backend | sub-...-w4 5.811 | ❌ |
| 16 | W6FE | implementer-frontend | sub-...-w6 7.670 | ❌ |
| 17 | reviewer-cụm (+2 chết trắng) | reviewer | sub-reviewer-cum 4.795 | ❌ |
| 18 | cicd-cụm PASS 5/5 | cicd-monitor | sub-cicd-cum 12.974 | ❌ |
| 19 | W10 dry-run (4 đời chết non) | investigator-codebase | sub-w10-dryrun 8.913 | ❌ |

(4 lượt bookend S188 đang CHẠY — tooling-auditor · harvest-curator · lead-gap · lead-stale — **KHÔNG** tính
orphan, đúng luật "folder IN-PROGRESS không flag nhưng phải ghi nhận".)

**Tổng nợ harvest phiên này: 12 lượt / 97.319 B = 95,0 KB artifact chưa về nhà** (11 file có artifact:
6.820+5.653+3.005+7.304+5.811+7.670+4.795+12.974+8.913+13.534+20.840 — máy cộng lại `TONG_BYTE=97319`;
+ lượt W2 **0 artifact**).
🔴 **TỰ SỬA CỦA CHÍNH TAO:** bản nháp trước dòng này ghi *"~102,7 KB"* — **sai phép đổi đơn-vị**
(97.319 B ÷ 1024 = **95,0 KB**, không phải 102,7). Byte đúng, KB sai. Đúng họ với S182 (*"đo giỏi, cộng
sai"*) và S180 F-05 (*bẫy đơn-vị*) ⇒ **con số nào cũng phải để máy cộng lại rồi mới viết ra.**


## 3. TRỤC 2 — COMPLETENESS 🔶 **PASS-with-debt** (7 artifact CỤT giữa chừng)

Thước ĐÚNG = *dòng-không-rỗng CUỐI CÙNG* `== HẾT ==`, **KHÔNG** phải `grep -c`.
🔴 **Tao tự bắt thước của chính tao (bài m#21, tái phát lần 2):** vòng-1 tao dùng `grep -c "== HẾT =="` ⇒
`sub-cicd-dot1.md` ra **HET=1** trông y hệt LÀNH. Đo lại vị trí: **`== HẾT ==` nằm ở dòng 3 / tổng 116** —
đó là câu **luật trong header** (*"Kết bằng `== HẾT ==`"*), KHÔNG phải dấu kết. Cùng bẫy dính
`sub-lead-stale-deep.md`. ⇒ **đếm-số-lần cho DƯƠNG-GIẢ; phải đo VỊ TRÍ.**

**S187 folder — 10 TERM-CLEAN / 7 CUT-MID:**
| artifact | dấu cụt (nguyên văn dòng cuối) |
|---|---|
| sub-cicd-dot1.md | `🎯 **DỰ ĐOÁN:** POST cả 6 marker…` (HẾT ở dòng 3/116 = header) |
| sub-implementer-backend-w3.md | `== ĐANG VIẾT ==` |
| sub-implementer-backend-w4.md | 🔴 `</content>` |
| sub-implementer-frontend-w5.md | `(đang ghi…)` |
| sub-implementer-frontend-w6.md | cụt giữa câu `…availableTargets gi` |
| sub-reviewer-cum.md | cụt giữa câu `…KHÔNG-C` |
| sub-test-specialist-w3.md | `CHƯA ĐO` |

7/7 khớp WAL (*"#53 lượt này ×5"* + *"2 reviewer-cụm chết trắng"*) ⇒ **artifact-đổ-ruột đã cứu phần thân,
nhưng 7 file này là bản DỞ** — ai gom sau phải đọc biết là dở, đừng tưởng đủ.
(4 file CUT-MID ở folder S188 = tao + 3 vai bookend **ĐANG CHẠY** ⇒ không tính.)

## 4. TRỤC 3 — PLACEMENT ✅ **PASS**
- `find .claude -type f -size 0 ! -name .gitkeep` → **0** (không có 0-byte closeout-truncate #53).
- `find .claude -type d -empty` → **0**.
- `find . -type d -name ".claude" -not -path "./.claude"` → **0** (0 stray cwd-relative mis-land S54).
- `find .claude/workflows/runs -type d -name "agent-memory"` → **0** ⇒ **KHÔNG tái diễn sandbox-lồng-trong-
  run-folder của S169**. (git MÙ thư mục rỗng ⇒ đo bằng `find`, không đọc `git status` — bài S122.)
- Delta đúng nhà: 6/6 entry S187/S188 nằm đúng `agent-memory/<vai>` tương ứng, 0 ca lệch nhà.

## 5. TRỤC 4 — CORRUPTION ✅ **PASS** (0 hit MỚI từ artifact S187/S188)

Detector: perl byte-mode `/\xEF\xBF\xBD/`, quét TRỌN `.claude/**/*.{md,json}`.
**CONTROL DƯƠNG chạy TRƯỚC** (seed 1 byte-sequence vào file tạm) → `CTRL lines=1 hits=1 rc=0` ⇒ thước SỐNG.
Lệnh đo thật: `rc_measure=0` (đọc rc của CHÍNH lệnh perl, không đọc rc của pipe — bài S181 F-04).

**Kết quả: `FILES=12 LINES=12 HITS=25`** — khai rõ **ĐƠN VỊ** (bài S180 F-05): 12 **file** · 12 **dòng** · 25 **lần**.
So baseline S172 (24 lần / 11 file): Δ **+1 lần / +1 file**. File mới duy nhất =
`runs/2026-08-09-S185-bookend-close/sub-ring1-audit.md` (1/1) — **của S185, KHÔNG phải S188**.
**0/21 sub-file S187+S188 dính hit nào** ⇒ artifact phiên này SẠCH. Baseline kỳ sau = **25 lần / 12 file**.

⚠️ **2 dương-giả tao tự loại (đừng ai báo động lại):**
1. `cut -c1-60` / `cut -c1-400` của chính tao cắt GIỮA ký-tự UTF-8 ⇒ in ra ký-tự-thay-thế **GIẢ** ở đuôi
   `sub-implementer-frontend-w6.md`, `sub-reviewer-cum.md`, `sub-tooling-auditor-close.md`, và ở diff
   cicd-monitor. Perl census xác nhận **0 hit thật** trong cả 4. (Method #6 — hỏng THƯỚC, không hỏng file.)
2. 12 file có hit đều là **self-quote cố ý** (file bàn về chính detector) + archive cũ — lai lịch đã chốt S152/S172.

🔴 **1 hit THẬT khác lớp — rò thẻ tool vào thân file:** `sub-implementer-backend-w4.md` kết thúc bằng
literal **`</content>`**. Quét cả 21 file: **đúng 1/21**. Không phải mojibake, là **tham-số Write bị nuốt vào
nội dung** ⇒ lượt đó vừa CỤT vừa dính rác. Đề: lead xoá dòng `</content>` khi gom.

## 6. TRỤC 5 — FIDELITY 🔶 **FLAG 1 ca → `reviewer`** (KHÔNG tự phán)

- 5 entry `[LEAD SEED ON-BEHALF]` (back-end-reviewer-style · ctx-verifier · investigator-codebase ×2 · …):
  spot-check truy về đĩa — nội dung entry khớp artifact nguồn (vd `back-end-reviewer-style` khai
  `PASS_WITH_FLAGS — 7 flag` ↔ `sub-style-review-fable.md` có đúng verdict đó; `reviewer` khai *12/12 claim*
  ↔ `sub-plan-review-fable.md`). **0 dấu hiệu bịa** ⇒ Fidelity của phần ĐÃ ghi = **STRONG**.
- 🔶 **FLAG-F1 → escalate `reviewer`:** entry `back-end-reviewer-style` khai giờ về **"@16:0x"**, trong khi
  **mtime đĩa = 15:56** và run.md S187:20 đã ghi *"mốc cũ 16:0x = CỜ-10 ctx-verifier vá @S188, đĩa mtime 15:56"*.
  ⇒ **con số trong diary còn là bản CHƯA vá** dù bề mặt run.md đã vá. Không phải bịa (lệch ~5 phút, lành),
  nhưng là **neo-thối đã biết mà chưa đóng ở bề mặt thứ 2** — đúng lớp "vá 1 bề mặt, sót bề mặt anh em".
  Tao **KHÔNG tự phán**, chuyển `reviewer`.
- ⚠️ **cicd-monitor 20:02 — cập nhật SỐ, không phải bản ghi lượt:** `MEMORY.md` bị chạm lúc 20:02:54
  (commit `556bf5d7`), nhưng `git show --stat` = **1 insertion / 1 deletion** và dòng đó là
  *"Tests baseline: 680 PASS … run #482 `b275893c`"*. ⇒ vai có sờ sổ nhưng **0 spawn-record cho CẢ 2 lượt**
  (đợt-1 + cụm PASS 5/5). **"Có mtime mới" ≠ "đã harvest"** — bài m#4, đừng tin stat.

## 7. CLOSE-GATE DUAL-ACCEPT — ❌ **2/2 folder VẮNG synthesis**

| folder | `*synthesis*.md` | phán |
|---|---|---|
| `2026-08-10-S187-duyet-hd-tu-khkk` | **0** | 🔴 **ORPHAN THẬT** — việc đã XONG TOÀN BỘ (WAL: *"YC-025 THI CÔNG XONG"*), 17 sub-file, thiếu đúng bản tổng |
| `2026-08-10-S188-bookend-close` | **0** | ⏳ **IN-PROGRESS** — bookend đang chạy, lead viết cuối; KHÔNG tính orphan |

**Orphan toàn sổ: `universe run.md = 92` · raw-flag 7 · TRỪ 5 folder `2026-06-18-*` (đã verify CÓ `sub-md/`
+ `harvest/` subfolder = layout DUAL-ACCEPT cũ, không phải orphan) · TRỪ 1 in-progress ⇒ **ORPHAN THẬT = 1**
= `S187-duyet-hd-tu-khkk`.

## 8. NỢ GOM — máy `nhip-no-probe.ps1`
`run-chua-gom **2**` · `tran-bo-nho 5 over-cap` · `deep 2/1 OVERDUE`.
🔴 **Brief giao tao ghi `run-chua-gom 1`; máy chạy LẠI lúc này ra `2`.** Không phải máy sai — **mẫu-số có
NGÀY-ĐO** (m#12): số `1` đo TRƯỚC khi folder `S188-bookend-close` tồn tại; chính hành-động mở bookend đẻ ra
run-folder thứ 2. Folder-scan độc lập của tao cũng ra **2** ⇒ khớp máy.

**5 vai over-cap L1 (>25,6 KB)** — tao tự cộng từ `stat`, khớp đúng con số 5 của máy:
`harvest-curator` **29.776** · `reviewer` 27.751 · `lead-gap-auditor` 27.275 · `ring1-audit` 27.039 ·
`ring2-audit` 26.652.
🔴 **Nặng nhất là CHÍNH TAO và nó KHÔNG còn là cảnh báo suông:** 29.776 B **vượt read-limit 24,4 KB** ⇒
khung tự dán cảnh báo *"Only part of it was loaded"* vào context của tao phiên này — **L1 của tao đã bị cắt
THẬT khi spawn**, tức tao đang làm việc với trí nhớ khuyết. **self-compact = DUE, không hoãn thêm.**

