23 KiB
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): B13daf5ee4khung-nhịp · B2f71c5b65checklist-5-vòng · B3e50a4bd0reply-adap · B40b581ae7reply-3-gap · B589e4d818giấc-ngủ · B66c2eb2b1non-JSON-args · B7dacfcb11notify.
① 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ànhif (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 commitwal: 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 (phiên thường — SE chưa adopt session-logic9234a7aa; 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 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 0LUÔN:- Vế 1 nhịp-kiểm: đọc
.session-counter.json(counter, last_audit) +memory-budget.jsonh24_cadence→light <a>/<e> deep <b>/<f> [OVERDUE:…|ok]. Keyh24_cadencethiếu → inCONFIG-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.mdvsarchive_gate.autoinject_cap_bytes(đọc từ key, không hardcode) →<x> over-cap. Đo byte bằng(Get-Item).Length— CẤMGet-Content-đếm (bẫy E-010/S130 encoding ×2-3). Đo TƯƠI (KHÔNG đọcmeasuredsnapshot stale). - Vế 3 run-chưa-gom: port orphan DUAL-ACCEPT đúng
tiep.md:40-53(2 dạng: flat*-synthesis.md+ C8harvest/*-synthesis.md,-snon-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 → inprobe-loi (khong chan)+ exit 0.
- Vế 1 nhịp-kiểm: đọc
- Wire 4 điểm (LANE-A):
/pausebước 5 (+ý 5 = dòng-nợ) ·/tiepcuố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 → inprobe-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): đếmP = 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ếuP >= 1HOẶC label đóng dạngS<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 — hookwal: flushmang 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 FLAGMEDkể 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 shape99fc373→ 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/*.mdtrừ README (hiện 14); evidence-đã-chạy =runs/*/sub-<role>-*.mdkhớ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áchUNMAPPED, KHÔNG FLAG bừa (S122: đo TÊN ≠ đo NỘI-DUNG). Vai đã-chạy thiếuagent-memory/<role>/MEMORY.mdbyte>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.
:65token_estimate: thay đoạnreal-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ạnMEASURE 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_ratifiedthay 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-ownershipsession-start.mdtrọn LANE-A; nội dung thuộc Item 6).scripts/crystallized-backfill.ps1= NO-CHANGE (T7i + reviewer re-run:git log -Srỗng toàn lịch-sử;:117honest-RANGE neo58f5afd8published). 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 publishede0bb5bbf, 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 + precommitwf_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ấcverifiedvẫ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(blockargs.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 --statverbatim RỖNG)" — đóng B2 vòng-4 cột-5 (chuẩn291550ffhai-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 bytearchive/<period>.mdchư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 @counter 9 sau wire+restart, consent-gate giữ) | tick S136 → 9 ≥ 3+6 | 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 ×5 sửa · 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.