# SPEC — Lệnh DẬY-NHẸ probe-first cho SOLUTION_ERP (adap `2026-07-28-Governance-day-wake-probe-first-resume`) > Engine: `/fable-real investigator-codebase` (Fable, single deep-pass, propose-only) — anh GÁN vai @S158. > Pipeline H21 ①: engine propose → **lead verify** → **lead ghi (file này)** → worker thực-thi theo spec. > Propose đầy đủ: `sub-invest-day-1.md` (25.440 B, cùng run-folder). File này = bản lead ĐÃ VERIFY. > 🔴 **CHƯA THI CÔNG.** 3 chỗ chạm canonical cần anh gật — xem §③ cuối. --- ## ① TÍNH-NĂNG / ĐỀ-BÀI Thêm **một đường dậy RẺ** cho vòng đời tạm-dừng/nối-lại: khi máy **chứng minh được 0-delta** kể từ điểm dừng, mở cửa sổ mới **không phải trả giá `/tiep` trọn** (nạp-nền + spawn vai kiểm-lúc-đọc). Mọi trường hợp khác **tự nâng** về `/tiep` đầy đủ. Kèm **guard chống-trùng** ở bước-0 của `/pause` + `/tiep`, và **marker dậy đếm-được từ đĩa**. **Vì sao SE cần:** SE fit hạng cao nhất của thư (có ĐỦ nền 17-07 kit phiên-logic + nền 25-07 vòng-canh 3-vai + `tiep_reload`) ⇒ khoản tiết-kiệm lớn nhất của F1 áp dụng trọn. **Giá đo được ở SE (engine đo tươi, đơn-vị BYTE — 🔴 CẤM quy ra token, thư nói rõ token nằm trong dải mở):** | Nguồn `tiep_reload` | Byte | |---|---| | `docs/STATUS.md` (2 đoạn khoanh) | 3.295 + 56.210 | | `docs/HANDOFF.md` (segment mới nhất) | 4.352 | | `.claude/WAL.md` | 5.369 | | `_mind-s-7.md` | 30.305 | | `_context-s-7.md` | 22.584 | | **Tổng** | **122.115 B** | Cửa CLEAN sẽ **SKIP 86.441 B (70,8%)** + **1 spawn `ctx-verifier`**. 🔸 So hub: hub 439.328 B / 8 file — **nền SE nhẹ hơn 3,6×**, nên lợi tuyệt-đối nhỏ hơn hub. Khai thẳng, đừng mượn số hub. **🔴 Datum dogfood SE có mà hub KHÔNG có** (thư tự khai *"dogfood: 0 phiên"*) — đo TRƯỚC khi đọc thư: chính cửa `/tiep` @S158 này probe ra **CLEAN** (anchor `6c263dd` = HEAD, cây sạch, 0 sentinel) ⇒ **lẽ ra đi đường dậy-nhẹ**, mà lead đã trả giá full. **1 điểm dữ-liệu, KHÔNG phải bộ số.** --- ## ② CÁCH IMPLEMENT (per-khoản F1-F4, tailor FORM theo SE) ### 🔴 Câu khó nhất — đã có phán quyết CÓ BẰNG CHỨNG: **DỰNG PHÉP-2, KHÔNG tái dùng Sàn-3** Lead vào cửa này **nghiêng về tái dùng Sàn-3** (sợ 2-nguồn-sự-thật, B1). **Engine bác, và bác đúng** — bằng chứng lấy từ CHÍNH cửa S158 này, nơi hai phép cho **verdict NGƯỢC NHAU**: - **Sàn-3 tín-hiệu ②: HIT** — `origin/main..HEAD` có 2 commit non-`wal:` (`d7eaece` spec · `3b6fabc` dọn nợ sổ). *(lead tự đo @§0, độc lập.)* - **anchor-delta: 0 ⇒ CLEAN** — `_pause-4` head-sha `d7eaece` → carrier `6c263dd` = HEAD. *(lead tự đo, độc lập.)* ⇒ Hai phép trả lời **hai câu KHÁC NHAU**: Sàn-3 hỏi *"có tồn-tại việc dở không?"* (neo `origin/main`) ⟂ probe hỏi *"có gì ĐỔI so với điểm dừng không?"* (neo marker pause). **Khác câu hỏi thì khác nguồn sự-thật là hợp lệ — B1 không cấm.** **4 ràng hygiene BẮT BUỘC kèm theo** (thiếu là thủng): 1. Sentinel `closing:` **GỌI CHUNG** tín-hiệu ③ của Sàn-3 (con-trỏ, không chép logic). 2. Mọi verdict DELTA **đổ về `/tiep`** — `/tiep §0` giữ độc quyền là nhà DUY NHẤT phán chữ "sạch". 3. **CẤM dùng từ-vựng "sạch"** trong `/day` (dùng `CLEAN-delta`) — chống người đọc nhầm thành phán quyết Sàn-3. 4. `/tiep §0` ⑤(b) ORPHAN-L: **r-set phải cộng `_day-*`** — thiếu thì phiên có `/day` sẽ **kêu oan**; và **RE-RUN fault-inject** block đó. ### F1 — probe rẻ, chỉ-đọc - **NEW** `.claude/commands/day.md` — 2 nhánh, bước probe đứng **TRƯỚC**. - **EXTEND** `scripts/session_ctx.py` + sub-command `day-probe` (`--json`). Tái dùng `_TS_KEY_RE` sẵn có (`:48-55` đã đón trước reader loại này). 🔴 Glob **phải lọc theo TÊN FILE** kẻo ăn nhầm `_mind-s-.md`. - Chọn marker cuối bằng **dấu-thời-gian GHI TRONG file**, KHÔNG dùng mtime (Dropbox chạm lại mtime — SE chạy trong Dropbox). - **Khoá `day_wake`** trong `memory-budget.json`, có **allowlist dirty**. 🔴 Bắt buộc gồm `.claude/governance/.session-counter.json` — nó dirty NGAY lúc probe chạy (tick fire ở cửa vào) ⇒ thiếu allowlist thì F1 **chết nửa số ca**. - CLEAN → nạp lõi (WAL + `_mind` mới nhất), **SKIP** nạp-nền + **SKIP** spawn `ctx-verifier`. - Nghiêng an-toàn: probe lỗi / nghi ngờ ⇒ coi là **DELTA**. ### F2 — guard chống-trùng ở HAI lệnh cũ - `pause.md` **§0**: marker cuối đã là `_pause-*` + probe CLEAN ⇒ **no-op**, 0 marker/0 commit/0 spawn. 🔴 **Răng thật, không phải lý thuyết:** double-pause hiện đốt **1 spawn `ctx-curator`** (~100K floor theo config). - `tiep.md` **§-1**: probe CLEAN ⇒ route sang `/day`. - Cửa thoát cưỡng chế `--full` ở cả hai để anh ép chạy trọn. ### F3 — anchor: **SE-form MẠNH HƠN hub** - **Bẫy-một XÁC NHẬN 4/4 THẬT ở SE:** mỗi `_pause-i` head-sha → commit kế tiếp **chính là** `wal: pause` của nó (`8d4075a` · `976945c` · `73166c5` · `6c263dd`) ⇒ đếm thô từ head-sha ra **DELTA-giả 100%**. - **SE-form:** anchor = **carrier-commit** `git log --diff-filter=A -1 -- ` (commit ĐẦU TIÊN thêm chính file marker). Đo **8/8 resolve được**; **sống-sau-squash by construction**; và **nuốt luôn bẫy-một** (không cần bước resolve riêng). `head-sha` trong marker hạ xuống làm **fallback**, guard đúp. - **Bẫy-hai (sha mồ-côi): 0/8 ở SE hôm nay — tiền-đề của lead SAI, đã bác.** Squash `session-end` §5.0/§5.2 **chỉ gọt trailing-`wal:` CHƯA push**; 6/8 sha đã push nên bất khả mồ-côi. *(lead re-đo độc lập: `cat-file -e` + `is-ancestor` → **sống 8 / mồ-côi 0**.)* 🔴 **Guard VẪN BẮT BUỘC**, 3 lý do: (i) tiền lệ **S127** `f9fa77d6` dangling có thật — và nó chứng luôn rằng `cat-file -e` **một mình THỦNG** (object còn, ancestor mất) ⇒ **phải kèm `is-ancestor`**; (ii) `6c263dd` (đang là anchor `_pause-4` **và** `last_ticked_head`) nằm trong vùng fold-able; (iii) 🔴 **chính feature `/day` tự đẻ điều kiện orphan** — chuỗi cửa-nhẹ Q&A sản xuất trailing-`wal:` thuần, đúng thứ squash gọt. - Mồ-côi ⇒ verdict `anchor-lost` **khai TO** trong report + tự nâng. Hỏng-an-toàn nhưng **phải CÓ TIẾNG**. ### F4 — marker dậy đếm-được - `_day-.md` **7 trường**, khuôn `_pause-`/`_tiep-`. **0 commit riêng** — hook `wal-flush.ps1` path ④ (`.claude/sessions/`) chở miễn phí ⇒ **KHÔNG nới hook** ⇒ **KHÔNG đẻ điểm mù mới** cho Sàn-3. - **Falsifier 2 chiều** cho tầng audit: *CLEAN-giả* (marker ghi CLEAN mà có commit thật giữa anchor và ts ⇒ FLAG) · *luôn-DELTA* (mỗi lần tự nâng phải khai signals/`anchor-lost` ⇒ chuỗi tự-nâng dài bất thường là soi được). - **Drift F4 SE-local đo được (gửi hub — đúng shape s109 hub kể):** **`_snapshot` 3/4 vs contract auto-snap `pause.md §2.6(D)`** — PAUSE-4 **thiếu vết snapshot**. *(lead re-đo: snapshot 3, pause 4.)* `_context` PAUSE **4/4 khớp**. 🔸 Hai thứ KHÔNG tính là drift: `_tiep` 3-vs-4 (write-order benign) · WAL "window 4" / STATUS "counter 31" (by-design ghi tại pause cửa trước). ### Phản-biện / SKIP (engine nêu, lead nhận) 1. **Không quy token** — chỉ báo byte. Đây chính là lỗi làm thư hub trượt vòng r1 (dán nhãn "token tự đo" lên proxy ký-tự). 2. **Không tái dùng Sàn-3** làm probe (đã luận ở trên). 3. **Không nới hook** để chở `_day-*` — path ④ có sẵn. 4. Lợi tuyệt-đối SE **nhỏ hơn hub 3,6×** — đừng bán bằng số hub. ### 🔎 2 phát hiện NGOÀI đề-bài (engine tự nêu — lead xác nhận cả 2) - 🔴 **`docs/HANDOFF.md` segment mới nhất = S153**, không có segment cho S155-S157 ⇒ **nguồn-2 của `tiep_reload` đang nạp brief cũ 3 nhãn phiên**. *(Lead đụng đúng chỗ này ở §2.6 cửa này: đọc HANDOFF thấy "Last updated: 2026-07-26 (S153)".)* - `_tiep-1.md` head-sha ghi **7 ký tự** trong khi 7 marker còn lại ghi đủ 40 ⇒ **form drift trong cùng một loại marker** (nếu probe so sánh chuỗi thay vì gọi git thì sẽ vấp). --- ## ③ CHECKLIST — acceptance ĐO ĐƯỢC (A1-A8, mỗi phép CÓ ĐƯỜNG TRƯỢT) > 🔴 Sàn: phép mà **implement sai vẫn PASS** là phép **0-bit**. Thư này bị chính reviewer của hub đánh trượt **2 vòng** > vì lỗi loại đó ⇒ mỗi dòng dưới phải nêu rõ **trượt khi nào**. | # | Phép đo | TRƯỢT khi | |---|---|---| | **A1** | Chu trình `/pause` sạch → `/day` ⇒ CLEAN; `day-probe --json` in **cả `anchor` lẫn `head-sha` field** và chỉ ra chúng KHÁC nhau | Ai đó cài đếm-thô từ `head-sha` ⇒ DELTA-giả ⇒ FAIL | | **A2** | Cây tạm: inject marker mang sha **dangling** ⇒ verdict `anchor-lost` + tự nâng | Chỉ dùng `cat-file -e` (không `is-ancestor`) ⇒ lọt ⇒ FAIL — **đúng shape S127** | | **A3** | `/pause` sạch rồi gõ `/pause` lần 2 ⇒ **số file marker + `git log -1` bất biến** | Sinh thêm marker / commit / spawn `ctx-curator` ⇒ FAIL | | **A4** | `/tiep` trên nền sạch ⇒ report khai **SKIP nạp-nền + SKIP `ctx-verifier`**; đĩa sinh **đúng 1 `_day-*`, 0 `_tiep-*` mới** | Vẫn nạp nền, hoặc sinh `_tiep` ⇒ FAIL | | **A5** | Inject (a) dirty 1 byte ngoài allowlist · (b) 1 commit thường ⇒ **DELTA cả 2 chiều** | Một trong hai vẫn CLEAN ⇒ FAIL | | **A6** | Đếm `_day-*` = N; **falsifier PHẢI FLAG** ca inject CLEAN-giả (marker CLEAN + có commit thật giữa anchor và ts) | Falsifier im ⇒ FAIL (lớp *vắng-mặt trông giống ổn*) | | **A7** | Sau khi có `_day-*` trên đĩa, `/tiep §0` ⑤(b) ORPHAN-L **im đúng**; rồi **RE-RUN fault-inject** block ⑤(b) 2 chiều | Quên cộng `_day-*` vào r-set ⇒ ORPHAN-L **kêu oan** ⇒ FAIL | | **A8** | `grep` report `/day`: **0 hit** con số gắn nhãn token | Có số token đơn lẻ ⇒ FAIL (lỗi r1 của hub) | **Vai + deliverable** - **Thi công = lead tự tay** (KHÔNG giao implementer): 3 chỗ chạm **canonical**, sai một chỗ là hỏng nghi-thức đang chạy tốt. - **REVIEW = workflow RIÊNG** — Harness-9 mandate (adap = 2 workflow: IMPLEMENT ⟂ REVIEW độc lập) + report hub kèm run-id. - **Dogfood 2 cửa** trước khi báo hub — hub tự khai 0 phiên, SE đừng lặp lại lỗi đó. ### 🔴 3 chỗ chạm CANONICAL — CHỜ ANH GẬT, lead KHÔNG tự làm 1. **`tiep.md §0` ⑤(b)** — sửa r-set ORPHAN-L (đụng **nhà canonical của Sàn-3**). 2. **`CLAUDE.md`** — câu *"nối lại DUY-NHẤT bằng `/tiep`"* nay có ngoại lệ `/day` ⇒ phải sửa, nếu không là **ghost-wire chiều ngược** (chạy thật mà khai chưa — đúng lớp H18 mà `lead-stale-auditor` bắt @S146). 3. **`check-email.md`** — nhịp "4 CỬA PHIÊN" thành **5 cửa** nếu `/day` cũng dò thư.