- (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, trước nối chain §3): 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`), cùng con-trỏ.
- (d) `session-end.md` (j): thêm **(v) tick-at-close** idempotent, cùng con-trỏ.
- (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`; khi nào adopt thì đọc lại = phiên-LOGIC, caveat B1 §7).
- (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).
- 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.**
- 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".
-`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).
-`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.
- 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.
- 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.
- 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** (bài S122: đo TÊN ≠ đo NỘI-DUNG). Vai đã-chạy thiếu `agent-memory/<role>/MEMORY.md` byte>0 → FLAG MED.
- Fault-inject: cây tạm xoá 1 diary → FLAG; control 14/14 → PASS; boundary prefix lạ → UNMAPPED không FLAG.
- 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ổ).
🔴 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).
-`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); (ii) flip-note 4c — điều-kiện restart + spawn-test ĐÃ XẢY RA (S129 commit 23:16 → app-launch mới + reviewer spawned ≥2 lần S133/S134 fable-real + precommit `wf_8bb5abee`) ⇒ persona `reviewer.md:46` chắc chắn được NẠP; caveat trung thực: "được EXERCISE trong verdict" chưa chứng riêng; nấc `verified` vẫn của AI_INFRA /adap-audit.
-`: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).
-`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.
-`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) — 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 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)
| ⚑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 |
| ⚑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** (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).
**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).
**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.
| vii | sleep cmd điểm chèn Phase 2/3a | Read trọn 125 dòng | Phase 2 :72-82 (reflection 3-5 KHÔNG buộc đặt đầu tệp — gap thật); Phase 3a :88-91 (5 token-class, KHÔNG có cross-file bleed — gap thật). 2 chốt mới chèn ĐÚNG chỗ | ✅ KHỚP |
🔴 **PHÁT HIỆN MỚI R2 (spec + invest ĐỀU SÓT):**`grep -rn "draft 2026-07-15"` repo-wide ra **8 file**, trong đó **`.claude/agent-memory/investigator-codebase/MEMORY.md:23`** KHÔNG nằm trong exclusion-set AC-C(1) {runs/, broadcasts/, adap-reports} và cũng KHÔNG bị wave sửa (diary lịch-sử S129). ⇒ **AC-C(1) post-wave = 1 ≠ 0 → FAIL trên dữ liệu LÀNH**, hoặc tệ hơn: dụ hmw "sửa diary cho grep xanh" = rewrite-history + Goodhart rời-tập-đo. Root-cause đẹp: investigator sweep T7(iii) quét mọi nơi TRỪ **sổ của chính mình** — self-coverage blind-spot (đúng class `feedback_meta_count`). → **M-2**.
**Kết luận R2:** 8/8 spot-check KHỚP — evidence nền của invest + lead-verify V1-V8 vững; các issue dưới đây là lỗi HÌNH-THÀNH-SPEC (invest→spec drift + AC-literal), không phải lỗi số-liệu.
- 3.2 force-fire bù ✅ Item 3 — **DP-3 consent-gate: phán = CARVE-OUT HỢP LỆ, KHÔNG phải hạ-floor-lén**, vì hội đủ 3 chống-lưng: (a) KHAI tường minh với hub trong report (spec Item 3 + Item 9 ghi sẵn); (b) luật cứng owner-era có TRƯỚC broadcast (`session-end.md:94` + `session-start.md:203` "KHÔNG auto-run — anh consent") + SE đã hẹn hub nguyên văn "light-run **owner-triggered**" (outbox :40-42) — hub reply B4 xếp việc đó vào "đúng thẩm quyền"; (c) linh hồn khung = "**nợ hiển thị**" — consent-gate + force-INFORM-bắt-buộc + dòng-nợ giữ skip LUÔN VISIBLE + quy được về owner, khác hẳn class "im lặng trông y hệt sạch" mà khung đánh. Điều kiện đi kèm: SELF-CHECK ô3 khi báo hub PHẢI ghi "PASS-với-carve-out (consent)", KHÔNG ghi PASS trần (→ n-6).
- 3.3 dòng-nợ 3-vế ✅ Item 2 (đúng 3 vế floor; form 4-field hub = ví dụ, B2 phép-2 nói rõ "dự án tự chọn form, miễn đủ ba vế" — thêm/bớt field là quyền SE).
- 3.4 cadence ngày-lịch ✅ DP-5 — **phán: GIỮ 7d KHÔNG vi phạm §3.4**. Nguyên văn §3.4: "Dự án nào muốn dùng ngày-lịch cục bộ là quyền owner của dự án đó, nhưng hub không phát nó thành chuẩn" — cấm là cấm HUB phát chuẩn, không cấm SE giữ cục bộ. SE giữ + khai + in thêm byte để anh đặt ngưỡng sau (không bịa số) = đúng cả §3.4 lẫn B1 §5 "để phép đo trả lời". Thiếu mỗi: Item 9 chưa liệt kê khoản khai-cục-bộ này trong report (→ n-6).
- §4 event-gate: SE KHÔNG event-gate vòng-1 (giữ vô-điều-kiện) ⇒ 2-điều-kiện = **n/a-by-not-gating** — spec KHÔNG khai dòng n/a này ở đâu (→ n-6, SELF-CHECK ô4).
- 🔴 **Vòng 3 (bộ-ba đo→đề-xuất→kiểm) = LỖ TO NHẤT CỦA SPEC.** T11 chấm "PARTIAL — GAP THẬT" (3 mảnh chạy RỜI, không run-record 3-stage, cột-5 mtime-tăng-dần không chạy được); T12 ghi rõ đường lên CÓ = "block memory-triple artifact-hoá"; invest-propose ②... để nó RỚT khi kết tinh spec v1 — **không Item nào giao việc này**, trong khi mục tiêu ①:9 vẫn tuyên "**5/5 vòng chức-năng**". Như viết: mục tiêu KHÔNG THỂ ĐẠT với item-list hiện có, và nếu cứ báo hub 5/5 = overclaim outward. → **M-1** (fix rẻ: 1 câu vào session-end §L.b(c) — LANE-A; hoặc hạ goal thành 4/5 + khai PARTIAL).
- 8 phép: 1/7 post-restart khai đúng ✓ · 2/5/6 = AC-B ✓ · 3/4 detector + số thật ✓ · **phép 8**: hub tự khai chưa dogfood; SE cũng chưa đo — report phải khai (→ n-6).
- Gate C: "ĐẠT = 5 vòng chức-năng + phép 1-4" — phụ thuộc M-1 + phép-1 đo sau restart (spec đã hedge "PASS-able" ✓ đúng nấc).
**B3 `e50a4bd0` — soi TỪNG CHỮ dòng thay (mục 2c/2d/3):**
- :90 replacement ✅ đúng ngữ-nghĩa reply: DẢI 2 đầu + "san char/4" + cận-trên ~1.4-2x không cố-định + CẤM nhãn real/đã-đo + anchor published e0bb5bbf.
- 🔴 :65 replacement viết "**bao DAI [san bytes/4** -- tran notice]" — B3(d) nguyên văn: "DẢI [**sàn = char4** (đếm thiếu) — trần = tín-hiệu-cắt-ngắn]". bytes/4 ≠ char/4 trên text VN-diacritic (~2-3 byte/char → lệch cỡ 2×, sàn bị đôn lên gần trần → dải méo). Chính spec tự mâu thuẫn: :90-replacement dùng char/4 đúng. → **M-4** (RANGE FIT [bytes/4..bytes/3.0] có sẵn là band KHÁC, giữ nguyên như spec dặn — không đụng).
- :121 replacement: 2 chốt-gốc ✓ + bỏ "tuong tu Hub" đúng hướng-dẫn ✓ + ratified cổng reply ngày 17-07 (khớp reviewer_gate B3 "anh-Mark ratified 17-07") ✓ + ASCII ✓. 🔴 NHƯNG "thay TRỌN giá trị" làm **RỚT caveat cuối đang sống ở :121**: "…nobody may sell 'proven effective' yet" (= "chưa ai được bán câu 'đã chứng minh hiệu-quả'"). Hub chỉ dặn thay CỤM "tương-tự Hub"; spec rewrite trọn và đánh rơi caveat — trong khi :206 được sửa thành CON-TRỎ về :121 làm "wording sống" ⇒ caveat mất nhà canonical (S119: giữ kết-luận phải giữ caveat). → **M-3**.
- 2a đóng-ask ✅ Item 6(i) (:19 giữ làm lịch-sử + note đính-chính — đúng additive). 2c residual#1 mis-site: NO-CHANGE + errata ✅ (R2 chứng vững). Mục 3 re-sync :206 ✅ (LANE-A ownership — lead tự bắt collision từ trước, đúng).
- Mục 4 owner-sign khép / mục 5 cross-verify / mục 6 Q&A-routing: 0 việc mới ✓ n/a hợp lệ.
**B5 `89e4d818`:** khuôn 4-vai SE đã map đủ (T10, tự đối chiếu sleep cmd ✓: harvest-curator PROPOSE :63-70 · lead distill :72-82 · gate 3a :88-91 · reviewer 3b :93-95 · distill-gen :60/:82/:118 · additive :100/:116); 2 bài học mới (cross-file bleed + tổng-hợp-đầu-tệp+grep-ngược) = Item 8 chèn đúng Phase 3a/Phase 2 ✅. "Chép câu hỏi đừng chép số" ✓ (3 câu mục 4 SE trả lời CÓ/CÓ/CÓ từ đĩa).
**B6 `6c2eb2b1`:** chốt-1 câu luật ✅ Item 7 · chốt-2 args-mỏng ✅ DP-4 reconcile + dogfood wave này (use⟂mention tách Agent-prompt vs Workflow-args của invest = đúng — chính prompt spawn TÔI lượt này đã là pointer-style, dogfood sống) · chốt-3 normalize giữ ✅ 0 việc · phép-thử-nhanh mục 5 = n/a (0 ca chết-non, grep rỗng T9iv — spec khai ✓).
**B7 `dacfcb11`:** 2 bản relay đã xử trước (eb12b9b8 @S129 · 0db707e4) + kênh Q&A đã dùng thật ⇒ 0 việc, chỉ STAGE-2 — spec không có dòng disposition B4/B7 (→ n-6, 1 dòng là đủ).
---
## R3 — DP-DEFAULTS (6 DP)
**⚑DP-1 OR-guard — C-risk số 1 của đề: phán KỸ-THUẬT ĐỨNG, phép 7 KHÔNG FAIL, VỚI 1 ĐIỀU KIỆN CHƯA ĐƯỢC VIẾT RA.**
- Ngữ-nghĩa phép 7 (B2): "thực hiện đúng MỘT lần dừng rồi nối lại → +1" + B1 SELF-CHECK ô1 cùng câu ⇒ hub đếm 1 cặp dừng–nối = **+1, không phải +2** (tick-cả-2-đầu không session-guard = +2/cycle → FAIL — bẫy invest chỉ đúng).
- Chạy ca: pause trong S135 (đã tick lúc vào) → session-guard NO-OP ✓; /tiep mở phiên kế **nhãn S136 MỚI** → +1 ✓ ⇒ dừng–nối = +1, phép 7 PASS. Đo post-merge (:85) đi đúng đường này (pause S135 dùng pause.md CŨ chưa tick → restart → /tiep S136 tick 8→9 = chính phép đo).
- 🔴 NHƯNG toàn bộ đứng trên tiền-đề **"mỗi conversation mới = nhãn S<nn> MỚI, kể cả vào bằng /tiep"** — tiền-đề này ĐÚNG theo thực hành (S134, S135 đều /tiep-vào nhãn mới) + `tiep.md:130` ("Field session: khác phiên hiện-tại là BÌNH-THƯỜNG — đó chính là use-case của /tiep") NHƯNG **không được viết thành luật ở bất kỳ đâu**. Nếu một lead tương lai resume và GIỮ nhãn cũ ("vẫn S135 vì cùng mạch") → tiep-tick NO-OP → cửa câm → phép 7 +0 FAIL + phép 1 tái-thủng. → **M-9**: pin label-convention vào Item 1(e).
- Ca re-open cùng label (crash-resume giữ nhãn): NO-OP đúng nghĩa "1 nhãn-phiên = 1 tick", và phép-1 đếm theo nhãn cũng không thấy cửa mới ⇒ NHẤT QUÁN, không phải bug.
- Kẽ tồn-dư (có sẵn, OR không chữa): phiên mới KHÔNG commit gì (HEAD y nguyên) → head-guard NO-OP dù nhãn mới — :192 đã khai; nhưng Item 1(e) thêm "counter đếm nhãn-phiên" sẽ MÂU THUẪN chữ với :192 ("đếm phiên-có-làm-HEAD-đổi") trong CÙNG section → reconcile cùng lượt (gộp vào M-9 fix).
- Ca 2 phiên song song cùng label: đã bị cấm bởi luật vận hành riêng (feedback rag-mcp "KHÔNG 2 SE-session cùng repo") — không cần guard thêm.
**⚑DP-2 defer dangling-head:** ĐÚNG thẩm quyền (candidate-fix đang treo chờ anh/hub, counter history :30/:35 ghi rõ). NHƯNG bảng DP làm rơi caveat mà chính invest đã nêu: tick @/tiep thường ghi `last_ticked_head` = commit `wal: pause` — commit này CHỈ sống sót nếu bị kẹp dưới commit thường; phiên nào không có commit thường trước closeout → nó bị squash → **ancestor-check FAIL-LOUD tần suất TĂNG theo tick dày** (class S127/S133, mỗi lần = 1 báo-anh). Anh cần info này để flip. → **n-4** (ghi vào cột "Vì sao" DP-2 + report khai noise-expectation).
**⚑DP-3:** hợp lệ — phán đầy đủ ở R1/B1-3.2. **⚑DP-5:** hợp lệ — phán ở R1/B1-3.4; NHƯNG chỗ đặt byte-display mơ hồ → **M-10** (xem R6).
**⚑DP-4 reconcile fable-real.md:31:** đúng floor B6 chốt-2, giữ intent gốc ✓. Nit wording: "CẤM tự lục file NGOÀI con-trỏ" đọc literal sẽ cấm luôn việc worker Read FILE ĐÍCH nó phải sửa (tiep.md, budget.json…) — phải scope cấm vào NGUỒN-SPEC ("CẤM tự lục spec/nguồn ngoài con-trỏ; file làm-việc lane vẫn Read bình thường") → **n-2**.
**T13iii moot:** ✓ số đúng (8→9 ≥ 3+6 → OVERDUE(light) fire @entry phiên kế, consent-gate giữ). Lưu ý ordering n-3: Item 2 đặt probe "cuối §2" còn Item 1(b) đặt TICK "§2.5" (SAU probe) → dòng-nợ ở /tiep in trạng-thái TRƯỚC-tick (5/6 ok) rồi tick mới nhảy 9 → OVERDUE chỉ hiện ở (j) cuối phiên thay vì ngay cửa vào. Không thủng floor (nợ vẫn hiển thị trong phiên) nhưng lệch kỳ vọng "fire NGAY" T11 → swap thứ tự (tick trước, probe sau) = 0 chi phí → **n-3**.
---
## R4 — AC ĐO ĐƯỢC + RĂNG
- AC-A(1) grep "tick" 3 file — baseline 0/0/0 **tự verify ĐÚNG** ✓ (smoke yếu nhưng có AC-A(4) kèm).
- 🔴 AC-A(2) "contract chứa OR-guard `last_ticked_session`" — **VACUOUS-AT-BASELINE**: chuỗi `last_ticked_session` ĐÃ có sẵn trong :6 hiện hành (vế update "last_ticked_session = session"). Checker grep literal này sẽ PASS cả khi lane QUÊN OR-guard. → **M-11**: AC phải grep đúng chuỗi điều-kiện, vd `-c "session == last_ticked_session"` = 1 (baseline 0).
- AC-A(3)(4)(5)(6)(7) ✓ đo được, có baseline.
- AC-B(1)(2) = phép 5/6 ✓ chuẩn. AC-B(3) ✓ tự đối chứng hôm nay khớp (light 5/6 · deep 5/15 · 0 over-cap · orphan 1 — 4 số tôi tự đo lại đều đúng).
- 🔴 AC-B(5) vs Item 4 **LỆCH THIẾT KẾ**: Item 4 anchor "commit GẦN NHẤT match" (1 closeout) nhưng AC-B(5) đòi "H25-closeout-ritual trên **3 closeout gần nhất** = PASS union" — và phép 3 B2 cũng đòi 3. hmw sẽ phải đoán. → **M-5**: detector loop 3 closeout gần nhất (mỗi cái 1 cửa-sổ union riêng).
- 🔴 Fault-matrix 6 ca có đủ 2 chiều FLAG/IM cho happy-path nhưng **thiếu 3 ca răng**: (a) H25-role-notebook **diary tồn tại nhưng 0-BYTE → PHẢI FLAG** — đúng ca anti-Goodhart mà chính `tiep.md` dạy ("thiếu nó thì happy-path vẫn xanh mà sàn đã thủng"); check "byte>0" có trong design nhưng KHÔNG có ca chứng; (b) H25-closeout-ritual **cửa-sổ không có closeout-liền-trước** (closeout đầu tiên trong slice) → không crash, khai skip có lý do; (c) probe **h24_cadence key thiếu** → dòng vẫn in + exit 0 (xem n-7). → **M-6**: matrix 6→9 ca.
- Nit thiết kế Item 4: "session-log file MỚI" cần `--diff-filter=A` (sửa file cũ ≠ có session-log mới) — để hmw tự xử nhưng nên ghi 1 chữ (gộp M-6 fix).
- AC-C(2)(4)(5)(6)(7)(8) ✓ đo được (e0bb5bbf 0→2 có răng — tự verify baseline 0 ✓).
- 🔴 AC-C(1): exclusion-set thiếu diary → FAIL trên dữ liệu lành (chứng ở R2) → **M-2**.
---
## R5 — SCOPE-DRIFT
- **Drift ra ngoài: 0.** Items 1-8 đều truy được về B1/B2/B3/B5/B6; Item 9 = mandate H9 report; DP-2 để ngoài đúng; Item 6 flip-note 4c = bảo trì adap-report của chính SE (vòng-5 B2) — hợp lệ.
- **Bỏ sót (floor/khai n/a):** (1) 🔴 vòng-3 memory-triple — trong mandate B2 bảng A, T11/T12 đã chỉ đường, spec làm rơi → M-1; (2) SELF-CHECK B1 5-ô tally + ô4 n/a-not-gating + khai DP-5 cục-bộ + phép 5/6/2 đo in-wave + phép 8 chưa đo + 1 dòng disposition B4/B7 — đều thuộc Item 9 report → n-6; (3) vòng-4 per-file assert → n-9 optional.
- Lane-partition: 0 overlap file A/B/C ✓ (collision session-start.md lead đã tự bắt trước — đúng); M-10 nếu fix theo đề xuất vẫn giữ 0-overlap (đưa về LANE-A).
---
## R6 — BẪY KỸ THUẬT SE
- **PS 5.1:** probe đọc 2 JSON qua `ConvertFrom-Json` dot-notation OK (không cần -AsHashtable); cả 2 file ASCII ✓. 🔴 Vế-2 đo byte PHẢI dùng `(Get-Item).Length`/`ReadAllBytes` — CẤM `Get-Content` đếm (bẫy E-010/S130 ANSI ×2-3, spec chưa dặn) → **n-8**.
- **Fail-loud vs không-chặn:** Item 2 vừa đòi "fail-loud nếu key thiếu" (pattern H24-2) vừa "MỌI exception → probe-loi + exit 0" — hmw có thể hiểu fail-loud = exit≠0 (vỡ floor) hoặc nuốt key-missing vào probe-loi generic (mất tín-hiệu no-default). Chốt: key thiếu → in `CONFIG-THIEU(h24_cadence)` NGAY TRONG dòng-nợ + exit 0 → **n-7**.
- **Hook 3-path / git-add đích-danh:** 🔴 lỗ thật 2 tầng. (a) RUNTIME: Item 1(c) claim "tick nằm TRONG commit `wal: pause`" chỉ đúng nếu pause.md **bước 4 add-list** (hiện: "WAL + path persist + file dở") được mở rộng thêm `.claude/governance/.session-counter.json` — spec không nói; tương tự session-end §5.1 closeout — **bằng-chứng sống: tick S133 nằm uncommitted qua 2 closeout liên tiếp** (chính git-status đầu phiên này còn thấy). (b) WAVE-COMMIT: files wave sửa hầu hết NGOÀI hook-3-path (`.claude/commands/*.md`×5-6, `scripts/*.ps1`×2, `.claude/workflows/hmw.js`, `.claude/governance/.session-counter.json`, `docs/governance/adap-reports/*`; budget.json trong agent-memory thì hook cover) — post-merge :85 không có add-list. → **M-7**.
- **No-hot-reload:** RESTART bắt buộc đã ghi ✓ (:85). **Edit-anchor:** session-end 253 dòng — điểm chèn (v)/(vi) sau :99 trước "(g)" :100 = anchor duy nhất ✓; budget.json:90 mega-line — spec cho sẵn đoạn old_string đích-danh duy nhất ✓.
- **hmw.js luật câu cite ":98":** chèn dòng mới phía trên làm normalize trượt xuống :99 → luật tự-cite số dòng chết-non ngay lúc sinh (class "acceptance literal tự-lão-hoá" S121). Viết relative "dòng normalize NGAY DƯỚI" → **n-1**.
- 🔴 **DP-5 byte-display = ghost-wire risk:** "probe/INFORM in THÊM byte" không nói WHERE. Probe = LANE-B với output-contract 3-vế đã đóng (Item 2); sleep cmd = LANE-C; nhưng sleep-INFORM **runtime** sống ở `session-start §2.1.2` + `session-end §L.b(c)` = file LANE-A. Ghi mỗi sleep-cmd doc → INFORM thật không bao giờ in byte (đúng class ghost-wire H18 "defined-but-unread"); LANE-C tự sửa session-start/end → vỡ 0-overlap. → **M-10**: giao LANE-A thêm 1 câu tại 2 site INFORM (đo tổng byte `<period>.md` chưa có `.gist.md` theo PREFIX kỳ), sleep cmd :52 chỉ cập nhật mô tả, probe GIỮ 3-vế.
- Dirty-baseline: `.session-counter.json` đang modified (tick S133 uncommitted) — LANE-A sẽ Edit đè lên delta này; wave-commit sẽ mang cả 2 (spec :87 đã ghi nhận drift ✓ — chỉ cần reviewer pre-commit nhìn diff có ý thức).
---
## R7 — HONEST-NẤC
- Hedge đúng: "PASS-able", "phép 1/7 đo SAU restart", CAVEAT :89 executed/verified-pending-restart, "không chép số hub" ✓.
- 🔴 **Flip-note 4c OVERCLAIM "chắc chắn được NẠP"** (Item 6(ii)): adap-report :17/:60/:80 đặt điều kiện "restart Claude Code + 1 spawn-test reviewer **thực-tế chạy qua nó**". Vế restart trong chứng cứ spec = "S129 commit 23:16 → app-launch mới" — chính T11 tự ghi "**restart implied**" = SUY-LUẬN lịch (qua đêm chắc relaunch), KHÔNG đo trực-tiếp. "Chắc chắn" nâng implied→certain trong artifact OUTWARD (adap-report) = đúng class S131 morning-gate. Có sẵn corroboration mạnh hơn mà spec chưa dùng: reviewer S135 (lượt này) tự-quan-sát persona CÓ câu :46 — nhưng self-obs phải hedge (S126). → **M-8**: bỏ "chắc chắn", ghi "NẠP theo suy-luận đủ-điều-kiện (restart-implied + ≥2 spawn thật) + corroborate S135 self-obs [hedge]"; giữ nguyên 2 caveat spec đã có (EXERCISE chưa chứng riêng · verified của hub).
- Còn lại sạch: "5/5 vòng" là claim-mục-tiêu sai vì thiếu item (M-1 — lỗi cấu trúc, không phải lỗi nấc); AC-B(3) expected-values có khai "tại thời-điểm chạy" ✓; post-merge "light-OVERDUE fire @9 (consent-gate)" ✓ trung thực.
---
## BẢNG FIX ĐỀ-XUẤT (lead áp thẳng ra spec v2)
| # | Loại | Vị trí spec v1 | Dòng thay / thêm |
|---|---|---|---|
| M-1 | Major | ② thêm Item 3-bis (LANE-A) + ①:9 | Item 3-bis: "session-end §L.b(c): khi chạy khối (c), ghi 3 dòng `memory-triple: do=<script·exit> -> de-xuat=<script·exit> -> kiem=<mfe/reviewer·verdict>` vào session-log (artifact 3-stage tuần tự — B2 vòng-3 cột-5)." + AC-A(8): "session-log phiên wave chứa `memory-triple:`". NẾU không thêm: ①:9 sửa "5/5 vòng chức-năng" → "4/5 + vòng-3 PARTIAL (khai với hub)" |
| M-2 | Major | AC-C(1) :83 | "…ngoài {runs/, broadcasts/, docs/governance/adap-reports (dòng lịch-sử :19 GIỮ + 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)" |
| M-3 | Major | Item 6 :44 (giá trị :121 mới) | append trước dấu chấm cuối: `; 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)` |
| M-4 | Major | Item 6 :42 (giá trị :65 mới) | `bao DAI [san bytes/4 -- tran notice]` → `bao DAI [san char/4 -- tran notice]` (khớp B3(d) "sàn = char4" + tự nhất quán với :90-replacement; RANGE FIT [bytes/4..bytes/3.0] có sẵn GIỮ nguyên — band khác, đúng như spec đã dặn) |
| M-5 | Major | Item 4 :33 câu 1 | "commit gần nhất match `^\[CLAUDE\] Docs: …`" → "**3 commit gần nhất** match … (loop, mỗi closeout 1 cửa-sổ union riêng `(closeout-trước-nó .. nó]`)" — khớp phép 3 B2 + AC-B(5) |
| M-6 | Major | Item 4 :34 · Item 5 :38 · Item 2 · AC-B(4) :80 | Item 4 +(iv): "slice không có closeout-liền-trước → KHÔNG crash, in skip-lý-do"; +1 chữ: session-log-mới đo bằng `--diff-filter=A`. Item 5 +(iv): "cây tạm truncate 1 diary về **0-byte** → PHẢI FLAG (anti-Goodhart)". Item 2 +ca: "h24_cadence thiếu → dòng vẫn in `CONFIG-THIEU` + exit 0". AC-B(4): "matrix 6 ca (3+3)" → "matrix **9 ca (4+4+1)**" |
| M-7 | Major | Item 1(c) :16 · Item 1(d) :17 · post-merge :85 | (c) append: "+ mở rộng add-list pause.md bước 4: thêm đích-danh `.claude/governance/.session-counter.json`"; (d) append: "+ session-end §5.1 add đích-danh counter-file khi có delta (bằng-chứng sống: tick S133 uncommitted qua 2 closeout)"; :85 append: "commit wave = `git add` đích-danh {5-6 command .md · 2 scripts · hmw.js · .session-counter.json · budget.json · adap-report · run-folder} — đa số NGOÀI hook-3-path; acceptance: sau commit, `git status --porcelain` các path này RỖNG" |
| M-8 | Major | Item 6(ii) :47 | "…spawn-test ĐÃ XẢY RA (…) ⇒ persona `reviewer.md:46` chắc chắn được NẠP" → "…spawn-test ĐÃ 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 `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ữ nguyên 2 caveat sau) |
| M-9 | Major | Item 1(e) :18 | append: "+ vế label-convention: **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` ('phiên có làm HEAD đổi') với đơn-vị nhãn-phiên (ca không-commit cùng-HEAD vẫn NO-OP — hiếm, giữ khai)" |
| M-10 | Major | DP-5 row :69 + Item 8 :57 + LANE-A :76-77 | Chốt WHERE: "byte-display do **LANE-A** wire tại 2 site sleep-INFORM runtime (`session-start §2.1.2` + `session-end §L.b(c)`): khi INFORM fire → in kèm tổng byte `archive/<period>.md` chưa có `.gist.md` (match PREFIX kỳ). Sleep cmd :52 (LANE-C) chỉ cập nhật bảng Trigger mô tả. Probe (LANE-B) GIỮ 3-vế, KHÔNG chở byte-sleep." + AC-A(9): grep byte-note tại 2 site |
| M-11 | Major | AC-A(2) :77 | "(2) contract chứa OR-guard `last_ticked_session`" → "(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)" |
| n-1 | nit | Item 7 :50 | câu luật hmw.js viết relative: "normalize **NGAY DƯỚI** là LƯỚI-CUỐI…" (không hardcode `:98` — chèn dòng làm số trượt, class literal-tự-lão-hoá S121) |
| n-2 | nit | DP-4 :51 | "CẤM tự lục file NGOÀI con-trỏ" → "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)" |
| n-3 | nit | Item 1(b) :15 + Item 2 :26 | swap thứ tự tại /tiep: TICK (§2.5) TRƯỚC, dòng-nợ SAU — để vế-1 in trạng-thái sau-tick (OVERDUE @9 hiện ngay cửa vào như T11 kỳ vọng, thay vì đợi (j) cuối phiên) |
| n-4 | nit | DP-2 row :66 | cột "Vì sao" append: "hệ-quả chấp nhận: 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)" |
| n-5 | nit | Item 3 :29 | định nghĩa `<closeout-liền-trước>` = "commit gần nhất match regex closeout của Item 4 (dùng CHUNG 1 regex — đừng chép 2 bản)" |
| n-10 | nit | ①:9 | nếu áp M-1 đường thêm-item: thêm chữ "vòng-3 lên CÓ nhờ Item 3-bis" vào mục tiêu để tally 5/5 truy được về item cụ thể |
**Điểm mạnh đáng giữ (positive):** NO-CHANGE crystallized-backfill trái chỉ-thị hub nhưng chứng đủ cứng (git log -S + grep — tôi re-run, đứng vững) + errata blameless = đúng bài "claim thư phải re-đo đĩa"; lead tự bắt file-collision LANE-A/C trước reviewer; số baseline T6 4/4 khớp khi tôi đo lại độc lập; (v)/(vi) numbering khớp đĩa (j)(i)-(iv); DP nào cũng có flip-path 1 chỗ.
VERDICT: GO_WITH_FIXES — 0C/11M/10n
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.