# spec — adap wave khung-nhịp-năm-vòng (17-07-2026, S135) — **v2** (post-review)

> H21 pipeline: fable-real invest propose (sub-investigator-codebase-0.md, 13 trục) → lead verify V1-V8 8/8 → spec v1 → **fable-real reviewer GO_WITH_FIXES 0C/11M/10n (sub-reviewer-0.md) → lead áp TRỌN 21 fix → spec v2 này** → hmw **Opus 4.8 MAX** (anh chỉ định) implement. Nguồn: 7 broadcast hash-verified 2-tuyến (commit `55ef8f6`): B1 `3daf5ee4` khung-nhịp · B2 `f71c5b65` checklist-5-vòng · B3 `e50a4bd0` reply-adap · B4 `0b581ae7` reply-3-gap · B5 `89e4d818` giấc-ngủ · B6 `6c2eb2b1` non-JSON-args · B7 `dacfcb11` notify.

## ① Tính-năng / đề-bài

Áp khung owner-chốt hub **"đo rải · làm dồn · nợ hiển thị"** (B1: tick đa-điểm-vào + force-fire bù + dòng-nợ 3-vế + 2 detector răng-máy) + checklist 5-vòng/8-phép (B2) + đóng residual do-token & `_owner_ratified` (B3, đích-danh SE) + luật non-JSON-args (B6) + nâng khuôn giấc-ngủ SKILL-only (B5) — rồi adap-report ×5 + email hub + STAGE-2 archive.

**Mục tiêu ĐO ĐƯỢC:** completeness-gate B2 §C từ *2/4 phép sàn + vòng-3 PARTIAL + vòng-1 tự-verify FAIL* → **4/4 phép sàn PASS-able + 5/5 vòng chức-năng (vòng-3 lên CÓ nhờ Item 3-bis)**; phép 1/7 đo SAU restart — nấc trung thực = executed, verified-pending-restart; `grep "draft 2026-07-15"` site sống 2 → 0 (diary lịch-sử loại trừ, CẤM sửa); counter hết cửa câm (S134/S135 vào `/tiep` 0-tick = bằng-chứng sống GAP-1).

## ② Cách implement

### Item 1 — Tick đa-điểm-vào (LANE-A) — floor B1 §3.1
- (a) `.claude/governance/.session-counter.json` `_contract.tick` (dòng 6): mở rộng thành `if (head == last_ticked_head) OR (session == last_ticked_session) -> NO-OP; else counter+1 …` (OR-guard dùng field CÓ SẴN — giải bẫy +2: /pause commit làm HEAD đổi, thiếu session-guard thì pause+tiep = +2/cycle → FAIL phép 7 "+1").
- (b) `tiep.md`: chèn bước **§2.5 TICK** (sau đối-chứng §2; **TICK TRƯỚC, dòng-nợ SAU** — để vế nhịp-kiểm in trạng-thái sau-tick, OVERDUE @9 hiện NGAY cửa vào thay vì đợi cuối phiên): tick theo contract — **CON-TRỎ về session-start §2.1.8, CẤM chép logic** (B1 canonical).
- (c) `pause.md`: bước **3.5 TICK** (TRƯỚC commit bước 4 — tick nằm TRONG commit `wal: pause`) + **mở rộng add-list bước 4: thêm đích-danh `.claude/governance/.session-counter.json`** (thiếu dòng này thì claim "tick nằm trong wal: pause" SAI — file ngoài hook-3-path).
- (d) `session-end.md` (j): thêm **(v) tick-at-close** idempotent, cùng con-trỏ + **§5.1 commit closeout: add đích-danh counter-file khi có delta** (bằng-chứng sống: tick S133 nằm uncommitted qua 2 closeout liên tiếp).
- (e) `session-start.md` §2.1.8: thêm dòng đơn-vị: counter đếm **nhãn-phiên S<nn>** (phiên thường — SE chưa adopt session-logic `9234a7aa`; khi adopt đọc lại = phiên-LOGIC, caveat B1 §7) **+ vế label-convention (PIN THÀNH LUẬT): mỗi conversation mới = nhãn-phiên S<nn> MỚI, kể cả vào bằng `/tiep`** (`tiep.md:130` "session: khác phiên hiện-tại là BÌNH-THƯỜNG" = use-case chuẩn; thực hành S134/S135); CẤM reuse nhãn khi nối — thiếu vế này OR-guard NO-OP nhầm cửa /tiep → phép 7 +0. Cùng lượt reconcile khai-thật `:192` ("đếm phiên-có-làm-HEAD-đổi") với đơn-vị nhãn-phiên (ca phiên-mới-không-commit cùng-HEAD vẫn NO-OP — hiếm, giữ khai).

### Item 2 — Dòng-nợ 3-vế (LANE-B script + LANE-A wire) — floor B1 §3.3
- Script MỚI `scripts/nhip-no-probe.ps1` — PS 5.1, **pure-ASCII** (gotcha #30), NO-API, **0-mutation, `exit 0` LUÔN**:
  - Vế 1 nhịp-kiểm: đọc `.session-counter.json` (counter, last_audit) + `memory-budget.json` `h24_cadence` → `light <a>/<e> deep <b>/<f> [OVERDUE:…|ok]`. **Key `h24_cadence` thiếu → in `CONFIG-THIEU(h24_cadence)` NGAY TRONG dòng-nợ** (không giả-định default, không nuốt vào probe-loi generic — giữ tín-hiệu no-default của H24-2), **VẪN exit 0**.
  - Vế 2 trần-bộ-nhớ: byte `agent-memory/*/MEMORY.md` vs `archive_gate.autoinject_cap_bytes` (đọc từ key, không hardcode) → `<x> over-cap`. **Đo byte bằng `(Get-Item).Length` — CẤM `Get-Content`-đếm** (bẫy E-010/S130 encoding ×2-3). Đo TƯƠI (KHÔNG đọc `measured` snapshot stale).
  - Vế 3 run-chưa-gom: port orphan DUAL-ACCEPT đúng `tiep.md:40-53` (2 dạng: flat `*-synthesis.md` + C8 `harvest/*-synthesis.md`, `-s` non-empty; dạng-3 RETIRED) → `<y> run-chua-gom`.
  - Output **ĐÚNG 1 dòng**: `NHIP-NO: kiem light a/e deep b/f <ok|OVERDUE:light|deep> | tran-bo-nho x over-cap | run-chua-gom y`. MỌI exception → in `probe-loi (khong chan)` + exit 0.
- Wire 4 điểm (LANE-A): `/pause` bước 5 (+ý 5 = dòng-nợ) · `/tiep` cuối §2 (SAU tick §2.5 — n-3) · `session-start.md` §2.1.8(e) (nâng dòng H24 hiện có thành dòng-nợ 3-vế) · `session-end.md` (j)(i) (tương tự). Command chỉ GỌI script. **LUẬT: probe KHÔNG BAO GIỜ chặn điểm dừng** — mọi lời gọi bọc "lỗi → in `probe-loi (khong chan)` → đi tiếp".

### Item 3 — Force-fire bù khi closeout gộp sổ (LANE-A) — floor B1 §3.2
- `session-end.md` (j) thêm **(vi)**: đếm `P = git log --format=%s <closeout-liền-trước>..HEAD | grep -c '^wal: pause'` — `<closeout-liền-trước>` = commit gần nhất match **regex closeout DÙNG CHUNG với Item 4** (1 regex, đừng chép 2 bản); **so SÁNH SỐ, không dùng exit-code**; nếu `P >= 1` HOẶC label đóng dạng `S<a>-S<b>`: coi như `OVERDUE(light)` → in dòng-nợ + **INFORM-BẮT-BUỘC + đề-xuất spawn cặp H24 (lead-view + lead-omission) NGAY closeout này, bất kể counter**.
- ⚑DP-3 (đã chốt default): **GIỮ consent-gate** — force-fire = force-INFORM-bắt-buộc + default-đề-xuất-chạy; anh gật thì chạy trong closeout. Lý do: luật cứng hiện hành `session-end.md:94` + `session-start.md:203` "KHÔNG auto-run — anh consent" (owner-era, có TRƯỚC broadcast) + SE đã hẹn hub nguyên văn "light-run **owner-triggered**". Carve-out HỢP LỆ (reviewer R1 phán: khai tường minh + nợ vẫn hiển thị + quy được về owner) — báo hub SELF-CHECK ô3 = **"PASS-với-carve-out (consent)"**, KHÔNG ghi PASS trần.

### Item 3-bis — Memory-triple artifact-hoá (LANE-A) — B2 vòng-3 cột-5 (M-1)
- `session-end.md` §L.b(c): khi chạy khối (c) memory-maintenance, ghi **3 dòng artifact tuần-tự vào session-log**: `memory-triple: do=<measure-agent-memory.ps1 · exit> -> de-xuat=<memory-archive-gate.ps1 DRY · exit> -> kiem=<mfe-eval.ps1/reviewer · verdict>` — run-record 3-stage (đo → đề-xuất → kiểm) cho vòng-3 lên mức CHỨC-NĂNG; 0 vai mới, 0 script mới.

### Item 4 — Detector `H25-closeout-ritual` (LANE-B) — khung B1 §6.1, đóng GAP-2
- Append `scripts/governance-detectors.ps1` (giữ convention: banner + Write-Flag + advisory + `exit 0` + tránh self-match): **3 commit gần nhất** match `^\[CLAUDE\] Docs: S\d+.*(closeout|session-end)` (loop — khớp phép 3 B2 "ba lần đóng phiên gần nhất" + AC-B(5); regex dùng chung Item 3) → mỗi closeout 1 cửa-sổ **UNION** riêng `(closeout-trước-nó .. nó]` `git log --name-only` (⭐ T4a: delta sổ KHÔNG nằm trọn trong closeout-commit — hook `wal: flush` mang delta agent-memory đi TRƯỚC; đo per-commit sẽ FAIL oan 2/3 trên dữ liệu lành) → check ≥1 delta mỗi sổ nghi-thức: {`docs/STATUS.md`, `docs/HANDOFF.md`, `docs/changelog/sessions/*` file MỚI (**`--diff-filter=A`** — sửa file cũ ≠ có log mới), `.claude/agent-memory/**`} → thiếu sổ nào FLAG `MED` kể tên. **(iv) Slice không có closeout-liền-trước** (closeout đầu tiên) → KHÔNG crash, in skip-lý-do.
- Fault-inject 4 ca (S95 proves-teeth, cây tạm `-RepoRoot`): (i) commit giả subject-closeout chạm 1 file lạ → PHẢI FLAG đủ 4 sổ; (ii) control tái tạo shape `99fc373` → PASS; (iii) boundary closeout-tail thiếu HANDOFF nhưng union-window có → KHÔNG FLAG; (iv) slice-không-có-closeout-trước → skip có lý-do, không crash. Output matrix ghi vào sub-file lane.

### Item 5 — Detector `H25-role-notebook` (LANE-B) — khung B1 §6.2, đóng GAP-3 máy
- Cùng file: roster = `.claude/agents/*.md` trừ README (hiện 14); evidence-đã-chạy = `runs/*/sub-<role>-*.md` khớp prefix-map vai chuẩn **OR** diary đã tồn tại; prefix KHÔNG map được (`invest-A`, `w1-task`, `review-r1`…) → in danh-sách `UNMAPPED`, **KHÔNG FLAG bừa** (S122: đo TÊN ≠ đo NỘI-DUNG). Vai đã-chạy thiếu `agent-memory/<role>/MEMORY.md` **byte>0** → FLAG MED.
- Fault-inject 4 ca: (i) cây tạm xoá 1 diary → FLAG; (ii) control 14/14 → PASS; (iii) boundary prefix lạ → UNMAPPED không FLAG; (iv) **truncate 1 diary về 0-BYTE → PHẢI FLAG** (anti-Goodhart — file tồn-tại-mà-rỗng không được tính là có sổ).

### Item 6 — Residual do-token + `_owner_ratified` (LANE-C) — B3 mục 2c/2d/3
🔴 File `memory-budget.json` = ASCII-VN-không-dấu → mọi chuỗi ghi vào GIỮ ASCII không dấu.
- `:65` `token_estimate`: thay đoạn `real-N when it matters = harness Read-truncation notice per hub 'do token that' method, draft 2026-07-15, adopt-on-broadcast` → `khi can so that: notice cat-ngan cua Read = CAN-TREN bao-toan (heuristic ky-tu/2, dem-thua ~1.4-2x KHONG co-dinh -- KHONG phai real-N/da-do) -> bao DAI [san char/4 -- tran notice], token that nam trong dai; per ban published 2026-07-15-Governance-phuong-phap-dem-token-tien-de-vong4 (content_sha256 e0bb5bbf)`. (**san char/4** — khớp B3(d) "sàn = char4", KHÔNG phải bytes/4; VN-text lệch ~2×.) GIỮ nguyên phần RANGE `[bytes/4 .. bytes/3.0]` + FIT bytes/3.0 (band khác, đã đúng — không đụng).
- `:90` `_owner_override_note`: thay đoạn `MEASURE FRESH via harness Read-truncation notice N (hub 'do token that khong can API key' method, draft 2026-07-15, adopt-on-broadcast)` → `lay DAI TUOI [san char/4 -- tran notice-cat-ngan (can-tren ~1.4-2x khong co-dinh)] per ban published 2026-07-15-Governance-phuong-phap-dem-token-tien-de-vong4 (e0bb5bbf); CAM dan nhan real/da-do cho mot dau dai`. Phần còn lại note GIỮ nguyên (mega-line — Edit old_string lấy đích-danh đoạn thay, đủ unique).
- `:121` `_owner_ratified` thay TRỌN giá trị → `owner-decisions-15-07-2026 Q2 (anh chot 6/15/3 cho SE) + hub H0-LEAD-AUDIT-DECISION-CAPTURE-2026-07-14.md:105 (6/15/3/3, 'doi = anh', 2026-07-14); ratified = anh mark cong reply 2026-07-16-ai_infra-to-se-reply-adap-dot-16-07 (e50a4bd0), ngay 2026-07-17. 6/15/3 = moc khoi-dau CO Y anh chon -- KHONG phai muon so song cua hub: hub-counter DA GO per 85bf89ca, khong con moc so song. Re-tune sau chu-ky-2 CUA SE (deep-audit lan 2, xem .session-counter.json last_audit); chua ai duoc ban cau 'da chung minh hieu qua' (delta hub tu run-2 khong bao gio co -- hub go counter truoc run-2).` (**caveat cuối GIỮ** — S119: giữ kết-luận giữ caveat; :206 trỏ về đây làm nhà canonical.)
- `session-start.md:206`: **append 1 vế cuối** (additive): `✅ Ratified 2026-07-17: anh mark cổng reply e50a4bd0; canonical = memory-budget.json h24_cadence._owner_ratified (B1 — wording sống ở đó, đừng chép lại đây).` — ⚠️ **THỰC-THI BỞI LANE-A** (file-ownership `session-start.md` trọn LANE-A; nội dung thuộc Item 6).
- `scripts/crystallized-backfill.ps1` = **NO-CHANGE** (T7i + reviewer re-run: `git log -S` rỗng toàn lịch-sử; `:117` honest-RANGE neo `58f5afd8` published). Errata blameless gửi hub: residual #1 mis-site, 2 site thật = budget `:65/:90` (đã vá).
- `docs/governance/adap-reports/2026-07-16-Governance-vong-tu-bao-tri-thu-nam-san-su-that-nhan-da-do.md`: **2 append additive** (KHÔNG rewrite): (i) đóng-ask do-token — method published `e0bb5bbf`, ask khép per B3 mục 2a (dòng `:19` "giữ MỞ" = trạng-thái đã LẬT, note đính-chính kèm ngày, GIỮ dòng cũ làm lịch-sử); (ii) flip-note 4c — điều-kiện **ĐÃ HỘI ĐỦ THEO SUY-LUẬN** (S129 commit 23:16 → S130+ app-launch mới [**restart-IMPLIED, không đo trực-tiếp**] + reviewer spawn thật ≥2 lần S133/S134 fable-real + precommit `wf_8bb5abee`; corroborate S135: fable-real reviewer tự-quan-sát persona chứa `:46` — self-report, hedge) ⇒ nấc NẠP = **executed-inferred**; giữ 2 caveat: "được EXERCISE trong verdict" chưa chứng riêng · nấc `verified` vẫn của AI_INFRA /adap-audit.

### Item 7 — Luật non-JSON-args (LANE-C) — B6 3 chốt
- `hmw.js` (comment ngay TRÊN dòng normalize) + `fable-real.md` (block `args.run`): thêm câu LUẬT: `args LUÔN là object JSON thật — dòng normalize NGAY DƯỚI là LƯỚI-CUỐI cho ca tầng-máy tự stringify, KHÔNG phải giấy phép tự stringify (per 6c2eb2b1)` (viết RELATIVE, không hardcode số dòng — chèn dòng làm số trượt, class literal-tự-lão-hoá S121).
- ⚑DP-4 (đã chốt default): **reconcile `fable-real.md:31`** → `4. **Worker thực-thi THEO spec** — spec bơm qua args = **CON-TRỎ** file spec (runs/<id>/spec-*.md, bản lead-đã-verify) + digest ngắn/AC-ids; worker Read **ĐÚNG file con-trỏ** (B6 chốt-2 args-mỏng); CẤM tự lục **spec/nguồn** ngoài con-trỏ (file làm-việc của lane vẫn Read bình thường).` — giữ intent gốc, thoả floor B6. **Dogfood NGAY trong hmw wave này.**
- Honest-residual (ghi adap-report, KHÔNG làm đợt này): memory-pack hiện inject qua args — vẫn object-thật + parse-guard; đánh giá chuyển pointer-based = đề-xuất riêng.
- Sổ SE 0 ca chết-non B6-class (grep RỖNG — T9iv): 3 chốt = phòng-ngừa forward, KHÔNG có nợ hồi tố.

### Item 8 — Nâng khuôn giấc-ngủ SKILL-only (LANE-C phần cmd + LANE-A phần INFORM) — B5 (KHÔNG chạy nén trong wave)
- `sleep-recovery-memory-l2.md` (LANE-C): (i) Phase 3a + luật **cross-file bleed**: "nén NHIỀU tệp cùng lượt → grep TỪNG token trích-dẫn về ĐÚNG verbatim CỦA TỆP ĐÓ"; (ii) Phase 2 + "**TỔNG-HỢP 3-5 ý đặt ĐẦU tệp, viết TRƯỚC chi-tiết** + **grep-ngược** mọi số/mốc trong tổng-hợp về phụ-lục/nguyên-bản"; (iii) optional (n-9): Phase 4 +1 câu "assert additive per-file: mọi verbatim nguồn byte-identical trước/sau (`git diff --stat` verbatim RỖNG)" — đóng B2 vòng-4 cột-5 (chuẩn `291550ff` hai-assert); (iv) bảng Trigger `:52`: cập nhật MÔ TẢ (INFORM 7d giữ + hiển thị byte — xem M-10).
- ⚑DP-5 (đã chốt default + WHERE M-10): **GIỮ trigger INFORM 7-ngày** (quyền owner cục bộ per B1 §3.4 — cấm là cấm hub phát chuẩn) + **byte-display do LANE-A wire tại 2 site sleep-INFORM RUNTIME** (`session-start.md §2.1.2` + `session-end.md §L.b(c)`): khi INFORM fire → in kèm **tổng byte `archive/<period>.md` chưa có `.gist.md`** (match PREFIX kỳ; baseline 17-07: kỳ 2026-07 ≈ 183KB/5 file) → anh nhìn số rồi ĐẶT ngưỡng byte khi muốn chuyển hẳn (KHÔNG bịa số). Probe LANE-B GIỮ 3-vế, KHÔNG chở byte-sleep (output-contract đóng). Sleep-cmd chỉ đổi mô tả — tránh ghost-wire "defined-but-unread" (H18).

### Item 9 — Báo-lại hub + STAGE-2 (LEAD sau merge — không thuộc lane)
Adap-report mới (wave) + cập nhật/append adap-report liên quan + email hub: nấc từng khoản + baseline T6 + errata mis-site + việc-2 đã-hẹn done @S131-S132 (`72f68d1` seed 2 diary H24) + số đo phép 1/3/4 + **SELF-CHECK B1 5-ô tally (ô3 = "PASS-với-carve-out (consent)" · ô4 = "n/a — SE không event-gate, giữ vô-điều-kiện")** + phép 5/6/2 đo in-wave, **phép 8 CHƯA đo (khai — hub cũng chưa dogfood)** + **khai DP-5 giữ ngày-lịch cục-bộ (quyền owner per B1 §3.4)** + 1 dòng disposition B4 (confirm-reply, việc gộp vào Items) / B7 (đã xử trước, STAGE-2 only) + noise-expectation DP-2 (xem bảng DP). STAGE-2: move 7 file inbox root → `inbox/ai_infra/` + `_index` 7 row → processed.

### DP đã chốt (lead-default — ⚑ anh flip được, flip-path 1 chỗ)
| DP | Default đã chọn | Vì sao | Flip |
|---|---|---|---|
| ⚑DP-1 | OR-guard session-label vào `_contract.tick` + **PIN label-convention** (Item 1(e)) | thoả floor "mọi cửa" + phép 7 "+1" (reviewer R3: ĐỨNG với điều kiện label-pin — đã vào Item 1(e)) | bỏ OR-guard, tick chỉ tiep+close |
| ⚑DP-2 | dangling-head candidate-fix **KHÔNG gom wave** | ngoài scope 7 broadcast; hub/anh đang treo. **Hệ-quả chấp nhận (n-4):** tick @/tiep đặt head lên wal:-commit → phiên không-commit-thường sẽ squash nó → ancestor-check FAIL-LOUD **tăng tần suất** (class S127/S133; mỗi lần = 1 báo-anh, có vết, không mất số) — khai noise-expectation trong report | gom = sửa `_contract` thêm 1 nhánh |
| ⚑DP-3 | force-fire qua **consent-gate** (INFORM bắt buộc + đề-xuất) | luật cứng owner-era `:94/:203` + hẹn hub "owner-triggered"; reviewer phán carve-out HỢP LỆ — báo hub "PASS-với-carve-out" | đổi 1 câu (vi) thành auto-run |
| ⚑DP-4 | reconcile `fable-real.md:31` spec-pointer + dogfood wave này | B6 chốt-2 = function-floor BẮT BUỘC; scope cấm vào **spec/nguồn** (n-2) | revert 1 dòng, quay prompt-embed |
| ⚑DP-5 | giữ INFORM 7d + byte-display **wire ở LANE-A 2 site runtime** (M-10); anh đặt ngưỡng sau | đổi số = quyền anh; ngày-lịch cục-bộ hợp lệ B1 §3.4; tránh ghost-wire | anh cho số → đổi 1 điều-kiện INFORM |
| — | light-run-now KHÔNG chạy (moot: OVERDUE tự fire sau wire+restart, consent-gate giữ) | tick S136 → **10** ≥ 3+6 *(reviewer n-2 @S136: bản đầu ước 9 — thiếu đếm tick S135 @pause; OVERDUE:light vẫn fire 10≥9, logic không đổi)* | anh gật → spawn cặp H24 ngay |

## ③ Checklist (vai + deliverable + acceptance ĐO ĐƯỢC)

**Phân-rã hmw:** 3 lane **role-less + `tier:'opus'`** (worker Opus 4.8 MAX per anh; governance `.md/.ps1/.json` không khớp boundary implementer-backend/-frontend) · **0 overlap file giữa lane** · `args.run` BẮT BUỘC (Sàn-1 H22) · mỗi lane GHI-ĐĨA-TRONG-LÚC-LÀM vào `sub-lane-<a|b|c>-<i>.md` + prompt = con-trỏ spec này + lane-id + AC-ids (DP-4 dogfood — KHÔNG nhét trọn spec vào args).

**LANE-A — commands + contract (Items 1 + 2-wire + 3 + 3-bis + Item-6-phần-`:206` + Item-8-phần-INFORM-byte):** sửa `tiep.md` · `pause.md` · `session-end.md` · `session-start.md` (trọn file-ownership) · `.claude/governance/.session-counter.json`.
AC-A: (1) `grep -c -i "tick"` tiep.md/pause.md/session-end.md ≥1 mỗi file (baseline 0/0/0); (2) `grep -c "session == last_ticked_session"` (hoặc chuỗi OR-condition chính-xác đã chọn) trong `.session-counter.json` = 1 — **baseline 0; CẤM dùng chuỗi trần `last_ticked_session` làm bằng chứng (đã có sẵn ở vế update :6 → vacuous)**; (3) 4 điểm gọi `nhip-no-probe.ps1` (grep tên script = 4 file); (4) KHÔNG chép logic tick — mỗi điểm ≤4 dòng + con-trỏ §2.1.8; (5) session-end (vi) so-sánh SỐ `grep -c` (không exit-code); (6) dòng-nợ KHÔNG chặn: mọi lời gọi bọc probe-lỗi-đi-tiếp; (7) `session-start.md:206`-vùng có `Ratified 2026-07-17` + con-trỏ key canonical; (8) `session-end.md` §L.b(c) chứa mẫu 3 dòng `memory-triple:` (Item 3-bis); (9) 2 site INFORM (`session-start §2.1.2` + `session-end §L.b(c)`) có vế byte-chưa-gist (Item 8/M-10); (10) pause.md bước 4 add-list + session-end §5.1 chứa đích-danh `.session-counter.json` (M-7).

**LANE-B — scripts (Items 2-script + 4 + 5):** tạo `scripts/nhip-no-probe.ps1` + append 2 detector vào `scripts/governance-detectors.ps1`.
AC-B: (1) probe chạy 2 lần → output byte-y-hệt (phép 5) + 0-mutation (`git status --porcelain` trước/sau y hệt); (2) `-RepoRoot` không tồn tại → in `probe-loi (khong chan)` + exit 0 (phép 6); (3) số 3 vế khớp đối-chứng đo-tay độc-lập tại thời-điểm chạy (17-07 kỳ vọng: `light 5/6 deep 5/15 ok | 0 over-cap | 1 run-chua-gom` — run 1 = S135 self-open, đúng); (4) fault-inject matrix **9 ca (4 closeout-ritual + 4 role-notebook + 1 probe CONFIG-THIEU)** PASS/FLAG đúng chiều — output ghi vào sub-file lane; (5) repo thật: 0 FLAG-mới ngoài expected (H25-closeout-ritual **3 closeout gần nhất** = PASS union; H25-role-notebook = 14/14 + UNMAPPED list); (6) script `exit 0` + pure-ASCII + 0 self-match.

**LANE-C — residual + doc + sleep-cmd (Items 6 + 7 + 8-phần-cmd, TRỪ `:206` và INFORM-byte đã sang LANE-A):** sửa `memory-budget.json` (:65 :90 :121) + append 2 note adap-report san-su-that + `hmw.js` comment-luật + `fable-real.md` (:31 reconcile + câu luật) + `sleep-recovery-memory-l2.md` (2 chốt + optional assert + bảng Trigger mô tả). **0 file trùng LANE-A/B.**
AC-C: (1) `grep -rn "draft 2026-07-15"` ngoài {runs/, broadcasts/, docs/governance/adap-reports (dòng `:19` GIỮ lịch-sử + note mới), **`.claude/agent-memory/**` (diary lịch-sử — CẤM sửa để làm xanh grep)**} = **0 site sống** (baseline 2 site sống + 1 diary-mention); (2) `grep -c "e0bb5bbf" memory-budget.json` = 2 và `:121`-vùng chứa `e50a4bd0` **và caveat `chua ai duoc ban`** (M-3); (3) *(→ AC-A(7))*; (4) adap-report san-su-that có 2 append (đóng-ask + flip-4c **executed-inferred**, hedge M-8) additive; (5) `hmw.js` + `fable-real.md` mỗi file có câu luật object-thật (viết relative n-1); (6) `fable-real.md:31`-vùng = bản reconcile spec-pointer (scope n-2); (7) sleep cmd chứa `cross-file bleed` + `grep nguoc`/`grep-ngược` (+ optional per-file assert); (8) JSON valid sau sửa (`ConvertFrom-Json` pass) + budget.json giữ ASCII-không-dấu.

**Post-merge (LEAD, không lane):** reviewer pre-commit (vai `reviewer`, worker-tier opus+max) → **commit wave = `git add` ĐÍCH-DANH** {`.claude/commands/*.md` ×6 sửa *(reviewer n-1 @S136: tiep·pause·session-end·session-start [LANE-A, đã vào HEAD qua wal:] + fable-real·sleep-recovery [LANE-C] — bản đầu ghi ×5 thiếu đếm; glob vẫn bắt đủ)* · `scripts/nhip-no-probe.ps1` · `scripts/governance-detectors.ps1` · `.claude/workflows/hmw.js` · `.claude/governance/.session-counter.json` · `.claude/agent-memory/memory-budget.json` · `docs/governance/adap-reports/*` · run-folder} — đa số NGOÀI hook-3-path; **acceptance: sau commit `git status --porcelain` các path này RỖNG** (M-7) → **RESTART Claude Code bắt buộc** (command `.md` no-hot-reload, `pause.md:9`) → phiên kế: đo phép 7 (1 chu-kỳ pause–tiep → counter +1 = 9) + phép 1 cửa-sổ mới + light-OVERDUE fire @9 (consent-gate) → Item 9 báo hub kèm số + STAGE-2.

**Baseline mốc so (T6 đo 17-07, lead verify + reviewer re-đo 4/4 khớp):** counter=8/S133 (tick S133 uncommitted — governance-drift, M-7 bịt) · phép-1 FAIL: +3 tick / 9 nhãn-phiên / 7 `wal: pause` cửa-sổ `(e9124fc..a6cd0a2]` · phép-3 PASS 3/3 union-per-label · phép-4 PASS 14/14 · orphan=1 (S135 self-open) · H1/H2 last-vết `72f68d1` (S133/S134 closeout KHÔNG spawn cặp = vòng-1 tự-verify FAIL sống) · un-gisted 2026-07 ≈183KB/5 file · `last_sleep_at=2026-07-10` · `e0bb5bbf` trong budget.json = 0 (post-wave 2) · diary-mention `investigator-codebase/MEMORY.md:23` (lịch-sử, giữ nguyên).

**CAVEAT:** không chép số hub (n=2); số trên = SE tự đo, cửa-sổ khai tại chỗ. Nấc sau wave: executed + verified-pending-restart cho tick/phép-7; `verified` formal = vòng chấm cross-repo hub.
