# SUB — invest `/day` dậy-nhẹ probe-first (S158, `/fable-real investigator-codebase`, PROPOSE-ONLY)

> Engine ghi-trong-lúc-làm. Lead verify → lead ghi spec (H21 ① honest-note (c)). File này = findings + đề-xuất, KHÔNG phải spec, KHÔNG sửa lệnh nào.
> Thư nguồn đọc TRỌN: `AI_INFRA/broadcasts/outbox/all/2026-07-28-Governance-day-wake-probe-first-resume.md` (13.832 B, `ef05b7da…`, PASS r3, dogfood hub = 0 phiên).

## §0 VERDICT

**FIT-ĐỦ-4 — áp cả F1-F4, SKIP = 0 khoản.** SE có đủ 2 nền (17-07 kit + 25-07 vòng-canh/`tiep_reload`), có hook-carry sẵn (F4 rẻ hơn hub), có máy canonical đón sẵn ts-reader (`session_ctx.py:48-59`). 4 phép đo đề-bài đều chạy thật, trong đó **1 tiền-đề đề-bài TRẬT trên dữ-liệu hôm nay** (mồ-côi 0/8 — nhưng guard vẫn bắt buộc, lý do tự-sinh ở §1.2). Câu khó Sàn-3: **dựng phép đo thứ 2 KHÔNG vi phạm B1** — có bằng chứng cùng-một-cửa hai phép trả lời NGƯỢC nhau vì hỏi 2 câu khác nhau (§2).

---

## §1 ĐO THẬT (mọi số kèm lệnh — chạy 2026-07-28, HEAD lúc đo `eb08ac0`)

### 1.1 F3 bẫy-một — CHỨNG 4/4: đếm thô từ head-sha marker ⇒ DELTA-giả 100% ca

Lệnh: `for sha in <4 pause-sha>; do git rev-list --reverse $sha..HEAD | head -1 | xargs git log -1 --format='%h %s'; done`

| marker | head-sha (field trong file) | commit KẾ TIẾP ngay sau sha |
|---|---|---|
| `_pause-1` | `5197ce2` (= `wal: flush 20260726T1942`) | `8d4075a` **`wal: pause`** |
| `_pause-2` | `9ed65f4` | `976945c` **`wal: pause`** |
| `_pause-3` | `b804d96` | `73166c5` **`wal: pause`** |
| `_pause-4` | `d7eaece` (`[CLAUDE] Docs: spec…`) | `6c263dd` **`wal: pause`** |

⇒ Marker chụp HEAD ở `pause.md §2.6(A)` **TRƯỚC** commit-chốt `wal: pause` (bước 4) — nên commit chốt LUÔN nằm sau head-sha của chính marker. Tại cửa `/tiep` S158 (19:35, HEAD lúc đó = `6c263dd`): đếm thô `git rev-list --count d7eaece..HEAD` = **1** ⇒ DELTA-giả; neo resolve về `6c263dd` ⇒ **0** ⇒ CLEAN (khớp datum lead trong `run.md`). **Bẫy-một là thật ở SE, 4/4 marker, đúng như thư tả.** Bonus khớp chéo tự nhiên: `_tiep-3.head-sha = 73166c5` = chính commit `wal: pause` chở `_pause-3` (0-delta thì HEAD lúc nối = carrier của pause trước — nhất quán).

### 1.2 F3 bẫy-hai — mồ-côi ĐO THẬT: **0/8** hôm nay; tiền-đề đề-bài TRẬT; guard VẪN BẮT BUỘC

Lệnh: `git cat-file -e $sha` + `git merge-base --is-ancestor $sha HEAD` + `git rev-list --count $sha..HEAD` trên 8 sha (4 `_pause` + 4 `_tiep`):

```
p1 5197ce2 alive ANCESTOR range=54   t1 8d4075a alive ANCESTOR range=53
p2 9ed65f4 alive ANCESTOR range=27   t2 76488e8 alive ANCESTOR range=23
p3 b804d96 alive ANCESTOR range=15   t3 73166c5 alive ANCESTOR range=14
p4 d7eaece alive ANCESTOR range=3    t4 6c263dd alive ANCESTOR range=2
```

**Vì sao 0 mồ-côi dù SE có squash:** `session-end.md §5.0/§5.2` squash **CHỈ gọt run `wal:` LIÊN-TỤC tính từ HEAD xuống, CHỈ trong khoảng chưa-push** ("KHÔNG BAO GIỜ rewrite commit đã-push"; `wal:` kẹp dưới commit thường = GIỮ). Đo: 6/8 sha đã push (`is-ancestor origin/main` = YES), 2/8 chưa push nhưng `d7eaece` là commit thường (điểm dừng phép đếm K) — nên chưa sha nào từng rơi vào vùng fold.

**Nhưng bác bỏ "vậy thì bẫy-hai n-a" — 3 bằng chứng:**
1. **Tiền lệ chết THẬT cùng-lớp:** `.session-counter.json` history ghi S127: `last_ticked_head f9fa77d6` = dangling ("object ton tai (cat-file -t = commit) nhung 0 nhanh chua no") — squash đã từng giết 1 sha được sổ trỏ; contract phải đẻ event-class `squash-benign` VÌ nó. Ca này còn chứng: **`cat-file -e` MỘT MÌNH không đủ** (object dangling vẫn pass), phải kèm `is-ancestor` — đúng floor đúp của thư, có datum SE-local.
2. **Anchor hiện tại đang nằm trong vùng fold-able:** `6c263dd` (= carrier của `_pause-4`, = `last_ticked_head` S158) là `wal: pause` chưa-push, phía trên nó lúc này chỉ toàn `wal: flush` — nếu S158 không land commit thường nào trước session-end kế, run trailing từ HEAD gồm cả `6c263dd` ⇒ fold ⇒ sha chết. Sống hay chết = **may rủi hình-dạng phiên**, không phải thiết kế.
3. **Chính feature `/day` sản xuất điều kiện orphan:** chuỗi cửa-nhẹ hỏi-đáp (use-case đích của F1) sinh toàn marker + `wal:` flush, 0 commit thường ⇒ đúng hình-dạng trailing-`wal:` thuần mà squash fold trọn ⇒ **mọi anchor của chuỗi cửa-nhẹ chết cùng lúc ở session-end**. Guard bẫy-hai là điều-kiện-tự-sinh của chính lệnh dậy — adopt F1 mà bỏ F3-hai là tự gài mìn hẹn giờ.

**SE-form mạnh hơn hub (đo 8/8 PASS):** resolve anchor = **commit-chở-marker** `git log --diff-filter=A -1 --format='%h' -- <marker-file>`:

```
_pause-1→8d4075a  _pause-2→976945c  _pause-3→73166c5  _pause-4→6c263dd   (đều "wal: pause")
_tiep-1→c41af1c   _tiep-2→054ba02   _tiep-3→877236f   _tiep-4→60132e7    (đều "wal: flush …")
```

Phép này đi trên **lịch sử HIỆN TẠI** ⇒ sau squash tự re-resolve về commit fold mới ⇒ **sống-sau-squash by construction**, hết cả bẫy-một (carrier chính LÀ commit-chốt) lẫn bẫy-hai trên đường chính; field `head-sha` trong marker hạ xuống **fallback** (marker chưa từng được commit) — chỉ fallback mới cần guard đúp `cat-file -e` ∧ `is-ancestor`, trượt cả hai ⇒ verdict `anchor-lost` + tự nâng, CÓ TIẾNG (đúng floor).

### 1.3 F4 counter-drift — phép tương đương s109 của hub, đo trên session-7

Đĩa (`ls .claude/sessions/session-7/`): **`_pause-*` = 4 · `_tiep-*` = 4 · `_snapshot-*` = 3** (+ `_mind` + `_context`).

| sổ khai | đĩa | verdict |
|---|---|---|
| `_context-s-7.md` khai `### PAUSE-1..4` (4 entry, ts khớp từng marker) | 4 `_pause` | **KHỚP 4/4** |
| Contract auto-snap `pause.md §2.6(D)` (mỗi pause = 1 snapshot, hiệu lực từ S148) ⇒ kỳ vọng 4 | **3** `_snapshot` (PAUSE-4 lúc 11:33 07-28 KHÔNG có `_snapshot-4`) | 🔴 **DRIFT THẬT 3/4** — sự kiện nghi-thức không để vết, cùng gốc bệnh s109 hub (hub: đĩa THỪA so sổ; SE: đĩa THIẾU so contract) |
| Đề-bài S158 (viết lúc phóng) khai "`_tiep-1..3`" | 4 `_tiep` (`_tiep-4` sinh 19:35 trong chính cửa này) | write-order class — sổ chốt trước, marker sinh sau (chính hình-dạng s109; ở đây benign vì tự giải thích được) |
| WAL header "window 4" · STATUS "counter 31" | `_tiep-4` window-ordinal **5** · counter state **32** | **by-design staleness** (WAL/STATUS chỉ ghi lúc pause/closeout) — KHÔNG đếm là drift, khai để khỏi thổi phồng |

⇒ SE có **1 counter-drift đo được** (snapshot 3/4) + 1 ca write-order benign. Marker `_day` đếm-được từ filesystem đóng đúng lỗ này cho sự kiện dậy — và phép "đếm đĩa vs sổ" ở trên chính là khuôn falsifier tái dùng được.

### 1.4 F1 — BYTE bộ nguồn `tiep_reload` (đo tươi, đúng phạm-vi khoanh trong `sources`; 🔴 BYTE, KHÔNG quy token)

| nguồn (theo khoá `tiep_reload.sources`) | phạm-vi | đo | byte |
|---|---|---|---|
| `docs/STATUS.md` | dòng CURRENT (line 6, mega-line) | python len utf-8 | **3.295** |
| `docs/STATUS.md` | bảng CURRENT STATE (line 443 → trước `## ` kế = 466) | python | **56.210** |
| `docs/HANDOFF.md` | segment "Last updated" MỚI NHẤT (line 5→11; header thật = "**🆕 Last updated:**" — có khoảng trắng, không gạch nối) | python | **4.352** |
| `.claude/WAL.md` | trọn | `wc -c` | **5.369** |
| `_mind-s-7.md` | trọn | `wc -c` | **30.305** |
| `_context-s-7.md` | trọn | `wc -c` | **22.584** |
| **TỔNG bộ rút-gọn** | 5 nguồn / 6 mảnh | | **122.115 B** |

Đối chiếu: hub khai 439.328 B / 8 file (bộ của hub); nền-FULL SE = 596.316 B (số instrument @S153 ghi trong `_note` khoá — trích config, không phải đo tươi hôm nay). Bộ `/tiep` SE đã rút-gọn sẵn từ S153 nên nhỏ hơn hub 3,6×.

**Khoản tiết-kiệm mỗi cửa dậy-CLEAN (SE-form §3):**
- **Nạp SKIP** = STATUS-seg 3.295 + 56.210 + HANDOFF-seg 4.352 + `_context` 22.584 = **86.441 B** (70,8% bộ rút-gọn)
- **Nạp GIỮ** (lõi) = WAL 5.369 + `_mind` 30.305 = **35.674 B**
- **Spawn SKIP** = 1 lượt `ctx-verifier` — chi phí theo config SE: floor ~100K tok/spawn (`pause.md §2.6(C-bis).5` + `harness_floor.rounded_up_tokens=100000`; **số config có nguồn, KHÔNG phải đo của lượt này**) + skip re-run `mind-check` (~140-300ms) + skip verify-battery 5 lệnh của WAL `verify:`.
- Token: **CẤM quy** — chỉ được nói "dải mở, sàn = byte/4" nếu buộc phải nói, kèm nguồn (đúng luật thư + tiền lệ r1 trượt).

### 1.5 Đo phụ (ăn vào thiết kế §3)

- `git status --porcelain` NGAY LÚC NÀY = ` M .claude/governance/.session-counter.json` — tick `/tiep §2.5` KHÔNG có bước commit, file NGOÀI hook-4-path ⇒ **dirty tồn qua cửa** cho tới pause/closeout kế. ⇒ probe không allowlist file này thì **mọi cửa dậy sau một cửa-vào-bằng-/tiep-rồi-đóng đều DELTA-giả** (đường dậy-nhẹ chết ~nửa số ca). Datum `run.md` "porcelain rỗng" là may của cửa-sau-PAUSE (pause bước 4 commit counter đích-danh).
- `_tiep-1.md` head-sha = **sha NGẮN 7 ký tự** (`8d4075a`), 7 marker kia full-40 ⇒ form drift trong cùng loại marker; máy đọc phải chịu sha ngắn (git chịu) — thêm 1 lý do đi đường carrier-resolution thay vì tin field.
- `session_ctx.py:48-59`: `_TS_KEY_RE` canonical + comment ĐÓN SẴN "a future latest-marker reader" + cảnh báo đích-danh: `_mind-s-<N>.md` có key-line `ts:` ⇒ **reader marker PHẢI lọc theo TÊN FILE** kẻo đọc `_mind` thành marker. Máy probe = EXTEND `session_ctx.py` (khớp tiền lệ S153 "không .ps1 mới", tái dùng `_TS_KEY_RE` 1-nguồn).
- Sentinel: WAL 0 dòng `^closing:` (grep = 0) — khớp datum lead.
- 🎁 Surprise ngoài đề: **HANDOFF segment mới nhất = S153 (07-26)** — S155-S157 dọn sổ (`3b6fabc`) chỉ vá STATUS + session-log, KHÔNG thêm segment HANDOFF ⇒ nguồn 2 của `tiep_reload` đang nạp brief cũ 3 nhãn. Không thuộc scope thư này; nêu để lead biết.

---

## §2 CÂU KHÓ — probe F1 vs Sàn-3: **DỰNG PHÉP ĐO THỨ 2, KHÔNG tái dùng Sàn-3 làm chính nó** (và KHÔNG phạm B1)

**Bằng chứng quyết định (đo trên chính cửa S158):** lúc 19:35, `origin/main..HEAD` chứa `d7eaece` + `3b6fabc` = commit KHÔNG-`wal:` ⇒ **Sàn-3 tín-hiệu ② HIT** (bậc MẠNH — cấm kết luận sạch). Cùng thời điểm, probe F3-resolved-anchor = `6c263dd`, delta = **0 ⇒ CLEAN**. Hai phép trả lời **NGƯỢC nhau trên cùng một cửa** — vì chúng hỏi **2 câu khác nhau**:

| | Sàn-3 (`tiep.md §0`) | probe F1 |
|---|---|---|
| Câu hỏi | "**tồn tại** việc dở không?" — tuyệt đối | "trạng-thái **có đổi so với điểm dừng** không?" — tương đối |
| Neo | `origin/main` (② ④ ⑤) / KHÔNG neo (① orphan, ORPHAN-L) | marker dừng gần nhất (anchor F3) |
| Kết luận cấp | "DỪNG SẠCH" ⟂ "HỎI LẠI ANH" | route: dậy-nhẹ ⟂ nạp-full |
| ② HIT vì việc S157 đã commit chưa push (ĐÃ ghi sổ WAL `[x]` kèm hash) | đúng chức năng nó | 0-delta: việc đó xảy ra TRƯỚC pause, đã qua kiểm-lúc-ghi |

B1 cấm **2 nguồn về CÙNG MỘT câu** — đây là 2 câu ⇒ dựng phép-2 hợp lệ. Tái-dùng-Sàn-3-làm-probe thì sai theo cả 2 hướng: (a) Sàn-3 ② neo `origin/main` ⇒ mọi phiên có việc thật chưa push (= đa số) vĩnh viễn không mở được đường nhẹ — F1 chết từ trong trứng; (b) nới Sàn-3 cho "hiểu anchor" = sửa định-nghĩa canonical của "còn việc dở" để phục vụ một câu hỏi khác — chính là làm bẩn nguồn sự thật.

**Nhưng 4 ràng B1-hygiene để 2 phép không bao giờ bị đọc thành 1 (đề-xuất thành LUẬT trong lệnh):**
1. Tín-hiệu TRÙNG thì **GỌI cùng một phép**: sentinel của probe = đúng grep `^closing:` của Sàn-3 ③ (con-trỏ, không chép biến-thể).
2. **DELTA/anchor-lost/probe-lỗi ⇒ đổ về `/tiep` trọn**, nơi Sàn-3 chạy — "sạch/không-sạch" giữ **một nhà duy nhất**.
3. **Cấm từ-vựng**: output `/day` không được chứa "sạch" / "DỪNG SẠCH" / "không có mạch dở" — verdict chỉ `CLEAN|DELTA|anchor-lost` với nghĩa khai tường-minh "0-delta so điểm dừng; WAL nguyên hiệu lực" (CLEAN ≠ sạch; cửa nhẹ vẫn ĐỌC WAL nên mục `[!]` không bị nuốt).
4. **1 chạm bắt buộc vào Sàn-3** (sửa canonical có khai, không phải nguồn-đôi): ORPHAN-L ⑤(b) đếm cân-sổ `p vs r` — cửa dậy-nhẹ TIÊU THỤ một pause mà không ghi gì vào r-set ⇒ `/tiep`/`session-start` kế **KÊU OAN** (p>r) ⇒ claw-back tiết-kiệm bằng câu hỏi thừa. Vá = +`_day-*` vào r-set (1 dòng trong máy ⑤(b)) + **RE-RUN fault-inject 2 chiều của block** (cert "đã inject @S148" mất hiệu lực khi đổi tập đếm — luật fault-injection-proves-teeth).

Điểm khớp đẹp: Sàn-3 hỏng-về-phía-hỏi-thừa, probe hỏng-về-phía-DELTA (nghiêng F1) — **cả hai cùng chiều an-toàn**, không có tổ hợp nào "im lặng bỏ việc".

---

## §3 ② CÁCH ÁP — per-khoản, file-by-file (SKIP = 0; mọi chỗ đều PROPOSE, lead ghi)

### F1 — probe rẻ chỉ-đọc → lệnh MỚI `/day` + máy `day-probe`

- **NEW `.claude/commands/day.md`** (≤3KB): §1 resolve `<N>` (khuôn `snapshot.md §0`: WAL field `session:` → mtime-max → hỏi anh 1 dòng) → chạy `python scripts/session_ctx.py day-probe --session <N> --json` (chỉ-đọc, 0 spawn, 0 write) → §2 route:
  - **CLEAN** ⇒ dậy-nhẹ: đọc **WAL trọn + `_mind-s-<N>` trọn** (từ trên xuống); **SKIP** STATUS-seg + HANDOFF-seg + `_context` + spawn `ctx-verifier` + re-run `mind-check` (hợp lệ: `_mind` đã qua kiểm-lúc-ghi tại pause — `mind-check` draft+full ở `pause.md §2.6(C-bis)` bước 2/4 — 0-delta ⇒ còn nguyên giá trị); ghi marker `_day-<i>.md`; tick counter (con-trỏ `session-start §2.1.8`, B1); dò thư 2 kênh DÒ-only (con-trỏ `check-email.md §Nhịp` — cần anh gật vì thêm cửa thứ 5 vào luật nhịp); report 3-4 dòng khai verdict+anchor+skip-set-BYTE. **SKIP ≠ CẤM đọc** — cần sâu hơn thì đọc on-demand, chỉ nghi-thức mặc-định là nhẹ.
  - **Ngưỡng tự-nâng SE-form:** cửa nhẹ chỉ ĐỌC/trả lời; việc đầu tiên cần Write/Edit/spawn ⇒ chạy `/tiep` trọn trước (mutate trên nền chưa reconcile = cấm).
  - **DELTA / anchor-lost / probe-lỗi** ⇒ in 1 dòng signals → ghi `_day-<i>.md` (verdict + signals + route full) → chạy `/tiep` trọn. Nghiêng: mọi lỗi = DELTA.
  - Arg `force`/`full` ⇒ bỏ probe, `/tiep` trọn.
- **EDIT `scripts/session_ctx.py`** +subcommand `day-probe`: chọn marker mới nhất theo **ts GHI TRONG FILE** (`_TS_KEY_RE` :59 — Dropbox chạm mtime, đúng cảnh báo thư), **glob CHỈ** `_pause-*.md|_tiep-*.md|_day-*.md` (KHÔNG `_mind`/`_context`/`_snapshot` — bẫy :48-55); 4 tín-hiệu: (s1) `rev-list --count anchor..HEAD` (s2) porcelain tracked-dirty NGOÀI allowlist (s3) `_snapshot-*` có ts mới hơn marker (checkpoint giữa đường) (s4) `^closing:` WAL (= Sàn-3 ③). JSON + exit 0 luôn (advisory — route do lệnh quyết).
- **EDIT `memory-budget.json`** +khoá `day_wake` `{allowlist_dirty: [".claude/governance/.session-counter.json"], boundary_glob: [...]}` — 1-nguồn máy đọc live, fail-loud khi vắng (khuôn `mind_ctx_kb` H24-2). Allowlist 1-file có bằng chứng §1.5; **không** allowlist rộng hơn (counter-dirt không mang work-state; mọi dirt khác = việc thật).

### F2 — guard chống-trùng bước-0 HAI LỆNH CŨ (net-new: cả 2 file hiện 0 guard — `pause.md` mở thẳng bước 1, `tiep.md` mở thẳng §0)

- **EDIT `pause.md`** +§0 (~6 dòng): chạy `day-probe`; nếu **paused-bit** (ts `_pause-max` > ts `_tiep-max`, đọc in-file ts) ∧ CLEAN ⇒ in "đã dừng rồi — 0 delta, giữ nguyên" + DỪNG. **No-op = 0 marker mới, 0 entry `_context`, 0 snapshot, 0 spawn `ctx-curator`, 0 commit** (giá double-pause hiện tại: 1 spawn ~100K-floor + 4 vật + 1 commit — guard có răng thật). `_day` KHÔNG flip paused-bit (cửa nhẹ không phải mở-mạch). `force` ép chạy trọn.
- **EDIT `tiep.md`** +§-1 route-guard TRƯỚC §0 (~5 dòng): không `full` ⇒ chạy `day-probe`; CLEAN ⇒ in 1 dòng + đi đường `/day` dậy-nhẹ (không đốt §0-§4, không nạp `tiep_reload`, không spawn `ctx-verifier`); DELTA ⇒ chạy §0 như cũ. (Gõ nhầm lệnh nào cũng không bị phạt token — đúng floor.)

### F3 — anchor ĐÚNG + còn SỐNG (SE-form: carrier-resolution)

- Anchor chính = `git log --diff-filter=A -1 --format=%H -- <marker-mới-nhất>` (đo 8/8 §1.2; sống-sau-squash by construction; tự xử cả bẫy-một). Fallback (marker chưa được commit — pause chết giữa write và commit) = field `head-sha` + guard đúp `cat-file -e` ∧ `merge-base --is-ancestor` (S127 chứng cat-file-alone thủng); trượt ⇒ `anchor-lost` khai trong report + marker, tự nâng — hỏng-an-toàn CÓ TIẾNG. **CẤM** dùng ts/commit đụng WAL làm neo (WAL bị mọi flush chạm — đúng cảnh báo thư).

### F4 — marker dậy đếm-được + falsifier 2 chiều

- **`_day-<i>.md`** (~250-300B, `<i>` = max+1): 7 key-line `ts / head-sha / anchor / anchor-source(carrier|head-sha-field|none) / verdict(CLEAN|DELTA|anchor-lost) / route(nhe|full) / signals(csv|0)`. Ghi Ở CẢ 2 route (chiều luôn-DELTA cần signals nằm trên đĩa). **0 commit riêng** — `_day` nằm trong `.claude/sessions/` = path ④ hook `wal-flush.ps1` ⇒ đi theo chuyến `wal:` kế **miễn phí** (SE có sẵn thứ hub phải chế; và vì KHÔNG nới path hook nào ⇒ KHÔNG kích luật Sàn-3 "path mới = tín-hiệu MẠNH mới").
- Falsifier 2 chiều (rẻ, chạy hồi tố từ đĩa+git — đề xuất nhét `governance-detectors.ps1` INFORM-only, owner-form): **CLEAN-giả** = tồn tại `_day` verdict CLEAN mà `rev-list anchor..carrier(_day)` chứa commit KHÔNG-phải-carrier ⇒ FLAG; **luôn-DELTA** = `_day` verdict DELTA/anchor-lost mà `signals` rỗng ⇒ FLAG (chuỗi tự-nâng dài soi được bằng đếm file).

### Chạm canonical phải khai (3 chỗ, đều 1-vài dòng): `tiep.md §0 ⑤(b)` r-set +`_day-*` (+re-inject) · `CLAUDE.md` câu "nối lại DUY-NHẤT bằng /tiep" → thêm vế "/day dậy-nhẹ khi probe 0-delta, DELTA tự nâng về /tiep" (không sửa = mâu thuẫn bề mặt ngay dòng H22) · `check-email.md §Nhịp` +cửa dò thứ 5 (chờ anh gật). Restart CLI sau khi thêm/sửa command (no-hot-reload — đã có tiền lệ ghi trong `pause.md`).

---

## §4 ③ CHECKLIST ACCEPTANCE — vai + deliverable + phép ĐO ĐƯỢC (mỗi phép có đường TRƯỢT thật)

| # | phép | lệnh/cách đo | TRƯỢT khi (đường hỏng có thật) |
|---|---|---|---|
| A1 | bẫy-một đóng | chu trình thật: `/pause` sạch → cửa mới `/day` ⇒ verdict CLEAN; `--json` phải in `anchor_source=carrier` ∧ `anchor ≠ head-sha-field` | code đếm thô từ field ⇒ `wal: pause` lọt range ⇒ DELTA ⇒ FAIL (đây chính là bug 100%-ca nếu implement ẩu) |
| A2 | bẫy-hai có răng | fault-inject cây tạm: marker fake head-sha = object-thật-NOT-ancestor (commit trên branch tạm rồi xoá branch) + KHÔNG commit marker (ép rơi fallback) ⇒ PHẢI `anchor-lost`+route full; đối chứng sha=HEAD~1 ⇒ verdict thường | code chỉ `cat-file -e` (bỏ `is-ancestor`) ⇒ dangling PASS ⇒ verdict thường ⇒ FAIL (S127-shape) |
| A3 | F2 pause no-op | dừng sạch → gõ `/pause` lần 2 ⇒ `ls session-<N> \| wc -l` TRƯỚC/SAU bằng nhau ∧ `git log -1` không thêm commit ∧ `_context` không thêm `PAUSE-<k+1>` | thiếu guard ⇒ `_pause-<i+1>` + snapshot + commit sinh ra ⇒ count tăng ⇒ FAIL |
| A4 | F2 tiep route | dừng sạch → `/tiep` không arg ⇒ report khai SKIP {STATUS-seg·HANDOFF-seg·`_context`·`ctx-verifier`·`mind-check`} ∧ đĩa sinh đúng 1 `_day-<i>` CLEAN ∧ 0 `_tiep-<i>` mới | route thiếu ⇒ ctx-verifier spawn/`_tiep` mới xuất hiện ⇒ FAIL |
| A5 | nghiêng an-toàn 2 chiều | inject sau pause sạch: (i) sửa 1 byte file tracked không commit ⇒ `/day` DELTA signal dirty; (ii) 1 commit thường ⇒ DELTA signal commits | probe bỏ sót chiều nào ⇒ CLEAN-giả chiều đó ⇒ FAIL |
| A6 | F4 đếm được + falsifier | (i) N cửa nhẹ ⇒ `ls _day-* \| wc -l` = N; (ii) chạy 2 phép falsifier §3-F4 trên đĩa thật ⇒ 0 FLAG; (iii) inject 1 `_day` CLEAN có commit thường chen giữa ⇒ falsifier PHẢI FLAG | falsifier không FLAG ca inject ⇒ phép 0-bit ⇒ FAIL |
| A7 | ORPHAN-L không kêu oan | pause → `/day` CLEAN → (không `/tiep`) → chạy máy Sàn-3 ⑤(b) ⇒ PHẢI im; + re-run fault-inject 2 chiều block ⑤(b) (ca cũ PASS + ca `_day`-đối-ứng) | quên vá r-set ⇒ `ORPHAN-L: p>r` kêu ⇒ FAIL |
| A8 | báo số trung thực | report `/day` khai skip-set bằng BYTE đo tươi; grep report: 0 chuỗi "token" đứng cạnh số-đơn không nguồn | report in "tiết kiệm ~NK token (tự đo)" ⇒ FAIL (đúng lỗi r1 của thư) |

Vai đề xuất: implement = lead (em-main) tự tay (3 file lệnh + 1 python + 1 json — nhỏ, canonical-touch nhiều, không đáng spawn); REVIEW = workflow RIÊNG theo Harness-9 (reviewer chấm A1-A8 + soi 3 chạm canonical); dogfood = 2 cửa thật rồi mới báo hub kèm số (thư tự nhận sẽ gửi `type=update` — SE cũng đợi số của mình trước khi khoe).

## §5 PHẢN-BIỆN + giới hạn khai thẳng

1. **Tiền-đề đề-bài "SE có squash ⇒ đo mồ-côi" trật trên dữ-liệu hôm nay** (0/8 — squash scope chỉ-trailing-chưa-push): số "2/2 NOT-ancestor, range 35 rác" của hub KHÔNG tái hiện được ở SE hiện tại; bằng chứng SE cho bẫy-hai là {tiền lệ S127 + `6c263dd` fold-able + chuỗi-cửa-nhẹ tự sản xuất điều kiện} — đủ để giữ floor, không đủ để trích "SE cũng đo được N mồ-côi". Đừng ghi vào spec/report con số mồ-côi >0.
2. **Datum "porcelain rỗng" của run.md không tổng quát hoá được** — counter-dirt sau cửa-vào-`/tiep` là trạng-thái hợp lệ đang thấy NGAY LÚC NÀY; thiếu allowlist 1-file thì F1 chết nửa số ca (§1.5).
3. **Hub-floor "chọn marker bằng ts trong file" cần +1 rào SE-local:** glob phải lọc TÊN FILE (`_mind` có `ts:` key-line — bẫy đã được chính `session_ctx.py:48-55` tiên tri; miss = đọc `_mind` thành marker mới nhất vĩnh viễn).
4. **Giới hạn:** dogfood của chính `/day` = 0 ở cả hub lẫn SE (SE mới có 1 datum probe-tay @S158); con số "tiết kiệm 86.441B + 1 spawn/cửa" là ước-từ-cấu-hình-hiện-tại, chưa phải số chạy thật — đợi 2 cửa dogfood rồi mới có quyền trích. `_context` 22.584B sẽ PHÌNH theo phiên-logic (append-only) ⇒ tỉ trọng tiết-kiệm TĂNG dần theo tuổi phiên — chiều có lợi, nhưng vẫn là ngoại suy.

## §6 Lệnh đo để lead re-run (tự verify, đừng tin file này)

```bash
# bẫy-một (4/4):        for sha in 5197ce2 9ed65f4 b804d96 d7eaece; do git rev-list --reverse $sha..HEAD | head -1 | xargs git log -1 --format='%h %s'; done
# mồ-côi (0/8):          for sha in 5197ce2 9ed65f4 b804d96 d7eaece 8d4075a 76488e8 73166c5 6c263dd; do git cat-file -e $sha && git merge-base --is-ancestor $sha HEAD && echo "$sha OK"; done
# carrier (8/8):         for f in .claude/sessions/session-7/_{pause,tiep}-*.md; do echo "$f -> $(git log --diff-filter=A -1 --format='%h %s' -- $f)"; done
# drift snapshot (3/4):  ls .claude/sessions/session-7/ | grep -c '^_snapshot' ; grep -c '^### PAUSE-' .claude/sessions/session-7/_context-s-7.md
# byte (122.115):        wc -c .claude/WAL.md .claude/sessions/session-7/_{mind,context}-s-7.md  # + python slice STATUS line6/443-466, HANDOFF line5-11
# Sàn-3 ② cùng-cửa HIT:  git log --format='%h %s' a52a91e..6c263dd | grep -v '^[0-9a-f]* wal:'
```

**TOTAL: 14 đề-xuất** (F1: `/day`+`day-probe`+khoá `day_wake`+ngưỡng-tự-nâng = 4 · F2: §0 pause + §-1 tiep = 2 · F3: carrier-anchor + fallback-guard-đúp + cấm-neo-WAL = 3 · F4: `_day` 7-trường + falsifier-2-chiều = 2 · chạm canonical: ⑤(b) r-set + CLAUDE.md H22 + check-email nhịp = 3) · **4 phản-biện** · SKIP = 0.
