# sub-harvest-curator-close-S153 — H2 GATE cuối phiên S153 (vòng V1, §L.b(d)(f))

> Kỷ luật anti-#53: ghi TRONG LÚC LÀM. Mỗi finding land ngay khi đo xong. END-line ở cuối.
> Propose-only. Lead = single-writer. Không sửa file nào khác.

## A. Universe run-folder (đo trước, khai tiêu-chí lọc — m#19)

- `find .claude/workflows/runs -mindepth 1 -maxdepth 1 -type d | wc -l` = **59 dir** (khớp brief).
- 3 run-folder S153 tồn tại trên đĩa:
  - `2026-07-26-S153-bookend-open` — 22 file, có `bookend-open-synthesis.md` 6.213B
  - `2026-07-26-S153-ctx-adopt` — 8 file, có `ctx-adopt-synthesis.md` 5.332B
  - `2026-07-26-S153-bookend-close` — `run.md` 1.817B + `sub-tooling-auditor-close-S153.md` 708B (+ file này) — **ĐANG MỞ**, synthesis do lead ghi @cuối ⇒ KHÔNG flag orphan (theo brief §3).

### A.1 Tiêu-chí lọc universe (KHAI RÕ — bài S151: đếm phải khai tiêu-chí)

- **56/59 dir có `run.md`** (root hoặc `sub-md/run.md` dual-accept).
- **3/59 dir KHÔNG có `run.md`** — không phải orphan, phân loại từ ruột:
  - `2026-07-14-S117-pe-approve-minmax-range` — chỉ 1 file `spec-*.md` 4.202B ⇒ **spec-only by-design** (đã dual-accept từ S117).
  - `2026-07-14-S117-pe-luyke-finalize` — chỉ `spec-*.md` 5.828B ⇒ spec-only by-design.
  - `2026-07-22-S144-bootstrap` — CÓ `bootstrap-synthesis.md` 1.239B + 2 sub-file (16.7KB/18.3KB) ⇒ **đã harvest, thiếu `run.md` thôi** (đây chính là ca tao TRƯỢT ở S151: universe lọc bằng `run.md` làm nó rơi khỏi mẫu-số).

### A.2 Orphan-scan TRỌN 59 dir (authority = folder-scan, ledger 🧊 retired H18-B)

| Dir | run.md | synthesis >0B | Verdict |
|---|---|---|---|
| `2026-07-26-S153-bookend-close` | có | **VẮNG** | **KHÔNG flag** — ĐANG MỞ, lead ghi synthesis @cuối (brief §3) |
| 58 dir còn lại | — | — | **0 orphan** |

⇒ **0 orphan thật / 59** (1 candidate duy nhất = run đang chạy = by-design).

---

## B. Corruption — ĐO TƯƠI (thước NÂNG, m#20)

### B.1 🔴 BẪY TỰ BẮT NGAY TRONG LÚC ĐO — m#20-bis (mới)

Lệnh đầu tao chạy:
`... | xargs -0 perl -ne 'BEGIN{$c=0} $c++ while /\xEF\xBF\xBD/g; END{print "$ARGV\t$c\n" if $c}'`
→ in ra **2 dòng**: `b3-b4-owner-gated-proposals.md 7` + `_ledger.md 9`.
**SAI ATTRIBUTION 100%.** `END{}` chạy **1 lần / 1 batch xargs**, `$ARGV` lúc đó = file **CUỐI batch** ⇒ tổng-batch bị dán nhãn sai file. Tổng (16) đúng, **tên file bịa hoàn toàn** — đúng loại "truy file phantom" mà ring1 cảnh báo.
Thước ĐÚNG: `$n{$ARGV} += () = /\xEF\xBF\xBD/g;` rồi in trong END theo hash-key.

### B.2 Số TƯƠI (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{...}'
```

**16 hit / 10 file** (2 batch: 7/5 + 9/5). Cross-check độc-lập `LC_ALL=C grep -l $'\xef\xbf\xbd'` → **10 file, danh sách KHỚP EXACT**.

| # | File | hit |
|---|---|---|
| 1 | `agent-memory/cicd-monitor/archive/2026-06.md` | 1 |
| 2 | `agent-memory/harvest-curator/MEMORY.md` | 1 |
| 3 | `agent-memory/harvest-curator/archive/2026-06.md` | 3 |
| 4 | `agent-memory/harvest-curator/archive/2026-07.md` | 1 |
| 5 | `runs/2026-06-18-h11-doublecheck/doublecheck-synthesis.md` | 1 |
| 6 | `runs/2026-07-22-S144-bootstrap/sub-harvest-curator-1.md` | 1 |
| 7 | `runs/2026-07-25-S152-h24-open-bookend/bookend-synthesis.md` | 1 |
| 8 | `runs/2026-07-25-S152-h24-open-bookend/sub-harvest-S152.md` | 1 |
| 9 | `runs/2026-07-25-S152-h24-open-bookend/sub-harvest-close-S152.md` | 5 |
| 10 | `runs/2026-07-25-S152-h24-open-bookend/sub-ring1-close-S152.md` | 1 |

### B.3 ring1 @open ĐÚNG — claim baseline-S154 "~23/11" của tao là SAI

Không có file S153 nào trong danh sách. `sub-harvest-curator-S153.md` (@open, 17.328B) = **0 raw hit** vì tao viết ASCII `<FFFD>`/`U+FFFD` chứ không raw byte. Nếu để nguyên kỳ-vọng 23/11, kỳ sau đo ra 16/10 sẽ đọc thành **SỤT giả** + đi truy 1 file phantom. **ring1 HELD — tao nhận trượt.**

### B.4 Đối-chiếu baseline S152 → S153 (arithmetic-fidelity)

S152 chốt **10 hit / 8 file**. Nay 16/10. Delta **+6 hit / +2 file** = ĐÚNG 2 file sinh ở pha close-S152 (`sub-harvest-close-S152.md` 5 + `sub-ring1-close-S152.md` 1 = 6) — tức baseline S152 đo TRƯỚC khi 2 file đó ra đời (m#12: mẫu-số có GIỜ-đo). **Reconcile khớp tuyệt đối ⇒ 0 corruption MỚI ở S153.**

### B.5 ⭐ BASELINE S154 (đề xuất — mang mệnh-đề-loại-trừ theo, m#20)

> **S154 baseline = 16 raw-hit / 10 file**, thước: `perl -ne '$n{$ARGV} += () = /\xEF\xBF\xBD/g'` (byte-mode, **KHÔNG** `grep -P` — chết rc=2 im lặng), quét TRỌN `.claude/` gồm run-folder cũ.
> **Loại-trừ (KHÔNG tính là hồi-quy):** (a) mọi hit là **quoted-evidence cố-ý** trong sổ harvest-curator + synthesis cũ, không phải hỏng thật (iconv 55/55 OK); (b) **file dùng ASCII `<FFFD>`/`U+FFFD` KHÔNG bị đếm** — đừng kỳ vọng file S153/S154 làm số tăng; (c) `END{}`-once-per-batch = attribution bịa, phải hash-key theo `$ARGV`.
> Số tăng chỉ đáng lo khi file MỚI **ngoài** tập 10 file trên xuất hiện.

### B.6 Trục phụ

- **iconv UTF-8 validity:** 55/55 OK, 0 BAD (mọi file 3 run-folder S153 + 20 `MEMORY.md` L1).
- **0-byte:** 10 hit, **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**.
- **stray `.claude` lồng:** `find . -mindepth 2 -name ".claude" -type d` (KHÔNG loại trừ `./.claude/*`) → **0**. ⇒ TRƯỢT-3 S152 (4 sub tự đẻ `.claude` trong run-folder) **KHÔNG tái diễn**.
- **empty-dir:** `find .claude -type d -empty` → **0** (git mù, m#13).

**Corruption verdict: PASS** (0 mới; 16/10 pre-existing benign đã reconcile).

---

## C. 🚩 Sàn-5 — hậu-kiểm cờ-vs-nội-dung (run SINH trong phiên)

**Universe run sinh trong phiên** — `git log --format=%cI -- <dir> | tail -1` (commit ĐẦU-TIÊN, KHÔNG `-1`), quét TRỌN 59 dir, lọc `2026-07-2[56]*`: chỉ **3 dir** rơi vào cửa-sổ S153 (12:06 / 13:40 / 15:35). 9 dir khác của 07-25/26 là của S149-S152 (born 07-25T12:17 · 07-25T20:13 · 07-26T01:58 — trước cửa-sổ). **Không có run-folder thứ 4 ẩn.**

| run-id | born (first-commit) | WAL `run=` | session-log `run=` | Sàn-5 |
|---|---|---|---|---|
| `2026-07-26-S153-bookend-open` | 2026-07-26T12:06:57 | **0** | **1** (`:74`) | ✅ ĐĂNG-KÝ |
| `2026-07-26-S153-ctx-adopt` | 2026-07-26T13:40:53 | **0** | **2** (`:75` dot1 wf_2f91a3d2-d73 · `:76` dot2 wf_8686a2f1-662) | ✅ ĐĂNG-KÝ |
| `2026-07-26-S153-bookend-close` | 2026-07-26T15:35:40 | **0** | **1** (`:77`) | ✅ ĐĂNG-KÝ |

- Sổ cái = `docs/changelog/sessions/2026-07-26-1600-S153-ctx-adopt-3vai-rename.md` (8.935B, mtime 15:40) §6 — **4 dòng `wf:`**, `grep -c "wf:" || true` = **4**, `grep -c "run=" || true` = **4** (dùng `|| true`, KHÔNG `|| echo 0` ⇒ không có bẫy 2-dòng "0\n0").
- WAL `run=` = **0 toàn sổ** (`grep -c "wf:" .claude/WAL.md || true` = 0). WAL vẫn trỏ 2 run bằng **đường-dẫn chứng** ở `chain:` (`chứng: runs/…/bookend-open-synthesis.md`, `…/ctx-adopt-synthesis.md`) — nội-dung có, **cờ định-dạng không**. Sàn-5 là điều-kiện **HOẶC** ⇒ session-log đủ ⇒ **3/3 PASS**.
- ⚠️ **Nit cờ-đi-trước-nội-dung (lớp H18 "đừng stamp cái chưa chạy"):** dòng `:77` khai `bookend-close … done=6/6 harvested=yes` nhưng lúc tao đo, run-folder chỉ có **4 sub-file** trên đĩa (tooling-close 708B · harvest-close · lead-gap-close 1.788B · lead-stale-close 5.018B) và **synthesis VẮNG**. "harvested=yes" là khai **tương-lai**, không phải trạng-thái đo được. Đề: điền `:77` lần cuối SAU khi `bookend-close-synthesis.md` land (hoặc ghi `done=?/6 harvested=pending`).

---

## D. spawn-record 4-field {agent · task · nấc · evidence} — PROPOSE cho lead APPEND

> Đếm từ **ĐĨA** (m#17: đọc nhãn provenance, đĩa-có-file ≠ vai-đã-chạy). **20 lượt spawn** đo được (brief ước ≈15 — chênh vì @open là 9 lượt và @close đã 4/6). Cờ `:77` khai @close = "×4+2" ⇒ **2 lượt @close nữa chưa land** lúc tao đo (không phải thiếu, là chưa tới).

### D.1 Bookend @open — run `2026-07-26-S153-bookend-open` (9 lượt)

| # | agent | task | nấc | evidence |
|---|---|---|---|---|
| 1 | `tooling-auditor` | H1 4-mặt tooling-freshness @open | **verified** | `sub-tooling-auditor-S153.md` 20.778B · `END … TOTAL=7 finding` |
| 2 | `harvest-curator` | H2 5-trục harvest-integrity @open | **verified** | `sub-harvest-curator-S153.md` 17.328B · `VERDICT: GATE-PASS-WITH-FLAGS — 4 finding` |
| 3 | `lead-stale-auditor` | soi lệnh/persona dạy-nhịp-cũ | **verified** | `sub-lead-stale-S153.md` 15.751B · `END … TOTAL=5 FLAG` |
| 4 | `lead-gap-auditor` | soi khoảng-trống chưa-ai-sở-hữu | **verified** | `sub-lead-gap-S153.md` 17.886B · `END … TOTAL=3 FLAG` |
| 5 | `ring1-audit` | truth-floor V1 (kiểm claim vai kiểm) | **verified** | `sub-ring1-S153.md` 22.992B · `END … TOTAL=33 verdict-item` |
| 6 | `ring2-audit` | V2 adversarial + falsify | **verified** | `sub-ring2-S153.md` 27.370B · `END … TOTAL=18 verdict-item (8 FLAG + 10 phép phụ)` |
| 7 | `harness-eval` | trio-memory nhịp-1 (đo tín-hiệu) | **verified** | `harness-eval-return.md` 10.966B · `VERDICT: MIXED — 14 signal` |
| 8 | `harness-refine` | trio nhịp-2 (quyết action) | **verified** | `harness-refine-return.md` 9.792B · `VERDICT: 3 action (0 reinject/1 promote/0 archive/2 distill) + 7 BÁC + 4 NHƯỜNG` |
| 9 | `harness-audit` | trio nhịp-3 (kiểm lại 2 nhịp trên) | **verified** | `harness-audit-return.md` 7.374B · `25 ĐẠT/3 TRƯỢT/1 KHÔNG-CHẤM-ĐƯỢC trên 29 claim + falsify 12 HELD/4 BROKE + re-chạy 7 instrument (24 số byte-exact)` |

### D.2 Arc ctx-adopt — run `2026-07-26-S153-ctx-adopt` (7 lượt / 6 file)

| # | agent | task | nấc | evidence |
|---|---|---|---|---|
| 10 | `investigator-codebase` *(fable-real)* | deep-invest thư ② `0df10df4` → spec 9-task + checklist 24-phép | **verified** | `sub-fable-invest-S153.md` 37.661B · `END … TOTAL=9 task`; sản-phẩm `spec-ctx-adopt-26-07-2026.md` 3.999B (lead ghi sau verify) |
| 11 | `implementer-backend` #1 | T1 — máy `mind-check` EXTEND `scripts/session_ctx.py` (7 phép + 2 phụ) | **executed** | `sub-implementer-backend-1.md` 9.031B · `END … TOTAL=4 acceptance` |
| 12 | `implementer-backend` #2 | T3 — persona vai-3 `.claude/agents/ctx-audit.md` | **executed** | `sub-implementer-backend-2.md` 9.465B · `END … ACCEPTANCE 11/11 ĐẠT · file mới 14.347B` |
| 13 | `implementer-frontend` #1 | T2 — `.claude/templates/session-mind-template.md` MỚI | **executed** *(nấc do LEAD xác-lập)* | `sub-implementer-frontend-1.md` 2.020B · `END … TOTAL=4 acceptance` — 🔴 header ACCEPTANCE tự khai *"lead on-behalf @S153 — lane mất return [schema-fail #53-biến-thể], template ĐÃ LAND 8.819B; lead verify độc lập"* |
| 14 | `implementer-frontend` #2 | T5 — `hmw.js` VALID_ROLES + WIDTH_CAP audit | **executed** | `sub-implementer-frontend-2.md` 12.122B · END **dạng văn-xuôi** *"END sub-implementer-frontend-2 — T5 HOÀN TẤT · 3 hit grep (:41/:228/:235) · VALID_ROLES=21 · 2 hunk (+4/−2) · WIDTH_CAP=20 & TIER2 NGUYÊN"* |
| 15 | `test-specialist` #1 | T4 — fault-inject PHẦN B #1-#7 | **executed (lane đứt sau #7, file đĩa nguyên)** | cùng file `sub-test-specialist-1.md`; nhãn tự khai trong sổ vai: *"lane trước đứt sau #7, file đĩa nguyên → tiếp được"* |
| 16 | `test-specialist` #2 *(resume)* | T4-resume — #8-#17 + #21 | **verified** | `sub-test-specialist-1.md` 26.729B · `END … TOTAL=18 phép` · 18 PASS/0 FAIL + **2 DEFER khai rõ (DEFER ≠ PASS)** + 1 GAP thật giao ra (#9 closed-mode gradient-thưởng-đường-SAI) |

### D.3 Bookend @close — run `2026-07-26-S153-bookend-close` (4/6 lượt đã land lúc đo)

| # | agent | task | nấc | evidence |
|---|---|---|---|---|
| 17 | `tooling-auditor` | H1 CHỐT cuối phiên §L.b(g) | **IN-PROGRESS** (mới ground-state, tự ghi *"findings ghi dần bên dưới"*) | `sub-tooling-auditor-close-S153.md` 708B — **đọc TRỌN RUỘT** (m#19): KHÔNG stub, có 3 số đo thật (HEAD `b8142ea` · porcelain 13M+3?? · đĩa agents = 23) |
| 18 | `harvest-curator` | H2 GATE cuối phiên §L.b(d)(f) | **verified** khi END-line land | `sub-harvest-curator-close-S153.md` (file này) |
| 19 | `lead-gap-auditor` | gap-check @close | **IN-PROGRESS** | `sub-lead-gap-close-S153.md` 1.788B (chưa END-line) |
| 20 | `lead-stale-auditor` | stale-check @close | **IN-PROGRESS** | `sub-lead-stale-close-S153.md` 5.018B (chưa END-line) |

⚠️ IN-PROGRESS **KHÔNG phải orphan** (anti-pattern #3: folder đang chạy thì ghi nhận, không flag) — nhưng lead PHẢI đợi 2 lượt còn lại + END-line 4 file trước khi ghi synthesis, kẻo `done=6/6` thành khai suông.

---

## E. M9 diary — kiểm từ ĐĨA (KHÔNG tin brief)

### E.1 ✅ 3 vai ctx: SEED XONG, brief đã lỗi-thời

Brief nói *"agent-memory = 20 dir, roster đĩa 23 ⇒ 3 vai ctx CHƯA có diary — flag nếu lead quên"*. **Đo tươi: 23/23 dir, không thiếu vai nào.**

- `find .claude/agent-memory -mindepth 1 -maxdepth 1 -type d | wc -l` = **23** · `ls .claude/agents/*.md | wc -l` = 24 → **23 vai** (trừ `README.md`).
- `comm` 2 danh sách: **roster-không-có-diary = chỉ `README`** (không phải vai) · **diary-không-có-roster = 0** ⇒ khớp 23/23.
- 3 sổ mới: `ctx-audit/MEMORY.md` 3.288B @15:34:42 · `ctx-curator/MEMORY.md` 2.940B @15:35:07 · `ctx-verifier/MEMORY.md` 2.663B @15:35:26.
- **m#15 stub⟂content — ĐỌC RUỘT, không đo tên:** cả 3 là entry **ĐẦY ĐỦ** (đường sinh + T10 OWNER-VETO + T11 RENAME + việc-của-mày + wire-point + 2 fix hậu-T4 + kẽ-phải-khai + tag). KHÔNG stub.
- **Nhãn provenance ĐẠT chuẩn m#17:** cả 3 tự khai `[seed on-behalf by lead @closeout M9 — mày CHƯA chạy lần nào; nguồn = đĩa, KHÔNG tái-dựng từ trí nhớ]` và nấc THẬT `file-land + registry-surfaced @S153 — spawn-probe ALIVE CHƯA CÓ (T9 phiên sau)`. Đây là **chống ĐẠT-ảo đúng cách**: có sổ ≠ vai đã chạy.
- Placement: `git ls-files --error-unmatch` 3 đường → **cả 3 ĐÃ TRACKED + đã commit** (bắt bởi `wal: flush 20260726T1535` `4c32e0d`); `git check-ignore` = 0 hit ⇒ **không bị .gitignore ăn** (đây là điểm tao chủ động soi vì `git status` KHÔNG hiện `??` cho chúng — vắng-mặt ở status lần này là do **đã commit**, không phải do bị ignore).
- ⭐ **GAP-3 (per-ROLE diary = lớp không ai sở-hữu) lần đầu ĐÓNG NGAY TRONG PHIÊN SINH VAI.** 6 lần trước đều phải hồi-tố: S123/S125→S132 · S146→S148 · S149-ring2 · S150-ring1(F1) · S151-deep→S152. **Lần này 0 nợ hồi-tố.**
- 🔸 Nit khuôn (INFORM): ở cả 3 sổ mới, khối boilerplate `> 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 phải hỏng, nhưng append kỳ sau dễ chèn sai chỗ ⇒ nên chuẩn hoá khi tiện.

### E.2 🔴 M9 CÒN NỢ: 11/13 vai đã-chạy chưa có entry S153

`grep -c 'S153' <role>/MEMORY.md` — đo TỪNG vai (anti-pattern #1: không đo bằng tên vai/thư-mục):

| Đã có entry S153 (self-write) | hit | Còn **0 hit** dù ĐÃ CHẠY phiên này |
|---|---|---|
| `investigator-codebase` (mtime 14:02) | 1 | `tooling-auditor` · `harvest-curator` · `lead-stale-auditor` · `lead-gap-auditor` · `ring1-audit` · `ring2-audit` · `harness-eval` · `harness-refine` · `harness-audit` · `implementer-backend` · `implementer-frontend` — **11 vai, hit = 0/0/0/0/0/0/0/0/0/0/0** |
| `test-specialist` (mtime 14:47, +9 pointer self-compact) | 1 | |

- mtime 11 sổ đó vẫn đứng ở **2026-07-26 01:46-01:48** = pha close-S152 ⇒ **chưa ai chạm trong S153** (mtime là chứng, lời khai không — anti-pattern #3).
- Đây **KHÔNG phải điểm mù máy**: `C11(b) diary-delta` (`governance-detectors.ps1`) chỉ quét vai frontmatter `INFORM-only` (m#16) ⇒ `implementer-*`, `investigator-*`, `test-specialist`, `harness-*` nằm **ngoài lưới by-design**. Máy im **vì hết tầm**, không vì sạch. ⇒ 20 spawn-record ở §D là **đầu vào M9 duy nhất** cho 11 sổ này.
- DEDUP (idempotent, bắt buộc vì H2 chạy cả per-turn lẫn close-gate): 11 sổ có **0 hit `S153`** ⇒ APPEND §D là **an-toàn, không double**. 2 sổ đã có (`investigator-codebase`, `test-specialist`) ⇒ **ĐỪNG append lại**, chỉ append nếu bổ-sung phần khác nội dung.
- 2 vai **KHÔNG chạy** phiên này → **0 nợ, đừng seed**: `ring4-audit` (0 hit, đúng — V4 chưa có nhà/chưa fire) · `reviewer` (0 hit, không được spawn).

---

## F. 5-TRỤC — verdict

| Trục | Verdict | Chứng |
|---|---|---|
| **Coverage** | **PASS-with-debt** | 20/20 lượt spawn đều có artifact trên đĩa (9+7+4); 0 lượt mồ-côi-không-vết. Universe 59 dir soi TRỌN, **0 orphan thật** (1 candidate = run đang chạy). Nợ = §E.2 (11 sổ chưa APPEND) — nợ thuộc M9-lead, không phải silent-miss. |
| **Completeness** | **PASS** | 4-field lấy được cho **20/20** lượt. END-line: 12/13 file đã-xong có END (frontend-2 dùng dạng văn-xuôi — xem m#21); 4 file @close IN-PROGRESS chưa END = đúng trạng-thái. Nấc phân 3 mức {agreed/executed/verified} + 2 lượt gắn nhãn ngoại-lệ (#53 on-behalf · lane-đứt-resume). |
| **Fidelity** | **STRONG** | Tao kiểm ĐĨA 4 claim của lead: (1) **A7 401/401** → `instrument-archivegate-close.txt:63` `A7 GATE PASS - total pointers 401, resolved 401, failed 0`; bản @open `:63` = **392/392** ⇒ delta +9 khớp "test-specialist self-compact +9 pointer" **chính xác**. (2) **over-cap 0** → tao tự đo 23 sổ L1, max 21.672B < cap 25.600B ⇒ **HELD**. (3) instrument @close **cùng kích-thước** file @open (6970/6970 · 3615/3615) — nghi copy ⇒ md5 **KHÁC nhau cả 3 cặp** ⇒ **re-chạy thật, không copy**. (4) 3 sổ ctx tự khai bất-lợi ("CHƯA chạy lần nào", "spawn-probe CHƯA CÓ") = từ chối ĐẠT-ảo. **0 dấu bịa. Không escalate reviewer.** |
| **Placement** | **PASS** | 3 sổ ctx đúng nhà `agent-memory/<role>/MEMORY.md`, đã tracked+commit, 0 bị gitignore. **stray `.claude` lồng = 0** (`find . -mindepth 2 -name ".claude" -type d`, **KHÔNG** loại trừ `./.claude/*` — thước đã sửa sau TRƯỢT-3 S152). **empty-dir = 0** (git mù, m#13). Mọi sub ghi trong đúng run-folder được giao. `?? scripts/__pycache__/` mà T4+T5 giương cờ nay **KHÔNG còn** trong porcelain và `.gitignore` đang M ⇒ **lead đã đóng**. |
| **Corruption** | **PASS** | §B: raw-FFFD **16 hit/10 file**, reconcile khớp tuyệt đối với baseline S152 (10/8) qua đúng 2 file pha-close-S152 ⇒ **0 corruption MỚI**. iconv 55/55 OK. 0-byte = 10 `.gitkeep` by-design. |

### F.1 Containment (Harness-10 §Containment · G-015)

`git status --porcelain` = **26 mục**, tất cả nằm trong vùng phiên-này được giao: `.claude/{agents,commands,governance,templates,workflows}` · `docs/{STATUS,changelog,governance}` · `broadcasts/**` · `scripts/session_ctx.py` · `.gitignore`. **0 tracked-change ngoài vùng.** G-015: tao **propose-only** — có `Bash` nên KHÔNG khai "read-only enforced"; chặn thật = lead single-writer + git-diff.

### F.2 Chore-memory

- 23/23 sổ dưới cap 25.6KB ⇒ **over-cap 0** (khớp lead).
- **SELF `harvest-curator/MEMORY.md` = 17.655B > self-target 17.510B (17.1KB)** ⇒ self-compact **DUE phiên sau** (defer, không cắt giữa GATE). Khối ứng-viên: S150 + S151 → `archive/2026-07.md`.
- `.claude/agent-memory/.archive-strikes.json` gitignored (`!!`) = by-design, không phải mồ-côi.

---

## G. Method mới (propose — lead APPEND vào sổ tao)

- **m#20-bis — `END{}` của perl chạy 1 lần / 1 batch xargs ⇒ attribution BỊA.** Lệnh `perl -ne '$c++ while /…/g; END{print "$ARGV\t$c"}'` in tổng-batch dán nhãn file **CUỐI batch**: tao vừa ra 2 dòng sai tên hoàn toàn (`b3-b4-owner-gated-proposals.md 7` · `_ledger.md 9`) trong khi tổng (16) đúng. Thước đúng = hash theo `$ARGV`. **Tổng đúng che được tên sai** — luôn cross-check bằng `grep -l` độc lập rồi so DANH SÁCH, không so số.
- **m#21 — END-line có ≥2 KHUÔN, grep 1 khuôn ⇒ dương-giả "no END-line".** `grep -o "<!-- END[^>]*-->"` báo `sub-implementer-frontend-2.md` thiếu END, đọc ruột thì END nằm dạng **văn-xuôi** (`END sub-implementer-frontend-2 — T5 HOÀN TẤT …`). Đo Completeness phải grep `-iE "(<!-- )?END sub-"` rồi đọc đuôi file.
- **m#22 — "cùng kích-thước" ⇒ nghi copy, md5 mới phán.** 2 cặp instrument @open/@close byte-size y hệt (6970 · 3615) nhưng md5 khác cả 3 cặp ⇒ re-chạy thật. Ngược lại nếu md5 trùng thì "re-chạy @close" là khai suông.
- **m#23 — vắng ở `git status` có HAI nghĩa trái ngược: *đã commit* hoặc *bị ignore*.** 3 sổ ctx mới không hiện `??` — phải `git ls-files --error-unmatch` + `git check-ignore -v` mới phân biệt được (ở đây = đã commit). Đọc-vắng-mặt-thành-ổn là bẫy; đọc-vắng-mặt-thành-mất cũng là bẫy.

---

## H. ⭐ BASELINE S154 — bản ĐÚNG (thay bản "~23/11" tao khai @open, ring1 BROKE đúng)

> **S154 corruption baseline = 16 raw-hit / 10 file** (danh sách 10 file ở §B.2).
> **Thước:** `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{...}'` — byte-mode, **KHÔNG `grep -P`** (chết rc=2 im lặng), **hash theo `$ARGV`** (m#20-bis), quét TRỌN `.claude/` gồm run-folder cũ.
> **Mệnh-đề loại-trừ (KHÔNG tính hồi-quy):**
> (a) 10 file trong danh sách = **quoted-evidence cố-ý** ở sổ harvest-curator + archive + synthesis cũ; iconv 55/55 OK ⇒ không hỏng thật.
> (b) 🔴 **File dùng ASCII `<FFFD>` / `U+FFFD` KHÔNG bị đếm** — sổ S153/S154 của tao viết dạng ASCII nên **không làm số tăng**. Kỳ-vọng "~23/11" của bản trước là **SAI**: kỳ sau đo 16/10 sẽ đọc thành **SỤT giả** + đi truy file phantom. **ring1 @open HELD, tao nhận trượt.**
> (c) Baseline có **GIỜ-đo** (m#12): 16/10 đo lúc `bookend-close` mới có 4 sub-file; nếu 2 lượt @close còn lại hoặc synthesis sinh raw-FFFD thì số tăng **hợp-lệ**, không phải hồi-quy.
> **Chỉ đáng lo khi:** file MỚI **ngoài** tập 10 file trên xuất hiện.

---

## I. TỔNG — 8 finding

| # | Mức | Finding | Ai xử |
|---|---|---|---|
| 1 | **MED** | **M9 còn nợ 11 sổ** (§E.2) — 11/13 vai đã-chạy có `grep -c S153` = 0; C11(b) không phủ (ngoài `INFORM-only`) ⇒ 20 spawn-record §D là đầu vào duy nhất | **lead APPEND** |
| 2 | **MED** | **#53 tái-phát ×1 xác-nhận-từ-đĩa**: `implementer-frontend` #1 (T2) mất return dạng schema-fail → lead ghi ACCEPTANCE on-behalf (template vẫn LAND 8.819B) ⇒ **tally #53 +1** | lead ghi tally |
| 3 | **LOW** | Sàn-5 `:77` khai `done=6/6 harvested=yes` cho `bookend-close` khi synthesis VẮNG + 4/6 sub trên đĩa = **cờ đi trước nội-dung** | lead điền lại @cuối |
| 4 | **LOW** | 3 sổ ctx mới đặt khối boilerplate `>` **dưới** entry đầu, lệch khuôn 20 sổ còn lại | lead, khi tiện |
| 5 | **INFORM** | chore: **SELF 17.655B > 17.1KB self-target** ⇒ self-compact DUE phiên sau (khối S150+S151) | lead/tao phiên sau |
| 6 | **method** | **m#20-bis** perl `END{}`-per-batch ⇒ attribution bịa (tự bắt trong lúc đo) | lead APPEND sổ tao |
| 7 | **method** | **m#21** END-line ≥2 khuôn · **m#22** cùng-size ⇒ md5 mới phán · **m#23** vắng-ở-status = đã-commit HOẶC bị-ignore | lead APPEND sổ tao |
| 8 | **self-TRƯỢT (đóng)** | baseline S154 "~23/11" tao khai @open **SAI** — ring1 HELD; bản đúng §H = **16/10** + mệnh-đề (b) | đã sửa tại §H |

**Không có finding nào là vi-phạm toàn-vẹn harvest.** 5 trục: Coverage PASS-with-debt · Completeness PASS · Fidelity STRONG · Placement PASS · Corruption PASS.

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

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

