# SPEC — SE đối ứng 6 broadcast AI_INFRA (S119, 2026-07-15)

> **H21 spec-file 3-mục.** Engine propose (`/fable-clone investigator-codebase` 5-lane ensemble `wf_1f6bd5e2-478`, 5/5 clean 0-garble) → **lead verify + refute + synthesize** → **lead ghi** (file này) → worker thực-thi THEO spec (bơm qua args, worker KHÔNG tự Read).
> **Trạng thái:** DRAFT-v1 chờ `/fable-clone reviewer` → `/fable-real reviewer` chốt → anh ký 4 owner-decision.

---

# ① TÍNH-NĂNG / ĐỀ-BÀI

SE đối ứng **6 broadcast** (check-email S119: 7 copy verbatim, hash 7/7 MATCH, tamper 4/4 MATCH).

## 1.1 Bảng phơi-nhiễm — ĐO THẬT, không suy

| Broadcast | Nấc SE | Bằng-chứng đo |
|---|---|---|
| **H22 push-guard** | 🔴 **LỖI SỐNG** | 57 `wal:` đã lọt `origin/main` · n=4 chưa-đẩy (hook fire `aab817b` @09:29 giữa phiên) |
| **H22 wal-defect-fix** (5 sàn) | 🔴 **0/5 sàn đạt**; Sàn-3 lỗi sống | `session-start.md:51` + `tiep.md:15` suy thẳng "trống⇒sạch" (lead mắc chính sáng nay) |
| **EOL/CRLF** | 🟡 chưa chết, **KHÔNG được tuyên miễn-nhiễm** | `autocrlf=true`@system · 188 file `i/lf+w/crlf` · agent 0-CR · 12/12 block-scalar |
| **H23** model-at-spawn | 🟡 **KHÔNG xung-đột H8**; 1 GAP thật | `fable-clone.md` hứa "tier-2" mà **0 cơ-chế `tier:'opus'`** |
| **H24** lead-self-audit | 🟢 **đủ 3 nền** → adopt được | detector ✅ · carry ✅ (`HANDOFF:5` 21×"NEXT anh"/22×"NEXT em") · nghi-thức ✅ |
| **owner-sign 3 mark** | 🟢 info | anh ký `RC-pqhuy1987-14-07-2026-10-05-50`; SE **đã stamp** S110/S111 → chỉ báo nấc |

## 1.2 🔴 BỐN CÚ LẬT — ensemble bác tiền-đề (kể cả tiền-đề của LEAD)

**L1 — 57 wal: KHÔNG do turn-seam (bác lead).**
Lead giả định 57 = kẽ turn-seam của broadcast. Lane A đo: **0/57 ở đuôi, 57/57 bị-kẹp** (14 khối: 3×1, 6×2, 1×4, 2×7, 1×8, 1×16). Kênh rò thật = `session-end.md:112-113` — §5.0 đếm **LIÊN-TỤC từ HEAD, dừng ở subject khác**, và `:113` **cố-ý** ghi *"wal: kẹp sâu hơn → GIỮ NGUYÊN, chấp-nhận noise"*. Tốc-độ rò ~**10/phiên**, khởi đúng ngày hook lên (S111): 37 @07-12 · 10 @07-13 · 10 @07-14 · 0 trước đó.
⇒ **`n=0` BẤT-KHẢ-ĐẠT** với §5.0 hiện tại ⇒ **sửa §5.0 = TIỀN-ĐỀ của push-guard, không phải phụ-kiện.**

**L2 — 188 file EOL KHÔNG do squash (bác broadcast).**
Broadcast quy nhân-quả: *squash/rebase lật EOL*. Lane B đo: **SE §5.0 = `git reset --soft` = worktree-neutral** → không lật byte nào. Nguồn thật = **`dotnet ef` / VS sinh CRLF** (131/188 = `Migrations/`).
⇒ acceptance `count==0` **toàn-repo** của hub = **cỗ máy dương-giả** với SE ⇒ **phải scope**.

**L3 — CRLF ĐƠN-ĐỘC có thể đủ giết (bác broadcast + bác lead).**
Broadcast tự khai *"KHÔNG khẳng-định đã đọc mã-nguồn parser"*. Lane B **đọc được**: parser = **js-yaml 4.1.1** nhúng trong `claude.exe` (chuỗi license), `readLineBreak` xử CRLF native ⇒ nửa `': '` **N/A THẬT** cho SE (12/12 block-scalar) — **chứng ở tầng mã-nguồn**, không còn là suy-đoán.
**NHƯNG** tồn tại **regex delimiter LF-only `^---[ \t]*\n` ×2 song song bản đã vá `\r?\n` ×2** ⇒ **CRLF một mình có thể đủ giết, KHÔNG cần `': '`**.
⇒ Mô-hình broadcast ("CRLF **VÀ** `: `") **THIẾU** ⇒ SE **KHÔNG tuyên miễn-nhiễm**; 2 lớp may (0-CR + block-scalar) chỉ che **một** nửa.

**L4 — H23 ⟂ H8: KHÔNG xung-đột; lỗi ở tài-liệu HUB (bác lead + bác H23).**
`model-tier-v2-pin-simple` (07-03) nói thẳng: *"**Không có mandate mới; các đội KHÔNG bắt buộc làm theo**"* · *"Danh sách trợ lý nào ở tầng model nào = **FORM mỗi đội tự quyết**"* · *"**cả hai đều đạt sàn** miễn là đội trưởng ở model cao nhất và việc nâng-hạ tầng là **có kỷ luật**"*.
⇒ **SÀN** = (i) lead frontier + (ii) gán tầng có kỷ-luật. **FORM** = tự quyết. SE all-inherit **đạt sàn** (100% tất-định ⇒ class "quên hạ tầng" **không thể tồn tại** — SE đóng cùng lỗi bằng đường khác hub).
⇒ **SE nằm TRONG khung** (nguyên-tắc anh chốt S119) ⇒ **KHÔNG cần request cho việc lệch form**.
⇒ **DEFECT ở H23 §1**: phát-biểu **form riêng hub** ("mọi sub chạy worker-tier gán-cứng") **như thể SÀN đã chốt** → sister đọc nghĩa-đen sẽ **tự tháo H8**. Cộng: **H8 (06-16) tuyên "BẮT BUỘC mọi sister" chưa từng retract tường-minh** ⇒ fleet giữ **3 phát-biểu không tương-thích** trên cùng 1 trục (H8 → pin-simple → H23).

## 1.3 🔴 2 CLASS ngữ-nghĩa NGƯỢC (lane C — mấu chốt H23)

| Class | `inherit` nghĩa là | Runtime-value của H23 |
|---|---|---|
| **A** — roster mặc-định (12 sub) | **ĐÚNG Ý-ĐỒ** (H8 S66). lead đổi → sub đổi = tính-năng | **0** (đúng như hub khai "phòng-xa") |
| **B** — `/fable-clone` ensemble | **SAI**. Clone theo định-nghĩa = tier-2 | **THẬT** — vá lỗi sống |

**GAP #6 (lỗi sống, đã cài ngòi):** `.claude/commands/fable-clone.md:15` hứa *"ENSEMBLE tier-2-mạnh-nhất"*, `:38-40` chỉ nói ghế **lead** → **cơ-chế đạt tier-2 VẮNG HẲN**. Fable UP ⇒ N lane inherit = **N×Fable** ⇒ **trái chính §K.D floor-2 của SE**.
**ĐÃ CẮN 1 LẦN:** reviewer S108 FAIL, MAJOR#3 *"clone-example thiếu `tier:'opus'` trái K.B/floor-2 khi Fable UP"* → fix landed ở **runbook:431** (🔴 BẮT BUỘC), **KHÔNG** mang sang command-file khi H21-redesign S110 (`debe82f`).
⇒ Kết-luận "H23 vô-giá-trị vì SE all-inherit" = **SAI do gộp 2 class**.

**Cái giá DUY-NHẤT H8 trả dưới lăng-kính H23 (lane C, honest):** H8 xoá 7 pin full-id ⇒ grep `.claude/**` = **0 full-id sống**. `tier:'opus'` = **alias trần khoá HỌ, không khoá phiên-bản**. Opus đời sau ra ⇒ trôi, 0 ai bắt. Thẩm-quyền phiên-bản THẬT của SE = `~/.claude/settings.json` `claude-fable-5[1m]` — **NGOÀI repo, machine-wide, dùng chung AI_INFRA+VIETREPORT, KHÔNG git-tracked**.

## 1.4 🔴 3 phát-hiện ngoài đề-bài (lane A — đều chạm quyết-định)

**F1 — S118 là ca THẬT của Lớp-1 (bằng-chứng NỘI-BỘ SE).** `ls .claude/workflows/runs/` → **0 folder S118** (nhảy S117 → S119). Mà `HANDOFF:5` ghi S118 = *"em-main-led + **7 spawn** + 3 commit + 2 deploy"*. ⇒ run 7-agent trọn ngày với **0 run-folder · 0 dòng `wf:` · 0 marker**. S118 chết giữa chừng ⇒ sổ trống ⇒ phiên sau tưởng sạch.

**F2 — `workflows/README.md:52` = claim STALE đang CHE Sàn 1.** Nguyên-văn: *"Anti-bypass detector: **SE TAILORED-OUT** — SE chạy workflow qua Anthropic Workflow tool (KHÔNG có CLI-launcher để lách) → **bypass-surface ~N/A**"*. **BỊ BÁC ×2:** (i) `feedback_harness10_run_trace.md:20` — *"**RECURRED S72**: chạy REVIEW qua **RAW Workflow tool** (KHÔNG qua hmw.js) → KHÔNG inject writeGuard → reviewer tự ghi MEMORY +2850B over-cap → git-status BẮT @session-end + revert"*, kết-luận nguyên-văn *"dùng RAW Workflow tool = **MẤT governance của project-wrapper**"*; (ii) S118 raw-Agent 7-spawn; (iii) **chính run S119 này** dùng raw Workflow tool.
⇒ **Đồ-thị lời-gọi THẬT của SE = 3 đường:** `hmw.js` (**đường DUY-NHẤT SE gate được**) · **raw Workflow tool** · **raw Agent tool**. Hai đường sau thuộc harness Anthropic ⇒ **SE KHÔNG gate được = kẽ CÒN-LẠI** (đúng như broadcast §5 tự khai).
⇒ 🔴 **PHẢI sửa `README.md:52` TRƯỚC khi adopt Sàn 1** — nếu không, cớ "tailored-out" sẽ (sai) biện-minh cho việc skip luôn Sàn 1.

**F3 — Sàn 3 wire thẳng = bão dương-giả ngay lượt đầu** (đúng cảnh-báo Sàn 2 *"báo-động-giả lặp còn hại hơn kẽ gốc"*). Folder-scan theo authority `README.md:20` → **8/27 orphan**, 7 = tồn-đọng cũ (S112 ×4, S113, S114, pe-negative-quote), 1 = S119 đang bay hợp-lệ.
⇒ **PHẢI baseline TRƯỚC khi wire**: dọn/đóng 7 folder **HOẶC** scope scan theo `mtime > closeout cuối`.

## 1.5 🔴 Positive-control SỐNG — KHÔNG ĐƯỢC VÁ TRƯỚC (lane D)

`permission-matrix/SKILL.md` last-touch `2abbc1d` **2026-04-30 (Session 6)** — H1 phiên này bắt, lead **verify độc-lập từ code**:

| Skill ghi | Thật (đo từ code) | Lệnh |
|---|---|---|
| `:3` "~60 menu key" | **54** | `grep -c "public const string" MenuKeys.cs` |
| `:3` "~240 policy" · `:81` "48 policy" (**tự mâu-thuẫn**) | **216** = 54×4 | `Program.cs:82-88` foreach `All`×`Actions` |
| `:3`/`:23` liệt-kê `Bg_*` | **chết từ S61 Mig 50** | 0 live const |
| `:159` chỉ có chiều-ngược của #82 | thiếu chiều-thuận | — |

**Máy hiện-tại MÙ chứng-minh-được:** `governance-detectors.ps1` = 42 flag baseline, **0 flag trên file này** (C2/B3 chỉ track 4 token mig/test/gotcha/table — `menu`/`policy` MÙ).
⇒ 🔴 **CẤM vá skill này trước khi detector H24 fire.** Trình-tự H24 §2(4) **BẮT BUỘC**: `fire → cổng chứng-kiến → vá → hết-fire`. Vá trước = **giết chứng-nhân sống** ⇒ detector "xanh từ commit đầu" = đúng thứ H24 bảo phải nghi.
*(Lead đã đề-xuất vá ngay ở Phase-3 REPORT — **RÚT LẠI**, ghi ở đây làm audit-trail.)*

## 1.6 🔴 Bẫy mega-line (lane D — SE là ca NẶNG NHẤT)

`docs/STATUS.md:6` = **63,104 ký-tự / 1 dòng vật-lý**, **37 date-token**. `docs/HANDOFF.md:5` = 46,735.

| Cách parse | Ra | Hậu-quả |
|---|---|---|
| date `max` | **`2026-08-01`** (hạn audit tháng tới) | 🔴 **TƯƠNG-LAI ⇒ detector KHÔNG BAO GIỜ kêu ⇒ TỰ GIẾT positive-control** — đúng y `broadcast:62` |
| date `min` | **`1987-03-07`** | 🔴 ngày-ma từ chữ-số trong `pqhuy1987` ⇒ luôn kêu = nhiễu thuần |
| lexical `max` | `2026-20-42` | không phải ngày ⇒ crash |
| **NEO-PHẠM-VI** `\*\*Last updated:\*\*\s*(\d{4}-\d{2}-\d{2})` | **`2026-07-14`** ✅ | ĐÚNG |

⇒ detector độ-tươi **BẮT BUỘC parse neo-phạm-vi**, cấm regex-bất-kỳ-đâu.

---

# ② CÁCH IMPLEMENT

## 2.0 🔴 W0 — PRE-FLIGHT (em-main SOLO, KHÔNG fan-out, KHÔNG push) — PHẢI ĐẦU TIÊN

> **Vì sao trước:** (a) worktree **đang sạch** = cửa-sổ an-toàn DUY-NHẤT; session-end sẽ ghi `STATUS.md`/`HANDOFF.md`/`docs/CLAUDE.md`/`agent-memory/{implementer-backend,reviewer}/MEMORY.md`/`.mfe-state.json` — **6 file này NẰM TRONG 188** ⇒ lúc đó `git checkout` mù = **HỦY việc chưa-commit** (= đúng `E-029` hub đã trả giá: *"verify-mốc-sai ca-fold-uncommitted → reflog-recover"*). (b) `n=4=K` **lúc này chưa kẹp**; commit thường đầu tiên ⇒ kẹp ⇒ **n>0 vĩnh-viễn**.

| # | Việc | Chi-tiết | Acceptance |
|---|---|---|---|
| **W0.1** | `.gitattributes` theo **CLASS** | Thêm `* text=auto eol=lf` + khai binary THẬT (`*.zip *.exe *.dll *.docx *.xlsx *.pptx *.pdf *.png *.jpg *.jpeg *.ico *.woff *.woff2` binary) + giữ 2 rule cũ. 🔴 **CẤM vá theo đuôi-file-vừa-cắn** (bẫy lặp). ⚠️ Kiểm `*.ps1`/`*.bat`/`*.cmd` có cần CRLF? → PowerShell chạy LF OK; nếu giữ CRLF cố-ý ⇒ `-text` | `git check-attr text eol -- .claude/agents/reviewer.md` → `text: auto`, `eol: lf` (nay: unspecified) |
| **W0.2** | Re-smudge **CÓ PHÂN-LOẠI** | `git ls-files --eol` đo: **1267 `i/lf` · 25 `i/none` · 19 `i/-text` · 0 `i/crlf`** ⇒ `git add --renormalize .` = **diff RỖNG ⇒ 0 commit ⇒ 0 CI**. File sạch → `rm` + `git checkout --`. 🔴 File **dirty** → rewrite byte tại chỗ, **CẤM `git checkout`**. Hiện dirty = 0 (chỉ 7 broadcast untracked) ⇒ **cửa-sổ sạch** | `git ls-files --eol \| grep -c 'i/lf.*w/crlf'` = **0** · `git status --short` KHÔNG mất file nào đang edit · `git diff --stat` sau renormalize = rỗng |
| **W0.3** | Sửa §5.0 **"chỉ-đuôi" → "toàn-bộ chưa-đẩy"** | `session-end.md:111-115`. Hợp-pháp 100%: wal: bị-kẹp **chưa-push** ⇒ fold **KHÔNG** vi-phạm N.4. ⚠️ `git rebase -i` **BỊ CHẶN** trong harness (Bash: *"Interactive flags not supported"*) ⇒ `GIT_SEQUENCE_EDITOR` trỏ script PS1 rewrite `pick <sha> wal:` → **`fixup`**. 🔴 **`fixup` KHÔNG `drop`** — drop = **mất nội-dung** WAL/agent-memory/runs (khác hub: hub dùng drop + tree-identical verify; SE dùng fixup = an-toàn hơn, **KHÔNG cần** tree-verify vì fixup bảo-toàn content). **Biên:** wal: ở **đáy range** (0 commit thường bên dưới để fixup vào) ⇒ giữ nhánh `reset --soft HEAD~K` sẵn có — **ca n=4=K hôm nay rơi ĐÚNG biên này** | Phiên có ≥2 commit thường xen wal: ⇒ `n=0`. Tree **identical** trước/sau (kiểm phụ, không phải gate) |
| **W0.4** | Sửa `workflows/README.md:52` | Gỡ claim *"bypass-surface ~N/A"*; ghi đúng **3 đường** (`hmw.js` gate được · raw Workflow · raw Agent) + khai **kẽ CÒN-LẠI** | `grep -c "TAILORED-OUT.*bypass" README.md` = 0 · có dòng khai 3-đường |
| **W0.5** | Baseline 7 orphan-folder | Đóng (thêm `*-synthesis.md`) **HOẶC** scope scan `mtime > closeout cuối` | Sàn-3 chạy trên phiên sạch ⇒ trả đúng `{run đang bay}`, tồn-đọng **0** |

## 2.1 Sàn H22 (5) — SE-tailored

| Sàn | Đối ứng | Acceptance ĐO ĐƯỢC |
|---|---|---|
| **1** đăng-ký-dương @launch | `hmw.js` thêm tripwire **input-only** cạnh `checkpointApproved:83-85`: `if (A.taskList.length >= 3 && !(A.run?.dir && A.run?.name)) throw`. **CÙNG COMMIT** truyền cờ 3 wrapper: `fable-clone.md:15` · `ultra-on.md:18/33` · `/hmw` — thiếu = **vỡ đường đang chạy** (broadcast §4 nửa-(ii)). 🔴 Khai thật: **chỉ phủ `hmw.js`**; raw Workflow/Agent = **kẽ còn-lại KHÔNG gate được** (F2) | Phóng 3-task không `args.run` → **throw**. `git grep -c "args.run" .claude/commands/` ≥ 3 |
| **2** closeout-sentinel | Ghi `closing: S<nn> @<ts>` vào WAL ở **`session-end` BƯỚC 0** (trước mọi flush); xoá ở **`§6.4:143`** — §6.4 **đã là đường LUÔN-CHẠY** sẵn ⇒ xoá-dấu-không-tồn-tại = net-zero. Self-heal: `0.7` gặp `closing:` + ground-truth sạch ⇒ dọn 1 lần, đi tiếp | Cắt session-end giữa chừng ⇒ phiên kế **thấy** `closing:`. Chạy no-op ⇒ `grep -c '^closing:' WAL.md` = **0** |
| **3** ground-truth khi sổ trống | **Định-nghĩa MỘT chỗ = `tiep.md` §0**; `session-start.md:51` **XOÁ logic → chỉ TRỎ** (`:54` đã tự tuyên "CHỈ LÀ CON-TRỎ" — nay làm cho đúng lời). **3 bậc SE-tailored vá điểm-mù hook** (hook auto-commit 3 path ⇒ "dirty"+"chưa-đẩy" MÙ đúng 3 vùng): **MẠNH** = ① `runs/<id>/` có `run.md` mà `*-synthesis.md` vắng/0-byte (**git-independent, miễn-nhiễm hook** — đã có ở `session-start.md:97` nhưng **nằm SAU điểm quyết-định** + **skippable** `:98` ⇒ chỉ cần **hoist lên 0.7**) · ② `origin/main..HEAD` có commit **KHÔNG** phải `wal:` (hook không sinh loại này ⇒ không mù) · ③ `closing:` treo · 🆕 ④ **wal:-commit chưa-đẩy có đụng `.claude/workflows/runs/`** ⇒ **thu-hồi một phần điểm-mù**: dù WAL.md bị xoá trắng, **commit của chính hook vẫn tố-giác** run đã dựng (`git log --name-only --format='%s' origin/main..HEAD \| grep -q 'workflows/runs/'` — đo sống: `aab817b` touch `run.md`). **TRUNG-BÌNH** = >N file bẩn ngoài 3 path persist (🔴 **PHẢI loại nhiễu EOL trước** — 188 file ⇒ nếu không sẽ **luôn kêu**) · **YẾU** = bẩn thô | 2/2 điểm-vào (`/tiep` + `0.7`) gọi **CÙNG 1 định-nghĩa**. Dựng "WAL trống + 1 run-folder mở" ⇒ **cả 2 hỏi-lại**. `grep -c "chain rỗng" session-start.md` = **0** |
| **4** test-suite 3 lớp | `scripts/wal-recovery-test.ps1` — mẫu `-RepoRoot` cây-tạm **đã proven S95** (fault-injection). **4 ca:** dừng-sạch (kỳ-vọng im) · đứt-giữa-run (bắt) · **đóng-phiên-bị-cắt** (bắt) · **dấu-treo-nhưng-thực-sạch** (self-heal) | **4 verdict ghi ra FILE**, KHÔNG gạch-đầu-dòng. 🔴 Anti-Goodhart: inject-lỗi phải **FLAG**, không chỉ happy-path PASS |
| **5** hậu-kiểm cờ-vs-nội-dung | Gấp vào `§L.b(f)` 1 dòng: mọi `runs/<id>/` mtime-trong-phiên ↔ có dòng `wf: … run=<id>` trong WAL/session-log? Lệch ⇒ **NÊU** (informational, KHÔNG chặn) | Chênh-lệch **0**, hoặc in được danh-sách lệch |
| **push-guard** | Chuyển phép đếm **vào chính khối §5.2**, chained ngay trước `git push origin main`. 🔴 Đặt ở §5.0 = **KHÔNG đủ** (hook fire turn-boundary NẰM SAU §5.0/§5.1). **(a) so-sánh SỐ, cấm exit-code** — `grep -c` trả **exit 1 khi đếm 0** = ca SẠCH bị chặn (⚠️ `.claude/WAL.md:15` `verify:` lead viết sáng nay **đang dính idiom này**) ⇒ `n=$(…); [ "$n" -eq 0 ]`. **(b)** precheck ref = **N/A** (origin/main EXISTS) nhưng giữ else vô-hại. **(c)** `origin/main` = tên thật ✅ §5.0 đã đúng | (i) §5.0-mới trên phiên ≥2 commit thường xen wal: ⇒ `n=0`; (ii) đếm **ngay trước** push = 0 **trong CÙNG transcript-turn** với `git push`; (iii) sau push `git log --format='%s' origin/main -20 \| grep -c '^wal:'` **không tăng** so với 57 |

## 2.2 EOL (4 khối) — SE-tailored

| Khối | Đối ứng | Acceptance |
|---|---|---|
| **① SELF-CHECK** | ĐÃ CHẠY (§1.1). 🔴 **Metric phải `i/lf` KÈM `w/crlf`** — `w/crlf` trần gộp file cố-ý-CRLF = dương-giả (hub tự báo-động-giả vì metric lỏng) | — |
| **③ FIX** | W0.1 + W0.2 (§2.0). **③(c) quote description = N/A** (block-scalar, chứng tầng mã-nguồn L3) | `git check-attr` + count=0 |
| **④(a) validator đọc BYTES** | `scripts/agent-frontmatter-eol-check.ps1` — đọc **byte**, KHÔNG text-mode (`splitlines` nuốt CR ⇒ **PASS-giả trên chính file đã chết** = tệ hơn không có). Verdict FAIL = (CRLF trong frontmatter). 🔴 **SE KHÔNG có file-đã-chết làm positive-control** (hub bảo hiệu-chỉnh bằng byte file-đã-chết, snapshot TRƯỚC fix) ⇒ **phải synthesize control** (CRLF-hoá 1 bản COPY trong cây-tạm `-RepoRoot`) + **KHAI THẬT nấc yếu hơn hub** | Validator trên copy-CRLF ⇒ **FAIL**; trên 12 agent thật ⇒ **PASS**. 🔴 Khai: *"control = synthetic, KHÔNG phải file-đã-chết"* |
| **④(b)(c)(d)** | (b) wire validator vào session-end · (c) **EOL-assert DÍNH LIỀN push, CÙNG khối** với push-guard · (d) **LOAD-VERIFY khi onboard agent** — SE **đã làm de-facto** (S107 office-document spawn-test cùng phiên) ⇒ **codify thành checklist**, không phải build mới | (c) đọc khối push ⇒ EOL-assert **cùng khối**. (d) checklist tồn tại `agents/README.md` |
| 🔴 **SCOPE** (L2) | Acceptance `count==0` **toàn-repo** = dương-giả (188 = `dotnet ef`/VS sinh, không phải squash-fallout) ⇒ **gate scope = `.claude/agents/**` + `.claude/commands/**` + `.claude/skills/**`** (3 class frontmatter); `Migrations/` = **INFORM-only** | `git ls-files --eol .claude/agents .claude/commands .claude/skills \| grep -c 'i/lf.*w/crlf'` = **0** (gate) · toàn-repo = INFORM |

## 2.3 H23 — **PA-1 Tailor tối-thiểu** (lane C nghiêng; 4 file .md, 0 frontmatter, 0 config, 0 số, H8 NGUYÊN-VẸN)

| # | Việc | Acceptance |
|---|---|---|
| (a) | **Vá GAP #6**: thêm `tier:'opus'` 🔴-BẮT-BUỘC-khi-Fable-UP vào `fable-clone.md` (**TRỎ** `runbook:431`, KHÔNG lặp nội-dung) | `Grep tool` (⚠️ **KHÔNG Bash-grep** — pattern `\|`+quote cho **false-negative**; lane C tự dính) `tier:'opus'` trong `fable-clone.md` ⇒ **≥1 hit** (nay **0**) |
| (b) | **Nhân form ghi-chú-đầu-cây** — SE **đã có bản mẫu đúng chuẩn** `hmw.js:32-42` (khối comment H8 ngay trên `resolveModel:43-51`, phủ mọi lane, KHÔNG lặp inline) ⇒ nhân sang **3 chỗ**: `agents/README.md:~75` (đầu decision-tree — note `:3` hiện ở đầu **FILE**, cách 72 dòng, khác heading ⇒ KHÔNG phủ cây) · `session-start.md:~96` · `session-end.md:~49` | 3 note tồn tại **≤5 dòng trên** dòng spawn đầu-tiên; nội-dung nêu *"mọi spawn dưới = `model: inherit` (H8 S66) = top-tier lead per-session; giá-trị SỐNG → BƯỚC 0.6 probe"* |
| (c) | **Checklist kết-nạp-sub 3-việc** (frontmatter `inherit` + `hmw.js` VALID_ROLES + spawn-site) vào `agents/README.md` — SE **có đủ 3 chỗ + đã chạy đúng** (office-document S107 9→10; 2 monitor S110 10→12) nhưng **chưa viết thành checklist** ⇒ gap = quy-trình | roster = VALID_ROLES = danh-sách (`fable-clone.md:19` = `fable-real.md:20` = `engine:345`) |
| (d) | §2(5) kỷ-luật động-từ = **n-a ĐÃ THOẢ** — grep 0 mis-nấc (`engine:348` "KHÔNG code-enforced" · `:353` "mechanized = 0" · `fable-real.md:22` · G-015 ×3) | re-grep enforce-verb quanh model/tier ⇒ **giữ 0** |
| 🔸 | **PA-2 (neo full-id cho `tier:'opus'`) = QUYỀN ANH** — con-số/policy mới; em KHÔNG tự đặt. Không chọn ⇒ alias-drift Opus-đời-sau **ở lại** (khai ở adap-report) | — |

## 2.4 H24 — adopt đủ 5 điểm

| # | Việc | Acceptance |
|---|---|---|
| (1) | **2 vai MỚI** `.claude/agents/lead-view-auditor.md` + `lead-omission-auditor.md` (cookie-cutter frontmatter 2 monitor sẵn: `model: inherit` · `memory: project` · `maxTurns: 18` · tools 4-RAG-read + Read/Grep/Glob/Bash, **NO Write/Edit**, propose-only). 🔴 **KHÔNG gộp** vào H1/H2. ⚠️ **VA-CHẠM TỪ-VỰNG**: `governance-detectors.ps1:15` đã sở-hữu `derived-staleness` ⇒ **cấm** tên "vai-STALE"; `GAP` quá-tải (`session-end.md:48` "build-gap vs floor-rot" · `memory-selfimprove-audit.ps1` "CRITERIA+GAP") ⇒ dùng `view`/`omission`. Treo `session-start.md §2.1.1:92` (2→4 monitor) + `session-end.md §L.b` | (a) `ls .claude/agents/*.md` = **14**; (b) mỗi FLAG khớp `^[A-Z0-9-]+ \| <class> \|`, class ∈ **enum ĐÓNG** trong config; (c) 🔴 **phép-thử-xoá-carry**: xoá thử 1 dòng carry đã-hứa khỏi `HANDOFF.md:5` ⇒ `lead-omission-auditor` **PHẢI kêu** `carry-dropped`, **máy im** (đúng — caveat (b)) |
| (2) | **2 detector máy** vào `governance-detectors.ps1` (điểm cắm: `Write-Flag:43-53` · `Write-Section:55` · `Get-GovernanceMd:118-127` · summary tail). **độ-tươi-tiêu-đề**: mốc-phải = ngày mới nhất dấu-mốc governance; mốc-trái = anchor "Last updated"; **tài-liệu KHÔNG anchor ⇒ BỎ QUA** (cấm bịa độ-phủ); flag khi trái<phải. 🔴 **PARSE NEO-PHẠM-VI** `\*\*Last updated:\*\*\s*(\d{4}-\d{2}-\d{2})` — cấm regex-bất-kỳ-đâu (§1.6). **tuổi-carry**: khoá sống qua ≥M **dòng-carry LIÊN-TIẾP**; chuỗi tính trên **dòng CÓ carry**, phiên vắng **KHÔNG phá chuỗi**; reset **CHỈ** khi khoá vắng trên dòng CÓ carry; cụm owner chủ-động giữ ⇒ **INFORM-only**. **GAP-2:** carry SE = **văn-xuôi KHÔNG khoá** ⇒ cần **quy-ước khoá (anh quyết format)**; **định-nghĩa "dòng-carry" = đoạn LOGIC `NEXT anh|NEXT em` BÊN TRONG mega-line, KHÔNG phải dòng vật-lý**. **GAP-3:** C2/B3 chỉ track 4 token (`:154-157`) ⇒ `menu`/`policy` MÙ ⇒ **+2 token** | (a) đổi số trong config ⇒ output đổi theo, **0 số hardcode** trong `.ps1` (nay: grep `memory-budget\|ConvertFrom-Json` = **0 hit**); (b) chạy trên `STATUS.md:6` ⇒ in **`2026-07-14`** (KHÔNG `2026-08-01`, KHÔNG `1987-03-07`, KHÔNG `2026-20-42`); (c) `TOTAL FLAGS` ≥ 46 **VÀ CÓ** dòng `permission-matrix/SKILL.md` |
| (3) | **Scheduler** = NET-NEW (grep `session[_-]?count\|counter\|tick` = **0 hit**). State `.claude/governance/.session-counter.json` (mẫu sẵn `.archive-strikes.json`/`.mfe-state.json`). Tick @`session-start` 0.7-bis; display 2 đầu. **Idempotent-key = HEAD commit-sha @tick** (resume cùng sha ⇒ KHÔNG tick 2). Số **LÙI = fail-loud**. Fire `>=` KHÔNG `=`. fire-guard chống bắn-trùng + lịch-sử fire có **cap**. 🔴 **cadence-triggered, LEAD tự thực-thi, KHÔNG hook**. ⚠️ Stop-hook auto-commit `agent-memory/` mỗi turn ⇒ nếu để counter trong `memory-budget.json` phải **content-based `last_ticked_session:"S119"`**, cấm blind-increment | (a) `/session-start` 2 lần cùng HEAD ⇒ **+1** (không +2); (b) sửa counter LÙI ⇒ **fail-loud**; (c) **bỏ 1 phiên đúng ngưỡng** ⇒ phiên kế in **OVERDUE** (chứng `>=`); (d) 2 lớp cross-check |
| (4) | **Positive-control SỐNG** = `permission-matrix/SKILL.md` (§1.5). 🔴 **CẤM vá trước.** Chuỗi: fire → reviewer chứng-kiến → vá → hết-fire | (1) detector MỚI chạy **TRƯỚC** vá ⇒ **PHẢI in** `permission-matrix/SKILL.md`; (2) reviewer chứng-kiến output; (3) vá; (4) chạy lại ⇒ dòng **BIẾN MẤT**, TOTAL giảm đúng số đã vá |
| (5) | **Kết-nạp 3 việc** — SE all-inherit ⇒ (a) **rút gọn** = frontmatter `inherit` (không pin full-id). `hmw.js:22` VALID_ROLES **12→14** (⚠️ `:104` STOP-HARD nếu vai ∉ list). **GỘP 1 EDIT với (2)+Sàn-1** | (a) VALID_ROLES = **14**; (b) spawn vai mới qua hmw ⇒ **KHÔNG** throw `:104`; (c) grep `12-agent\|12 sub` ⇒ **0 hit sót** (5 chỗ) |

## 2.5 owner-sign — 0 hành-động adopt

SE **đã stamp** H21+MTv3 (`RC-…11-07-2026-20-42-01`) + H22 (`RC-…12-07-2026-11-43-45`) **TRƯỚC** owner-sign hub (`RC-pqhuy1987-14-07-2026-10-05-50`, 07-14) ⇒ ledger SE **đã current**. Hub ghi nhận SE = **dự-án đầu tiên fleet adopt trọn H22**. ⇒ chỉ **báo nấc** ở adap-report.

---

# ③ CHECKLIST + WAVE

## 3.1 Đồ-thị phụ-thuộc

```
[W0] PRE-FLIGHT em-main SOLO ──PHẢI TRƯỚC TẤT CẢ──┐
  ├─ W0.1 .gitattributes ──PHẢI TRƯỚC── W0.2 re-smudge (checkout materialize theo attr mới)
  ├─ W0.2 re-smudge=0 ──PHẢI TRƯỚC── ④c EOL-assert cắm push (ngược = CHẶN MỌI PUSH phiên này)
  ├─ W0.3 §5.0 fix ──PHẢI TRƯỚC── commit thường ĐẦU TIÊN (n>0 vĩnh viễn nếu ngược)
  ├─ W0.4 README:52 ──PHẢI TRƯỚC── Sàn-1 (cớ "tailored-out" sẽ biện-minh skip)
  └─ W0.5 baseline orphan ──PHẢI TRƯỚC── Sàn-3 (bão dương-giả)

[D-anh] 4 owner-decision ──PHẢI TRƯỚC── W2/W3 (số + policy)
[D7] Sàn-3 canonical @tiep.md ──PHẢI TRƯỚC── session-start 0.7 (chỉ TRỎ, B1)
[D6] 2 agent MỚI ──ĐỒNG-THỜI── hmw.js VALID_ROLES 12→14 ⇒ GỘP 1 owner (H24§5)
[D8] mọi edit code/cmd XONG ──PHẢI TRƯỚC── harness-11-engine.md (canonical tả cái ĐÃ làm)
[D9] chạy THẬT xong ──PHẢI TRƯỚC── stamp mark (H18: cấm stamp run-id chưa chạy) + adap-report
```

## 3.2 🔴 Bảng xung-đột file — quyết-định wave

| File | # chạm | Hạng-mục | Xử-lý |
|---|---|---|---|
| **`session-end.md`** | **7** | push-guard §5.2 · EOL-assert (cùng khối push) · Sàn-2 sentinel set+clear · Sàn-5 hậu-kiểm · ④b wire validator · H24 counter-display · H24 spawn-note | 🔴 **SERIAL, 1 owner = em-main, 1 EDIT PASS.** Fan-out = race chắc-chắn |
| **`session-start.md`** | **4** | Sàn-3 `:51` · H24 counter-display · H24 2 vai `:92` · H23 note `:96` | 🔴 SERIAL em-main, **SAU** `tiep.md` |
| **`hmw.js`** | **3** | Sàn-1 gate · VALID_ROLES 12→14 · H23 note-đầu-cây | 🔴 **GỘP 1 EDIT** |
| **`governance-detectors.ps1`** | 2 | 2 detector H24 | 🟢 **1 agent owner**, disjoint |
| **`harness-11-engine.md`** | ~5 | PHẦN N ext · §K/§O H24 · H23 · EOL floor | 🔴 SERIAL em-main **CUỐI** (D8) |
| **`tiep.md`** | 2 | Sàn-3 canonical · Sàn-2 sentinel-read | 🔴 em-main **TRƯỚC** session-start |
| `memory-budget.json` | 2 | nhịp H24 · counter | 🟡 số = **anh**. ⚠️ hook auto-commit path này ⇒ content-based key |
| `.gitattributes` · validator.ps1 · 2 agent MỚI · `wal-recovery-test.ps1` | 1 mỗi | — | 🟢 disjoint |
| 188 file worktree | 1 | re-smudge | 🟢 **0 commit** ⇒ 0 race git; race ở tầng **worktree-dirty** |

## 3.3 WAVE

| Wave | Song-song? | Task | Vai | File |
|---|---|---|---|---|
| **W0** PRE-FLIGHT | 🔴 **SOLO, KHÔNG fan-out** | W0.1→W0.5 (§2.0) | 👤 em-main | `.gitattributes` · 188 worktree · `session-end.md:111-115` · `README.md:52` · 7 orphan |
| **W1** disjoint build | ✅ **3 lane song-song** | ① `governance-detectors.ps1` +2 detector (neo-phạm-vi + carry-age) · ② `scripts/agent-frontmatter-eol-check.ps1` (byte-reader + synthetic control) · ③ `scripts/wal-recovery-test.ps1` (4 ca) | 🟨 impl-be ×1 · 🟪 test-spec ×2 | 3 file **disjoint hoàn-toàn** |
| **W2** gộp-1-owner | ⚠️ **2 lane** (khoá cứng D6) | ① `hmw.js` **1 EDIT**: Sàn-1 gate + VALID_ROLES→14 + H23 note · ② 2 agent MỚI `lead-view-auditor` + `lead-omission-auditor` | 🟨 impl-be (gộp ①②) | `hmw.js` + 2 `.md` mới |
| **W3** SERIAL command | 🔴 **SERIAL em-main, thứ-tự cứng** | `tiep.md` §0 → `session-start.md` (0.7 trỏ + counter + 2 vai + H23 note) → `session-end.md` **1 PASS 7 hạng-mục** → `fable-clone.md` GAP#6 → `agents/README.md` (checklist + note) | 👤 em-main | 5 file, **1 file 1 lần** |
| **W4** positive-control | 🔴 **SERIAL, sau W1①** | fire detector ⇒ **PHẢI in** `permission-matrix/SKILL.md` → 🟥 reviewer **chứng-kiến** → **RỒI MỚI** vá skill (54/216/bỏ Bg_*/+#82) → chạy lại ⇒ hết-fire | 🟥 reviewer + 👤 em-main | `permission-matrix/SKILL.md` |
| **W5** canonical | 🔴 SERIAL **CUỐI** (D8) | `harness-11-engine.md` PHẦN N ext + §K/§O · `rules.md` nếu cần | 👤 em-main | engine |
| **W6** đóng | 🔴 SERIAL | push-guard **CÙNG LƯỢT** với push → adap-report ×N → adap-request ×N → send-email | 👤 em-main | broadcasts/ |

## 3.4 🔴 QUYỀN ANH — 4 owner-decision (em KHÔNG tự quyết)

| # | Quyết-định | Đề-xuất em | Trạng-thái |
|---|---|---|---|
| **O1** | **H23 mức-độ adopt** — PA-1 (tailor tối-thiểu, 4 .md, H8 nguyên-vẹn) / PA-2 (PA-1 + **neo full-id** cho `tier:'opus'` ⇒ chặn alias-drift Opus-đời-sau) / PA-3 (n-a ⇒ GAP#6 ở lại) | **PA-1** (lane C nghiêng). PA-2 chỉ khi anh muốn neo phiên-bản = **policy mới = quyền anh** | ⚪ chờ |
| **O2** | **Số nhịp H24** — rà-nhẹ mỗi ? phiên · rà-sâu mỗi ? phiên · jump-K khi 1 class lặp ? lần. *(Nguồn hub: 6/15/3 — **hub bảo ĐỪNG CHÉP**, đặt số của mình)* | **6 / 15 / 3** (khởi-điểm = số hub, điều-chỉnh sau chu-kỳ-2). 🔴 `role_boundary_note`: số = **quyền anh** | ⚪ chờ (anh đã "OK đồng ý" adopt H24; **số vẫn cần ký**) |
| **O3** | **Quy-ước khoá carry** (GAP-2) — carry SE hiện là **văn-xuôi KHÔNG khoá** ⇒ detector tuổi-carry **không chạy được**. Cần format khoá bền | `[carry:<slug>]` gắn cuối mỗi mục NEXT (vd `[carry:binh-le-decision]`) — bền, grep được, không phá mega-line | ⚪ chờ |
| **O4** | **57 wal: đã lọt** | 🔴 **KHÔNG DỌN** — xem §3.5 | ✅ anh đã đồng ý (#3 "OK đồng ý") — ghi lại làm audit-trail |

## 3.5 57 wal: — KHÔNG DỌN (3 lý-do xếp theo sức nặng)

1. **Vi-phạm floor.** `harness-11-engine.md:408` (N.4) + `session-end.md:113`: *"KHÔNG BAO GIỜ rewrite commit đã-push"* = 🔴 FUNCTION-FLOOR, hard-safety **có chủ-đích**. Dọn = **tự phá điều-khoản mình vừa adopt**.
2. **Blast-radius phá chuỗi bằng-chứng của CHÍNH H22.** Range từ wal: cũ nhất (`ec81c5c`) = **78 commit, 21 commit THẬT đổi SHA**. Citation đo được: `12071c5` → cited **12 file** · `67be443` → **10 file** — **chính là 2 commit chứng-minh hook-FIRE** ở `engine:407` (N.3) + **adopt-report ĐÃ GỬI AI_INFRA**. Rewrite = **tự vô-hiệu-hoá bằng-chứng VERIFIED-RUNTIME của H22** + phá `§6.3` "SERVER-VERIFIABLE chain" + bắn cờ C1 hàng loạt + adap-report thành **không đối-chứng được**. **Đây là cái giá đắt nhất.**
3. **Hại thực-tế = 0.** Commit nội-dung hợp-lệ, không corrupt, chỉ ồn `git log`. Cộng: force-push remote dùng chung + Gitea runner (CI #388/#389 tham-chiếu) + repo trong **Dropbox** (rewrite + cloud-sync ⇒ rủi-ro `index.lock`, đã ghi N.7(e)).

**Khung đúng:** *57 = tổn-thất chìm, **cách-ly bằng chính-sách**. Giá-trị push-guard ở SE = **cầm máu ~10/phiên**, KHÔNG phải dọn quá-khứ.* Muốn "sạch mắt" ⇒ cosmetic 0-rewrite: alias `git log --invert-grep --grep='^wal:'`, hoặc note `rules.md §5.2` (wal: pre-S119 = noise đã-đóng-băng).

## 3.6 adap-request — 4 ứng-viên (anh-directed: report để hub tổng-hợp + broadcast sister)

| # | Nội-dung | Nấc |
|---|---|---|
| **R1** | 🔴 **H8 ⟂ pin-simple ⟂ H23 = 3 phát-biểu KHÔNG tương-thích** trên cùng 1 trục. H23 §1 tả **form riêng hub** như **sàn đã chốt**, mâu-thuẫn pin-simple (*"form mỗi đội tự quyết"*, *"cả hai đều đạt sàn"*); H8 (*"BẮT BUỘC mọi sister"*) **chưa từng retract tường-minh**. **Bằng-chứng: hub tự PIN 17/17 `claude-opus-4-8` trong khi broadcast all-inherit cho sister.** Sister đọc H23 nghĩa-đen ⇒ **tự tháo H8**. → Đề-nghị hub **reconcile + re-broadcast** | evidenced, đo được |
| **R2** | 🔴 **KHUNG push-guard giả-định SAI**: *"squash phủ được mọi wal: chưa-đẩy"* — sai với **mọi repo có hook per-turn + closeout >1 commit**. Hub tự soi 9-chưa-đẩy + **1** lọt; **SE = 57 (57×)**. Đề-xuất (α) KHUNG nói rõ squash phải phủ **toàn range chưa-đẩy**, không chỉ đuôi | evidenced 57 vs 1 |
| **R3** | 🔸 **Đề-xuất căn-cơ (vượt khung ⇒ PHẢI request)**: hook commit vào **side-ref** (`refs/wal/snapshot` qua `commit-tree`+`update-ref`) thay nhánh chính ⇒ nhánh **không bao giờ có wal:** ⇒ n≡0 trivially, durability giữ (ref trong `.git`, Dropbox sync). **Lệch N.2 floor** (*"git add 3 path + git commit"*) ⇒ **KHÔNG tự làm**. 🔸 **CHƯA VERIFY thực-nghiệm** — mới là lập-luận plumbing | proposal, khai chưa-verify |
| **R4** | 🔴 **EOL broadcast: nhân-quả sai + mô-hình thiếu.** (a) *squash lật EOL* — **sai với SE** (§5.0 = `reset --soft` = worktree-neutral; 188 = `dotnet ef`/VS). (b) Mô-hình "CRLF **VÀ** `': '`" **THIẾU** — lane B **đọc mã-nguồn** (js-yaml 4.1.1 trong `claude.exe`): `readLineBreak` CRLF-safe ⇒ `': '` N/A cho block-scalar; **NHƯNG regex delimiter LF-only `^---[ \t]*\n` ×2 song song bản vá `\r?\n` ×2 ⇒ CRLF ĐƠN-ĐỘC có thể đủ giết**. (c) acceptance `count==0` **toàn-repo** = **dương-giả factory** ⇒ phải scope. **Hub tự khai chưa đọc mã-nguồn — SE đọc được và bổ-sung** | evidenced tầng mã-nguồn |

## 3.7 n-a hợp-lệ (khai ở adap-report)

| Mục | Nấc |
|---|---|
| EOL ③(c) quote description | **n-a THẬT** — 12/12 block-scalar, js-yaml 4.1.1 chứng tầng mã-nguồn |
| H23 (2)(3) alias-vs-full-id | **rút gọn** theo §4 project-fit (SE = một-model-cho-mọi-sub) — **nhưng chỉ đúng Class A**; Class B (2) SỐNG ⇒ GAP#6 |
| H23 §2(5) kỷ-luật động-từ | **n-a ĐÃ THOẢ** — grep 0 mis-nấc |
| H23 §2(4) bộ-soát trợ-kiểm | **n-a: chưa dựng** (§4 cho phép "n-a: chưa dựng bộ-soát", giữ phòng-thủ) |
| Sàn-1 nửa-(ii) truyền cờ nội-bộ | **≈n-a** — không có lời-gọi engine→engine trong `hmw.js` |
| push-guard (b) precheck ref | **n-a** — `origin/main` EXISTS (giữ else vô-hại) |
| push-guard (c) remote-branch | **ĐÃ ĐẠT SẴN** — §5.0 dùng đúng `origin/main..HEAD` |
| owner-sign | **0 adopt** — SE stamp trước hub-sign |

## 3.8 Rủi-ro + cách chặn

| Rủi-ro | Chặn |
|---|---|
| 🔴 `git checkout` mù trên file dirty ⇒ **hủy việc** (= `E-029` hub) | W0.2 **phân-loại trước**; chạy khi worktree sạch; `git status` gate |
| 🔴 push-guard `-eq 0` chép nguyên ⇒ **DEADLOCK push** (§5.0 không squash kẹp-sâu) | **W0.3 PHẢI trước** — sửa §5.0 = tiền-đề |
| 🔴 `grep -c` exit-1-khi-0 ⇒ ca sạch bị chặn | `n=$(…); [ "$n" -eq 0 ]`. **Sửa luôn `WAL.md:15` `verify:`** |
| 🔴 Vá `permission-matrix` sớm ⇒ **giết positive-control** | W4 **sau** W1①; reviewer chứng-kiến fire trước |
| 🔴 Sàn-3 wire thẳng ⇒ **bão dương-giả** (8/27 orphan) | W0.5 baseline trước |
| 🔴 Detector độ-tươi parse ngây-thơ ⇒ **tự giết** (`2026-08-01` tương-lai) | **neo-phạm-vi BẮT BUỘC**; test-vector `STATUS.md:6` ⇒ `2026-07-14` |
| 🔴 `rebase -i` bị chặn harness | `GIT_SEQUENCE_EDITOR` + **fixup** (KHÔNG drop) |
| 🟡 gotcha #53 return-garble (~21 lần) | RETURN-FORMAT VERDICT-header + schema-nhỏ; garble ⇒ recover-from-disk |
| 🟡 gotcha #68 IDE diagnostic giữa background-agent = snapshot dở | Chỉ tin build SẠCH chạy SAU agent |
| 🟡 **CI trigger** — AS-6 (từ #495): `.claude/agent-memory/**` + `runs/**` **KHÔNG** trigger; **`scripts/*.ps1` + `.json` + `.gitattributes` THÌ CÓ** | W1/W2 sẽ trigger CI ⇒ cicd-monitor verify; **KHÔNG** dùng `paths-ignore` để né (che drift) |
| 🟡 Restart CLI — command `.md` no hot-reload (`fable-clone.md:8`) | Khai nấc **"executed → restart-then-verify"**; 2 agent MỚI = **ADD** ⇒ S107 hot-reload OK **nhưng ENV-DEPENDENT** ⇒ restart = default |

## 3.9 Acceptance TỔNG (gate đóng spec)

```
[ ] W0.2  git ls-files --eol .claude/agents .claude/commands .claude/skills | grep -c 'i/lf.*w/crlf'  → 0
[ ] W0.3  phiên ≥2 commit thường xen wal: → n=0   (KHÔNG deadlock)
[ ] Sàn1  phóng 3-task thiếu args.run → throw
[ ] Sàn2  cắt session-end → phiên kế thấy `closing:` ; no-op → grep -c '^closing:' = 0
[ ] Sàn3  "WAL trống + run-folder mở" → CẢ /tiep VÀ 0.7 hỏi-lại ; grep -c "chain rỗng" session-start.md = 0
[ ] Sàn4  4 verdict ghi FILE (không gạch-đầu-dòng) ; inject-lỗi → FLAG
[ ] Sàn5  chênh cờ-vs-nội-dung = 0 hoặc in danh-sách
[ ] push  đếm=0 CÙNG transcript-turn với git push ; sau push wal: trên origin/main KHÔNG tăng (giữ 57)
[ ] H23   Grep tool `tier:'opus'` trong fable-clone.md ≥1 ; 3 note-đầu-cây ≤5 dòng trên spawn đầu
[ ] H24   ls .claude/agents/*.md = 14 ; VALID_ROLES = 14 ; detector in 2026-07-14 (không 2026-08-01)
[ ] H24   TOTAL FLAGS ≥ 46 VÀ có dòng permission-matrix/SKILL.md   ← fire TRƯỚC vá
[ ] H24   /session-start 2× cùng HEAD → counter +1 ; counter lùi → fail-loud ; bỏ phiên → OVERDUE
[ ] EOL   validator FAIL trên copy-CRLF cây-tạm ; PASS trên 12 agent thật ; khai control = synthetic
[ ] cicd  CI PASS sau push (scripts/*.ps1 + .gitattributes CÓ trigger)
```

---

## Nấc trung-thực (giữ nguyên khi adap-report)

- **Provenance:** `/fable-clone investigator-codebase` 5-lane ensemble `wf_1f6bd5e2-478` (Opus, 5/5 return, **0-garble**) + **lead soi hub trực-tiếp** (`lead-evidence-hub-inspect.md`). Lead **refute + synthesize**; **4 cú lật bác cả tiền-đề của chính lead** (§1.2).
- **Nấc SE sau adopt:** `executed → restart-then-verify` (command `.md` no hot-reload).
- **KHÔNG overclaim:** Sàn-1 chỉ phủ `hmw.js`; **raw Workflow/Agent tool = kẽ CÒN-LẠI KHÔNG gate được** (F2 — chính run này đi đường đó). Validator **PHÁT-HIỆN** không **NGĂN-CHẶN**. Toàn tầng H24 = **quy-ước lead-executes**, **KHÔNG hook, KHÔNG enforce** — cấm viết "cơ-giới-hoá".
- **Control yếu hơn hub:** SE **không có file-đã-chết** ⇒ synthetic control (khai thật).
- **H24 dogfood n=1 tại hub (mốc-0), chưa chu-kỳ-2** ⇒ **cấm bán "đã chứng-minh hiệu-quả"**. Flag TĂNG khi thêm detector-class = **mở-rộng-thiết-bị**, KHÔNG phải governance mục-ruỗng (caveat (d)).
- **CHƯA VERIFY:** R3 side-ref (lập-luận plumbing, chưa thực-nghiệm) · hub `spawn_model_audit` (`ls scripts/|grep -i spawn|model` = rỗng dù commit `9bb5701` nhắc "LIVE 29-dispatch") · `fable-clone.md` từng có `tier:'opus'` trước S110 hay chưa (hiện-trạng vắng = **VERIFIED**).
- **E-030 hub defer EXECUTE CRLF sang s95** ⇒ **SE đi TRƯỚC hub** ở khối EOL; không có mẫu chạy sẵn để chép.
