# sub-harvest-curator-1 — H2 session-start RE-REPORT S144 (2026-07-22)

> Vai: harvest-integrity 5-trục · INFORM-only · propose-only (lead = single-writer).
> Giao-thức #53: ghi ĐĨA ngay khi tìm ra, KHÔNG dồn cuối. Return = tóm-tắt trỏ file này.
> HEAD lúc đo: `d5656ab` (2026-07-22 14:08:13 +0700). Giờ đo: 14:15 → (cập nhật dần).

---

## A. Ground-truth đo tươi (đĩa, không chép của lead)

### A1. Run-folder inventory
- Tổng thư-mục dưới `.claude/workflows/runs/` = **43** (`find -mindepth 1 -maxdepth 1 -type d`).
- Có `run.md` = **40**. Không có `run.md` = **3**:
  - `2026-07-14-S117-pe-approve-minmax-range` — spec-only, **by-design** (đã xác lập @S132).
  - `2026-07-14-S117-pe-luyke-finalize` — spec-only, **by-design** (đã xác lập @S132).
  - `2026-07-22-S144-bootstrap` — **folder phiên NÀY, đang sinh live** (xem A4).

### A2. Orphan scan C5 — DUAL-ACCEPT (dạng-3 RETIRED, không nhận)
Thuật toán chạy độc-lập: với mọi `d` có `d/run.md` → PASS nếu tồn tại `d/*-synthesis.md` size>0 (dạng-1 phẳng) **hoặc** `d/harvest/*-synthesis.md` size>0 (dạng-2 legacy).

```
TOTAL run.md folders = 40
ORPHAN = 0
```

**VERDICT: XÁC NHẬN ĐỘC-LẬP số của lead — orphan 0/40.** (Mẫu-số của tao = 40, tăng từ 37 @S140 do +3 folder S141/S142/S143. m#12: mẫu-số có NGÀY-ĐO — 40 là số lúc 14:15 ngày 2026-07-22, chưa tính S144-bootstrap vì folder này chưa có `run.md`.)

### A3. Placement + Corruption sơ-bộ (2 trục quét-máy)
- Role-dir dưới `.claude/agent-memory/` = **17** (đếm bằng `find -mindepth 1 -maxdepth 1 -type d`, **guard m#11** — không dùng `cut -d/ -f3` vì nuốt file root-level `memory-budget.json`/`.mfe-state.json`).
- **0 file 0-byte** dưới toàn `.claude/agent-memory/` (`find -type f -size 0` → rỗng). ⇒ Không tái bug #53-zero-byte kiểu S45.
- **0 empty-dir** dưới toàn `.claude/` (`find .claude -type d -empty` → rỗng). ⇒ m#13 (git MÙ dir rỗng) sạch; không có stray cwd-relative kiểu S54/S119.
- `git status --porcelain -- .claude/agent-memory` = **rỗng tuyệt đối** ⇒ 0 delta mồ-côi dạng uncommitted trong agent-memory.
- Porcelain repo-wide chỉ 3 mục: ` M .claude/governance/.session-counter.json` · `?? .claude/scheduled_tasks.lock` · `?? runs/2026-07-22-S144-bootstrap/` — cả 3 đều là **live-state phiên đang chạy**, không phải residue.

### A4. 🔴 LIVE mid-flight observation (bắt được nhờ đo 2 lần cách nhau ~1 phút)
- 14:14:02 — `runs/2026-07-22-S144-bootstrap/` tồn-tại nhưng **RỖNG** (`ls -la` chỉ có `.`/`..`; `find -type d -empty` cùng lượt KHÔNG báo → đã có tranh-chấp thời-điểm).
- 14:14:32 — xuất-hiện `sub-tooling-auditor-1.md` **1778 B**.
- 14:15:08 — vẫn **chưa có `run.md`**.
⇒ Đây là **folder bootstrap dạng sub-md-first** (sub ghi trước, `run.md`/synthesis do lead đóng sau). KHÔNG xếp orphan (chưa có `run.md` ⇒ ngoài mẫu-số C5 theo đúng định-nghĩa folder-scan). **Chỉ thành orphan nếu cuối phiên có `run.md` mà thiếu `*-synthesis.md`** → đề-nghị lead kiểm lại ở close-gate.

---

## B. Trio-memory 3 vai mới (harness-eval / harness-refine / harness-audit)

**Trạng-thái: CÓ diary, và là trạng-thái ĐÚNG — KHÔNG phải gap.**

| Vai | Path | Byte | mtime | Commit sinh |
|---|---|---|---|---|
| harness-eval | `.claude/agent-memory/harness-eval/MEMORY.md` | **1547** | 2026-07-20 18:31 | `2757e41` (A = added) |
| harness-refine | `.claude/agent-memory/harness-refine/MEMORY.md` | **1616** | 2026-07-20 18:31 | `2757e41` (A) |
| harness-audit | `.claude/agent-memory/harness-audit/MEMORY.md` | **1513** | 2026-07-20 18:31 | `2757e41` (A) |

- Cả 3 = **seed-tại-adopt** (không phải diary rỗng): có đủ `Role baseline` + `Split boundary` + `Luật cứng` + `Nhật-ký`.
- Dòng nhật-ký duy nhất, giống nhau cả 3: `S141 (2026-07-20) seed khi adopt khuôn hub 58e28bae — CHƯA chạy lần nào; first-run chờ restart-CLI + spawn-probe + anh consent.`
- ⇒ **Tự-khai "CHƯA chạy lần nào" KHỚP thực-tế đĩa**: 0 run-folder nào có `sub-harness-{eval,refine,audit}*.md`. Spawn-probe ALIVE phiên này = probe, không phải task thật ⇒ **không sinh nghĩa-vụ harvest**.
- 🟢 **Điểm tốt đáng ghi:** 3 vai này khai boundary `NOT (nhường): harvest-op → harvest-curator H2` — ranh-giới với tao rõ, **0 double-touch**. (`harness-refine` còn cắm cảnh-báo "RANH SẮC — dễ lẫn" với `lead-omission-auditor`.)

---

## C. Trục COVERAGE — 0 silent-miss (mọi sub/run đã-chạy đều có vết harvest)

### C1. Ai NỢ diary, ai KHÔNG — luật phân-định lấy từ ĐĨA
`hmw.js:181` (đọc tươi): ``const subMd = wave ? `${wave.dir}/sub-${role || 'task'}-${i}.md` : null``
⇒ **Tên file = bằng-chứng vai:** `sub-<role>-<i>.md` = role-agent (CÓ diary, NỢ spawn-record) · `sub-task-<i>.md` = **role-less** (inherit lead, **KHÔNG nợ diary** — by-design).

### C2. Bảng coverage 3 run gần nhất (S141 · S142 · S143)

| Run | Artifact trên đĩa | Vai | Nợ diary? | Vết harvest | Verdict |
|---|---|---|---|---|---|
| S141 | `sub-task-0.md` 2427B · `sub-task-1.md` 2858B | **role-less** (tên `task`) | ❌ KHÔNG | — (`implement-vong1-synthesis.md` 3263B partial-honest) | ✅ |
| S141 | `sub-reviewer-fable-spec.md` 18297B | reviewer | ✅ CÓ | entry `S141 (07-20) fable-real gate SPEC…` — nay ở `reviewer/archive/2026-07.md` (moved @S143-curate) | ✅ |
| S141 | 5-lane `/fable-clone invest` (lens-1→5, không có sub-md riêng) | investigator-codebase | ✅ CÓ | `investigator-codebase/MEMORY.md` M @`2757e41`, mtime 07-20 17:55 | ✅ |
| S142 | `sub-task-0.md` 16978B · `sub-task-1.md` 22901B | **role-less** (run.md tự khai *"2 lane, role-less → inherit lead"*) | ❌ KHÔNG | `implement-synthesis.md` 4150B | ✅ |
| S143 | `sub-reviewer-0.md` 18205B | reviewer | ✅ | `reviewer/MEMORY.md:3` tag `[s143, outward-gate-fail, …]` | ✅ |
| S143 | `sub-lead-view-1.md` 5744B | lead-view-auditor | ✅ | diary tag `[s143, deep-force-fire-som, …]` (**on-behalf**, `c4903dd`) | ✅ |
| S143 | `sub-lead-omission-2.md` 10027B | lead-omission-auditor | ✅ | `:25` tag `[s143, deep-1, …]` | ✅ |
| S143 | `sub-harvest-3.md` 13200B | harvest-curator | ✅ | `harvest-curator/MEMORY.md` entry S143 | ✅ |
| S143 | `sub-tooling-4.md` 13896B | tooling-auditor | ✅ | diary tag `[s143, drift-found-4, …]` | ✅ |
| — | trio `harness-{eval,refine,audit}` | 3 vai mới | ❌ (0 task thật) | seed-diary tự khai "CHƯA chạy" **khớp đĩa** | ✅ |

**COVERAGE = ✅ PASS — 0 silent-miss.** 5/5 sub S143 (đúng 5 vai garble) đều có vết diary; 0 vai role-agent nào chạy mà im.

### C3. 🔴 BẪY coverage suýt sinh dương-giả (m#16 MỚI — đề-xuất ghi Methods)
`S141/sub-task-0.md:3` tự khai **"Vai: implementer-backend"** — nhưng **tên file là `sub-task-0`** ⇒ lane role-LESS.
Đối-chứng: `implementer-backend/MEMORY.md` mtime **2026-07-18 00:47** (không đổi từ S140-era) — nếu tin dòng self-label, tao sẽ kết "implementer-backend nợ entry S141" = **dương-giả**.
⇒ **m#16: nhãn-vai TRONG thân sub-md = mô-tả CHỨC-NĂNG, KHÔNG phải bằng-chứng spawn. Thẩm-quyền vai = TÊN FILE (`hmw.js:181`).** Cùng họ m#4 ("commit-stat có-append ≠ có-fanout-record").

---

## D. Trục PLACEMENT + DELTA MỒ-CÔI — 0 mồ-côi, 3/3 FLAG S143 ĐÃ ĐÓNG

### D1. Mồ-côi dạng "chưa commit"
`git status --porcelain -- .claude/agent-memory` = **RỖNG** ⇒ 0 delta chờ. Mọi APPEND S143 đã vào 4 commit: `2757e41` · `36cefcc` · `c4903dd` · `a1e2416`.

### D2. Mồ-côi dạng "nằm lại trong sub-*.md, không lên diary" — soi từng FLAG S143 của chính tao
| FLAG @S143 | Trạng-thái ĐO LẠI HÔM NAY | Verdict |
|---|---|---|
| **F1 MED** counter-claim-vs-đĩa (2 diary H24 khai `class_repeat` mà `.session-counter.json` chưa) | `.session-counter.json` nay có **6/6 khớp EXACT**: `view-residual-asym:1` · `view-stale-status:0` · `gap-carry-dropped:1` · `gap-owner-specifics:2` · `gap-decision-sunk:1` · `gap-incident-unrecorded:0` — đúng từng con-số 2 diary khai | 🟢 **CLOSED** |
| **F2 LOW** stray git-MÙ `broadcasts/.claude/…` rỗng (lớp S54, `porcelain --ignored` IM) | **quét REPO-WIDE** (không chỉ `.claude/`): `find . -type d -name .claude` → **CHỈ `./.claude`**; empty-dir toàn repo = 3, đều tool-cache (`.vs/sd` · `fe-admin|fe-user/node_modules/.vite-temp`) — 0 dính memory | 🟢 **CLOSED** |
| **F3 MED** sửa-một-phía (index ×23 vs topic-file ×20) | `auto-memory/MEMORY.md:34` = **×25** · `feedback_agent_return_garble_recover.md` = **"+ S143 ×5 = ×25 tổng"** ⇒ **2 phía khớp** | 🟢 **CLOSED** |

### D3. Finding của 4 vai kia có lên diary/hành-động không (mẫu 4 điểm)
- reviewer → đề-xuất **errata** (CẤM sửa file đã stamp): `docs/changelog/sessions/2026-07-22-1455-S143-tiep-closeout-audit-errata.md` sinh @`a1e2416` + gửi @`39cc060`. ✅ LANDED.
- lead-view 4 site "roster/NO-Write" → `36cefcc` chạm `.claude/agents/README.md` (+7/−…) + `docs/STATUS.md`. ✅ LANDED.
- lead-omission `gap-incident-unrecorded` (xin owner mở enum) → **enum canonical `memory-budget.json.lead_self_audit.flag_classes` nay = 11 phần-tử** (đo bằng `json.load` → `['view-stale-count','view-stale-status','view-stale-header','view-stale-role-desc','view-residual-asym','gap-carry-dropped','gap-carry-aged','gap-owner-specifics','gap-decision-sunk','gap-underfill','gap-incident-unrecorded']`). ✅ LANDED.
- tooling F-B enum 10→11 → 3/3 site khớp canonical: `STATUS:450` *"11 class = 5+6"* · `hmw.js:33` *"11 class: 5 view-* + 6 gap-*"* · budget=11. ✅ LANDED.
- tooling **F-A LOW carry** (`skills/ef-core-migration/SKILL.md` còn *"Mig 27-66"* — **grep = 2 occurrence, VẪN CÒN**) → chính tooling xếp *carry monthly-lane*, **có chủ-đích hoãn**, không phải rơi. 🔶 **OPEN by-design — lãnh-địa H1 `tooling-auditor`, tao KHÔNG chấm.**

**PLACEMENT = ✅ PASS · DELTA MỒ-CÔI = 0.** 17/17 role-dir có `MEMORY.md`, 0 delta lạc nhà, 0 stray, 0 empty-dir memory.

---

## E. Trục FIDELITY — PASS (0 bịa) + 2 nit nhãn-thời-điểm (INFORM, KHÔNG escalate)

Tao **tự re-chạy** 3 claim load-bearing, không tin lời khai:

**Probe-1 — reviewer, class `bằng-chứng-tự-huỷ-sau-squash`** (claim: `1a0fa59`/`a458102` là commit-object nhưng dangling sau squash; `2757e41` sống):
```
1a0fa59  type=commit  is-ancestor-of-HEAD=NO   branch--contains=(EMPTY)
a458102  type=commit  is-ancestor-of-HEAD=NO   branch--contains=(EMPTY)
2757e41  type=commit  is-ancestor-of-HEAD=YES  branch--contains=* main
```
⇒ **KHỚP 3/3, GROUNDED.** Claim mạnh nhất phiên S143 đứng vững khi tao đo độc-lập.
🔎 Hệ-quả sống: `.session-counter.json` (bản committed) từng ghi `last_ticked_head = 1a0fa59de2e…` = **đúng commit đã chết** ⇒ cùng CLASS reviewer vừa đặt tên. Nay tick S144 đã thay bằng `d5656ab` (reachable). Ghi nhận, không tính lỗi mới.

**Probe-2 — 2 diary H24 vs `.session-counter.json`:** 6/6 giá-trị khớp exact (bảng D2/F1).

**Probe-3 — sổ đếm garble:** index ×25 == topic-file ×25 ⇒ 0 lệch 2 phía.

### 🔴 2 nit nhãn-THỜI-ĐIỂM (không phải bịa — số đúng LÚC ghi, thiếu mốc as-of)
- **N1 (LOW, trong memory):** `lead-omission-auditor/MEMORY.md:25` khai *"3/3 sub garble #53 phiên này"*. Đúng lúc 13:10 (mới 3 sub chạy), nhưng chốt phiên = **5/5**. Diary **không có mốc as-of** ⇒ người đọc sau dễ trích sai. **Đề-xuất lead APPEND-sửa nhãn** (không xoá): thêm `(số lúc 13:10; chốt cuối phiên = 5/5)`. Trớ trêu: chính `feedback_agent_return_garble_recover.md` data-point **(c)** đã đặt tên cho bẫy này — *"cập-nhật tally ở CUỐI phiên, đừng giữa phiên"*.
- **N2 (LOW, NGOÀI memory — báo để không lan sang bề-mặt S144):** **brief giao việc phiên này ghi "Sổ đếm garble ×23"**. Đĩa = **×25** (đã sửa @`a1e2416`). ×23 chính là con-số mid-session mà đĩa đã tự khai là sai. Memory ĐÚNG, brief STALE ⇒ đừng để ×23 chảy vào STATUS/HANDOFF/email S144.

**FIDELITY = ✅ PASS — 0 fabrication, 0 claim không truy được về đĩa ⇒ KHÔNG escalate `reviewer`.** (Tiêu-chí S143 giữ nguyên: beyond-source ≠ bịa, miễn truy được về đĩa + có khai nguồn.)

---

## F. Trục CORRUPTION — PASS 4/4 phép đo

1. **U+FFFD** (m#6: đo bằng literal U+FFFD, **CẤM** heuristic `Ã|Æ°|â€` = máy-đẻ-dương-giả trên UTF-8 tiếng Việt): **6 hit / 4 file**, TẤT CẢ là quoted-evidence trong entry lịch-sử (m#9) — `cicd/archive/2026-06.md:26` · `harvest/archive/2026-06.md:3,12,13` (dòng 3 **tự khai** *"NOTE: chứa U+FFFD quote"*) · `harvest/archive/2026-07.md:24` · `harvest/MEMORY.md:48` (entry S132 trích `"�24.1KB"` làm chứng-cứ m#6).
   **Chứng minh KHÔNG phải hư mới:** `git show a1e2416^:…/harvest-curator/MEMORY.md | grep -c` = **1** ; HEAD = **1** ⇒ delta 0.
2. **iconv round-trip UTF-8**: **VALID 8/8** (5 diary chạm hôm nay + 3 seed trio).
3. **0-byte**: 0 file / toàn `.claude/agent-memory` ⇒ không tái #53-zero-byte (S45).
4. **moved-not-cut** — curate DUY NHẤT hôm nay = `reviewer` @`36cefcc` (L1 26.5KB→17784B):
   - 20 dòng bị gỡ khỏi L1 = **4 stub-pointer** (m#15: `[→ archive/… @Sxxx]`, nội-dung đã ở archive từ trước → nén 4 stub thành 2 digest-stub, **KHÔNG tính cut**) + **16 dòng nội-dung**.
   - **16/16 dòng nội-dung tìm thấy BYTE-IDENTICAL** (`grep -Fqx`) trong `reviewer/archive/2026-07.md` dưới marker `## [BATCH S143-curate … moved-not-cut]`. **CUT-NOT-MOVED = 0.**
   - **dead-pointer check** 2 digest-stub: `S139 (07-18)`=1 hit · `S134b (07-17)`=1 · `S133 (07-17)`=1 · `S124`=3 · `S125`=5 trong archive ⇒ **0 con-trỏ chết** (lớp tao bắt @S102).

### 🔴 Bug tự-bắt trong CHÍNH phép đo của tao (m#14-EXT — đề-xuất ghi Methods)
Lượt 1 chạy `grep -Fqx "$line"` với `$line` bắt đầu bằng `-` ⇒ shell/grep nuốt làm **option** (`grep: unknown option --`) ⇒ báo **13/16 "CUT-NOT-MOVED"** = **dương-giả 100%**. Chạy lại `grep -Fqx -e "$line"` ⇒ **0**.
⇒ **m#14-EXT: dòng-diff mở đầu bằng `-` đã phá grep ở 3 hình-dạng khác nhau (m#5 filter · m#14 diff-extract · nay m#15 moved-not-cut). Mọi so-khớp dòng-diff PHẢI dùng `-e`/`--`.** Nếu tin lượt-1, tao đã báo lead một cáo-buộc "reviewer cut-not-moved 13 dòng" HOÀN TOÀN SAI.

---

## G. Chore-memory (byte đo tươi, cap canonical từ `memory-budget.json`)

Cap canonical: `tiers.l1_hot.autoinject_cap_bytes = 25600` · `soft_cap_bytes = 30720` · `archive_gate.low_watermark_ratio = 0.85` (→ 21760).

| Role | L1 bytes | vs cap 25600 |
|---|---|---|
| **investigator-codebase** | **26624** | 🔴 **VƯỢT auto-inject cap +1024B** → phần đuôi L1 KHÔNG inject; archive-gate due |
| cicd-monitor | 22607 | 🟠 >85% watermark (WATCH) |
| test-specialist | 22140 | 🟠 >85% (WATCH) |
| frontend-designer | 21492 | 🟢 sát watermark |
| implementer-backend | 19449 | 🟢 |
| tooling-auditor | 18534 | 🟢 (>self-target 17.1K của vai đó) |
| reviewer | 17784 | 🟢 (vừa curate; nhỉnh 274B trên self-target 17.1K vai đó) |
| **harvest-curator (tao)** | **17175** | 🟢 **DƯỚI self-target 17510** |

Còn lại (database-agent 7388 · investigator-api 8510 · office-document 3323 · lead-omission 9680 · lead-view 6610 · implementer-frontend 15951 · trio 1513/1547/1616) đều thoáng.

---

## H. VERDICT TỔNG 5 TRỤC — @session-start S144

| Trục | Verdict | Neo bằng-chứng |
|---|---|---|
| **Coverage** | ✅ **PASS** | 5/5 sub S143 có vết diary · role-less lane 4/4 không nợ (hmw.js:181) · trio 0-task-0-nợ · orphan **0/40** |
| **Completeness** | ✅ **PASS** | 5 entry S143 đủ 4-field-tương-đương {task-scope · verdict · learned · surprise/tag}; mỗi entry trỏ `runs/…/sub-*.md` chi-tiết |
| **Placement** | ✅ **PASS** | 17/17 role-dir có MEMORY.md · porcelain agent-memory RỖNG · 0 stray `.claude` repo-wide · 0 empty-dir memory |
| **Corruption** | ✅ **PASS** | FFFD 6 = quoted-evidence (delta 0) · iconv 8/8 VALID · 0-byte 0 · moved-not-cut **16/16 byte-identical, cut=0** · 0 dead-pointer |
| **Fidelity** | ✅ **PASS (STRONG)** | 3/3 probe re-chạy độc-lập KHỚP (dangling-commit 3/3 · class_repeat 6/6 · tally 2/2) · 0 bịa ⇒ **không escalate reviewer** |

**TỔNG: 🟢 ALL-CLEAN 5/5 — 0 delta mồ-côi, 0 orphan/40.**

### Propose cho lead (INFORM-only, lead VERIFY→APPEND)
1. **P1 (LOW)** APPEND nhãn as-of vào `lead-omission-auditor/MEMORY.md:25` — *"3/3 sub garble"* → thêm `(số lúc 13:10; chốt cuối phiên 5/5)`. **KHÔNG xoá** câu gốc.
2. **P2 (LOW, ngoài memory)** Brief S144 ghi *"garble ×23"* — đĩa = **×25**. Chặn trước khi lan sang STATUS/HANDOFF/email S144.
3. **P3 (MED, chore)** `investigator-codebase/MEMORY.md` **26624B > 25600** cap ⇒ đề-xuất chạy archive-gate/curate L1→L2 (moved-not-cut + seal-verify).
4. **P4** Ghi 2 method mới vào diary tao: **m#16** (nhãn-vai trong thân sub-md ≠ bằng-chứng spawn; thẩm-quyền = tên file `hmw.js:181`) · **m#14-EXT** (dòng-diff mở đầu `-` phá grep ở 3 hình-dạng ⇒ luôn `-e`/`--`).
5. **P5 (nhắc close-gate)** `runs/2026-07-22-S144-bootstrap/` hiện **chưa có `run.md`** ⇒ đang NGOÀI mẫu-số orphan. Khi lead đóng `run.md`, folder vào mẫu-số ⇒ **phải kèm `*-synthesis.md` size>0** kẻo tự sinh orphan đầu tiên sau 40 run sạch.
6. **P6 (bàn giao H1)** `skills/ef-core-migration/SKILL.md` còn *"Mig 27-66"* ×2 — tooling-auditor đã xếp carry monthly-lane; **lãnh-địa H1**, tao chỉ chuyển tiếp.

