Files
solution-erp/.claude/workflows/runs/2026-07-17-S135-adap-khung-nhip-nam-vong/spec-adap-khung-nhip-17-07-2026.md
2026-07-17 16:49:24 +07:00

23 KiB
Raw Blame History

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 FAIL4/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 (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 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_cadencelight <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-broadcastkhi 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:314. **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 @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ỳ pausetiep → 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.