- 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 · `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.**
-`session-end.md` (j) thêm **(vi)**: đếm `P = git log --format=%s <closeout-liền-trước>..HEAD | grep -c '^wal: pause'` (**so SÁNH SỐ, không dùng exit-code** — bẫy đã ghi `session-end.md:175`-class); 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` "KHÔNG auto-run — anh consent" + SE đã hẹn hub nguyên văn "light-run **owner-triggered**". Khai carve-out này với hub trong report (khung nói "chạy lượt kiểm" — SE chạy qua cổng consent).
- Append `scripts/governance-detectors.ps1` (giữ convention: banner + Write-Flag + advisory + `exit 0` + tránh self-match): commit gần nhất match `^\[CLAUDE\] Docs: S\d+.*(closeout|session-end)` → cửa-sổ `(closeout-liền-trước .. commit]` → **UNION**`git log --name-only` toàn cửa-sổ (⭐ phát-hiện thiết-kế 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ẽ 2/3 FAIL oan 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, `.claude/agent-memory/**`} → thiếu sổ nào FLAG `MED` kể tên.
- Fault-inject 3 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. Output matrix ghi vào sub-file lane.
🔴 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 bytes/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)`. GIỮ nguyên phần RANGE `[bytes/4 .. bytes/3.0]` + FIT bytes/3.0 (đã đú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.
-`: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).`
-`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` thuộc trọn LANE-A để 2 lane không ghi song song 1 file; nội dung vẫn thuộc Item 6).
-`hmw.js:97` (comment) + `fable-real.md` (block `args.run`): thêm câu LUẬT: `args LUÔN là object JSON thật — normalize :98 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)`.
- ⚑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 file NGOÀI con-trỏ.` — giữ intent gốc (worker không tự đoán nguồn), thoả floor B6. **Dogfood NGAY trong hmw wave này** (lane prompt = role + path spec + lane-id + AC-ids, KHÔNG nhét trọn spec).
- Honest-residual (ghi adap-report, KHÔNG làm đợt này): memory-pack hiện inject qua args (`hmw.js` args-shape) — 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) — B5 (KHÔNG chạy nén trong wave)
-`sleep-recovery-memory-l2.md`: (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" (hub lesson: tổng-hợp = lớp trôi nhanh nhất mà nạp-nóng đầu tiên).
- ⚑DP-5 (đã chốt default): **GIỮ trigger INFORM 7-ngày** (owner-era choice — khung B1 §3.4 cho phép ngày-lịch cục bộ = quyền owner) + probe/INFORM in THÊM **byte verbatim-chưa-gist tích lũy** (đo theo 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ố thay anh).
### Item 9 — Báo-lại hub + STAGE-2 (LEAD sau merge — không thuộc lane)
| ⚑DP-5 | giữ INFORM 7d + in thêm byte tích lũy; anh đặt ngưỡng sau | đổi số/policy = quyền anh; không bịa ngưỡng | anh cho số → đổi 1 điều-kiện INFORM |
| T13iii | light-run-now KHÔNG chạy (moot: OVERDUE tự fire @counter 9 sau wire+restart) | 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** (parallel-safe, không cần worktree) · `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 (DP-4 dogfood).
**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.
-`:6``_contract.tick` — **idempotent same-HEAD có sẵn**: "if head == last_ticked_head -> NO-OP … Else counter+1". ⇒ điểm chèn tick mới KHÔNG cần logic mới, chỉ cần GỌI cùng contract.
-`:7``fail_loud_on_regress` + `:8``overdue` formula `(counter - last_audit.light_at_counter) >= light_every` + `:9` jump_on_class_repeat + `:10`**writer = lead single-writer, "Wired at /session-start"** (duy nhất).
-`:17-21``last_audit`: light_at_counter=3, deep_at_counter=3 (S124 credited both) → next light ~9, next deep ~18.
-`:26-36` history 2 entry FAIL-LOUD ancestor-check (S127, S133) — class "closeout squash làm head lúc tick thành dangling"; candidate-fix treo (chấp nhận dangling-object-exists làm bằng-chứng yếu khi counter không lùi).
- **Bằng-chứng sống GAP-1:** `last_ticked_session=S133` trong khi phiên hiện tại = S135 (S134 + S135 vào bằng `/tiep`, không qua `/session-start`) — 2 cửa "câm". git status đầu phiên cũng thấy `.session-counter.json` modified (tick S135 chưa commit? — sẽ đối chiếu ở T6 phép 1).
**Vị trí bước tick (đo grep 4 command file):**
-`session-start.md:181-206` §2.1.8 = NƠI DUY NHẤT có nghi-thức tick. `:185-190` = pseudo-code **inline** (không phải script .ps1 — lead tự chạy `git rev-parse HEAD` + Edit file). Trích `:188-189`: "nếu head == last_ticked_head → NO-OP (idempotent) / ngược lại → counter += 1 ; last_ticked_session = S<nn> ; …".
-`session-end.md:92-94` bước (j) H24 — CHỈ **ĐỌC** counter + in 1 dòng OVERDUE + INFORM; KHÔNG tick (chỉ update `last_audit` SAU khi vai H24 chạy).
**Bằng-chứng sống bổ sung (git diff + log):**
-`git diff .session-counter.json` = tick S133 (counter 7→8 + history entry FAIL-LOUD lần 2) **CHƯA COMMIT** — commit cuối chạm file = `72f68d1` (07-17 08:38, S131-S132 session-end). File nằm NGOÀI 3 path hook (by design `:4`) ⇒ cần git-add đích-danh lúc closeout, mà closeout S133 (`e53a693`) + S134 (`99fc373`) đều KHÔNG add ⇒ **governance-state uncommitted drift** (surprise — liên đới T3/T4).
- History `:26-36`: 2× FAIL-LOUD ancestor-check (S127, S133) class "closeout SQUASH làm head-lúc-tick thành dangling" — **candidate-fix treo** (chấp nhận dangling-object-exists làm bằng-chứng yếu khi counter không lùi) chờ anh/hub.
### (b) GAP so floor B1 mục 3.1 (`3daf5ee4`)
Floor: "Mọi cửa vào phiên VÀ mọi điểm dừng đều tăng bộ đếm". Hiện trạng: **1/4 điểm có tick** (session-start). /tiep (cửa vào) + /pause (điểm dừng) + session-end (điểm hội tụ) = **3 điểm câm**. Sống: S134+S135 vào bằng /tiep → counter đứng 8/S133.
### (c) Đề xuất cách làm
**Bẫy +1 phải giải trước:** SELF-CHECK B1 + phép 7 checklist đòi "dừng–nối 1 lần → counter **+1**" (không phải +2). Contract hiện chỉ dedup **same-HEAD** — mà /pause commit `wal: pause` làm HEAD đổi ⇒ tick ở CẢ pause lẫn tiep = **+2/cycle → FAIL phép 7**.
**Giải đề xuất (contract mở rộng 1 OR-guard):**`NO-OP nếu (head == last_ticked_head) HOẶC (session == last_ticked_session)` — dùng field `last_ticked_session` CÓ SẴN. Hệ quả:
- tick tại CẢ 4 điểm (session-start có sẵn + tiep + pause + session-end-close) — "không cửa nào câm" đúng nghĩa đen;
- 1 phiên-logic S<nn> = đúng 1 tick bất kể qua mấy cửa (pause trong S135 sau khi session-start đã tick S135 → NO-OP session-guard; /tiep mở S136 → +1) ⇒ phép 7 PASS;
- 2× /session-start cùng HEAD = +1 (HEAD-guard giữ nguyên).
**Điểm chèn cụ thể:** `tiep.md` sau §2 (đối-chứng xong, trước nối chain) + `pause.md` bước 3.5 (trước commit bước 4 — để tick nằm TRONG commit `wal: pause`) + `session-end.md` bước (j) thêm "(iii) tick-at-close". Mỗi chỗ 3-4 dòng TRỎ về contract §2.1.8 (B1 con-trỏ-canonical, KHÔNG chép logic).
**Alternative rẻ hơn (nếu anh không muốn đổi contract):** tick CHỈ tại /tiep + session-end-close (2 điểm), /pause không tick — phép 7 vẫn PASS nhưng "điểm dừng tăng đếm" chỉ đạt gián-tiếp. Decision-point cho anh/lead.
**Lưu ý restart:** command `.md` = NO hot-reload — `pause.md:9` ghi rõ "🔴 restart Claude Code sau khi tạo/sửa command .md". Tiền lệ S124 restart-lesson (project-memory harness4). ⇒ wave này sửa 4 command file ⇒ **restart bắt buộc trước khi đo phép 7**.
**Decision-point phụ:** candidate-fix dangling-head (history :30/:35) — gom vào wave này hay để riêng chờ hub (nó fire MỌI phiên-đầu-sau-closeout-squash, sẽ ồn hơn khi tick dày lên).
### (a) Nguyên liệu sẵn có trên đĩa — CẢ 3 VẾ ĐỀU CÓ SẴN, chưa ai gom thành 1 dòng
- **Vế 1 nhịp-kiểm:** `.session-counter.json` (counter=8, last_audit light/deep@3) + `memory-budget.json:119-125``h24_cadence` (light_every=6 `:122`, deep_every=15 `:123`, jump=3 `:124`). Tính sống: light 5/6 (due @counter 9 — CHƯA overdue), deep 5/15 (@18). Công thức OVERDUE đã chuẩn ở counter-contract `:8`.
- **Vế 2 cờ-trần-bộ-nhớ:** cap = `memory-budget.json:34``archive_gate.autoinject_cap_bytes 25600`; đo = so byte `agent-memory/*/MEMORY.md` vs cap (logic có sẵn trong `scripts/memory-archive-gate.ps1` A1 `:48-50`). ⚠️ KHÔNG tái dụng nguyên con memory-archive-gate làm probe: (i) output multi-line PLAN, không phải 1 dòng; (ii) cờ `-Apply` ghi strikes (`:26` — mutation); default DRY read-only nhưng vẫn ồn. `measured` block `:142-156` là SNAPSHOT S107 (stale by-design) — probe phải đo TƯƠI byte-on-disk.
- **Vế 3 run-chưa-gom:** orphan-detector DUAL-ACCEPT canonical `tiep.md:40-53` (bash: run.md tồn tại ∧ thiếu `*-synthesis.md` phẳng ∧ thiếu `harvest/*-synthesis.md` non-empty). Đếm dòng ORPHAN = số run chưa gom.
### (b) GAP
Chưa có script nào in 3 vế thành 1 dòng; chưa điểm dừng nào in nợ. `/pause` bước 5 báo 4 ý (goal/[!]-đầu/wf/an-toàn) — KHÔNG có vế nợ nào; `/tiep` cũng không; session-start §2.1.8(e) + session-end (j)(i) mới in vế-1 (H24) đơn lẻ ở HAI ĐẦU, không phải mọi điểm dừng.
### (c) Đề xuất
**Script mới `scripts/nhip-no-probe.ps1`** (PS 5.1, pure-ASCII gotcha #30, NO-API, 0-mutation, `exit 0` LUÔN — noi gương `agent-frontmatter-eol-check.ps1` nấc INFORM session-end.md:211):
- O: **đúng 1 dòng**: `NO-LINE: kiem light <a>/<e> deep <b>/<f> <OVERDUE:...|ok> | tran-bo-nho <x> sub over-cap | run-chua-gom <y>`; MỌI exception → in `probe-loi (khong chan)` + exit 0.
- Chỗ in (4 điểm — khớp tick T1): `/pause` bước 5 (thêm ý 5) · `/tiep` cuối §2 · session-start §2.1.8(e) (nâng dòng H24 hiện có thành dòng-nợ 3-vế) · session-end (j)(i) (tương tự). B1: command chỉ GỌI script, không chép logic.
- Phép 5 checklist (chạy-lại-được): script không ghi file nào (không strikes, không state) ⇒ 2 lần chạy output y hệt. Phép 6 (giết probe): lệnh gọi trong command bọc "lỗi → in probe-loi (khong chan), đi tiếp" — fault-inject: gọi với `-RepoRoot` không tồn tại → phải in probe-loi + điểm dừng vẫn hoàn tất.
- LUẬT: dòng-nợ KHÔNG BAO GIỜ chặn /pause / /tiep (floor B1 mục 3.3 nguyên văn).
## T3 — FORCE-FIRE BÙ khi closeout gộp sổ
### (a) Hiện trạng
-`session-end.md` đọc TRỌN (253 dòng): **KHÔNG có bước nào** phát hiện "closeout gộp sổ ≥2 phiên-dừng". Bước (j) `:92-94` chỉ check OVERDUE theo counter — mà counter đang đứng khi vào bằng /tiep (GAP-1) ⇒ gộp sổ càng nhiều, OVERDUE càng KHÔNG kêu = đúng vòng tự-che B4 mô tả.
- Cách đếm phiên-dừng-trong-kỳ ĐO ĐƯỢC: `git log --format=%s <closeout-trước>..HEAD | grep -c '^wal: pause'` (số điểm dừng chủ-động) + đếm nhãn `S<nn>` mới trong session-log/subject kỳ đó. Cả 2 đều $0 chỉ-đọc.
### (b) GAP so floor B1 mục 3.2: floor đòi "closeout gộp ≥2 phiên-dừng → chạy lượt kiểm ngay closeout đó, bất kể counter". SE = 0 wire.
### (c) Đề xuất wire (session-end.md, chèn vào (j) thành mục (v)):
- **Điều kiện:** `P = grep -c '^wal: pause'` trên `<last-closeout>..HEAD` (last-closeout = commit gần nhất match closeout-pattern T4); NẾU `P >= 1` (tức kỳ này chứa ≥1 điểm dừng = closeout đang gộp ≥2 phiên-dừng) HOẶC nhãn đóng dạng `S<a>-S<b>` (b>a) → **force-fire bù**.
- **Hành động:** coi như `OVERDUE(light)` — in dòng-nợ + INFORM anh đề-xuất spawn cặp H24 light (lead-view + lead-omission) NGAY closeout này, bất kể counter. ⚠️ **Điểm lệch khung phải khai:** khung nói "chạy lượt kiểm"; SE có luật cứng "🔴 KHÔNG auto-run — anh consent mới chạy" (`session-end.md:94`, `session-start.md:203`) + việc SE tự hẹn hub = "light-run **owner-triggered**" ⇒ đề xuất giữ consent-gate: force-fire = force-INFORM-bắt-buộc + default-đề-xuất-chạy, anh gật thì chạy trong closeout. **Decision-point cho anh:** consent-gate (SE-specific, khai với hub) vs auto-run đúng chữ khung.
- Chạy trên trạng-thái nghỉ ✓ (closeout = điểm hội tụ, nguyên tắc 2 khung).
- **Detector hiện có trong `scripts/governance-detectors.ps1`** (grep banner + Write-Flag): derived-staleness counts vs STATUS canonical (`:172-237`) · H18-A derived-doc scan-range/stale-total (`:266-308`) · C1-wikilink resolve (`:380-415`) · WAL overwrite-not-append N.1 (`:484-491`) · **H24-1 title-freshness** (`:502+`) · Test-Quoted use⟂mention helper (`:596`) · **H24-3 session-label-lag** (`:664+`, NEW S123) · **H24-2 carry-age INFORM** (`:781+`, đọc `h24_cadence` fail-loud `:819-839`) · HANDOFF:5 mega-line (`:864-889`) · self-match check (`:905-914`). `exit 0` LUÔN, FLAG advisory (`:922-923`). ⇒ **0 detector nào nhìn commit-delta closeout** — GAP-2 đúng là "không detector nào hiện sở hữu" (khớp B4).
- **Closeout-pattern ĐO từ git log** (6 commit gần nhất match): `[CLAUDE] Docs: S<nn>[-S<mm>] {closeout|session-end|closeout-tail|closeout GOP} — …` ⇒ regex đề xuất: `^\[CLAUDE\] Docs: S\d+.*(closeout|session-end)`.
- **"Sổ nghi-thức bắt buộc" theo `session-end.md`:** STATUS.md Recently-Done (§L.b(a) `:54` + Phase 2.1 `:107`) · HANDOFF.md (Phase 2.1 `:107`) · session-log `docs/changelog/sessions/` (Phase 1 `:44`) · agent-memory flush mọi sub đã spawn (§L.b(d) `:57`) · WAL reset (§6.4 `:244-248`) · error-ledger (§L.a `:50` — CONDITIONAL khi có AS-hit) · run `*-synthesis.md` (§L.b(f)).
- **⭐ Phát hiện thiết kế (đo 4 closeout bằng `git show --name-only`):** delta sổ KHÔNG nằm trọn trong chính closeout-commit — hook `wal: flush` đã mang delta agent-memory đi TRƯỚC (vd diary S133 nằm ở `9f404d3` wal-flush 09:58, KHÔNG ở `e53a693`); closeout-tail `9e874ca` thiếu HANDOFF nhưng `72f68d1` cùng label S131-S132 có ⇒ **detector PHẢI đo UNION delta trên CỬA SỔ kỳ**`(closeout-trước .. closeout-này]`**theo session-label**, KHÔNG per-commit — nếu không sẽ 2/3 FAIL oan ngay trên dữ liệu lành.
### (b) GAP: 0 wire. (c) Đề xuất
Detector mới trong `governance-detectors.ps1` (tên: `H25-closeout-ritual` — tránh chữ trần "GAP"/"stale" per `_vocab_guard` memory-budget.json:128): input = commit gần nhất match closeout-regex → xác định label + cửa-sổ `(closeout-liền-trước .. commit]` → union `git log --name-only` cửa-sổ → check ≥1 delta mỗi sổ {STATUS, HANDOFF, session-log-mới, agent-memory/**} → thiếu sổ nào FLAG `MED` kể tên sổ. Advisory exit-0 (nhất quán script). **Fault-inject (S95 proves-teeth):** cây tạm `-RepoRoot` + commit giả subject closeout chỉ chạm 1 file lạ → PHẢI FLAG 4 sổ thiếu; control = tái tạo shape 99fc373 → PASS; boundary = closeout-tail thiếu HANDOFF nhưng union-window có → KHÔNG FLAG (chống dương-giả oan).
- Sổ: `.claude/agent-memory/<role>/MEMORY.md` tồn tại + byte>0 = **14/14** (min office-document 3323B; max cicd 22607B).
- **2 vai H24 (chạy S124):** lead-omission-auditor 3691B + lead-view-auditor 3332B — seed commit `72f68d1` (S131-S132, 07-17 08:38, subject có "seed 2 diary H24"). ⇒ **"harvest hồi tố sổ 2 vai" SE hẹn hub = ĐÃ XONG @S131-S132**, KHÔNG còn là việc wave này (chỉ còn báo-lại hub trong report).
- Vai đã-chạy-thiếu-sổ hiện tại = **0**. GAP-3 data-side ĐÓNG; cái THIẾU là **máy** (detector tự soi từ nay về sau).
- ⚠️ Bẫy mapping đo được: prefix sub-file trong `runs/` KHÔNG canonical — ngoài tên vai chuẩn còn `invest-A/B/C` · `w1/w2/w3-task` · `task` · `impl-runsreadme` · `impl-sleepcmd` · `review-r1/r2/r3` · `investigator-2-spec-draft`… ⇒ detector map-được-thì-map, **UNMAPPABLE → in danh-sách riêng, KHÔNG đoán** (bài S122: đo TÊN ≠ đo NỘI-DUNG, 32% dương-giả).
### Đề xuất
Detector `H25-role-notebook` cùng script: evidence-đã-chạy = (`runs/*/sub-<role>-*.md` khớp prefix-map) **OR** vai có mặt trong spawn-record session-log; mỗi vai đã-chạy PHẢI có `agent-memory/<role>/MEMORY.md` byte>0 → thiếu FLAG MED. Fault-inject: cây tạm xoá `lead-view-auditor/MEMORY.md` → FLAG; control 14/14 → PASS; boundary: sub-file prefix lạ → dòng "UNMAPPED" chứ không FLAG bừa.
## T6 — BASELINE 8-PHÉP (bảng B `f71c5b65`) — chạy phép 1/3/4 NGAY, số THẬT
**Khai đơn-vị + cửa-sổ (bẫy S130):** cửa-sổ = `(e9124fc 07-16T15:19 .. a6cd0a2 07-17T15:40]` (từ closeout S125-S126 tới HEAD lúc đo); "nhãn-phiên" = S-label xuất hiện trong commit-subject/session-log (proxy 2-nguồn); "tick" = increment `counter` trong `.session-counter.json`; đếm bằng `git log --format=%s --since=… | grep -c` (occurrence trên subject-line đơn, không mega-line ⇒ `-c` an toàn ở đây).
| Phép | Kết quả | Số + lệnh |
|---|---|---|
| **1 — tick vs cửa** | **FAIL (kẽ sống, đúng GAP-1)** | Nhãn-phiên trong cửa-sổ: **9** (S127…S135). Điểm dừng `wal: pause`: **7**. Tổng cửa+dừng ≈ 16. Tick cùng kỳ: **+3** (5→8: S127, S131, S133 — đọc history+diff counter). ⇒ ~13 cửa "câm". Riêng bằng-chứng tối-thiểu: S134+S135 vào /tiep, 0 tick. |
| **3 — closeout thiếu nghi-thức** | **PASS 3/3 theo UNION-per-label** (caveat bên dưới) | S134 `99fc373`: STATUS✓ HANDOFF✓ session-log✓ agent-memory✓(4 diary). S133 `e53a693`: STATUS✓ HANDOFF✓ session-log✓ + agent-memory qua `9f404d3` wal-flush cùng kỳ (per-commit-naive thì FAIL oan). S131-S132 `72f68d1`+tail `9e874ca`: đủ 4 sổ (union). ⚠️ Caveat: PASS này là SAU vá E-011/AS-15 @S131; kỳ S127-S130 trước đó chính là ca FAIL (GAP-2 đã báo hub — "dồn H1/H2 S127→S131"). Proxy mtime+commit-log không phân biệt "không chạy" vs "chạy không ghi sổ" (B2 ghi-chú (v)) — cả hai đều lỗi nên vẫn bắt đúng. |
- Grep TRỌN file cho `token|draft|do-token|NO-GO|calibrat|method|provenance|e0bb5bbf`: cụm **"draft 2026-07-15" KHÔNG TỒN TẠI** trong file hiện tại. Đuôi provenance thật `:117` (TRÍCH NGUYÊN VĂN): `# heuristic RANGE (invariant 4): divisors = convention char/4 + VN ~3.0-3.5 byte/tok -- CHUA do tokenizer that tai SE (see dinh-chinh letter 58f5afd8 2026-07-16). tok_low = optimistic (bytes/4), tok_high = worst (bytes/3.0)` + `:25``(4) HEURISTIC RANGE (convention, NOT measured)` + `:227``char/4 is NOT a real token count`.
-`git log -S 'draft 2026-07-15' -- scripts/crystallized-backfill.ps1` = **RỖNG** ⇒ file **CHƯA TỪNG** chứa cụm đó trong toàn lịch sử. Anchor sống của ps1 = `58f5afd8` (đính-chính letter ĐÃ PUBLISHED) — hợp lệ, ngữ-nghĩa honest-RANGE sạch.
- ⇒ **Residual #1 của hub đặt SAI landing-site.** Cụm "draft 2026-07-15" thật sự sống ở 2 chỗ (grep repo-wide, loại history/letters): `memory-budget.json:65` + `memory-budget.json:90` — cả hai do commit `949ec33` (S129 disposition (iv)/(ii)) thêm vào. ⇒ ps1 = **NO-CHANGE**; errata-note blameless gửi hub trong adap-report. (Cùng class S134 hash-stale + S129 dương-giả-erratum: claim thư phải re-đo đĩa.)
### (ii) memory-budget.json — dòng THẬT hiện tại
- **`:65`** (mfe `honest_caveats.token_estimate`) — TRÍCH đoạn mang bệnh: `…real-N when it matters = harness Read-truncation notice per hub 'do token that' method, draft 2026-07-15, adopt-on-broadcast…` → mang CẢ 2 bệnh: anchor NO-GO + đánh-đồng notice = "real-N".
- **`:90`** (harness_floor `_owner_override_note`) — TRÍCH đoạn mang bệnh: `…when a real figure is needed, MEASURE FRESH via harness Read-truncation notice N (hub 'do token that khong can API key' method, draft 2026-07-15, adopt-on-broadcast), do NOT store-and-trust…` → anchor NO-GO + "MEASURE FRESH via notice" ngầm coi notice = phép đo.
- **Note "tương-tự Hub": dòng THẬT = `:121`** (`_owner_ratified` trong `h24_cadence`) — hub nói :121 ĐÚNG, thư SE ghi :123 lệch 2 dòng. TRÍCH: `"_owner_ratified": "owner-decisions-15-07-2026 Q2 -- anh chot 6/15/3, 'tuong tu Hub'. HONEST-CAVEAT…hub explicitly said 'your numbers = your config…'. SE picked the same 6/15/3 as a DELIBERATE STARTING POINT…Re-tune after cycle-2…"`.
### (iii) Sweep ngữ-nghĩa quanh đó (grep `real|measured|token` 2 file + liên quan)
Chỗ đánh-đồng số-cắt-ngắn = real-N/đã-đo: **CHỈ 2 site sống** = budget `:65` + `:90` (như trên). Các site khác sạch: ps1 `:25/:117/:227` honest-RANGE; `mfe-eval.ps1` honest-RANGE không-nhãn (S128 đã sweep); các file mang cụm còn lại = lịch-sử/thư đóng băng (`runs/2026-07-16-S127-…/owner-gated-proposals:44` · `broadcasts/outbox/…disposition…:17` · inbox reply chính nó) — KHÔNG sửa history; riêng `docs/governance/adap-reports/2026-07-16-…-san-su-that-nhan-da-do.md:19` ghi "ask do-token giữ MỞ" = trạng-thái NAY ĐÃ LẬT → cần **append** 1 dòng đính-chính (additive, không rewrite).
### (iv) Dòng thay ĐỀ XUẤT (theo reply, để hmw áp)
-`:65` thay đoạn bệnh → `…khi cần số thật: dùng notice cắt-ngắn của Read làm CẬN-TRÊN bảo-toàn (heuristic ký-tự/2, đếm-thừa ~1.4-2x KHÔNG cố-định — KHÔNG phải real-N/đã-đo) → báo DẢI [sàn bytes/4 — trần tín-hiệu-cắt-ngắn], token thật nằm trong dải; per bản published 2026-07-15-Governance-phuong-phap-dem-token-tien-de-vong4 (content_sha256 e0bb5bbf)…` (giữ phần RANGE [bytes/4 .. bytes/3.0] + FIT bytes/3.0 nguyên vẹn — đã đúng).
-`:90` thay `MEASURE FRESH via harness Read-truncation notice N (hub…draft 2026-07-15, adopt-on-broadcast)` → `lấy DẢI TƯƠI [sàn char/4 — trần notice-cắt-ngắn (cận-trên ~1.4-2x không cố-định)] per bản published …tien-de-vong4 (e0bb5bbf); CẤM dán nhãn real/đã-đo cho một đầu dải`.
-`:121``_owner_ratified` thay trọn → giữ 2 chốt-gốc + ratification + sửa cụm "tuong tu Hub": `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).` (ASCII-safe trong JSON — file này đang toàn ASCII-VN-không-dấu, giữ nhất quán.)
## T8 — SESSION-START.MD:206 (F10 re-sync)
- Vùng `:195-215` đã trích ở T1. **`:206` NGUYÊN VĂN hiện tại** = honest-caveat 6/15/3: `> 🟡 Honest-caveat mang theo khi báo hub: hub nói rõ "số của các em = config của các em; ĐỪNG chép 3 số này". SE chọn cùng 6/15/3 là điểm khởi-đầu anh CỐ Ý chọn, KHÔNG phải chép vô-thức. Chỉnh lại sau chu-kỳ-2 CỦA SE (deep-audit lần 2, xem .session-counter.json last_audit). Hub đã GỠ counter (bookend 07-15, sha 85bf89ca) → ví-dụ 6/15/3 "ở nguồn" = lịch-sử, KHÔNG còn mốc hub để so; delta hub hứa từ run-2 KHÔNG BAO GIỜ có (hub gỡ trước run-2) — chưa ai được bán câu "đã chứng minh hiệu-quả".`
- Grep toàn file `do-token|ratified|owner_ratified|e0bb5bbf|85bf89ca|reply`: **:206 là chỗ DUY NHẤT** nhắc chuyện này (match khác = generic: :76 chờ-anh-chọn, :148 marks, :158/:167 pending-decisions bucket). ⇒ KHÔNG có câu "CHỜ HUB pending" riêng trong session-start.md; trạng-thái treo sống ở HANDOFF carry + adap-report :19 (T7-iii/T13).
- **Re-sync đề xuất (additive 1 vế cuối :206):** `…— chưa ai được bán câu "đã chứng minh hiệu-quả". ✅ Ratified 2026-07-17: anh mark cổng reply e50a4bd0; canonical = memory-budget.json h24_cadence._owner_ratified (B1 — đọc wording sống ở đó, đừng chép lại đây).` — con-trỏ về key canonical, không nhân bản wording.
-`:101` throw msg `…(đã thử JSON.parse nếu args bị stringify.)`
⇒ **Chốt-3 ĐÃ ĐÚNG VAI sẵn**: comment tự khai "harness đôi khi stringify" = lưới-cuối cho ca tầng-máy, khớp nguyên văn B6 mục 4.3. (Vị trí cũ :38 S110 → nay :97, file đã lớn thêm.)
### (ii) Args hiện mang gì (tiền lệ S134 đo `runs/2026-07-17-S134-pe-luyke-tam-tinh/run.md`)
- Spec bơm qua **`args.taskList[].prompt`** (string DÀY nhét trong JSON args) — run.md `## taskList snapshot` giữ bản mirror trên đĩa; spec-v2 file cũng nằm sẵn `runs/<id>/spec-*.md` (lead ghi @H21①3). S134 hmw INV-2 `wf_58302bd5` + INV-3 `wf_97d6a582` chạy **0-garble 2/2 + 1/1** với prompt-embed ⇒ đường hiện tại CHẠY ĐƯỢC (n=3 lane gần nhất), nhưng args phình theo spec = đúng vector B6 mục 4.2 cảnh báo.
-`hmw.js:14-19` shape args {taskList, run, checkpointApproved…}; memory-pack cũng inject qua args (memory-budget.json:103 "hmw.js:124 args inject").
### (iii) Đánh giá 3 chốt
| Chốt B6 | Hiện trạng SE | Verdict |
|---|---|---|
| 1. args = object-thật | Lead practice truyền object (Workflow tool); **CHƯA có câu LUẬT tường minh "CẤM tự stringify"** trong fable-real.md/hmw.js — chỉ có comment mô tả | GAP nhỏ: thêm 1 dòng luật (điểm chèn: `hmw.js:97` comment + `fable-real.md` block args.run) |
| 2. args-MỎNG (dày → FILE) | **CONFLICT THẬT với H21:**`fable-real.md:31` nguyên văn: `4. **Worker thực-thi THEO spec** — spec bơm **QUA ARGS/prompt** (worker KHÔNG tự Read file).` — trong khi B6 4.2: "nội-dung dày để trong FILE; args chỉ mang đường-dẫn + vài cờ — worker tự Read tệp đó" | Use⟂mention: (a) engine-đắt lệnh-A/B = **Agent-tool prompt string** — KHÔNG đi qua tầng parse JSON-args của Workflow ⇒ B6-class không áp, prompt-embed GIỮ; (b) hmw fan-out = Workflow args JSON ⇒ B6 áp. **Reconcile đề xuất:** sửa `fable-real.md:31` → "spec bơm qua args = **CON-TRỎ**`runs/<id>/spec-*.md` (bản lead-đã-verify) + digest ngắn/AC-ids; worker Read **ĐÚNG file con-trỏ** (được phép per B6 chốt-2); CẤM tự lục file NGOÀI con-trỏ" — giữ nguyên intent gốc (worker không tự đoán nguồn), bỏ đúng phần xung đột. **Decision-point anh/lead** (đổi luật H21). |
| 3. giữ normalize = lưới-cuối | `:98` giữ nguyên, đúng vai | KHỚP — 0 việc |
### (iv) Sổ SE — ca chết-non parse
`grep -rn "JSON Parse error|Unexpected identifier" docs/gotchas.md docs/changelog/sessions/ .claude/agent-memory/` = **RỖNG** ⇒ SE **CHƯA TỪNG ghi sổ** ca chết-non B6-class. Phân loại 3 ca cũ: S65/S73 = args-đến-dạng-STRING từ harness (guard `:98` cứu — KHÔNG chết-non) · S108 + #53×20 = return-garble (class KHÁC hẳn — sau khi agent đã chạy). ⇒ 3 chốt = phòng-ngừa forward + 1 luật thiếu + 1 reconcile; KHÔNG có nợ hồi tố.
## T10 — VÒNG 4 GIẤC-NGỦ (broadcast `89e4d818`)
### Khuôn SE hiện tại (`.claude/commands/sleep-recovery-memory-l2.md`, 125 dòng)
Map 1-1 với khuôn 4-vai hub B5 mục 2:
| Vai hub | SE (đã có TRƯỚC broadcast) | Cite |
|---|---|---|
| Máy đề-xuất (propose-only) | `harvest-curator` PROPOSE-ONLY, charter cấm-ghi | `:63-70` Phase 1 |
- 10/14 role có `archive/`; **29 verbatim + 13 gist**, tổng archive **946,133B (~924KB)**; L1 tổng 14 role ≈ 203KB. Gist phủ kỳ 2026-05 + 2026-06; **2026-07 verbatim CHƯA nén (còn tươi — đúng nguyên tắc tuổi)**. investigator-api archive rỗng (133B).
-`distill-gen` marker sống trong gist thật (cicd/impl-be/fe-designer/harvest…: gen-1; inv-cb 2026-06 = gen-2 tiền lệ guard).
- Mốc nén gần nhất: `last_sleep_at = "2026-07-10"` (`memory-budget.json:4`) — hôm nay 17-07 = **đúng 7 ngày → INFORM-7d đã fire** (S132 closeout subject có "sleep-INFORM-7d").
- (a) Tầng thoát: CÓ, không phình một chiều (curate L1→L2 nhiều đợt S70/S80/S125 + sleep ≥2 đợt). (b) Cổng tất-định: CÓ nhưng **mức thủ-tục Grep-do-lead**, chưa script-hoá (hub = script grep 58-token + byte-scan). (c) Vai độc-lập chấm: CÓ (reviewer).
### GAP so B5 (3 nâng-khuôn + 1 lệch-nguyên-tắc)
1.**Cross-file bleed** (bài hub trả giá 1 token thật): SE chưa có luật "khi 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 ĐÓ". Chèn Phase 3a.
2.**Tổng-hợp đầu tệp + grep-ngược:** SE `:77` reflection 3-5 entry nhưng KHÔNG buộc đặt ĐẦU tệp (hub: tổng-hợp = lớp nạp-nóng, viết TRƯỚC chi-tiết — owner-3-chốt) + KHÔNG có bước grep-ngược số/mốc trong tổng-hợp về phụ-lục/nguyên-bản (hub lesson 3: tổng-hợp = lớp trôi nhanh nhất). Chèn Phase 2 + 3a.
4. ⭐ **Trigger 7-ngày = ngày-lịch — LỆCH khung mới** (B1 mục 3.4 cadence ngày-lịch KHÔNG vào chuẩn + row-4 bảng: "NÉN theo ngưỡng tích lũy, KHÔNG theo phiên"). Đề xuất: đổi INFORM-trigger `last_sleep_at ≥ 7d` → **ngưỡng tích lũy byte verbatim-chưa-gist** (đo được: tổng byte `<period>.md` không có `.gist.md` tương ứng). Số ngưỡng = **owner đặt** (KHÔNG bịa); baseline đo hôm nay in kèm để anh chọn.
**Timing wave:** chỉ NÂNG SKILL (sửa command .md + trigger) — KHÔNG chạy nén trong wave (2026-07 còn tươi; chạy khi chạm ngưỡng anh đặt).
| 1. tooling+harvest | H1 `tooling-auditor` + H2 `harvest-curator`: MỞ `session-start.md:109-110,:123-124` (diff vs last) · ĐÓNG `session-end.md:100` (g) + `:57,:59` (d)(f) | runtime (nhiều lượt thật; gần nhất DỒN S127→S131 @`72f68d1`) | **FAIL hiện hành:**`git log --since 08:39 -- agent-memory/{tooling-auditor,harvest-curator}` = **0 vết** ⇒ 2 closeout gần nhất (S133 `e53a693` + S134 `99fc373`) KHÔNG spawn cặp — class E-011 "chạy tắt khi dồn/feature-session" TÁI DIỄN ngay sau vá. (d)-harvest lead tự làm ✓ nhưng (f)(g) monitor-gate skip. ⇒ đúng chỗ force-fire T3 + detector T4 cắn. |
| 2. soi-lead (view+omission) | 2 vai H24 + counter + `h24_cadence` 6/15/3 (`memory-budget.json:122-124`) — reply B4 câu-2: "thưa-số hợp lệ, chỉ cần vá GAP-1" | runtime (first-run S124 owner-triggered, 0-garble; 9+4 flag + 1 escalate) | Tính: counter=8, last light@3 → 5/6 **chưa OVERDUE; fire @counter 9** (deep 5/15 @18). Sau wire T1 + restart: phiên kế /tiep tick →9 ⇒ light OVERDUE fire NGAY ⇒ đề-xuất-2 S131 (light-run-now) gần-moot. |
| 3. bộ-ba đo→đề-xuất→kiểm trí nhớ | Mảnh CÓ: đo = `measure-agent-memory.ps1` + bảng-số `crystallized-backfill.ps1` @(c) · đề-xuất = `memory-archive-gate.ps1` DRY-PLAN + `memory-selfimprove-audit.ps1` (eval) · kiểm = `mfe-eval.ps1` coverage + reviewer/H2 gate · lead single-writer D9 ✓ | **PARTIAL — GAP THẬT, không gượng-map:** 3 mảnh chạy RỜI trong §L.b(c), KHÔNG có run-record 3-stage tuần-tự (cột-5 "mtime tăng dần" KHÔNG chạy được as-is); vai kiểm độc-lập chỉ có ở sleep (reviewer) — daily flush dựa H2 5-trục vốn đang bị skip (vòng-1) | Đề xuất rẻ: gói 3 script thành block "memory-triple đo→đề-xuất→kiểm" 3 dòng ghi session-log mỗi closeout chạy (c) — artifact-hoá tuần-tự, 0 vai mới |
| 4. giấc-ngủ distill | T10 — khuôn 4-vai ĐỦ + marker + additive | executed-file + runtime (13 gist 2 kỳ; last 2026-07-10) | Mốc nén đọc được (`budget.json:4`) + verbatim nguyên vẹn per-file (additive by-construction; hash-assert per-file = nâng-cấp đề xuất T10) |
| 5. sàn-sự-thật "đã-đo" | adap-report `…san-su-that-nhan-da-do.md` | executed (LUẬT + 2 site budget.json + câu cửa-duyệt) | **verified-pending DUY NHẤT = 4c**`reviewer.md:46` (`:17,:60,:80`: cần restart + 1 spawn-test) — **ĐO WAVE NÀY: điều kiện ĐÃ XẢY RA** — S129 commit 23:16 → S130+ = app-launch mới (restart implied) + reviewer spawned ≥2 lần S133/S134 (fable-real reviewer + precommit `wf_8bb5abee` PASS) ⇒ persona nạp lại chắc chắn. Caveat trung thực: câu `:46` được NẠP, việc nó được EXERCISE trong verdict chưa chứng riêng; nấc `verified` vẫn của AI_INFRA /adap-audit. Wave: append note flip vào adap-report. |
## T12 — COMPLETENESS-GATE C
- 5 vòng mức chức-năng: **4 CÓ + 1 PARTIAL** (vòng-3; vòng-1 CÓ-chức-năng nhưng kỷ-luật đứt khi dồn — tự-verify FAIL). Phép sàn 1-4: **2/4 PASS** (phép 3 union ✓, phép 4 ✓; phép 1 FAIL sống; phép 2 chưa-wire).
- **Kết luận: CHƯA ĐẠT hiện tại — "đạt-sau-wave" dự kiến 5/5 vòng + 4/4 phép sàn**, trong đó: phép 2 PASS ngay khi probe wire; phép 1 PASS-able sau restart + 1 chu-kỳ dừng–nối đo thật (KHÔNG khai trước khi đo); vòng-3 lên CÓ khi block memory-triple artifact-hoá; vòng-1 tự-verify về PASS nhờ force-fire T3 + detector T4 (cơ-chế thay trí-nhớ). n/a hợp lệ: KHÔNG có — SE đã adopt cadence + soi-lead nên gate ÁP ĐỦ (B2 §C).
| "(iii) seal-verify" | B3 mục 1 cặp-hai: tự-khớp (defer theo hub) — ĐÓNG, 0 việc mới |
| "phản-hồi closure-cadence/3-gap" | B4 trọn thư: CONFIRM 3 gap + khung SE vào chuẩn — ĐÓNG (việc còn lại = thực-thi wave) |
| "chữ-ký bản owner-sign 07-14" | B3 mục 4: git-anchor `e597497`, KHÔNG re-stamp — ĐÓNG |
| "carry-age — bằng-chứng S130 đủ đóng?" | KHÔNG thuộc 2 reply — để anh chốt riêng (ngoài wave) |
**(ii) 4 việc SE hẹn hub — NGUYÊN VĂN `broadcasts/outbox/ai_infra/2026-07-17-se-to-ai_infra-h24-h22-van-hanh-3-gap.md:40-42`:** `1. Wire tick vào /tiep (+ cân nhắc tick-at-close idempotent) — vá trong repo SE, sẽ báo kết quả đo sau.` · `2. Spawn dồn H1+H2 re-report phủ S127→S131 + harvest hồi tố diary 2 vai H24 từ run S124 (VERIFY→APPEND) + ghi error-ledger cho 3 closeout chạy tắt.` · `3. H24 light-run owner-triggered ngay thay vì chờ counter 9.` (B4:24 đọc gộp thành 4 việc — tách harvest khỏi 2.)
- Việc 1 → **VÀO SPEC wave** (T1). Việc 2 → **ĐÃ XONG @S131-S132**`72f68d1` (dồn H1/H2 GAPS→CLOSED + seed 2 diary 3332B/3691B + E-011/AS-15) — wave chỉ còn BÁO-LẠI hub kèm số. Việc 3 → riêng, chờ anh (phân tích moot ở T11 vòng-2).
**(iii) 2 đề-xuất S131 "CHỜ GẬT" — đã đủ tính là gật chưa?** HANDOFF:15 ghi CHỜ GẬT của ANH (không phải hub; outbox:38 "đã trình owner, chờ gật từng mục"). Phân tích để anh/lead chốt: đề-xuất-1 (wire tick) nay = khoản floor 3.1 của bản CHUẨN hub + anh gõ /adap-apply wave này ⇒ **gật-implied qua lệnh áp chuẩn** (defensible); đề-xuất-2 (light-run NGAY) = one-shot action KHÔNG nằm trong broadcast nào ⇒ /adap-apply KHÔNG tự cover — cần anh gật riêng HOẶC để OVERDUE @counter-9 tự kích phiên kế (gần-moot sau wire). **Không tự quyết — flag 2 dòng này trong spec cho anh.**
---
# SPEC PROPOSE 3-MỤC (để lead verify + ghi `spec-*.md`, fable-real reviewer soi, hmw Opus 4.8 MAX implement)
## ② Cách làm per-item (file đích + thay đổi cụ thể)
1.**Tick đa-điểm-vào** — (a) `.claude/governance/.session-counter.json``_contract.tick` (:6): thêm OR-guard `if head==last_ticked_head OR session==last_ticked_session -> NO-OP`; (b) `tiep.md` chèn bước mới cuối §2 "TICK counter (contract §2.1.8 session-start — con-trỏ, không chép logic)"; (c) `pause.md` bước 3.5 (TRƯỚC commit bước 4 để tick nằm trong `wal: pause`); (d) `session-end.md` (j) thêm "(v) tick-at-close"; (e) `session-start.md` §2.1.8 thêm 1 dòng đơn-vị: "counter đếm nhãn-phiên S<nn> (phiên thường — SE chưa adopt session-logic `9234a7aa`; nếu adopt, đọc lại = phiên-LOGIC)". **DP-1 (anh):** OR-guard session-label (khuyên — 4 điểm tick, phép 7 vẫn +1) vs tick-chỉ-tiep+close (không đổi contract). **DP-2:** candidate-fix dangling-head (counter history :30/:35) gom wave này? (fire mỗi phiên-đầu-sau-squash).
2.**Dòng-nợ** — script MỚI `scripts/nhip-no-probe.ps1` (PS5.1 ASCII #30, NO-API, 0-mutation, exit-0-LUÔN): đọc counter+cadence → `light a/e deep b/f OVERDUE?`; scan `agent-memory/*/MEMORY.md` vs cap 25600 → `x over-cap`; port orphan DUAL-ACCEPT (2 dạng, port đúng `tiep.md:40-53`) → `y run-chua-gom`; in ĐÚNG 1 dòng; exception → `probe-loi (khong chan)`. Gọi tại 4 điểm: `/pause` bước 5 (+ý 5) · `/tiep` cuối §2 · session-start §2.1.8(e) · session-end (j)(i) — nâng dòng H24 hiện có thành dòng-nợ 3-vế.
3.**Force-fire bù** — `session-end.md` (j) "(vi)": `P=git log --format=%s <closeout-trước>..HEAD | grep -c '^wal: pause'` (LUÔN so-sánh SỐ, né bẫy exit-code :175); `P>=1` HOẶC label `S<a>-S<b>` → coi như OVERDUE(light): in dòng-nợ + **INFORM-bắt-buộc + đề-xuất spawn cặp H24 ngay closeout**. **DP-3 (anh):** consent-gate (khớp luật `:94` + hẹn "owner-triggered", khai carve-out với hub) vs auto-run đúng chữ khung.
4.**Detector `H25-closeout-ritual`** — append `scripts/governance-detectors.ps1`: commit gần nhất match `^\[CLAUDE\] Docs: S\d+.*(closeout|session-end)` → cửa-sổ `(closeout-liền-trước..commit]` → **union**`git log --name-only` → thiếu 1 trong {`docs/STATUS.md`, `docs/HANDOFF.md`, `docs/changelog/sessions/*` mới, `.claude/agent-memory/**`} → FLAG MED kể tên sổ. Fault-inject 3 ca (T4c): giả-closeout-1-file → FLAG · shape-99fc373 → PASS · tail-thiếu-HANDOFF-nhưng-union-có → KHÔNG FLAG.
5.**Detector `H25-role-notebook`** — cùng file: roster từ `.claude/agents/*.md` (trừ README); evidence-đã-chạy = `runs/*/sub-<role>-*.md` (prefix-map, UNMAPPED → in danh-sách không FLAG) OR diary đã tồn tại; vai đã-chạy thiếu `agent-memory/<role>/MEMORY.md` (byte>0) → FLAG MED. Fault-inject: cây tạm xoá 1 diary → FLAG; 14/14 → PASS.
6.**Residual do-token + ratified** — dòng thay GHI SẴN tại T7(iv)/T8: `memory-budget.json:65` + `:90` (re-anchor `e0bb5bbf` + ngữ-nghĩa DẢI cận-trên ~1.4–2×) + `:121``_owner_ratified` bản mới (2 chốt-gốc + ratified cổng reply + bỏ "tuong tu Hub") + `session-start.md:206` vế additive trỏ key canonical. `crystallized-backfill.ps1` = **NO-CHANGE** (T7i: chưa từng chứa cụm — errata-note blameless cho hub). `docs/governance/adap-reports/2026-07-16-…-san-su-that…md` — 2 append additive: đóng-ask do-token (per `e0bb5bbf` published) + flip-note 4c (restart+spawn-test đã xảy S133/S134, nấc verified vẫn của hub).
**CAVEAT chung:** KHÔNG chép số hub (n=2, ví-dụ 6-mã→4-tick); mọi số trên = SE tự đo, đơn-vị + cửa-sổ khai tại chỗ. "Đắt/rẻ" tương đối. 6 decision-point (DP-1..DP-5 + T13iii gật-implied) = anh/lead chốt, spec không tự quyết.
STATUS: COMPLETE
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.