# Harness-11 — Engine bộ-nhớ-và-governance TỰ-BẢO-TRÌ (SE canonical)

> **Adopt S75 (2026-06-18)** — AI_INFRA broadcast `2026-06-18-Governance-harness-11` + checklist (inbox `broadcasts/inbox/ai_infra/`). Áp qua 2 workflow (IMPLEMENT `wf_c5e5844e-7c1` + REVIEW) per mandate ⑤. adap-report → `docs/governance/adap-reports/2026-06-18-Governance-harness-11.md`.
>
> 🔑 **Đây là CANONICAL cho engine governance của SE.** Doc khác (`agents/README`, `session-start/end`) **TRỎ về đây**, KHÔNG copy luật (B1 dogfood — một-chỗ-đổi).
>
> 🔭 **Phạm-vi (S79 consolidate · S81 +§G):** doc gốc Harness-11 (PHẦN A-D) nay **gom thêm §E (User-Mark H-12/13 canonical §P)** + **§F (Harness-14 Eval/Budget/Outcome)** + **§G (Harness-15 memory-budget per-agent token-based, S81)** — 1 engine governance hợp-nhất (mirror AI_INFRA "harness-all" consolidation). Ledger mark = `.claude/governance/ACTIVE-MARKS.md`.
>
> 🔑 **Nguyên-lý lõi:** "tự-bảo-trì" = luôn-TỰ-BIẾT khi có drift (detector tự-động, NÊU-CỜ ngay) **CHỨ KHÔNG tự-viết-lại** nội-dung/luật. DÒ tự-động; SỬA do người-chủ-trì (em-main) làm trên cờ. **BAR-KHÔNG-HẠ = một-người-ghi (single-writer)** — "tự-bảo-trì" TUYỆT-ĐỐI KHÔNG miễn-trừ chốt này.

---

## Bản-đồ artifact (engine SE)

| Cấu phần | Artifact | Nấc |
|---|---|---|
| PHẦN A — hot-mem auto-archive | `scripts/memory-archive-gate.ps1` + `.claude/agent-memory/memory-budget.json` (`archive_gate` params) + `session-end.md §L.b` | mechanized DRY-RUN planner + convention trigger (no-OS-hook) |
| PHẦN B — derived→canonical + freshness | luật B1 (dưới) + `scripts/governance-detectors.ps1` (C2 staleness) | detector mechanized + fix gated qua người |
| PHẦN C — 3 grep detector | `scripts/governance-detectors.ps1` (C1/C2/C3 + C4 self-exclusion + C5 resolve-condition) | mechanized NO-API, DÒ+FLAG-only |
| PHẦN D — orchestration | doc này (3-tier + 1-direction) + `session-start.md`/`session-end.md`/`ultra-on.md` cadence + `hmw.js` checkpoint | mix mechanized + convention |
| PHẦN E — User-Mark (H-12/13, canonical §P) + RC-signature | doc này §E (cơ-chế P1-P10) + `.claude/governance/ACTIVE-MARKS.md` (sổ-cái + display) + 4 lệnh `/user-mark-*` (interface) + `session-start §2.1.4`/`session-end §L.b(h)` (display) | convention (report-trước-đóng-dấu P4) + mechanized (display gắn-lệnh-phiên + tool-deny settings P9) |
| PHẦN F — Harness-14 Eval/Budget/Outcome | doc này §F (3-mức maturity + method) + `eval/` golden-set harness (F.2) + `memory-budget.json`/`measure-agent-memory.ps1` (F.3 = PHẦN A) | eval = executed-file + convention (manual) · budget = mechanized ALIGNED · outcome-correlation/hit-rate = Mức-2 tool-pending-data |
| PHẦN G — Harness-15 memory-budget per-agent (token) **+v2 §G.4 +v3 §G.5** | doc này §G (SÀN floor + 3-tầng token + **§G.4 hot-feed-lớn / L2-L3-bỏ-trần / %-print / ranh-giới-vai-trò** + **§G.5 full-parity 220/60/50 + spawn-fill-to-budget**) + `memory-budget.json` (`harness_floor` + `token_governor` v3 + `spawn_fill_directive` + `archive_gate.value_protect`) + `session-start §2.1.5`+**§2.1.6** + **`session-end §L.b(c)`** | 2-governor mechanized (byte ⟂ token config) + sàn-chức-năng = convention; **v3 (1)=config · (2)(3)=convention** |
| PHẦN H — Harness-16 MFE (memory-fidelity-**EVAL**) | doc này §H (coverage/retention method + maturity-tier) + `scripts/mfe-eval.ps1` (deterministic NO-API) + `eval/mfe/` (seed + README) + `memory-budget.json` (`mfe` config) + **READS** `token_governor` (single-source, never writes) + `session-start §2.1.6`/`session-end §L.b(c)` opt-in | deterministic $0 = executed-file + runtime-smoke (S93) · judge = **SCAFFOLD-only** (Mức-2 chờ age+independent-judge) · READS-not-writes budget |
| PHẦN I — Harness-17 vòng tự-cải-thiện (Đo→Tinh-chỉnh→Kiểm) | doc này §I + `scripts/memory-selfimprove-audit.ps1` (C1 spec-audit NO-API) + `.claude/governance/reinject-ledger.md` (B2 CG-1) + COMPOSE `mfe-eval.ps1`(A2)/`memory-archive-gate.ps1`(archive)/`governance-detectors.ps1`(change-gov) + `session-start §2.1.7`/`session-end §L.b(c)` | C1 spec-audit + A2 MFE + HCV-proxy = mechanized · B1/B2/B3 refine + C2 spot-check = convention · C3/CG-2 = REUSE §D.3/§G.2(b) |
| Canonical state (nguồn-chuẩn) | `docs/STATUS.md` CURRENT STATE table | — |

---

## PHẦN A — Hot-mem auto-archive by budget (🟡 TAILORED)

SE-present từ Harness-9 (L2 archive byte-exact + `_INDEX` substring-pointer + gist). Harness-11 thêm 3 tham-số chống-thrash + standing-gate:

- **A1 byte-gate @session-end** — `memory-archive-gate.ps1` đo byte mỗi `agent-memory/<sub>/MEMORY.md` vs cap. (Trigger = `session-end.md §L.b` convention người-kích — engine no-OS-hook.)
- **A2 additive MOVE** — bản-cũ-nhất → `archive/<YYYY-MM>.md`, NEVER overwrite (runtime-proven `h910-curate`: +N -0 byte-exact).
- **A3 `_INDEX` pointer-only** — 1 dòng/bản-ghi, con-trỏ substring sha-keyed (`memory-budget.json:19`).
- **A4 hysteresis** — dồn tới DƯỚI `low_watermark = 0.85 × cap` (không dừng ở vạch). [param `archive_gate.low_watermark_ratio`]
- **A5 keep-floor** — luôn giữ ≥ `keep_floor_entries` (5) bản-ghi gần nhất, không vét sạch.
- **A6 2-strike** — chỉ ĐỀ-XUẤT dồn khi over-cap ở 2 lần kiểm liên-tiếp (`strike_threshold`), chống alert-fatigue.
- **A7 NO-API L1-eval** — sau dồn: (i) resolve-con-trỏ (mọi pointer `_INDEX` grep-định-vị được trong archive) + (ii) byte-0-loss (tổng trước = sau). grep + measure only, KHÔNG API.

> 🟡 Con-số (cap 25600, 0.85, 5, 2) = TAILOR. SE chọn DRY-RUN planner (in kế-hoạch + người duyệt) thay auto-move — vì move = đụng memory canonical (D6/D9, không tự-ghi).

## PHẦN B — Derived-doc TRỎ canonical, KHÔNG copy (🔴 FUNCTION-FLOOR)

- **B1 — derived TRỎ canonical:** tài-liệu-dẫn-xuất (`CLAUDE.md` root/docs, `skills/*/SKILL.md`, `agents/README`) KHÔNG copy volatile-token (mig#·test#·gotcha#·table#·bundle-hash·model) — **TRỎ `docs/STATUS.md`** (canonical). Lý-do: một-chỗ-đổi-N-chỗ-drift = nguồn drift #1 (chứng-minh sống: root CLAUDE.md kẹt mig 53 qua S70-S74).
- **B2 — giữ readability:** dữ-kiện-ổn-định (tech-stack, module-table, convention) GIỮ inline đọc-được; CHỈ pointer cái HAY-đổi (tránh pointer-soup). Exemplar sẵn: `docs/PROJECT-MAP.md` (0 count-token, 241 dòng).
- **B3 — freshness-DETECT:** `governance-detectors.ps1` (detector C2) grep volatile-token derived vs canonical → FLAG lệch (KHÔNG tự sửa).
- **B4 — fix GATED qua người:** FLAG → em-main xem diff → ghi (single-writer). KHÔNG đường tự-ghi-thẳng. (Mechanized backstop: git-diff commit-gate + run-folder TRACKED.)

## PHẦN C — 3 bộ dò grep tất-định (🔴 FUNCTION-FLOOR MANDATE)

Tất cả ở `scripts/governance-detectors.ps1` — NO-API (grep/measure only), **DÒ+NÊU-CỜ-only** (không tự sửa). Chạy @session-start (D1) báo cờ.

- **C1 broken-pointer** — grep ref nội-bộ (gotcha #N > max · `[[wikilink]]` target thiếu) → FLAG dangling.
- **C2 derived-staleness** (= B3) — count-token derived vs STATUS canonical (+ cross-check disk: mig = `ls Migrations/*.cs` excl Designer/Snapshot; gotcha = max `### N.` trong gotchas.md) → FLAG mismatch + 'canonical-itself-stale' nếu STATUS lệch disk.
- **C3 vocab-fork** — alias-set (seed: `wave-folder↔run-trace`, `Dự trù PRO↔Ngân sách PRO`, `two-tier↔all-inherit`) → FLAG khi ≥2 biến-thể cùng sống.
- **C4 self-line exclusion** 🔴 — detector loại path tự-mô-tả (`governance-detectors.ps1`, `harness-11-engine.md`, `broadcasts/**`, `runs/**`) TRƯỚC khi FLAG → 0 self-match.
- **C5 resolve-condition** 🔴 — mỗi FLAG kèm `resolve: <điều-kiện-gỡ-cờ>`. 2-strike anti-repeat = convention em-main áp (detector stateless per-run; KHÔNG over-claim mechanized-2-strike cho detector).

## PHẦN D — Engine điều-phối (🔴 FUNCTION-FLOOR)

### D.1 — Bảng-nhịp 4-lớp (SE-present, cadence-file)
- **D1 session-start = DÒ+BÁO** — `session-start.md §2.1.1` monitor RE-REPORT + §2.1.2 budget-audit + **chạy `governance-detectors.ps1` báo cờ** (KHÔNG sửa). INFORM-only.
- **D2 session-end = BẢO-TRÌ+archive** — `session-end.md §L` (byte-gate A + harvest-GATE 5-trục + gác-cờ chưa xử-lý).
- **D3 per-turn = chắt-lọc-APPEND** — harvest-LIỀN sau mỗi fan-out (`ultra-on.md` P3, C4 primary), qua em-main.
- **D4 threshold = workflow-gate** — chạm hệ-trọng → bắt qua Workflow (`hmw.js:76` checkpoint THROW = mechanized tripwire). run-id = bằng-chứng.

### D.2 — Tách-an-toàn 3-tầng (🔴 NHÃN-HOÁ EXPLICIT — đây là chuẩn-hoá H11)
> 🧪 **Phép-thử-ranh-giới tất-định:** hỏi "thao-tác này có git-diff vô-hại-ngữ-nghĩa không?" → CÓ = tầng AUTO; chạm prose/luật/con-trỏ/thẩm-quyền/copy = tầng DÒ+FLAG. KHÔNG tin nhãn "máy-móc thôi mà" — xét git-diff THẬT.

| Tầng | Cái gì | Đường-đi |
|---|---|---|
| **D5 — AUTO (semantic-null)** | dồn-archive ADDITIVE (byte-0-loss) · dựng-lại `_INDEX` · APPEND-chắt-lọc gist · đo-byte | tự-động OK (có A7 NO-API gate bảo-chứng) |
| **D6 — DÒ + NÊU-CỜ** | mọi thứ chạm prose/luật/con-trỏ-mục/thẩm-quyền/copy-chéo (3 detector C + monitor H1/H2) | chỉ FLAG → em-main soạn bản sửa (KHÔNG nhánh tự-ghi) |
| **D7 — OWNER-APPROVE** | đổi-luật · đổi-thẩm-quyền · ghi-lan derived · đổi-tên-khái-niệm · nâng-guard chính-thức | anh (project-owner) duyệt trước hiệu-lực — **vận-hành-hoá bởi report-trước-đóng-dấu §E.2** (đổi-luật cấp-governance đi qua quy-trình 4-bước + chữ-ký RC) |

### D.3 — Bốn chốt chống-tự-hỏng
- **D8 khoá-chiều 1-CHIỀU** 🔴 (codify mới H11) — DÒ chỉ đi **canonical → derived** (bắt derived cũ). **TUYỆT-ĐỐI KHÔNG** lấy giá-trị từ derived ghi ngược canonical. (Vd: detector đọc STATUS so root CLAUDE.md; KHÔNG bao giờ đọc root CLAUDE.md ghi vào STATUS.)
- **D9 chỉ-APPEND single-writer** 🔑 BAR-KHÔNG-HẠ — mọi ghi-bộ-nhớ = APPEND qua em-main; KHÔNG sub tự ghi đè memory-chính/luật. Mechanized: `store_memory` strip mọi sub (runtime S48 0/8) + hmw.js SCHEMA return-delta-only.
- **D10 ghi qua file-tool only** — Write/Edit, KHÔNG shell-append (tránh mojibake/$-expansion = gotcha #61). hmw.js:111 cấm Bash-write MD. (convention — Bash residual chưa block cứng.)
- **D11 archive = MOVE-không-XOÁ** — byte 0-loss (md5sum/grep-Fxf artifact `_ledger.md:14`).

---

## PHẦN E — User-Mark (Harness-12/13) + chữ-ký RC quyết-định = canonical §P (🔴 FUNCTION-FLOOR)

> **Adopt S79 (2026-06-20)** — AI_INFRA `2026-06-19-Governance-harness-all-update` (User-Mark) + `…rc-signature` + **canonical §P** (P1-P10). Neo + cưỡng-chế **quyết-định cấp-governance** (luật/chính-sách/kiến-trúc/harness) để không-quên + không-giảm-bằng-cảm-tính. **KHÔNG** dùng cho vận-hành/tác-vụ thường-ngày (P6 scope-discriminator).
>
> 🔑 **3 cấu-phần (B1 phân-vai):** §E này = **CƠ-CHẾ** (codify §P P1-P10 cho SE) · ledger = `.claude/governance/ACTIVE-MARKS.md` (SỔ-CÁI + display, single-writer em-main) · interface = 4 lệnh `/user-mark-active-high|active|medium|disable`. Cấp do em-main gán + anh confirm (KHÔNG agent tự-phán cảm-tính — P8).
>
> 🗺️ **Bản đồ thẩm-quyền owner (anh gật @S185/YC-022):** cái gì là owner-SỐ / owner-LUẬT — tra **MỘT CHỖ** [`bang-tham-quyen-owner.md`](bang-tham-quyen-owner.md) (10 số + 12 luật, mỗi dòng kèm key/nhà + lệnh-anh-gần-nhất). B1: engine này CHỈ TRỎ, không chép dòng nào.

### E.1 — Chữ-ký + 4 cấp + binding (P1·P2·P3·P8)
- **P1 Chữ-ký:** mỗi mark mang `RC-pqhuy1987-dd-mm-yyyy-hh-mm-ss` (REUSE format rc-signature, timestamp lúc anh sign-off). Bằng-chứng-có-niêm: minh-oan · tranh-luận-bằng-bằng-chứng (debate khi ruling mâu-thuẫn) · trách-nhiệm-2-chiều. Forward-only (no-retrofit từ 2026-06-20).
- **P2 4 cấp deterministic** (anh-instruction trực-tiếp, KHÔNG design-invention) — **trực-giao** với tầng-an-toàn D5-D8:

  | Cấp | Hành-vi xác-định (P8) | Vi-phạm |
  |---|---|---|
  | 🔴 **Active-High** | bắt-buộc phải làm (cao nhất) | → `error-ledger.md §L.a` RCA (P9) |
  | 🟢 **Active** | follow + nhắc-lại xuyên-suốt | nhắc-lại (KHÔNG mandate RCA-tự-động) |
  | 🟡 **Medium** | neo quyết-định chưa-rõ; follow nhưng **skippable** | — |
  | 📦 **Disable** | tắt (reversible, giữ audit-trail) | — |

- **P3 Binding nhị-phân:** **có stamp = LỆNH · không stamp = đang BÀN** (thảo-luận ≠ lệnh execute).
- **P8 No-cảm-tính:** mỗi cấp = hành-vi DETERMINISTIC, KHÔNG agent tự-phán. "Tự-skip-workflow tiết-kiệm-token" = lệch → theo rule TƯƠNG-ĐỐI H6.1 (substantive→HMW · trivial→solo), KHÔNG số-magic.

### E.2 — Flow DACI report-trước-đóng-dấu + scope-check (P4·P6 = vận-hành-hoá D7, 🔴 floor)
Đổi-luật cấp-governance đi qua **các bước, KHÔNG được tắt** (4 lệnh `/user-mark-*` thực-thi):
1. **Scope-check (P6):** "Có đổi CANONICAL §-rule / authority-routing không? KHÔNG → đây là **work-flow** → KHÔNG mark." (User-Mark = Gov-decision, KHÔNG task-execution.)
2. **Adjust-Gov (P4):** soạn nội-dung luật mới — em-main **single-writer D9**, KHÔNG fan-out.
3. **Double-check (P4):** quét `§A-§E` + `error-ledger.md` Active-Guards + `ACTIVE-MARKS.md` + `governance-detectors.ps1 C3` tìm mâu-thuẫn (cross-harness / vocab-fork).
4. **🔴 Báo anh kèm 3-7 tiêu-chí khách-quan (P4):** điểm-đau đã-xảy-ra-thật · khối-lượng · chất-lượng (KHÔNG quy-mô-đội / thời-gian-tuổi); cấp đề-xuất; §-target; supersedes?; mâu-thuẫn đã-rà. **CHỜ anh confirm. KHÔNG stamp trước báo-cáo.**
5. **Stamp (anh confirm):** `RC-pqhuy1987-dd-mm-yyyy-hh-mm-ss` → ghi `ACTIVE-MARKS.md` + áp §-change vào canonical.

> NEW vs D7-cũ = scope-check tường-minh (P6) + rà-mâu-thuẫn (bước 3) + 3-7 tiêu-chí khách-quan (P4). D7 vốn = "owner duyệt trước hiệu-lực"; §E.2 làm rõ QUY-TRÌNH, KHÔNG tạo flow song-song (tránh C3).

### E.3 — Cưỡng-chế 2-kênh, KHÔNG hook (P9 — = XÁC-NHẬN cái SE đã chứng-minh)
| Kênh | Vi-phạm | Cưỡng-chế | Bằng-chứng SE sẵn-có |
|---|---|---|---|
| **Behavioral-mark** | ghi `error-ledger.md §L.a` (AS-table) + **RCA** | convention (kỷ-luật người+AI) | §L.a 2-strike-promote đã chạy |
| **Tool-action-mark** | **permission-DENY** ở `.claude/settings*.json` (deny-absolute) — **KHÔNG hook** (hook fails-open = observability-only) | mechanized (config) — *xem D10: Bash residual chưa block cứng = gap honest* | **E-006/AS-10** (`error-ledger.md`): hook fails-open → `store_memory` allowlist-strip = gate THẬT; git-diff = backstop |

### E.4 — Lifecycle + storage/SHOW (P5·P7)
- **P5 Lifecycle:** con-trỏ-XUÔI 1-chiều (mark-mới `supersedes:` mark-cũ) + cập-nhật status/cấp mark-cũ (downgrade HOẶC →Disable). 🔴 supersede mark **Active-High** = anh-confirm RIÊNG (KHÔNG auto-downgrade). **KHÔNG freeze-immutable** (git-history audits; anh sửa/đổi-ý qua re-stamp). Disable ≠ revert-rule (tách-bạch).
- **P7 Storage + SHOW:** ledger `.claude/governance/ACTIVE-MARKS.md` (single-writer em-main B3; P7 location-agnostic). 🔴 **SHOW @session-start §2.1.4 + @session-end §L.b(h)** status-filtered: Active-High + Active HIỆN rõ · Medium tóm-tắt · Disable/superseded ẨN.

### E.5 — Objective-only + neo-lý-tính (P10 = `rules.md §6.6`, 🔴 floor)
- Adopt/giảm function bằng **điểm-đau + khối-lượng + chất-lượng KHÔNG quy-mô-đội / KHÔNG thời-gian-tuổi**; "overkill/quá-mức-solo-dev/cảm-tính/cũ-rồi-nên-bỏ" = **BÁC**.
- **AI = neo-lý-tính:** gặp quyết-định biện-minh bằng cảm-giác → em-main **nêu-cờ + bác trên cơ-sở khách-quan**, KHÔNG xoa-dịu. Thẩm-quyền phán "cần/thừa" = **tầng xuyên-dự-án (AI_INFRA)**, KHÔNG dự-án đơn-lẻ. (Bối-cảnh: rule nảy từ audit thật — 1 dự-án từ-chối chức-năng chống-lách-engine bằng "quá mức solo-dev"; điều-phối ban-đầu cũng xoa-dịu trước khi được chỉnh.)

---

## PHẦN F — Harness-14: Eval / Budget / Outcome (🟡 method TAILORED + 🔴 rule-floor)

> **Adopt S79 (2026-06-20)** — AI_INFRA `2026-06-20-Governance-harness-14-adopt` + checklist-14. Cơ-chế **đo chất-lượng + định-cỡ bộ-nhớ** trên nguyên-lý nền: **mọi con-số suy từ nhu-cầu thật, KHÔNG đặt-cứng tùy-tiện.** 🔴 rule bắt-buộc (time/age = false-proxy) đã codify ở mark `RC-…10-29-11` + `rules.md §6.6` — §F này = phương-pháp + trạng-thái-độ-chín honest.

**4 nguyên-lý nền:** ① suy-ra-từ-nhu-cầu KHÔNG đặt-cứng (cấm "số ma-thuật") · ② loại proxy-sai (time/age/quy-mô-đội) · ③ chỉ-báo phục-vụ kết-quả (tối-ưu chỉ-báo bỏ kết-quả thật = kinh-tế-giả) · ④ trung-thực về độ-chín.

### F.1 — Trạng-thái độ-chín 3 MỨC (🔴 honest — KHÔNG nâng mức thấp lên cao)
- **Mức 1 LÀM-ĐƯỢC-NGAY:** eval-precision (đo chất-lượng truy-xuất) — SE CÓ harness chạy thật (xem F.2).
- **Mức 2 ĐANG-TÍCH-LŨY (có công-cụ ĐO, CHƯA đủ data ra số):** budget-theo-hit-rate (cần nhật-ký truy-cập memory) + tương-quan-outcome (cần nhiều tuần đánh-giá). **🔴 Cổng dữ-liệu: dưới ngưỡng → DỪNG, giữ quy-ước đo-được, KHÔNG bịa số.**
- **Mức 3 TẦM-NHÌN-XA (tạm gác):** trần "nhiễu ngữ-cảnh" — không mốc-cứng đáng-tin theo nghiên-cứu → sao-bắc-đẩu định-hướng, KHÔNG ép số.

### F.2 — Eval-precision (🟡 — SE đã CÓ, map onto, honest)
SE đã có RAG golden-set harness (KHÔNG phải gap): `eval/golden-set-solution_erp.jsonl` (14 query: 11 pos + 3 neg) + `eval/evaluator.md` (Spec-A strict, recall@5 gate ≥0.7, rerank ≥0.7 **per-query confident-hit** [gate aggregate avg-rerank 0.65], Case A/B/C/D triage) + `eval/trial-state-lock.json` (baseline recall@5=1.0, chunk-drift 5%). Nguyên-lý H-14 áp:
- **Cỡ golden-set suy từ độ-chính-xác mong-muốn** (công-thức cỡ-mẫu) KHÔNG đặt-cứng — hiện 14 query là quy-ước-đo-được; khi mở-rộng → suy theo confidence-level.
- **Chống nhồi-từ-khóa:** query test KHÔNG lặp nguyên-văn từ-khóa tài-liệu đích (đo năng-lực thật, không trúng-vì-trùng-chữ).
- **Ngưỡng theo đường-nền tương-đối** (so `trial-state-lock` baseline + biên tụt nhỏ) KHÔNG mốc tuyệt-đối tự-đặt; **mẫu-số động** (tỉ-lệ theo số query thật-có).
- 🟡 **Honest nấc:** harness EXISTS + well-specified nhưng **weekly-Friday MANUAL** (`evaluator.md` chạy MCP `search_memory` tay), CHƯA automated trong `scripts/`; RAG re-index = AI_INFRA-owned op. → **executed-file + convention (manual gate)**, KHÔNG mechanized-CI. KHÔNG overclaim "tự-chạy".

### F.3 — Budget bộ-nhớ (🟡 ALIGNED — đo-thật, KHÔNG số-ma-thuật)
- **Đã ALIGNED:** `memory-budget.json` cap = **seed-by-MEASURE** (`scripts/measure-agent-memory.ps1`, `_note` "SEEDED BY MEASUREMENT NOT imagined headroom"); `archive_gate` = hysteresis 0.85 + keep-floor-5 (newest-protection) + 2-strike — **0 núm decay-theo-tuổi** (≙ mark `RC-…10-29-11`). Trần = hệ-quả (dung-lượng ÷ tốc-độ-thay-mới qua A4 hysteresis), KHÔNG retention-by-age. Cross-ref **PHẦN A**.
- 🟡 **Hit-rate sizing = Mức 2 chờ-tích-lũy:** SE chưa có công-cụ đếm-lượt-truy-cập-memory → budget giữ **quy-ước đo-được** (đo byte thật). KHÔNG trình như "đã suy từ hit-rate".

### F.4 — Outcome (🔴 floor + 🟡 tích-lũy)
- 🔴 **Chống kinh-tế-giả (Goodhart) — tức-thì:** cắt chất-lượng tiết-kiệm token → làm-lại → tốn HƠN (mark/§6.6 + H8.2 "KHÔNG hạ model"). Mỗi chỉ-báo tự-động (recall/hit-rate/byte) gắn câu hỏi "có làm anh chốt-OK sớm hơn không". Áp NGAY, không chờ data.
- 🔴 **Ground-truth = đánh-giá chủ-dự-án** (đo gián-tiếp qua số-lần-làm-lại); chỉ-báo tự-động chỉ là trung-gian.
- 🟡 **Tương-quan chỉ-báo↔đánh-giá-người = Mức 2 chờ-tích-lũy:** SE chưa có công-cụ thu-đánh-giá + đếm-rework có cấu-trúc (error-ledger §L.a RCA = mầm gần nhất) → cần nhiều tuần mới khẳng-định tương-quan. **KHÔNG bịa số tương-quan "đẹp".**

> **Tổng nấc §F (honest, checklist-14):** 🔴 floor (loại proxy time/age 4 mục + outcome 2 mục) = ĐẠT qua mark + §6.6 + §F.4. 🟡 method = eval-precision **executed-file + convention** (manual, không mechanized-CI) · budget **ALIGNED mechanized** (config no-decay) · outcome-correlation + hit-rate = **Mức-2 tool-pending-data** (KHÔNG trình như xong). Các con-số AI_INFRA tự-đo (cỡ golden-set, recall) = bằng-chứng của HỌ, KHÔNG mục-tiêu áp-cứng cho SE.

---

## PHẦN G — Harness-15: Ngân-sách bộ-nhớ per-agent (token-based) — SÀN + 3 tầng, BẮT BUỘC dùng đủ (🔴 FUNCTION-FLOOR + 🟡 number anh-owner) **+v2 §G.4 +v3 §G.5**

> **Adopt S81 (2026-06-20)** — AI_INFRA `2026-06-20-Governance-harness-15-memory-budget` + checklist-15 (inbox `broadcasts/inbox/ai_infra/`). Áp qua 2-process (IMPLEMENT em-main single-writer D9 + REVIEW workflow) per mandate §6. adap-report → `docs/governance/adap-reports/2026-06-20-Governance-harness-15-memory-budget.md`.
>
> **Adopt-delta S82 (2026-06-21)** — AI_INFRA `2026-06-20-Governance-harness-15-v2-hot-feed-update` (type: update · supersedes_scope = tier-1-sizing + L2/L3-caps ONLY). Re-verify CHỈ phần đổi → **§G.4** (Tầng-1 hot-feed-lớn + L2/L3 bỏ-trần + %-print 2-đầu-phiên + ranh-giới-vai-trò). Phần sàn-chức-năng gốc (§G.1-G.3) **KHÔNG đổi**. adap-report → `2026-06-21-Governance-harness-15-v2-hot-feed-update.md`.
>
> **Adopt-delta S83 (2026-06-22)** — **anh owner-directive trực-tiếp** (KHÔNG broadcast): full AI_INFRA parity (lead 220K · mem-sub 60K · wf-sub 50K) + **spawn-fill-to-budget** (sub Tầng-1 = MEMORY.md byte-cap + spawn-prompt giàu) → **§G.5**. Sửa self-shrink S82. Mark H-15 v3-delta (`ACTIVE-MARKS.md`).
>
> **Adopt-delta S94 (2026-06-29)** — **anh owner-directive trực-tiếp** (KHÔNG broadcast): lead **220K→380K** (SE-specific override để chứa full canonical read-set ~368K; lead KHÔNG còn AI_INFRA-parity, subs giữ 60K/50K). ⚠️ ~97% fill = context-rot trade-off **owner-accepted** (honest_caveat §5); trần budget ⟂ harness **Read-25K/call** — mega-line STATUS/HANDOFF VẪN cần re-tier mới Read-trọn (cap raise KHÔNG unblock Read). §G.5 body giữ S83-record (no-retrofit), số sống = `budget.json` live-read. Mark H-15 v4-delta `RC-pqhuy1987-29-06-2026-23-25-50` (`ACTIVE-MARKS.md`).
>
> 🔑 **Cốt-lõi:** ngân-sách bộ-nhớ = **mức TẬN-DỤNG-TỐI-THIỂU phải đạt, KHÔNG phải trần để dè-xẻn.** Tiết-kiệm-token = **quên-việc** (rơi trạng-thái giữa phiên) = KHÔNG tiết-kiệm thật (làm-lại tốn HƠN — cùng họ Goodhart §F.4/§6.6). Khoảng-trống quan-sát hay rơi đúng vào **chính LEAD** (lead tự-nạp kiến-trúc/luật nhưng bỏ quên trạng-thái-công-việc) → §G.2(c) vá đúng chỗ đó.

### G.1 — Mô-hình = SÀN cố-định + 3 tầng được-quản-lý (A1/A2/A3)
- **SÀN-harness (A1, đo-được):** phần cố-định mỗi spawn = tool-schema + framing + persona/role + lead-pasted base-doc-slice + prompt. **SE TỰ đo (KHÔNG mượn số AI_INFRA):** persona đo-thật `.claude/agents/*.md` (4.3KB–13.3KB ≈ 1.3K–4.0K tok /3.3); tool-schema+framing harness-injected **SE ước-lượng-riêng** (trùng AI_INFRA ~21K vì **cùng-họ-toolset** Read/Write/Edit/Bash/Grep/Glob/Skill/RAG, **KHÔNG mượn-số**) → **floor ≈ 55K measured-estimate (S112 re-measure — 21K cũ under-count: đoán tool-schema+framing ~7K thực ~30-50K) → owner-set reserve 100K (was round-up 30K; cap RIÊNG SE)** (`memory-budget.json:harness_floor`). Honest: persona = đo-thật-byte; phần harness-injected = ƯỚC-LƯỢNG (không byte-count cục-bộ được).
- **A3 tách-nhà chống-đếm-trùng:** persona + lead-docs thuộc **SÀN**, KHÔNG đếm vào L1-managed. L1-managed = own agent-memory + archive `_INDEX` + work-state block (`memory-budget.json:harness_floor._note`).
- **3 tầng managed (A2 — cập-nhật v3 §G.5):** Tầng-1 = **HOT-FEED LỚN per-role** (lead **220K** · agent-ký-ức **60K** · agent-workflow **50K** — **anh-set FULL AI_INFRA parity S83 v3**, supersede self-shrink S82; nạp đầy 4 bucket WIP·lỗi-lặp·tồn-đọng·quyết-định-chờ) · L2/L3 **BỎ TRẦN** (on-demand, no artificial tier-cap, chỉ chặn bởi cửa-sổ-ngữ-cảnh model). 🔴 con-số = **quyền CHỦ-DỰ-ÁN (anh)** — em-main THỰC-THI-đúng-số + BÁO-% (KHÔNG tự-tinh-chỉnh), xem §G.4/§G.5 (`token_governor`).

### G.2 — 6 sàn-CHỨC-NĂNG bắt-buộc (🔴 — map onto SE, honest mechanized-vs-convention)
| Sàn | SE map | Nấc | Cơ-chế-hóa vs quy-ước |
|---|---|---|---|
| **đo-SÀN** (A1) | persona đo-thật-byte **TRỰC-TIẾP** (`Get-ChildItem`, **KHÔNG** qua `measure-agent-memory.ps1` — script đó chỉ đo agent-memory-tier byte = byte-governor, KHÁC floor) + harness-injected ước-lượng + round-up 21K→30K | runtime(đo)→executed-file | mechanized (byte-count trực-tiếp) + convention (ước-lượng harness-injected + round-up) |
| **(a) nạp-đầy L1** | nguyên-tắc dùng-đủ-ngân-sách, no-token-saving, no-garbage (`token_governor._note`) | executed-file → runtime mỗi spawn | **convention** (kỷ-luật nạp) |
| **(b) cắt theo GIÁ-TRỊ** | `archive_gate.value_protect` (gotcha/anti-pattern/recurring/root-cause GIỮ-L1 bất-kể tuổi) ⟂ keep-floor newest-5 (recency) = 2 trục bảo-vệ trực-giao = mark `RC-…10-29-11` áp xuống tầng-bộ-nhớ | executed-file | **convention** (em-main judge; patterns = grep-hint DRY-RUN advisory, KHÔNG auto-exclude) |
| **(c) work-state block @start** | `session-start §2.1.5` LEAD nạp+phát-biểu: roadmap đang-chạy + việc-dở + quyết-định-chờ + lỗi-lặp-lại | executed-file → runtime mỗi phiên | **convention** (kỷ-luật đầu-phiên, vá khoảng-trống-LEAD) |
| **(d) 3 tệp-chốt L1** | (1) persona `.claude/agents/<name>.md` + (2) own `agent-memory/<name>/MEMORY.md` auto-inject + (3) MEMORY-PACK slice (`hmw.js` args) — **đã CÓ SẴN SE** | executed-file | convention (verify-declare) |
| **(e) 2-governor** | byte (tiers/archive_gate) ⟂ token (`token_governor`) — giữ CẢ HAI, KHÔNG gộp (đo 2 thứ khác: file-trên-đĩa ≠ ngữ-cảnh-nạp) | executed-file | **mechanized** (2 config tách) |

### G.3 — Tùy-chỉnh (🟡) + honest tổng
- 🟡 con-số SÀN (SE tự-đo 30K) · con-số 3 tầng (theo khối-lượng ERP nhiều-module) · hình-thức work-state block (SE = session-start REPORT + carry-list). Con-số AI_INFRA (~21K) = bằng-chứng HỌ, **KHÔNG** áp-cứng SE.
- **Honest nấc tổng:** mechanized = chỉ **(e) 2-config byte+token** + **đo-SÀN** (qua measure script); **5/6 sàn-chức-năng = CONVENTION** (nạp-đầy · cắt-giá-trị · work-state · 3-tệp-chốt = kỷ-luật người+AI). KHÔNG nhận "mechanized" cho kỷ-luật. `value_protect.patterns` = grep-hint DRY-RUN (advisory FLAG), **KHÔNG enforced auto-exclude** (archive-gate giữ DRY-RUN, em-main quyết — D6).
- **token≈byte/3.3** (VN thật; byte/4 = cận-trên → headroom THẬT lớn hơn). Floor = đo-được không-exact (honest-note b). Agent chưa-có-archive (database-agent/investigator-api/...) → phần "`_INDEX` theo ngân-sách" moot với chúng (honest-note d).

### G.4 — Harness-15-v2 delta (S82): Tầng-1 hot-feed LỚN + L2/L3 bỏ-trần + %-print + ranh-giới vai-trò
> Delta chồng lên §G.1-G.3 (gốc KHÔNG đổi). Re-verify CHỈ 2 phần đổi + 1 tool mới. Broadcast `2026-06-20-Governance-harness-15-v2-hot-feed-update` (`supersedes_scope = tier-1-sizing + L2/L3-caps ONLY`).

- **(1) Tầng-1 = HOT-FEED LỚN (🔴 SÀN-kiến-trúc):** phần luôn-nạp phải DÀY (đừng để mỏng) — nạp đầy **4 bucket nội-dung-công-việc**: WIP work-state · lỗi-lặp/anti-pattern/gotcha (`value_protect` §G.2(b), giữ bất-kể tuổi) · tồn-đọng · quyết-định-chờ. Bằng-chứng nền: Tầng-1 mỏng → lead **bỏ quên việc nhiều phiên liên-tiếp** (đúng bệnh H15 chữa). Per-role: lead **220K** · agent-ký-ức **60K** · agent-workflow **50K** (`token_governor.tier1_hotfeed_tokens`) — **anh-set FULL AI_INFRA parity (S83 v3 §G.5)**, supersede S82 self-shrink.
- **(2) L2/L3 BỎ TRẦN (🔴 SÀN-kiến-trúc):** gỡ cap cứng L2=6K/L3=4K → on-demand kéo-về tự-do, **không hạn-mức-tầng nhân-tạo**, chỉ chặn bởi cửa-sổ-ngữ-cảnh model. on-demand nên KHÔNG chiếm-chỗ thường-trực (no always-cost).
- **(3) %-print 2 đầu-phiên (🔴 tool mới):** `session-start §2.1.6` (composition Tầng-1 theo %/bucket) + `session-end §L.b(c)` (% sau-nạp + Headroom). Ước-lượng-tỉ-lệ đủ. **Headroom > 0 mà CÒN nội-dung giá-trị-cao = under-fill (SAI)** → nạp tiếp; Headroom = cờ-báo, KHÔNG phải đích-tiết-kiệm.
- **(4) Ranh-giới vai-trò (🔴 governance):** con-số budget = **quyền CHỦ-DỰ-ÁN (anh)**, KHÔNG phải AI-lead. em-main = (i) thực-thi đúng-số (no-truncate, kéo từng bucket tới target) + (ii) báo-% 2-đầu-phiên cho anh quyết. Sửa framing S81 "lead-authority" (nhầm AI-lead ↔ chủ-dự-án). Cùng tinh-thần mark `RC-…10-29-09` (AI = neo-lý-tính, anh quyết) + report-before-stamp.
- **Honest đánh-đổi (v2 §5):** Tầng-1 lớn = rot CAO HƠN trên phần always-loaded — **chấp-nhận có-chủ-đích** (quên-việc tệ hơn rot), KHÔNG phải "rot biến mất". SÀN = **kiến-trúc** (hot-feed lớn + L2/L3 on-demand), KHÔNG phải con-số. Nấc honest: (1)(2) = config mechanized (`token_governor`) · (3)(4) = **convention** (kỷ-luật người+AI: nạp-đủ + báo-% + anh-quyết-số).

### G.5 — Harness-15-v3 delta (S83 2026-06-22): full AI_INFRA parity + spawn-fill-to-budget (anh owner-directive)
> Delta chồng lên §G.4 (gốc KHÔNG đổi). **anh owner-directive trực-tiếp** (KHÔNG qua broadcast AI_INFRA) — con-số = quyền chủ-dự-án (§G.4 (4)). Mark = `ACTIVE-MARKS.md` H-15 v3-delta.

- **(1) FULL AI_INFRA parity (🔴 anh-set):** lead **220K** · mem-sub **60K** · wf-sub **50K** (`token_governor.tier1_hotfeed_tokens`). ⚠️ **[Harness-20 L.D neo-supersede S103]** lead 220K = giá-trị S83 tại thời-điểm delta này; **S94-override→380K** (SE-specific, lead KHÔNG còn AI_INFRA-parity — canonical = `budget.json` live-read; subs giữ 60K/50K). GIỮ 220K lịch-sử-dòng-dõi KHÔNG rewrite. SUPERSEDE S82 self-estimate (lead 60K / sub 20K-16K "vì SE nhỏ hơn / byte-cap binds") — đó là AI **tự-co-nhỏ**, đúng cái mark `RC-…01-58-01` cấm. anh: *"Giờ là 220k → đầu phiên nạp thêm tier1_lead cho đủ."*
- **(2) Sub Tầng-1 = MEMORY.md (byte-cap) + SPAWN-PROMPT (🔴 sửa hiểu-nhầm S82):** byte-cap MEMORY.md (30720B ~9.3K tok) CHỈ LÀ 1 LÁT của Tầng-1 sub — **prompt-spawn em-main viết** (relevant gotcha + state + full task-context + docs/memory liên-quan) nạp PHẦN CÒN LẠI tới token-budget. ⇒ 60K/50K KHÔNG phải "headroom vô-dụng" (bác lập-luận S82 "byte-cap binds first"); nó là **target em-main NẠP-ĐẦY qua prompt giàu** (`spawn_fill_directive`).
- **(3) Spawn-fill discipline (🔴 convention):** khi SPAWN bất-kỳ sub/workflow-agent → nạp context tới budget bằng **prompt GIÀU giá-trị-công-việc** (gotcha + state + task-context + docs/memory), KHÔNG nạp rác. Hot-load token đầu = token **GIÁ-TRỊ-NHẤT** (chắt-lọc qua nhiều giai-đoạn). RECONCILE `agents/README` "≤8K brief": heuristic cũ gác RETURN-truncation #53 (nay vá bằng memoryDelta return + recover-disk) → INPUT KHÔNG starve nữa, nạp giàu.
- **Honest nấc:** (1) = config mechanized (`token_governor` số mới). (2)(3) = **convention** (kỷ-luật em-main viết-prompt-giàu mỗi spawn — KHÔNG tool-ép; cùng họ §G.2 "5/6 convention"). value-gate (highest-value, no-garbage) = judge em-main, không auto-enforce.

---

## PHẦN H — Harness-16: Memory-Fidelity-EVAL (MFE) — đo nạp-vs-nhớ-vs-dùng (🔴 FUNCTION-FLOOR + 🟡 method)

> **Adopt S93 (2026-06-29)** — AI_INFRA 3 broadcast `2026-06-29-Governance-harness-16-{memory-fidelity-eval,mfe-update,cd-judge-sub-update}`. Canonical artifact → `scripts/mfe-eval.ps1` + `eval/mfe/` + `memory-budget.json:mfe` (**KHÔNG copy luật số ở đây — B1**).
>
> 🔴 **VOCAB (C3 — bắt buộc tách nghĩa):** "memory-fidelity" ĐÃ tồn tại ở **H6.7 = `memoryDelta`-routing-fidelity** (delta về đúng `agent-memory/<role>` single-writer). Harness-16 = **memory-fidelity-EVAL (MFE) = coverage/RETENTION** (hot-feed có giữ-được tập must-remember không). 2 nghĩa khác nhau — luôn gọi **MFE** cho nghĩa H-16. Cặp alias đã ghi `governance-detectors.ps1` C3 `$aliasSets` (ghi-nhận, KHÔNG flag drift).

**Vì sao:** `%-print` (§G) đo *đã-NHÉT bao nhiêu vào* Tầng-1 (ước theo độ-dài). MFE đo tiếp: agent có **giữ/dùng** cái đã nhét không — **đã-nạp ≠ nhớ-ra ≠ dùng-đúng**.

**H1 — Sàn deterministic ($0, NO-API, `mfe-eval.ps1`):**
- **LEAD Coverage-FIT** — must-remember denominator (status-field, KHÔNG grep): marks Active(-High) (`ACTIVE-MARKS.md`) + AS-class + Active-Guards (`error-ledger.md`) + recurring-gotchas (`gotchas.md`), **dedup** (gotcha/guard mà AS-row trỏ `#N`/`AS-N` → gộp vào AS; `merge_guard_to_as` toggle). FIT = byte-span → **token-RANGE** [bytes/4 .. bytes/3.0] vs cap **live-read** `token_governor.tier1_hotfeed_tokens.lead_tokens` (S93: 29 item ~2.5–3.3K tok / cap-live 220K = 1.5% → FIT thừa; ⚠️ **cap S94→380K** `budget.json`, mfe **live-read** tự-đúng — 220K = snapshot S93, KHÔNG hardcode).
- **age-band** — FLAG `old-but-still-required`, **KHÔNG cắt theo tuổi** (mark `RC-…10-29-11`); drop chỉ khi status đổi.
- **Goodhart-anchor** — in `strikes_total` + `RCA_entries` (error-ledger) cạnh coverage; strikes tăng mà coverage cao = **điểm nói dối**. KHÔNG self-grade.
- **SUB per-role coverage** — denom = anti-pattern/NEVER trong `agents/<role>.md`; numer = còn-mang trong **diary `agent-memory/<role>/MEMORY.md`** (KHÔNG project/user MEMORY.md — bẫy trùng-tên H15-v3); match = exact-id OR ≥2 **content-word** sau stop-list (đánh bại bẫy leading-verb-9/9-giả). **ĐO-THẬT** (S93: impl-backend 94% · impl-frontend 85% · reviewer 88%; role prose-only → **N/A** KHÔNG "0%"). **SUB-WORKFLOW** (fan-out ephemeral) = N/A by-design (kênh ký-ức = memory-pack lead bơm).

**H2 — Judge scaffold (Branch A, `-Judge`, OPT-IN cadence-gated):** seed `eval/mfe/sample-questions.json` (12 câu, **stable-id anchored** RC/gotcha#/AS#, immutable, time-stamped — gieo NGAY để vài tháng sau đo age-retention). Scorer **RỖNG**. 🔴 con-số nhớ/dùng **CHƯA có nghĩa** tới khi (a) câu-hỏi đủ-chín-tuổi **VÀ** (b) trọng-tài **độc-lập khác-phiên**; tự-chấm-cùng-phiên = vô-nghĩa.

**H3 — Quyết-định 2-ca:** Coverage<100%/vượt-trần = **thiếu-CHỖ → TĂNG budget** (anh quyết số); nhớ-thấp-dù-đủ-chỗ = **rot → SẮP-XẾP-LẠI** (ưu-tiên-giá-trị). Tăng-chỗ KHÔNG cứu rot.

🔴 **READ-ONLY trên `token_governor`** — MFE **đọc** caps (single-source), **KHÔNG ghi/auto-tune** (owner-authority §G.4(4) — coverage thấp KHÔNG được tự bơm cap).

**Honest nấc:** H1 deterministic = **executed-file + runtime-smoke S93** (chạy thật, 3-tier OK). H2 judge = **SCAFFOLD-only** (chưa scorer → KHÔNG nhận "đã đo độ-nhớ"). token = **RANGE** (char/4 ≠ token thật, VN ~3.0-3.5 byte/tok). Wire = **opt-in** `session-start §2.1.6` + `session-end §L.b(c)` (no-param = như cũ). Cross-harness 0-conflict (additive vs §F eval-precision/§G budget/archive-gate-byte/detectors-drift; trùng `value_protect` = same-set CỐ Ý).

---

## PHẦN I — Harness-17: Vòng tự-cải-thiện bộ-nhớ (Đo → Tinh-chỉnh → Kiểm) (🔴 FUNCTION-FLOOR + 🟡 method)

> **Adopt S95 (2026-07-01)** — AI_INFRA 2 broadcast `2026-06-30-Governance-{harness-17-memory-self-improvement, checklist-harness-17}` (hash verify MATCH ✓ cả 2 · `reviewer_gate: PASS`). Áp qua **2-workflow** (Harness-9 mandate) + **1 deep-reverify** (anh-directed): **WF1 `wf_f085d7c4-d78`** (ground-truth reuse-anchor + draft) + **WF2 `wf_8e73c1d6-ee6`** (3-lane review PASS 0-blocking) + **WF3 `wf_6f44eddf-680`** (fault-injection teeth-proof + integration + cross-doc, PASS 0 application-defect). Artifact mới: `scripts/memory-selfimprove-audit.ps1` + `.claude/governance/reinject-ledger.md`. **KHÔNG copy luật số ở đây — B1.**
>
> **Vì sao (đóng "vòng hở"):** nhánh eval (§H MFE) mới ĐO fidelity rồi in số **rồi DỪNG** — thấy mục-sàn rớt khỏi hot-mem nhưng KHÔNG có cơ-chế HÀNH-ĐỘNG. H17 nối 2 khâu thiếu: **Tinh-chỉnh** (tín-hiệu→hành-động, có chốt-dừng) + **Kiểm** (spec-compliance audit). Bộ-nhớ ⇒ **tài-sản được quản-trị**, kiểm-được theo bản đặc-tả.
>
> 🔴 **VOCAB (C3 — bắt buộc tách nghĩa, KHÔNG seed `$aliasSets`):** chữ **"coverage" nay 3 nghĩa** — (1) H2 harvest-curator "**Coverage**" = 0-silent-miss mọi sub/run đã-chạy · (2) §H MFE SUB "**coverage**" = role-floor còn-mang-trong-diary · (3) H17 A1 "**HCV**" (harvest-coverage, said-vs-kept) = cái sub NÓI-ra (return) vs cái GIỮ-lại (memory). Luôn gọi **HCV** cho nghĩa H17. Giống H16 memory-fidelity: **2-3-khái-niệm-1-từ = KHÔNG seed detector** (seed → false-flag), chỉ ghi alias-map + C3-comment (`governance-detectors.ps1`). "audit" (C-KIỂM) gọi **spec-audit** tránh đụng monthly-drift-audit. Từ mới `reinject`/`floor-rot`/`build-gap`/`signal→action` = grep 0-match toàn `docs/` (WF1 Agent-D) → SẠCH.

**A — ĐO (Eval) — 2 sàn:**
- **A1 HCV (harvest-coverage, said-vs-kept):** so cái sub NÓI trong return vs cái GIỮ trong memory → bắt **mất-mát âm-thầm khi cô-đặc**. SE: harvest-curator H2 trục **Coverage** (0-silent-miss, convention) + §H MFE SUB per-role coverage (retained-side, mechanized) + **HCV proxy** mới trong `memory-selfimprove-audit.ps1` (run-trace `runs/<id>/` sub-*.md có `*-synthesis.md` = file-exists deterministic). 🟡 **Honest:** tỉ-lệ said-vs-kept = **calibration-interim** (caveat 3, cò-báo-đuôi KHÔNG vạch-chất-lượng); per-item-L1-presence cho AS/guard/gotcha = **partial build-gap** (MFE age-band chỉ đo marks-có-date). **HCV proxy hiện N/A-idle** (run gần nhất = return-delta-only mode, 0 `sub-*.md` để chấm) → A1-HCV = **cơ-chế-sẵn-sàng CHƯA-có-mẫu-đo** (script tự in N/A minh-bạch), KHÔNG phải đã-đang-đo (WF2-L3 honest-completeness).
- **A2 load-fidelity (fit + %thực-giữ per-tier):** = **§H MFE** (`mfe-eval.ps1` LEAD Coverage-FIT + SUB per-role). **REUSE-cite, KHÔNG rebuild.**

**B — TINH-CHỈNH (Refine) — 3 sàn:** (loop = tầng **D6 DÒ+NÊU-CỜ**; em-main = **D9 writer**; anh = quyết-số)
- **B1 bảng ánh-xạ tín-hiệu → hành-động** (4 loại — map thẳng cơ-chế SE hiện-có, KHÔNG dựng mới):

  | Tín-hiệu | Ngưỡng phát-hiện | Hành-động | Cơ-chế-SE (neo) | Nấc |
  |---|---|---|---|---|
  | **floor-rot** (mục-sàn RỚT khỏi hot-mem) | MFE age-band FLAG `old-but-still-required` (`mfe-eval.ps1`) + status vẫn Active | **reinject VERBATIM** từ canonical → em-main APPEND L1 + ghi reinject-ledger | MFE age-band + work-state block `session-start §2.1.5` + **reinject-ledger** (B2) | detect=**mechanized** · reinject=**convention** |
  | **repeat ≥ 2** (lặp ≥2 phiên) | error-ledger 2-strike + MFE Goodhart `strikes_total`↑ | **promote** → pattern/anti-pattern (episodic→procedural) | `error-ledger §L.a` 2-strike-promote + harvest-curator INFORM + `value_protect` giữ-L1 | promote=**convention** · strike-count=**mechanized** |
  | **old + valueless** (cũ ∧ hết-giá-trị) | archive-gate: over-cap ∧ ngoài keep-floor-5 ∧ KHÔNG khớp `value_protect` ∧ 2-strike | **cold-archive** → MOVE byte-0-loss + con-trỏ `_INDEX` | **§A** `memory-archive-gate.ps1` (hysteresis 0.85) | planner=**mechanized** DRY-RUN · MOVE=**convention** (D5) |
  | **raw** (chưa cô-đặc) | L1 entry verbose/>~1.5K char (gotcha #53 risk) | **distill** → nén + đẩy verbatim L2 + gist | `/sleep-recovery-memory-l2` **command** (gist-compress additive) + `_INDEX`/gist (S70) | distill=**convention** (command-assisted) · pointer-resolve=mechanized |

  > 🔴 **Đính-chính:** `/sleep-recovery-memory-l2` = **COMMAND thật** (`.claude/commands/`, 12.6KB) — KHÔNG phải "chỉ convention pattern"/skill (WF1 Agent-C nhầm; em-main verify). Distill JUDGMENT vẫn convention.
- **B2 CG-1 termination (reinject-ledger):** [`.claude/governance/reinject-ledger.md`](../../.claude/governance/reinject-ledger.md) — **git-tracked · append-only · single-writer em-main (D9)**. 🔴 **TÁCH khỏi `memory-budget.json`** (file đó = quyền cấp-ngân-sách anh §G.4(4); trộn = AI lấn quyền). Rule: mỗi item reinject **≤1 lần / N=3 phiên**; đo-lại vẫn thiếu → **ESCALATE anh** (build-gap? tăng-budget? đổi-placement — mirror MFE H3 2-ca), **KHÔNG** tự-reinject-lần-2. Chống reinject-loop vô-hạn che build-gap.
- **B3 phép-thử-ranh-giới build-gap vs floor-rot** (chỉ floor-rot mới kích reinject):

  > 🧪 **"Item ĐÃ TỪNG hiện-diện trong hot-mem/diary/canonical-ledger ở phiên trước KHÔNG?"** (grep `git log -p` các ledger + `agent-memory/<role>/MEMORY.md` + `archive/`) → **CÓ** = **floor-rot** (cơ-chế có, chỉ RỚT → reinject OK) · **KHÔNG** = **build-gap** (chưa dựng → đi DỰNG cơ-chế qua D7 nếu chạm luật, **KHÔNG reinject**). Chốt: floor-rot = **ĐÃ-tồn-tại ∩ CÒN-giá-trị ∩ RỚT-khỏi-L1**; thiếu 1 vế → KHÔNG reinject (ca rớt-mà-hết-cần = archive-gate đúng-đắn; ca chưa-dựng = build-gap).

**C — KIỂM (Audit / spec-audit) — 5 sàn:**
- **C1 spec-compliance checker deterministic LIVE:** `scripts/memory-selfimprove-audit.ps1` (NO-API, ASCII #30, exit-0, emit **CRITERIA+GAP set KHÔNG frozen-tally** — chạy LIVE mỗi lần vì đo artifact-SỐNG). 3 mặt: **(a) write-gov/D9** [A1 tool-scope sub KHÔNG store_memory · A2 hmw.js SCHEMA return-delta · A3 propose-only decl] · **(b) change-gov/D8** [COMPOSE `governance-detectors.ps1` child-invoke exit-0, KHÔNG re-grep = tránh fork C3] · **(c) distillation-spectrum** [mỗi over-cap agent có raw→`_INDEX`→gist]. 🔴 **Honest:** D9 enforce qua **tool-scope + SCHEMA (A1/A2 mechanized)**, KHÔNG OS-hook (`.claude/settings.json` KHÔNG có hook store_memory — AS-10/E-006 fails-open); A3 = **PROXY** (phrase-presence ≠ enforce). Chứng "guard WIRED", KHÔNG "runtime KHÔNG-THỂ vi-phạm". Runtime-verified S95: A1/A2/A3/B1/B2 PASS, C-spectrum bắt **frontend-designer over-cap GAP** (răng thật).
- **C2 3 spot-check người:** harvest-fidelity + đúng-verdict + provenance-integrity = **convention** (harvest-curator 5-trục Fidelity/Placement + reviewer verdict + `session-end §L.b(f)` gate). MÁY-không-tự-quyết → người soi.
- **C3 single-writer (loop propose-only):** = **D9** (`§D.3`). **REUSE-cite.** 🔴 **Honest:** "store_memory-strip mọi sub" = **hook AI_INFRA runtime, KHÔNG có .js trong repo SE** — SE enforce tại-chỗ = **tool-scope** (sub read-only `tools:` chỉ READ verb, 0 store_memory) + **hmw.js SCHEMA** return-delta-only. (Sửa overclaim tiềm-ẩn.)
- **C4 provenance 2-chiều:** phân-biệt entry **chủ-tự-viết** (default) vs **thu-hoạch-từ-sub** (có spawn-record) = `hmw.js:53-63` memoryDelta 4-field + `session-end §L.b(d)`. 🟡 **partial** (nhãn ngầm, chưa tag tường-minh). ⚠️ **field-set LỆCH:** hmw.js `{task·verdict·learned·surprise}` (runtime-return) ≠ session-end `{agent·task·nấc·evidence}` (harvest-record) — 2 schema **2 tầng khác nhau** (return vs record), KHÔNG assume đồng-nhất; 2-chiều-tag tường-minh = build-thêm nhỏ (defer, honest).
- **CG-2 high-value MIỄN hạ-bậc-theo-tuổi:** = **§G.2(b) `value_protect`** + mark `RC-…10-29-11`. **REUSE-cite.** Tuổi KHÔNG phải cớ cắt (pain/volume/quality).

**Cadence wire (D.1):** `session-start §2.1.7` = **loop-DÒ** (chạy spec-audit + MFE báo CRITERIA+GAP + reinject-ledger CG-1 check, INFORM-only) · `session-end §L.b(c)` = **loop-REFINE-propose** (B1 signal→action → em-main APPEND single-writer). **KHÔNG lệnh tự-động đơn-nhất** (caveat 1: walkthrough thủ-công người-điều-phối; khối-đo exit-0 riêng-lẻ).

**Placement-constraint (WF1 Agent-D, 0 hard-conflict):** ① reinject-ledger TÁCH khỏi budget.json · ② reinject = **promote-COPY** L2→L1, nguồn archive INTACT (D11 no-conflict) · ③ loop = D6-tier dưới D9 (CG-1 escalate ≙ E.2 report-before-stamp).

**Honest nấc tổng §I (10 sàn 🔴 ĐẠT):** mechanized = **C1 spec-audit (a/b/c)** + A2 MFE + strike-anchor + HCV-proxy file-exists. **Phần lớn B/C = CONVENTION** (đúng checklist H17 tự nói: chỉ 2 sàn-đo A + spec-checker + gắn-nhãn-nguồn = cơ-chế-hoá; còn lại kỷ-luật người+AI). **5 caveat H17 (giữ trong doc):** (1) "vòng chạy thông" = walkthrough THỦ-CÔNG người-điều-phối nối, KHÔNG lệnh-tự-động-đơn-nhất · (2) judge recall/apply = **STUB** (số CHƯA nghĩa tới khi sample-q chín-tuổi + trọng-tài độc-lập khác-phiên) · (3) ngưỡng HCV = calibration-interim · (4) tự-soi: vòng đo agent-công-nhân CHƯA đo chính khâu-meta (điểm-mù) · (5) cô-đặc mới có NÉN, verify-trước-khi-giữ CHƯA dựng.

---

## PHẦN J — Harness-18: Kiện-toàn kiến-trúc (4 khuôn-mẫu additive) + frontier-method self-audit (🔴 FUNCTION-FLOOR + 🟡 form)

> **Adopt S100 (2026-07-02)** — AI_INFRA broadcast `2026-07-02-Governance-{harness-18-architecture-consolidation, checklist-harness-18}` (content_sha256 re-compute **MATCH ✓ cả 2**; ⚠️ frontmatter cả 3 broadcast đợt này **thiếu field `reviewer_gate`** — 24 broadcast trước đều có; gate-evidence nằm trong body "dogfood 2 phiên · cổng-kiểm ba-làn PASS" → SE áp với reasoning ghi tường-minh + flag format-regression về AI_INFRA). Áp qua 2-workflow Harness-9: **WF1 investigate `wf_50a817ce-a69`** (3 lane investigator-codebase, return-delta MODE-A) + **WF2 review `wf_955643c3-f7d`** (re-run S101 2026-07-03 — gốc `wf_31ea3985-92c` mất theo CLI-restart → re-run fresh; verdict **PASS_WITH_CONCERNS** 0-BLOCKING: Lane-A detector-teeth PASS fault-inject-4/4 · Lane-B ledger PASS_WITH_CONCERNS [1 CONCERN `workflows/README.md:51` nhãn-cũ→FIXED S101] · Lane-C PARTIAL [codify+n-a+containment first-hand ✓; frontier-hash+reviewer_gate dựa record-S100 do broadcast-inbound vắng repo]; Lane-C #53-garble→recover first-hand). **Additive** — KHÔNG thay đợt nào trước. Broadcast chị-em `2026-07-01-…-harness-frontier-assessment`: **content_sha256 MISMATCH** khi re-compute (4 biến-thể canonicalization đều lệch; 2 file H18 MATCH → phép canonical đúng, body đã lệch stamp) → **HELD-integrity**: KHÔNG codify rule từ nó, CHỈ chạy self-audit vô-hại (kết quả dưới); chờ AI_INFRA verify/re-stamp.

**J.A — Freshness-detector nâng-cấp (3 sàn 🔴 — mechanized, fault-inject 4/4 + real-repo verified S100):**
- **mismatch-only + ratio-band confidence:** `governance-detectors.ps1` C2 chỉ flag khi count-token LỆCH canonical (kể-lại-đúng = IM — fault-inject case-2); sev theo **ratio-band** — gần-canonical 0.5–2.0 = MED (stale-total khả-tín), xa = LOW (count cục-bộ-module) — sửa lớp FP cũ `|diff|≥10=MED` vốn NGƯỢC (S98 verify: 8/8 MED đều FP; post-fix real-repo: MED derived-stale 11→0, giữ 3 vocab-fork known).
- **scan-range theo dải THẬT:** `$derivedDocs` fixed-list → **glob động** (ALL `.claude/skills/*/SKILL.md` + ALL `.claude/commands/*.md`) — vá lớp-mù commands/ nơi "(68)" sống ~11 phiên (H1 F3 S99).
- **exclusion:** self-exclusion 6 path + `$ExcludeExact` (pre-existing, re-verified 0 self-match).
- 🟡 Honest: FP-guard `baseline|S\d{2}` skip-line = blind-spot có-chủ-đích (dòng chứa "Baseline" KHÔNG quét — dòng "130 PASS" session-start đã B1-pointer TAY S100); sev = confidence KHÔNG phải existence (total-cổ-đại "77 test"/440 → LOW advisory vẫn hiện).

**J.B — Vệ-sinh sổ-ghi: retire `runs/_ledger.md` two-beat (🔴 đo-bắt-thật + nghỉ-hưu-trung-thực + sweep):**
- **Đo (WF1-L3, evidence-grade):** ledger true-orphan-catch = **0/15 row lifetime** (đều open+close cùng-ngày 06-18; `⏳` chỉ legend) · folder/disk-scan H2 bắt thật **4+ vụ memory-delta orphan** (S57 · post-S57bis 4-MISS · S98 ×3 · S99 cicd#485) · mode-A ephemeral (default S93+) → ledger coverage workflow gần đây = **0/8**. ⭐ Đính-chính ground-truth: "S71 `harvest/` rỗng" = **wording tiêu-chí** trong session-start, KHÔNG phải vụ catch — run-folder-orphan lifetime = 0 ở CẢ 2 cơ chế.
- **Caveat-3 parity (honest):** replacement KHÔNG "proven bắt tốt hơn" trên run-folder-orphan data (0 incident 2 phía) — căn cứ retire = **coverage-cấu-trúc (mode-A 0/8) + chi-phí duy-trì + đã cần disclaimer-note S98 chống nhầm**, KHÔNG phải catch-rate.
- **Nghỉ-hưu:** 1 dòng 🧊 header `_ledger.md` (đảo-ngược = gỡ dòng; 15 row GIỮ NGUYÊN — dời-đi không xoá). **Orphan-authority = folder-scan:** `runs/<id>/` có `run.md` mà `*-synthesis.md` VẮNG/0-byte (dual-accept `harvest/` run cũ).
- **Sweep 6 mandate-consumer + cites (mechanized-grep `_ledger` exact — 5 "ledger" khác tên trong repo, tránh C3-fork):** `runs/README.md` ×7 (:3/:38/L1/L2/§C6-header/:117/:127) · `workflows/README.md` ×2 (:20/:34-B3) · `session-start.md` §2.1.1-H2 · `session-end.md` §L.b(f) · `agents/harvest-curator.md` ×3 (:28/:44/:52-cite) · `agents/README.md` G-015-cite · + `agent-memory/harvest-curator/MEMORY.md` baseline re-ground. HISTORY class (session-log/adap-report/archive/runs-synthesis) GIỮ NGUYÊN.

**J.C — Bracket phân-bổ model: 1 ĐẠT + 2 n-a-by-owner-mandate (🔴 điều-kiện xét-lại VIẾT RA):**
- Precondition raw-economics ĐÚNG (Fable > Opus 4.8 giá) NHƯNG **directive 🔴 S66 "chất-lượng trên chi-phí"** (anh-chốt, mọi sister) GIỮ — mechanism nay = **worker-tier-pin S124** (TOÀN-ROSTER frontmatter `opus`+`effort:max` — số vai canonical → [`docs/STATUS.md`](../STATUS.md) §Sub-agents, B1 KHÔNG chép số ở đây; thay all-inherit H8) → KHÔNG demote lớp-việc nào dưới worker-tier opus; escape-hatch per-task `tier:'opus'` (hmw.js) GIỮ = cơ-chế hạ-bậc-theo-việc ĐÃ TỒN TẠI khi cần. 4 lớp không-hạ + 2-đầu = vacuously-held (mọi vai đang top-tier). Promote-list 🟡 = n-a (không gì để nâng).
- **Điều-kiện xét-lại (C3-floor, viết ra — đo được):** NẾU anh đảo H8 HOẶC áp-lực chi-phí thật xuất hiện → dựng bracket theo checklist H18-C, so ≥3-run eval vs baseline TRƯỚC khi cố-định; tới lúc đó C1/C2 hết n-a. (Caveat-2 broadcast: "chi-phí ngang nhau thì khuôn-mẫu không áp" — SE = ngang-nhau-BY-DECISION.)

**J.D — Đóng làn kết-quả (🔴 3 sàn — 2 ĐẠT wired + 1 REUSE):**
- **D(a) spot-check tươi:** wired `session-end §L.b(i)` — session governance/review-heavy chọn 3–5 artifact đã tự-qua-cổng → kiểm-lại tươi bằng ground-truth. Dogfood n=1 S100 (WF2 lane-3). 🟡 Honest: n=1 = mẫu hiệu-chỉnh (caveat-1 broadcast), CHƯA "proven".
- **D(b) reinject-on-real-miss + D(c) chốt-chặn-lặp:** = **REUSE §I B2** `reinject-ledger.md` CG-1 (≤1/N=3 + escalate anh + đo-lại phiên kế) — H17 đã dựng ĐÚNG khuôn này TRƯỚC broadcast, KHÔNG sổ mới (chống C3-fork "ledger").

**Frontier-assessment self-audit (S100 — chạy dù broadcast HELD-integrity, vì self-audit vô-hại + có giá-trị riêng):**
- **P1 taxonomy-claim:** CLEAN — grep `\bMAST\b` = 0 repo-wide; error-ledger "3-axis tag" = internal scheme map Gov-v2 (KHÔNG claim external-taxonomy) → ma-trận anh-xạ n-a-legit.
- **P2 ghost-wire:** **1 THẬT = cron monthly** (`solution-erp-skill-audit-monthly`: CronList runtime = **0 job** + scheduler RỖNG 2026-05-04 + S96 chạy 13:04 em-main-in-session + CronCreate harness session-scoped không persist) → **honest-retire 5 file S100** (rules.md ×2 · CLAUDE.md · STATUS.md · session-start.md): audit monthly = thủ-công em-main theo cadence-pointer STATUS (function KHÔNG ghost — S44/S96 đều chạy đúng hạn; chỉ WIRING claim sai). +2 ghost-wire-config-key (mfe `role_file_glob`/`diary_path_pattern` defined-but-unread) + 1 latent blind-spot (selfimprove `:147` no-`tools:`-skip) → **defer đánh-số STATUS backlog D-1/D-2** (frontier HELD → không sửa vội). Cadence#4 + mọi auto-claim khác = WIRED hoặc disclaimed-no-daemon đúng convention G-015.
- **P3 measurer role-coverage:** 3/3 script (`mfe-eval` + `memory-selfimprove-audit` + `memory-archive-gate`) = **GLOB-LIVE**, 0 hardcode roster/"11" — agent thứ 12 tự-cử (WF1-L1 file:line).
- **P4 correction-cadence proxy:** ghi-nhận method, **KHÔNG áp** — 0 điểm-đau đo được hiện tại; áp-không-pain = chính "frontier-envy" mà broadcast cảnh-báo.

**Honest nấc tổng §J (checklist 12 sàn 🔴):** **A 3/3 ĐẠT** (mechanized + runtime fault-inject 4/4) · **B 3/3 ĐẠT** (đo = convention-với-số-liệu WF1-L3 · retire = executed-file reversible · sweep = mechanized-grep + executed 15 điểm) · **C 1/3 ĐẠT (C3 revisit-condition executed-file) + 2/3 n-a-by-owner-mandate H8** (lý-do khách-quan viết rõ — caveat-2 broadcast) · **D 3/3 ĐẠT** (D-a wired + dogfood n=1 · D-b/D-c REUSE §I CG-1). **Phát-biểu chủ-động: 10/12 ĐẠT + 2/12 n-a-reasoned = phủ đủ phần áp-được.** Mechanized THẬT chỉ: J.A detector + J.B sweep-grep; phần còn lại = convention (KHÔNG nhận mechanized). 🟡 form 4 mục: detector-regex/ngưỡng tự đặt (ratio 0.5–2.0) · bracket-boundary theo H8 · sổ chốt-chặn = reinject-ledger git-tracked (REUSE) · promote-list n-a.

---

## PHẦN K — Harness-19: "Model ảo" ensemble cho 2 vị-trí phán-quyết + thật/ảo depth-toggle (🔴 FUNCTION-FLOOR + 🟡 form ensemble-depth)

⚠️ **H21 supersede-partial (S110, 2026-07-11, broadcast `2026-07-10-Governance-harness-21`):** marker-toggle + 2-vai-verdict-mặc-định (K.B/K.A dưới) → **per-invocation owner-gõ-kèm-vai** (§K.E). Định-nghĩa 2 engine + ký-ức-đổ-về-đúng-vai (K.C) + chất-lượng GIỮ NGUYÊN từ H19 — KHÔNG re-adopt.

> 🔒 **Posture trục-SÂU (O-2 — OWNER-DELEGATED → lead-decided @S149, uỷ-quyền "Trả lời 4 câu"; spec `runs/2026-07-24-S149-owner-gated-3-khoan/`): posture-A — KHÔNG DỰNG trục sâu riêng cho engine-đắt; "trần tổng-lượt" không có trục để assert.** Căn-cứ: depth-cost đo mode-thật thắng ~1/10 giá. Anh veto = 1 edit (HANDOFF #25). *(K2 land @S150.)*

> **Adopt S101 (2026-07-03), anh-directed** (`/check-email AI_INFRA` + `/adap-apply` → "Formal adopt + RC-stamp" + "full 2-workflow"). AI_INFRA broadcast `2026-07-03-Agent-harness-19-fable-clone` (content_sha256 re-compute **MATCH ✓** `6909299a…`; +3 broadcast model-tier cùng đợt [`fable-opus` `ee00d253` · `checklist` `a7ff304b` · `v2-pin-simple` `eed277f7`] đều MATCH + đều có `reviewer_gate: PASS` → format-regression H18 [thiếu field] đã fix). Áp qua 2-workflow Harness-9: **WF1 investigate `wf_5f308fd8-744`** (3 lane wiring+mapping+adversarial, SOUND_WITH_CONCERNS — bắt 3 floor-fidelity gap; resume-after-interruption cached) + **WF2 review `wf_ed5b972f-a4d`** (→ **PASS_WITH_CONCERNS** 0-BLOCKING: Lane-A mechanism PWC [1 CONCERN marker write-only no-reader → **FIXED S101** thêm session-start BƯỚC 0.5b reader] · Lane-B gov-record PASS [RC-mark 3-floor verbatim + vacuous-honest, 7 refutation fail] · Lane-C adap-honesty PASS [4 hash MATCH indep + 12/12 + no-overclaim]. ⚠️ **GAP-3 AS-10 fired LIVE** — lanes tự-ghi reviewer-memory dù RETURN-only-intent; harness-sanctioned "intentional" → KEPT + verified → dogfood-validate §K.C "GAP-3 = convention-KHÔNG-mechanism"). **Additive** — KHÔNG thay H8 all-inherit / bracket / promote; chỉ THÊM ensemble + toggle cho 2 vị-trí phán-quyết.

**K.A — Ánh-xạ 2 vị-trí phán-quyết vào roster SE (🔴 §7 sàn — WF1-confirmed best-fit, no superior alt):**
- **(a) Cổng rà-soát cuối** = `reviewer` (adversarial 6-category + Smart-Friend anti-rubber-stamp + live-curl falsify + phân-xử mâu-thuẫn). **(b) Ground-truth/xác-minh sự-thật** = `investigator-codebase` (truy bằng-chứng gốc file:line + sqlcmd + git, chống bịa + RCA). `investigator-api` EXCLUDED (external-only) · `database-agent` EXCLUDED (DB-only subset). = cặp dogfood S101 (WF2 3-lane reviewer · WF1 3-lane investigator-codebase). **(H21 S110):** cặp này = **REFERENCE-EXAMPLE/likely-pick** (dogfood S101/S108), **KHÔNG còn auto-default** — vai do anh gán đích-danh trong lệnh (§K.E), **MỌI vai trong roster hiện-hành** hợp-lệ (số canonical → [`docs/STATUS.md`](../STATUS.md) §Sub-agents).

**K.B — Cơ-chế 2 mode thật/ảo (🔴 §4 sàn) + toggle marker (🟡 form):**
- 🧊 (retired H21 S110) **Fable-real (thật, marker `.claude/fable-real-mode.on` CÓ):** 2 vị-trí chạy **1 lần top-model trực-tiếp** (sâu nhất). Fable up=single-Fable · down (H5)=single-Opus-1M per-run fallback (KHÔNG đổi mode toàn-cục).
- 🧊 (retired H21 S110) **Fable-clone (ảo, marker VẮNG = MẶC-ĐỊNH, §4 ít-kinh-phí):** 2 vị-trí chạy **ensemble tier-2-mạnh-nhất** = N lane đa-lăng-kính CÙNG 1 vai (qua `hmw.js parallel`) + em-main **refute + synthesize** (P3/P4) = "bản sao Fable".
- 🧊 (retired H21 S110) **Toggle = 2 lệnh** `/fable-real` (Write marker) + `/fable-clone` (Remove marker) mirror `/ultra-on`/`/ultra-off` — ⚠️ **semantic INVERSE:** marker-VẮNG = ảo-DEFAULT (khác hmw: marker-CÓ = feature-ON). marker **gitignored** (verify `git check-ignore` ✓; commit → thật-mode stuck-ON clone = burn quota, TỆ HƠN hmw vì elevate tier). Đổi mode CHỈ khi anh gõ (§4 — KHÔNG auto theo số-dư/cảm-tính, giữ mark `RC-…10-29-09`).

→ **Thay bằng §K.E per-invocation.** Marker file đã xóa S110; `.gitignore:92` giữ pattern phòng-hờ.

**K.C — 3 floor-fidelity gap (🔴 WF1-L3 bắt — pin để stamp CÓ NGHĨA, không paperwork):**
- **GAP-1 scope-creep guard:** `hmw.js` VALID_ROLES nhận **TOÀN roster** (lịch-sử: 9 lúc adopt S101 → +`office-document` S107 → +2 monitor H1/H2 S110 anh-directed → **+2 monitor H24 S121 W2**; số vai canonical → [`docs/STATUS.md`](../STATUS.md) §Sub-agents, B1 KHÔNG chép số), KHÔNG gate → worker-tier-pin **CHE** leak qua opus (mọi vai pin opus nên mixed-roster "trông ổn" — như thời all-inherit trước nó; lượt `tier:'fable'` mixed-roster = rò top-model sang vai ngoài lệnh = vi phạm §3 hard-scope). → **lệnh-B ensemble-run = N lane CÙNG 1 vai phán-quyết** (multi-lens), KHÔNG mixed-roster fan-out.
- **GAP-2 engine-label (§5):** `hmw.js` SCHEMA `memoryDelta{task,verdict,learned,surprise}` KHÔNG field engine → em-main **stamp nhãn engine @P3 harvest** (single-writer B3), như S101 "model-note Opus-S101". = convention KHÔNG mechanism.
- **GAP-3 AS-10 fragment:** mỗi run-trace ghi `*-synthesis.md` residual + lane giữ Bash (AS-10 fails-open) → "1 vai = 1 trí-nhớ" qua N lane giữ CHỈ bởi em-main single-writer. → **N lane RETURN-only**, em-main ghi 1 MEMORY entry/vai (+ nhãn engine).

**K.D — 3 floor-point RC-stamped (🔴 §9 — `RC-pqhuy1987-03-07-2026-17-46-35`, `ACTIVE-MARKS.md`):** (1) 🧊 ~~lead LUÔN top-model (KHÔNG đụng)~~ [retired H21/mtv3 S110] → **MỚI:** lead = **frontier-class** do anh chọn per-session {Fable 5 | Opus 4.8 — 1M MAX} (model-tier-v3 2026-07-11); CẤM Sonnet/Haiku-class ghế lead; owner-chọn-hạng-hai ≠ outage → 0 caveat/0 revert-nghĩa-vụ · (2) 🧊 ~~CHỈ 2 vị-trí phán-quyết chạm top-model, CHỈ chế-độ thật do anh gõ (KHÔNG auto)~~ [retired H21 S110] → **MỚI:** top-model deep-run CHỈ trong lượt lệnh engine-đắt anh gõ KÈM VAI đích-danh (H21) — không còn 2-vị-trí-mặc-định, không còn mode · (3) mọi vai khác giữ model mặc-định (roster-tier). ⚠️ **VACUOUSLY-MET-for-SE (dated, thời điểm stamp S103-era):** dưới all-inherit + Fable-outage, reviewer+investigator-codebase ĐÃ top-model (Opus-1M) → point-2 grant **0 runtime-delta**; point-3 trivially-held (thời all-inherit S66 không có "vai khác" tier-thấp). *(S124 → worker-tier-pin: point-3 nay giữ theo nghĩa MỚI — "vai khác" = worker-tier opus cố-định; point-2 xem S108-update cuối đoạn.)* Stamp KHÔNG overclaim runtime-delta; value = future-proof floor + governance-record. *(S108 update: Fable-UP + first-real-run → point-2 grant hoạt-động THẬT lần đầu — 2 vị-trí single-Fable deep ⟂ worker-draft pin tier-2 Opus; "vacuously-met" KHÔNG còn là trạng-thái thường-trực, tùy BƯỚC 0.6 probe per-session.)*

**K.E — H21 per-invocation + spec-file kết-tinh (🔴 sàn 5-điểm, adopt S110 — supersede K.B toggle):**

| Lệnh | Engine | Cách chạy |
|---|---|---|
| `/fable-real <vai> <đề-bài>` | **lệnh-A** single top-model | 1 vai anh gán chạy 1 lần top-model THẬT (deep pass; Fable up → single-Fable · outage → single-Opus-1M/run) |
| `/fable-clone <vai> <đề-bài>` | **lệnh-B** ensemble tier-2 | N lane đa-lăng-kính CÙNG 1 vai (`hmw.js parallel`) + em-main refute+synthesize |

- **(i) Vai owner-gán per-invocation:** `<vai>` ∈ **roster** (`investigator-codebase` · `investigator-api` · `implementer-backend` · `implementer-frontend` · `frontend-designer` · `database-agent` · `office-document` · `test-specialist` · `reviewer` · `cicd-monitor` · `tooling-auditor` · `harvest-curator` · **`lead-stale-auditor` · `lead-gap-auditor`** ← +S121 W2, H24 · **`harness-eval` · `harness-refine` · `harness-audit`** ← +S141, bộ-ba đồng-kiểm memory · **`ring1-audit` · `ring2-audit` · `ring4-audit`** ← +S145, round-KIỂM ×3 [tooling-harvest · soi-lead · nén-ngủ]). 🔴 Danh-sách này là **BẢN SAO** — nguồn thật = `hmw.js` VALID_ROLES (khối hằng-số `VALID_ROLES`, tra bằng tên **KHÔNG bằng số dòng** — [n6] line-range cũ `:22-36` đã lệch khi enum dài thêm); lệch ⇒ **tin `hmw.js`**. Số vai canonical → [`docs/STATUS.md`](../STATUS.md) §Sub-agents (B1). Thiếu/sai vai → **em-main hỏi anh 1 dòng**, KHÔNG tự đoán. Hiệu-lực CHỈ lượt đó (không marker, không sticky-mode). ✅ **VALID_ROLES = ĐỦ roster:** 2 monitor H1/H2 bổ sung S110 anh-directed (10→12) → +2 monitor H24 S121 W2 (12→14) → **+3 trio-memory S141 (14→17)** → **+3 round-KIỂM `ring1-audit`/`ring2-audit`/`ring4-audit` S145 (17→20)** — lệnh-B trọn roster. 🔴 Số canonical → [`docs/STATUS.md`](../STATUS.md) §Sub-agents, **KHÔNG chép số ở đây**. *(🧊 limitation cũ "2 monitor ∉ 10-vai → fail-soft default-subagent" + H6-design "monitor ngoài workflow" superseded điểm này; monitor vẫn INFORM-only, lane RETURN-only.)*
- **(ii) Spec-file pipeline (mỗi run engine-đắt PHẢI sinh):** `.claude/workflows/runs/<run-id>/spec-<tên-tính-năng>-<dd-mm-yyyy>.md` — 3-heading CỐ-ĐỊNH: **[1] Tính-năng/đề-bài** (1–3 câu) · **[2] Cách implement** (bước + quyết-định + ràng-buộc + đường-chết) · **[3] Checklist** (vai + deliverable + acceptance đo được). Luồng: engine **propose-only** → lead **verify** → **LEAD ghi** (single-writer) → worker **Opus MAX** thực-thi THEO spec bơm qua `args` (`hmw.js` KHÔNG đọc file spec).
- **(iii) 4 ghi-chú trung-thực (🔴 phải hiện-diện — nấc owner-gated, KHÔNG code-enforced §X8):**
  - **(a)** owner-gated tầng LỆNH + kỷ-luật lead cho việc CHỌN/ELEVATE vai, **KHÔNG code-enforced** — đường code `tier:'fable'` vẫn tồn-tại, hmw.js KHÔNG ép vai-nào-được-elevate. *(REC-3 2026-07-13: hmw.js GIỜ code-enforce vai-INVALID — typo ∉ VALID_ROLES → STOP-HARD throw; đó là guard typo, KHÁC gate vai-elevation vẫn là discipline.)* Bảo-đảm elevation = MỌI đường truy về lượt owner-gõ (kỷ-luật), không phải guard chặn.
  - **(b)** lệnh/alias = cách anh **gán vai NHANH** — hệ **KHÔNG tự chọn vai**, vẫn phải anh gõ.
  - **(c)** spec-file do **lead ghi SAU khi verify** — engine không tự ghi.
  - **(d)** run **chấm/verify CŨNG sinh spec** (kế-hoạch xử issue = "cách làm" cần kết-tinh, không chỉ run implement).
- **(iv) Map sàn 5-điểm:** ① spec-file mỗi run · ② worker thực-thi THEO spec · ③ chỉ chạy khi owner gõ lệnh · ④ vai owner-gán đích-danh · ⑤ lead KHÔNG tự-ý gọi engine-đắt.
- **(v) Honest nấc K.E:** codify S110 + dogfood **run-1 = chính lượt adopt này** (spec-file `2026-07-11-h21-mtv3-adopt`); **mechanized = 0** (convention + git-tracked spec làm audit-trail — KHÔNG guard code-enforced).

**Honest nấc tổng §K:** value THẬT ≠ cost (broadcast §8 "ensemble không rẻ hơn nhiều về token thô") mà = **anti-consensus-catch** (dogfood S101 WF2 Lane-B bắt `workflows/README:51` stale-label token-exact-sweep sót, commit `f229b07` — run-folder ephemeral, cite COMMIT) + formalize ensemble-heavy-judgment + thật/ảo depth-toggle owner-control + Fable-outage timeliness. Nấc = **designed + dogfooded** (ensemble-pattern proven S101; thật-mode toggle **first-real-run S108 2026-07-10** — 2-lane single-Fable song song 2-đầu-khác-trục review chính `fable-real-runbook.md`, verdict FAIL-then-fixed đúng Smart-Friend, form kết quả → runbook §5.5). Mechanized THẬT (pre-H21, 🧊 marker-toggle retired S110) = CHỈ marker-toggle (Write/Remove gitignored, verify-idiom) + `hmw.js` parallel-lanes; scope-guard + engine-label + single-writer = **convention** (em-main kỷ-luật, hmw.js không gate vai). RC-sig + command `.md` = executed-file, verified-pending-restart (no hot-reload). **S110 H21-update:** marker-toggle retired (mechanized-marker không còn); per-invocation = owner-gated convention + spec-file git-tracked.

---

## PHẦN L — Harness-20: Fix-all-structure (sửa drift ĐỦ-TẦNG khi supersede) (🔴 FUNCTION-FLOOR quy-trình + 🟡 form)

> **Adopt S103 (2026-07-06)** — AI_INFRA broadcast `2026-07-03-Governance-harness-20-fix-all-structure` (content_sha256 re-compute **MATCH ✓** `bd714a33…`; `reviewer_gate: PASS` + nac PUBLISHED). Áp qua 2-workflow Harness-9: **WF1 implement+verify `wf_55ef6778-a0d`** (Lane-C exhaustive sweep) + **WF2 review** (fable-clone ensemble, run-id ghi dưới). **Additive** — bổ-sung `governance-detectors.ps1` (§C detector DÒ; fix-all-structure ĐẢM-BẢO bản-sửa đủ-tầng), KHÔNG thay.

**L.A — Nguyên-lý (🔴 §1-2 sàn):** supersede/đổi 1 quy-tắc governance → drift KHÔNG tự biến mất; sót ở 4 tầng: **NHÌN** (mục-lục/bảng/sơ-đồ) · **NGUỒN** (văn-bản chuẩn — tiêu-đề + MỌI mệnh-đề active) · **DẤU** (sổ chữ-ký/hash) · **DẪN-XUẤT** (guide/template/onboarding) + 🔴 **PERSONA** (`.claude/agents/*.md` — nạp-lại MỖI spawn = drift độc-hại nhất, dễ sót nhất). Anti-pattern **SỬA-LỆCH-TẦNG**: sửa 1 tầng để tầng khác cũ = TỆ HƠN không-sửa (mâu-thuẫn + nếu tầng-cũ = authoritative → reader nhận quy-tắc SAI). Thứ-tự đúng: **đủ-tầng > không-sửa > sửa-lệch-tầng.**

**L.B — 4 bước (🔴 §3 sàn):** (1) **Quét cạn-kiệt** grep token/hash/tên-policy TOÀN-KHO (KHÔNG chỉ nơi-nhớ). (2) **Phân 4 nhóm** mỗi hit: ĐANG-SAI (mô-tả current sai → sửa + note-supersede) · LỊCH-SỬ-DÒNG-DÕI (saga có neo mốc → GIỮ) · DẪN-XUẤT (guide/template → update/note-đầu) · SNAPSHOT-THEO-NGÀY (chụp thời-điểm → GIỮ). (3) **Sửa HẾT ĐANG-SAI** mọi tầng (nhìn + tiêu-đề-nguồn + mệnh-đề active + dấu). (4) **KHÔNG rewrite LỊCH-SỬ.** + 🔴 **Kiểm 2-đầu khác-trục** (ground-truth + adversarial) chống "cùng-góc-cùng-điểm-mù".

**L.C — Ánh-xạ SE (🟡 form + honest):** SE = **convention** (grep + phân-loại = kỷ-luật người, KHÔNG cơ-chế-hóa auto-fix — trùng nấc D6 DÒ-only). Complements: detector PHÁT-HIỆN (C1/C2/C3), fix-all-structure ĐẢM-BẢO bản-sửa đủ-tầng. Adoption-checklist 6-mục = SE thực-hành từ S96-monthly (nay đặt-TÊN + neo floor). SE đã dogfood pattern (S100 J.B sweep 15-điểm/8-file `_ledger`-retire; S101 `workflows/README:51` 2-đầu bắt sweep-sót) — H20 = codify cái ngầm-có.

**L.D — Dogfood n=1 THIS session (🔴 executed — 2 live-application):**
- **Model-note sweep (F2/F3 recheck-broadcast live-fix):** BƯỚC 0.6 bắt runtime S103 = **Opus** (Fable outage lại; per-session flip S98-Fable→S101-Opus→S102-Fable→**S103-Opus**) → thêm data-point tầng running-note: `agents/README.md:3` (PERSONA-tier) · `session-start.md:37` · `session-end.md:113` (Co-Authored-By "hiện=Fable"→Opus = ĐANG-SAI thật). LỊCH-SỬ-SAGA GIỮ: `agents/README:12` (H8-caveat) + STATUS/HANDOFF S98-blurb. STATUS/HANDOFF mega-line current-claim → cập-nhật @session-end blurb (natural update-point).
- **220K→380K superseded-pointer:** engine `§G.5` "lead 220K" = S83-value, S94-override→380K → neo-supersede (GIỮ 220K + note "→S94 380K", KHÔNG rewrite lịch-sử).

- **2-đầu-catch (🔴 Harness-20 §4 dogfood value — REVIEW bắt sweep-gap thật):** fable-clone review `wf_3c5c37cb-aa2` (Lane-C PASS; 2 lane #53-garble→recover, Lane-C phủ redundant) bắt **2 DẪN-XUẤT stale-trailer** `docs/rules.md:220` + `docs/guides/multi-agent-setup-guide.md:428` (`Opus 4.7`→`4.8`) mà sweep-đầu-1 SÓT → **FIXED**. Phân-loại 4-nhóm L.B đúng: 2 DẪN-XUẤT (sửa) vs **~14 `sessions/*.md:3` "Opus 4.7" = SNAPSHOT-THEO-NGÀY (GIỮ NGUYÊN**, session-log mốc-cũ tháng-5). = đúng §4 "2-đầu-khác-trục bắt sửa-tầng-nhìn-quên-tầng-nguồn".

**Honest nấc §L:** convention (KHÔNG mechanized auto-fix — nhánh chỉ-DÒ per CAVEAT "auto-WRITE luật = mối-nguy #1"). Dogfood n=1, CHƯA phổ-quát. Mechanized THẬT = CHỈ grep (detector); phân-loại + sửa = người.

---

## PHẦN M — crystallized-backfill (measure-then-fill) + bảng-số ngân-sách + run-loop 2-tầng + Applied%-no-key (🔴 FUNCTION-FLOOR + 🟡 form)

> **Adopt S103 (2026-07-06)** — AI_INFRA 4 broadcast owner-directive + 1 reference, content_sha256 re-compute **MATCH ✓ cả 6**: `harness-full-recheck-crystallized-backfill` (`94c78d1d`, F1-F4) · `session-cmd-budget-display-runloop` (`d47333e0`) · `harness-16-nokey` (`a1dc3a20…`, reviewer_gate PASS-WITH-FIXES) · `Agent-memory-hygiene-mechanization` (`43c9e56f…`, A/B/C) · reference `consolidation-crystallization-measurement` (`5bba339b…`). 2-workflow: **WF1 implement `wf_55ef6778-a0d`** (2 script + Lane-C verify; selftest exit-0 ×2 + fault-inject teeth) + **WF2 review** (run-id ghi dưới). **Additive.**

**M.A — crystallized-backfill (🔴 F4 NEW function):** `scripts/crystallized-backfill.ps1` (NO-API DRY planner). "measure-then-fill" = đo REAL-token headroom hot-feed → đổ crystallized cold-tier vào chỗ-trống để KHÔNG phí trần. 🔴 **DISTINCT crystallization (§I distill):** distill = NÉN-về-nguồn giữ time-invariant; backfill = NGƯỢC, ĐỔ-vào-trống (consolidation Mục 1). 🔴 5 sàn bất-biến: (1) **default target=0=OFF** (owner-authority `budget.json:crystallized_backfill.target`; script READ-ONLY KHÔNG auto-tune) · (2) **NOT-for-sub** (sub-pack lead-curate per-task) · (3) **calibrated RANGE** [bytes/4..bytes/3.0], headroom dùng bytes/3.0 worst-case · (4) **PRECONDITION** mở CHỈ khi target>0 AND measured_headroom>0 · (5) **value-gated source-order** gist→value-marked-archive→curated-RAG, dedup, DRY-no-pour. 🟡 Honest: hotload_sources = **FILE-FLOOR ổn-định** (6 file) → measured_headroom = **UPPER-BOUND** (peak thêm task-context biến-thiên KHÔNG trong list → real-headroom NHỎ HƠN; ~368K peak gần cap). backfill **inert-today** (target=0). = đúng cảnh-báo F4 "byte/4 undercount = ảo-giác còn-chỗ".

**M.B — bảng-số ngân-sách (🔴 #4-Upgrade1):** script in BẢNG số THẬT: cap-live / hotload-đo-bytes / tok-RANGE / measured_headroom / target / expected_backfill — MỌI số đọc-sống 0-hardcode. Wired `session-start §2.1.6` + `session-end §L.b(c)` (bổ-sung %-print). **F1-tightening:** bảng-live thay prose-echo "380K" (dù SE 0-hardcoded-violation, echo session-start:122 nay có nguồn-sống thay).

**M.C — run-loop 2-tầng (🔴 #4-Upgrade2 — 🟡 LARGELY ALREADY-MET honest):** Tầng-1 ĐO mỗi session-end (deterministic: memory-selfimprove-audit + mfe-eval + governance-detectors + archive-gate + crystallized-backfill) → khối-số tươi (cấu-trúc chống "khai-chạy-mà-không-chạy"). Tầng-2 TINH-CHỈNH on-signal (new-gap/drift-vs-last/orphan-TĂNG/coverage-tụt → **cảnh-báo ĐỎ** + refine-in-session HOẶC carry-hi-prio nếu đứt-phiên; KHÔNG nuốt). Weekly full-refine backstop. 🟡 **Honest ALREADY-MET:** `§L.b(c)` ĐÃ có H17 loop-REFINE + %-print + 4 script; M.C = FORMALIZE 2-tầng-framing + khối-số-mỗi-end. Tầng-2-signal-fire dogfood CHƯA chạy thật (như hub n=1).

**M.D — Applied%-no-key (🔴 H16-update mechanism):** `scripts/applied-eval-nokey.ps1`. Cổng đối-kháng fail-closed (control-cố-ý-sai chấm-CAO→BLOCK / control-BỎ-QUÊN→BLOCK / control-thấp→PASS) + merge (loại control, KHÔNG bịa null→0) + selftest 3-ca (fault-inject FLIP-proven, bắt real-bug `$script:`-scope). 2-agent-pass (thí-sinh bịt-đáp-án đúng-persona / trọng-tài khác-phiên sạch-ngữ-cảnh) = DOCUMENTED runtime-via-workflow. 🔴 4 caveat: proxy-điểm-thời-gian / chung-họ-model-chưa-khử / bịt-mắt-chỉ-dặn / chưa-đo-tuổi. Honest: **MECHANISM built, con-số DEFERRED** (sample-Q chín + judge độc-lập khác-phiên). API-key nay **TÙY-CHỌN**.

**M.E — F1/F2/F3 recheck (🟡 already-met):** **F1** (số=con-trỏ): Lane-C sweep = **0 hardcoded-violation** toàn-kho, persona CLEAN → already-met (M.B retire echo). **F2** (sweep-incl-persona) = §L H20. **F3** (model-routing REAL-metadata): **BƯỚC 0.6 ĐÃ đọc env-runtime-thật** — S103 bắt Opus KHÔNG tin comment (đúng bài F3 "ghim thắng inherit khi model blank → đứt âm-thầm") → already-met + live-evidence.

**M.F — memory-hygiene-mechanization (🟡 ALREADY-MET via Harness-9/11 + 🔴 C n/a):** **A** archival = `memory-archive-gate.ps1` (DRY-RUN + value_protect ADVISORY-only + keep-floor + 2-strike + A7 byte-preserve → SIDESTEP grep-gate-trap vì em-main-decides) · **B** drift-detector = `governance-detectors.ps1` 4-layer 1:1 (C1 broken-ref · C2 mismatch-only `if n≠canon` · C3 vocab-fork · C4 self-exclusion SEPARATE-namespace) · **C** launcher-allowlist = **n/a-by-architecture** (SE = Anthropic Workflow JS-sandbox, KHÔNG CLI-launcher; hmw.js:1-5 + workflows/README:51) · **wire** = §2.1.2/§2.1.3 @start + §L.b(c) @end. Đã adopt via Harness-9/11 — M.F = confirm-mapping 1:1 (KHÔNG rebuild).

**M.G — consolidation (🟢 reference, no-mandate):** absorb: crystallization≠backfill (§I vs §M) · staleness-check by CONTENT-diff KHÔNG mtime (harvest-curator đã làm S102 recovery byte-match) · 60K sub-reserve = owner-set KHÔNG converged-measure (đã đúng) · measurement-gap priority-1 (chưa official-tokenizer — SE dùng calibrated-range honest).

**Honest nấc tổng §M:** mechanized-THẬT (NO-API deterministic, selftest exit-0) = crystallized-backfill + budget-table + applied-eval-nokey gate + fault-inject-teeth. Convention = run-loop framing (M.C already-met §L.b) + fix-all sweep (§L). **Inert/deferred honest:** backfill target=0 (peak gần-cap → real-headroom nhỏ) · Applied% numbers DEFERRED (mechanism-only) · measure = calibrated-range KHÔNG official-API-tokenizer (measurement-gap fleet-wide). Owner-authority: mọi con-số ngân-sách READ-ONLY.

---

## PHẦN N — Harness-22: WAL session-continuity (sổ mạch-việc + hook persist + /pause /tiep) (🔴 FUNCTION-FLOOR + 🟡 form)

> Adopt S111 (2026-07-12) từ broadcast `2026-07-11-Governance-harness-22-wal-session-continuity` (body-sha `3de0758a` verified; ≙ AI_INFRA CANONICAL §I4 + §H1). Giải: phiên chết giữa mạch việc (limit/crash/tắt-máy/đổi-acc/chết-giữa-workflow) → mất trí-nhớ chưa-ghi + đốt-lại token. **"WAL" ở đây = sổ-liên-tục-phiên** — KHÁC "WAL RUN-LEDGER hai-nhịp" đã retired H18-B (trùng chữ, khác cơ-chế; alias-map awareness).

- **N.1 Sổ WAL (🔴):** `.claude/WAL.md` **≤40 dòng, ghi-đè toàn-file KHÔNG append**; `chain:` mục `[x]/[!]/[ ]` **KÈM bằng-chứng lệnh** (không mô-tả suông) + `next:` đúng 1 mệnh-lệnh + `verify:` ≥1 lệnh CHẠY ĐƯỢC, chạy TRƯỚC next — **ground-truth thắng WAL** (lệch → sửa WAL cho khớp thực-tế rồi mới đi). **CẤM secret** (file được commit). Template rỗng → `session-end §6.4`.
- **N.2 Hai tầng ghi (🔴):** tầng NỘI-DUNG = **lead single-writer** (D9-consistent), ghi lại sau MỖI subtask đổi trạng-thái (kể cả lúc phóng + thu workflow-run). Tầng PERSIST = **Stop-hook `.claude/hooks/wal-flush.ps1`** deterministic (PS1 — chọn path-independent vì PATH-order bash 2-context Windows ngược nhau, lead-verified S111): hook **ĐƯỢC làm đúng 2 việc** = `git add` per-path **4 path cố định** {`.claude/WAL.md` · `.claude/agent-memory/` · `.claude/workflows/runs/` · `.claude/sessions/`} + commit CAND-only message `wal: flush <ts>`; hook **KHÔNG-ĐƯỢC** = sinh/sửa nội-dung · push · block-stop · đụng path ngoài list · exit≠0 (fail-open MỌI nhánh). Per-path add + CAND chống bẫy all-or-nothing đa-pathspec (bài học test-proven nguồn). 🔄 **Cardinality 3→4 @S146** (thêm `.claude/sessions/` cho session-model per-pause context-map): con-số này là **LUẬT GỐC mà hook thi-hành** ⇒ mọi đổi cardinality phải **grep MỌI consumer cùng-commit** (hook `wal-flush.ps1` · Sàn-3 `/tiep §0` "điểm mù" · `.session-counter.json _why_this_path` "outside all …" · auto-memory H22) — sửa write-site mà sót read-site = vỡ chính floor recovery (lớp S87/S88). Bản-ghi LỊCH-SỬ (adap-report có ngày · diary vai · `WAL.md`) **KHÔNG rewrite** — chúng mô-tả trạng-thái lúc đó.
- **N.3 Trạng-thái hook = ✅ VERIFIED-RUNTIME S111 CÙNG PHIÊN (nâng từ STAGED-until-verified — chống ghost-wire S100 bằng bằng-chứng THẬT):** hooks-entry `.claude/settings.json` ghi S111 → Stop-hook **HOT-RELOAD + FIRE ngay giữa phiên** (KHÔNG cần restart): commit **`12071c5 "wal: flush 20260712T1105"`** chứa ĐÚNG 4 file thuộc tập path cố định **lúc S111** (WAL.md + diary invest + run.md + spec — khi đó `.claude/sessions/` chưa tồn-tại; tập hiện-hành = N.2 bản 4-path @S146), CAND-commit chuẩn (settings.json/broadcasts/docs đứng NGOÀI — persist-only đúng thiết kế), 0 push. Giả-định honest-(c) nguồn "hook chỉ nạp lúc khởi-động phiên" → trên harness NÀY = hot-reload; ⚠️ **ENV-DEPENDENT** (data-point #2 sau skill-registry hot-reload S107/S111 — hub từng NGƯỢC kết quả, KHÔNG fleet-generalize; phiên MỚI vẫn re-check 1 lần trong pilot-checklist, không fire → thử schema phẳng). *(Nấc trước khi có bằng-chứng = STAGED-until-verified: CẤM claim "đang chạy" khi chưa thấy wal:-commit do hook sinh — nguyên tắc GIỮ cho mọi hook tương-lai.)*
- **N.4 Một đường recovery (🔴):** `/pause` (chốt điểm dừng: flush-dirty → WAL-đúng-schema → commit đích-danh `wal: pause` TRƯỚC tuyên-bố an-toàn → DỪNG HẲN) + `/tiep` (đọc WAL → chạy TOÀN BỘ verify + `git status` + disk run-folder → lệch = tin ground-truth → thực-thi next; nhánh `wf:` = relaunch-cắt-gọt). **MỌI con-trỏ recovery trỏ về MỘT chỗ = `/tiep`** (kể cả anh gõ "làm tiếp" text thường); CẤM nạp lại transcript cũ. Delta session-cmd: `session-start BƯỚC 0.7` WAL-check (ngoại-lệ CHỜ duy-nhất, chỉ con-trỏ) · `session-end §5.0` squash `wal:`-trailing CHƯA-push (`origin/main..HEAD`, KHÔNG BAO GIỜ rewrite đã-push; squash-điểm = review-diff wal-paths, AS-10 backstop dời về đây không mất) · `§6.4` reset WAL = bước cuối.
- **N.5 WAL-cho-workflow (🔴 sàn owner-nguồn):** run **≥3 task HOẶC ước >5 phút = BẮT BUỘC RUN-TRACE mode** (`args.run` — per-agent-file `sub-<role>-<i>.md`; chết giữa run còn vật-liệu trên đĩa); run.md +`## taskList snapshot` ghi TRƯỚC launch (spec đã on-disk per H21 — sàn {task-list · spec} đủ); dòng `wf:<mục-đích> run= runId= args= done=k/N harvested=` vào WAL NGAY SAU launch; **harvest-LIỀN** mỗi task xong (C4 per-turn ĐÃ CÓ — honest granularity: per-TURN ≠ per-TASK, `parallel()` trả cả batch cuối turn + Stop-hook cũng fire ở turn-boundary → chết GIỮA turn = returns mất, per-agent-file trên DISK là lớp cứu → `/tiep` đọc CẢ disk); `/tiep` nhánh wf: = **relaunch-ĐÃ-CẮT-GỌT** (grep run-id log-phiên = bằng-chứng đích-danh · harvest-hồi-tố partial-honest · relaunch CHỈ task còn lại · memory-pack **RE-DERIVE TƯƠI, CẤM snapshot**); resume-by-run-id = bonus **SAME-SESSION-ONLY** (CẤM claim cross-session). Trung-thực mất-mát tối-đa: agent song-song đang-chạy tại thời-điểm chết mất phần dở; run nhỏ ngoài diện WAL-hóa có thể mất cả run — rủi-ro chấp-nhận công-khai.
- **N.6 Commit-convention exception:** commit `wal:` (hook-flush + `/pause` + WAL-reset) = **ngoại-lệ DUY-NHẤT** của format `[CLAUDE] <scope>` — máy sinh, KHÔNG Co-Authored-By, bị squash vào commit-chốt trước push (`rules.md §5.2` mirror).
- **N.7 Honest (a)-(e) áp SE:** (a) **pilot CHƯA chạy đủ tại SE** — dựng + codify + **hook-FIRE-verified S111** (`12071c5`/`67be443`; script-RUN tay BỎ — bằng-chứng mạnh hơn thay thế + reviewer fault-inject 2-ca bịt nhánh 0-delta); kill-test / đổi-acc / squash-thật / pause-roundtrip-workflow = phiên mới + anh (HANDOFF pilot-checklist) · (b) SE **0 mark cấm-hook** (5 Active-High không đụng); engine CAVEAT "No-OS-hook" = MÔ-TẢ hiện-trạng đã honest-update ngoại-lệ đích-danh; E.3 chỉ cấm hook-làm-GATE — persist-only 0-content tương-thích; thứ-tự codify-trước-enable tôn trọng CÙNG-COMMIT S111 · (c) schema hooks nested = default, verify ở PHIÊN MỚI, không fire → thử flat · (d) resume-run-id cross-session CHƯA kiểm-chứng — đường chính = relaunch-cắt-gọt · (e) **repo SE TRONG Dropbox — 2 chiều:** risk `index.lock` khi cloud-sync đụng git (thấp-nhưng-có; hook fail-open tự-lành lượt sau) + bonus Dropbox sync cả `.git` → commit local CHƯA-push vẫn sống qua tắt-máy/đổi-máy → `/pause` không cần push vẫn durable.

- **N.8 Probe-tại-điểm-dừng — predicate 4-vế (🔴 FLOOR + 🟡 form) — LUẬT-HOME của C7 (hub-answer, adopt S146):** điểm dừng (`/pause` · `/tiep` · `session-start` · `session-end`) **KHÔNG chạy việc khác**, NHƯNG được phép gọi **probe** nếu script thoả **ĐỦ 4 vế** (thiếu 1 vế = KHÔNG phải probe, cấm gọi tại điểm dừng):
  - **(i) read-only** — chỉ ĐỌC (parse JSON/config · đo byte bằng `Get-Item` · liệt dir). 0 mutation, 0 network, 0 API-call.
  - **(ii) KHÔNG spawn con** — không Agent/Workflow/sub-vai, không `Start-Process`/job-nền/`Invoke-Expression`. Điểm dừng KHÔNG được đẻ việc mới (đó chính là cái C7 cấm).
  - **(iii) KHÔNG write** — không sinh/sửa/xoá file, không `git add|commit|push`, không đụng counter/memory/luật. Chạy 2 lần liên-tiếp phải cho cùng trạng-thái đĩa.
  - **(iv) lỗi → in `probe-loi (khong chan)` → ĐI TIẾP — 🔴 [LOAD-BEARING]:** MỌI nhánh `exit 0`; probe hỏng KHÔNG chặn, KHÔNG treo, KHÔNG làm `/pause` mất quyền tuyên-bố "an-toàn để thoát". Đây là vế biến probe từ *thêm-một-điểm-hỏng* thành *thêm-một-hiển-thị*.
  - **FLOOR (🔴 bất-biến — port-nguyên khi tailor, 3 tính-chất):** **read-only** · **non-blocking** (fail-open + no-hang + `exit 0` mọi nhánh) · **gỡ-được-không-hậu-quả** (xoá lời-gọi probe khỏi thân command ⇒ mất HIỂN-THỊ, KHÔNG mất state, KHÔNG đổi nhánh quyết-định nào — đây là **phép thử phân-biệt probe ⟂ gate**; nếu gỡ đi mà hành-vi đổi thì nó là gate, thuộc §E.3, không thuộc N.8).
  - **FORM (🟡 tailor được):** wording token in ra (`probe-loi (khong chan)` — ASCII-only theo gotcha #30) · số vế / chuỗi định-dạng dòng-nợ · vị-trí gọi trong thân command · **interpreter = em-main đọc dòng in** (KHÔNG phải OS-gate; exit-code không cưỡng-chế gì — nhất-quán CAVEAT No-OS-hook).
  - **Reword tập-cấm (🔴 KHÔNG phải cấm-tất):** luật "điểm dừng không chạy thứ khác" đọc đúng = **cấm ĐẮT / cấm side-effect** (spawn vai · audit-rerun · đo lại instrument · ghi memory/luật · push) — **CHO PHÉP probe read-only non-blocking theo N.8**. Command chỉ **TRỎ** `engine §N.8`, **CẤM chép predicate sang 2 nơi** (B1 derived-trỏ-canonical; predicate đổi 1 chỗ, consumer không drift).
  - **Trạng-thái đo S146 (fault-inject 2-chiều, `timeout 60` bọc để quan-sát no-hang):** `scripts/nhip-no-probe.ps1` = ✅ **thoả cả 4 vế** (lành → 1 dòng `NHIP-NO: …` đầy-đủ, exit 0 · `-RepoRoot` bậy → `probe-loi (khong chan)`, exit 0, không treo; catch tổng `:203-208`). `scripts/distill-shard-probe.ps1` = thoả (i)(ii)(iii) + no-hang, **(iv) mới NỬA**: nhánh có-xử (thiếu `memory-budget.json` `:23` · thiếu key `distill_trigger` `:27`) in token + `exit 0`, nhưng **không có try/catch tổng** với `$ErrorActionPreference='Stop'` `:17` ⇒ exception (vd `-RepoRoot` bậy tại `Resolve-Path` `:18`, hoặc JSON hỏng tại `ConvertFrom-Json` `:25`) thoát ra stderr + **exit 1**, KHÔNG in token ⇒ **FLOOR đủ (read-only · non-blocking-thực-tế · gỡ-được) / FORM thiếu**. Vá = bọc try/catch tổng → `probe-loi (khong chan)` + `exit 0` (thuộc chủ-file script, KHÔNG tự sửa trong lượt này).

**Honest nấc §N:** mechanized-THẬT = hook-script deterministic (persist) + template + acceptance grep; convention = lead ghi nội-dung WAL sau mỗi subtask (kỷ-luật, không công-cụ-ép) + squash/reset trong thân session-end do em-main kích. Dogfood S111 = tầng nội-dung (WAL-chain thật trong phiên adopt) + script-RUN tay; hook-FIRE + full-pilot = nấc kế.

---

## CAVEAT (trung-thực — đọc trước khi tự nhận "đã tự-bảo-trì")
- **No-OS-hook:** detector + gate chạy TRONG thân session-start/end body do em-main kích — KHÔNG fully-autonomous. Đúng mức: **DÒ tự-động + toàn-diện; SỬA + GÁC dựa người-chủ-trì.** **Ngoại-lệ đích-danh (S111 H22):** Stop-hook `wal-flush.ps1` persist-only (PHẦN N) — 0-content, fail-open, KHÔNG phải gate (E.3-compatible: không cưỡng-chế hành-vi, chỉ persist trạng-thái xuống đĩa); ✅ VERIFIED-RUNTIME S111 (N.3 — `12071c5` + `67be443` fire thật; STAGED-until-verified giữ làm NGUYÊN TẮC cho hook tương-lai).
- **Auto-WRITE luật/copy = MỐI-NGUY #1, CỐ Ý CHƯA LÀM** — defer tới ≥2 sự-cố thật mà thủ-công thất-bại (hiện 0). Chọn nhánh chỉ-DÒ-NÊU-CỜ cho mọi thứ chạm luật/copy (1-sửa-sai → N-chỗ-sai + phá hash broadcast đóng-băng).
- **Single-writer bar-không-hạ** — cám-dỗ "để nó tự sửa cho nhanh" phải dừng trước chốt D9.
- **Detector = LƯỚI giảm-sót, KHÔNG khoá-cứng** — bắt @đầu/đóng-phiên (theo nhịp); giữa 2 nhịp có khoảng-mù. Phòng-thủ-nhiều-lớp, không bảo-đảm tuyệt-đối.
- **Nấc dogfood:** A2/A3/D4/D9/D11 = SE runtime-mechanized SẴN (H11 = chuẩn-hoá). C1-C3 + B3 + memory-archive-gate = MỚI build S75. D5-D8 + B1 = nhãn-hoá/codify cái ngầm-có. Phân-định 'detector viết-thành-lệnh' (executed-file) ≠ 'đã chạy-quan-sát' (runtime).
- **§E User-Mark = phần-lớn CONVENTION (S79):** report-trước-đóng-dấu (E.2/P4) + cưỡng-chế-hành-vi (E.3 behavioral) + neo-lý-tính (E.5/P10) = **kỷ-luật người+AI**, KHÔNG công-cụ-ép (đừng nhận "mechanized"). CHỈ session-display (gắn lệnh-phiên P7) + chặn-tool-ở-config (E.3 tool-action P9) = mechanized. RC-sig 3 mark Active-High đã anh-confirm-stamp S79 (`ACTIVE-MARKS.md`) = executed-file; 4 lệnh `/user-mark-*` = command `.md` verified-pending-restart (no hot-reload).

---

## PHẦN O — Kỷ luật GÓI NGỮ-CẢNH khi phát lệnh cho lane (D-10 · D-12) — W5/S181 (🔴 FUNCTION-FLOOR)

> Land @S181 wave **W5**, gói adap 7-GĐ. Nguồn đo: `sub-n3-lane-d-gd56.md` D-10/D-11/D-12.

### O.1 — D-10: **Tổng hợp = MỘT LƯỢT GỌI MỚI, CẤM nối lại lượt cũ**

Khi cần **tổng hợp** kết quả của nhiều lane, phải mở **một lượt gọi MỚI** với đầu vào là các **vật chứng trên đĩa**. **CẤM** nối lại (resume) một lane cũ rồi bảo nó tổng hợp.

**Lý do:** lane cũ mang sẵn ngữ-cảnh riêng của nó; nối lại là để một lăng-kính đã có thiên-hướng đi chấm cả tập. Lượt mới đọc đĩa thì mọi lane vào bằng cùng một cửa.

🔴 **RANH với resume-#53 — hai việc KHÁC NHAU, đừng gộp:**

| | resume-#53 | tổng hợp |
|---|---|---|
| Mục đích | **cứu vật chứng** của CHÍNH lane đó khi return bị garble | **hợp nhất** vật chứng của NHIỀU lane |
| Nối lại lượt cũ? | ✅ ĐƯỢC (đó chính là cách cứu) | 🔴 **CẤM** |

*Counter-datum giữ cho công bằng:* resume @S180 **KHÔNG** rớt model (`n=1`) — ghi nhận đúng cỡ mẫu, **không** chép lo-ngại của hub thành lo-ngại của mình.

### O.2 — D-12: mảnh ngữ-cảnh nào CHƯA CÓ thì phải **KHAI**, cho CẢ GÓI 5 MẢNH

Gói ngữ-cảnh chuẩn (D-11) gồm **5 mảnh**. Mảnh nào chưa có ⇒ ghi đúng chuỗi **`(THIẾU — lý do)`**; **CẤM bỏ trống**, **CẤM dựng lại từ trí nhớ**.

| # | Mảnh | Nhà | Trạng thái @S181 |
|---|---|---|---|
| 1 | nền trỏ-không-chép | `tiep.md` §3-ter (khoá `tiep_reload`) | ✅ |
| 2 | lớp mềm mạch việc | `_mind-s-<N>.md` + `.claude/WAL.md` | ✅ |
| 3 | ký ức vai cắt theo trần | `hmw.js` memory-pack slice + `memory-budget.json` | ✅ |
| 4 | **sở thích thường trực** | `docs/governance/so-yeu-cau-chu-du-an.md` khối 2 | ✅ **MỚI CÓ @W4/S181** (trước đó là ❌) |
| 5 | **lời chủ nguyên văn ở lane DISPATCH** | **§O.3 dưới** (chủ dự án phán **P7 vế (ii)** @S181) | ✅ **MỚI CÓ @W5b/S181** |

⇒ **D-11 nay 5/5.** *(Lineage: 3/5 trước W4 → 4/5 sau W4 (mảnh 4 có nhà) → **5/5** sau P7(ii).)*

### O.3 — P7 vế (ii): LUẬT TRUYỀN NGUYÊN VĂN ở lane DISPATCH

> 🔴 **NẤC CHÍNH XÁC CỦA THẨM QUYỀN (hạ chữ @S181 sau khi `lead-stale-auditor` FLAG-1 bắt):** chủ dự án **KHÔNG phán riêng về nội dung vế (ii)**. Lead nêu *"P7(ii) là thứ duy nhất còn thực sự chặn"*, anh đáp **"OK làm hết rồi khép trọn đi"** — đó là **uỷ quyền chạy nốt**, KHÔNG phải phán nội dung. Lead thi hành theo **bậc-1 luật tự-trị** (rõ, không phá huỷ, đảo ngược được) và **khai đúng nấc ở đây**. ⚠️ Bản đầu viết *"Chủ dự án phán @S181"* — **tự mở rộng thẩm quyền**, đúng ảnh phản chiếu của lỗi *tự thu-hẹp* @S179. Anh bác thì gỡ §O.3, 1 lượt.
> 🔸 Đây là kỷ luật của **LEAD khi phát lệnh**, không phải yêu cầu chủ dự án đổi cách gõ.

**Ba khoản, bắt buộc cả ba:**

1. **RÀO `> anh:`** — lời chủ dự án đưa vào prompt của lane đắt phải nằm trong khối blockquote mở đầu bằng `> anh:`, để người/máy đọc prompt phân biệt được **lời chủ** với **diễn giải của lead**.
2. **ĐI NGUYÊN KHỐI** — chép **verbatim**, CẤM tóm tắt, CẤM paraphrase, CẤM cắt bớt cho gọn. Cần cắt vì quá dài thì để `...` và **giữ con trỏ tới chỗ có bản đầy đủ**.
3. **KHAI THIẾU** — không có lời chủ cho việc đang phát lệnh ⇒ ghi đúng chuỗi **`(THIẾU — lý do)`**. 🔴 **CẤM dựng lại từ trí nhớ** rồi trình bày như thể đó là lời chủ.

🔴 **Vì sao vế này tồn tại — rào CŨ chỉ phủ MỘT NỬA.** Rào `> anh:` **đã có từ trước** ở [`pause.md`](../../.claude/commands/pause.md) — nhưng chỉ phủ lane **LƯU TRỮ** (ghi vào `_context` FLOW). Lane **DISPATCH** (đưa vào prompt vai đắt) **không có rào nào**. Đây là ca *phủ một nửa trông như đã phủ*: grep `> anh:` ra hit, nên nhìn qua tưởng có luật.

🧊 **Đính chính một khai sai chiều, giữ làm vết:** N1 từng khai *"SE chưa có rào `> anh:`"* — **sai**, rào có thật, chỉ sai **phạm vi**. Lane D §4b sửa lại. Bài: *"chưa có"* và *"có nhưng phủ nửa"* là hai chẩn đoán khác nhau và dẫn tới hai cách chữa khác nhau.

🔬 **Ca sống tự quy chiếu, ghi thẳng ra:** chính prompt phát cho lane D — cái lane phát hiện ra thiếu sót này — **chứa 0 khối `> anh:`**. Luật này ra đời từ một lượt vi phạm chính nó.

🔴 **Luật tổng (đây là phần D-12 thật sự thêm):** trước đây chỉ **1/5** mảnh có luật khai-thiếu (`pause.md:53`). Từ nay **cả 5** mảnh chịu chung luật: **thiếu thì khai, khai thì nêu lý do**. Một mảnh vắng mà không ai khai thì nó **trông y hệt một mảnh không cần thiết** — đó là lớp lỗi *vắng-mặt-trông-giống-ổn*.

---

## PHẦN P — Luật CHẤM ĐIỂM đáp-ứng-yêu-cầu (GĐ-4 / C4-10 · A9) — W4b/S181 (🔴 FUNCTION-FLOOR)

> Land @S181 wave **W4b**. Chủ dự án đã phán **P4** (đẻ vai) + **P8** (wire 2 cửa) + **P3** (đường ghi lại).
> 🔴 **PHẠM VI BẤT BIẾN = ĐÚNG 5 KHOẢN dưới** (`luat:140`) — không phải câu tóm tắt ở `:23`. Ai sửa 1 trong 5 khoản này là **đổi luật**, phải qua chủ dự án.

### P.1 — Khoản 1/5: CÔNG THỨC

```
điểm = max(0, 10 − số MỤC lặp ≥2)
```

**Đơn vị trừ là MỤC, không phải LẦN.** Một mục bị nhắc 5 lần trừ đúng **1** (`luat:120`), không trừ 4. Lý do: đo *"có bao nhiêu thứ phải nhắc lại"*, không đo *"tổng số lần mở miệng"*.

**3 cách đọc BẮT BUỘC đi kèm mỗi lần in điểm** (`luat:53-55`) — thiếu một cách là in điểm trần trụi, và điểm trần trụi thì ai cũng đọc thành *"đội tốt/xấu"*:
1. Điểm này đo **đội có phải nghe lại không**, KHÔNG đo đội giỏi hay dốt.
2. Điểm cao **không** chứng minh làm đúng — chỉ chứng minh **không phải nhắc lại**.
3. Điểm thấp là **tín hiệu tra cứu**, không phải bản án; đọc kèm danh sách mục.

### P.2 — Khoản 2/5: NGUỒN ĐẾM (đã ký, không né được bằng đổi nguồn)

Nguồn đếm duy nhất = [`docs/governance/so-yeu-cau-chu-du-an.md`](so-yeu-cau-chu-du-an.md), cột *số lần đã nhắc*. **CẤM** đổi sang nguồn khác để làm đẹp điểm (F-08 / lane C §H.1).

### P.3 — Khoản 3/5: BỐN TẦNG, ranh CỨNG

| Tầng | Ai | Làm gì | 🔴 Ranh cứng |
|---|---|---|---|
| 1 | lead | tự chấm theo công thức | — |
| 2 | vai đọc sổ | đọc sổ, **tự đếm lại** | 🔴 **KHÔNG được xem điểm tầng-1** trước khi đếm xong |
| 3 | vai kiểm | kiểm **PHÉP ĐẾM** của tầng 1+2 | 🔴 **CẤM đề xuất một điểm khác** — chỉ nói phép đếm đúng/sai |
| 4 | **chủ dự án** | phán cuối | — |

### P.4 — Khoản 4/5: BA MỐC NIÊM PHONG (A9)

`emit_ts` (lúc in) · `redisplay_ts` (lúc hiện lại) · `first_owner_msg_ts` (tin nhắn đầu của chủ dự án sau khi in).

🔴 **Thiếu mốc-3 ⇒ in `chờ niêm phong`, và KHÔNG được đẩy sang hàng-chờ-anh.** Chưa có phản hồi thì điểm **chưa chốt** — đẩy vào hàng chờ là biến cái chưa chốt thành việc của chủ dự án.

### P.5 — Khoản 5/5: ĐƯỜNG GHI LẠI KHI CHẤM SAI

Chấm sai ⇒ ghi **tầng nào sai** + nhãn *chấm sai* vào [`error-ledger.md`](error-ledger.md).
🔴 **CẤM nhét nhãn *chấm sai* vào `lead_self_audit.flag_classes`** — tập đó **ĐÃ NIÊM PHONG** theo **P3 = B** (khoá `_sealed_P3B_S181`). Máy sẽ **từ chối** (`h24-signal-write.ps1` exit 2). Muốn mở tập thì chỉ chủ dự án mở.

### P.6 — Dòng tổng kết phải đủ 4 phần

`{điểm cuối · 3 giá trị tầng · trạng thái niêm phong · liệt TỪNG mục kèm mã}`. Danh sách rỗng ⇒ ghi đúng chữ **"danh sách rỗng"**, CẤM bỏ trống.

### P.7 — 🔴 LƯỢT ĐẦU PHẢI IN `KHÔNG ĐO ĐƯỢC`

`luat:66` **CẤM in điểm khi nguồn chưa đủ dày**. Nguồn thưa thì máy **luôn** cho 10/10 (hub đã tự đo — `luat:65`) ⇒ in `10/10` ở lượt đầu là **vi phạm ngay luật vừa adopt**.

⇒ Khối chấm in **`KHÔNG ĐO ĐƯỢC`** cho tới khi sổ đủ dày, và giữ **INFORM-only ≥3 phiên** trước khi được phép ảnh hưởng bất kỳ cổng nào (lane F §4.2).

---

## PHẦN Q — PHÂN LOẠI CỜ chặn ⟂ cảnh-báo (P1 = PA-2, wave W3b) — S181 (🔴 FUNCTION-FLOOR)

> Chủ dự án chốt **P1 = PA-2** (hai mã thoát trong MỘT máy) @S180. Phần phân loại land @S181.
> 🔴 **CHƯA CẮM MÃ THOÁT.** Xem §Q.4 — điều-kiện-vào của W3b còn thiếu một vế.

### Q.1 — TIÊU CHÍ, lấy từ ranh ĐÃ CÓ (không chế mới)

`scripts/memory-archive-gate.ps1:323-325` đã dựng sẵn ranh và nó **đúng**, chỉ chưa ai nêu thành luật chung:

> *"Exit non-zero only on **A7 integrity failure** (broken pointer / 0-byte archive). **Over-cap is a FLAG (not an error)** — the gate reports, a human curates."*

⇒ **Luật tổng:**

| Nhóm | Nghĩa | Mã thoát |
|---|---|---|
| **TOÀN-VẸN** | con trỏ trỏ vào hư-không · vật chứng 0 byte · sổ và đĩa mâu thuẫn nhau | 🔴 **CHẶN** (`exit ≠ 0`) |
| **VỆ-SINH / LỆCH-SỐ / SỨC-CHỨA** | số dẫn-xuất cũ · tiêu đề chưa bump · vượt trần · từ-vựng rẽ nhánh | 🟡 **CẢNH BÁO** (`exit 0`) |

**Vì sao ranh nằm ở đây chứ không ở mức nghiêm trọng:** *nghiêm trọng* đo **hậu quả**, còn mã thoát quyết định **có chặn người lại không**. Chặn vì một con số cũ trong tài liệu = dạy người ta tắt máy. Chặn vì một con trỏ chết = đúng việc.

### Q.2 — Phân loại toàn bộ dân số cờ, đo 2026-08-07 (mẫu số **64/64**, không nén thành khoảng)

| Lớp cờ | Số | Bản chất | Mã thoát | Vì sao |
|---|---|---|---|---|
| `dangling-wikilink` | **25** | `[[tên]]` chưa có tệp đích | 🟡 cảnh báo | **Cố ý hợp lệ**: quy ước auto-memory cho phép liên kết tới trí-nhớ *chưa viết* — nó đánh dấu việc nên viết, không phải lỗi. Chặn = phạt đúng thứ quy ước khuyến khích |
| `derived-stale` | **18** | doc dẫn-xuất chở số cũ | 🟡 cảnh báo | Lệch-số, sửa bằng biên tập. Đây là thứ B1 (trỏ-canonical) chữa tận gốc; chặn không làm số mới đúng hơn |
| `H24-*` | **14** | soi-lead | 🟡 cảnh báo | **Đã là INFORM-only theo hợp đồng vai** (`KHÔNG vào TOTAL`). Nâng thành chặn = đổi hợp đồng vai, không phải đổi mã thoát |
| `vocab-fork` | **3** | 2 từ-vựng cùng sống | 🟡 cảnh báo | Nguy thật (2 tên cho 1 vật) nhưng **không mất dữ liệu**. Leo thang khi lặp, không chặn ngay |
| `title-stale` | **2** | tiêu đề chưa bump | 🟡 cảnh báo | Lệch-số thuần |
| `diary-0-delta` | **1** | nhật ký vai 0 delta | 🟡 cảnh báo | Tín hiệu *vai đang mù*, nhưng chưa phải mất mát đã xảy ra |
| `broken-gotcha-ref` | **1** | trích `#91` khi max là `87` | 🔴 **CHẶN** | **Con trỏ trỏ vào hư-không** — đúng định nghĩa A7 integrity failure ở Q.1. Đây là lớp DUY NHẤT trong dân số hiện tại đạt ngưỡng chặn |

**Tổng: 63 cảnh-báo · 1 chặn.** Tỷ lệ này **là kết quả, không phải mục tiêu** — nó phản ánh kho hiện sạch về toàn-vẹn và bẩn về vệ-sinh.

### Q.3 — 🔴 Vì sao 1/64 KHÔNG phải dấu hiệu tiêu chí quá lỏng

Cám dỗ ở đây là *"chặn có 1 cái thì cổng gần như vô dụng"* rồi nới tiêu chí cho nhiều cờ chặn hơn. **Đó là Goodhart.** Cổng chặn tồn tại để bắt **cái chết người**, không để chứng minh nó bận rộn. Nới ranh xuống lớp vệ-sinh sẽ tạo đúng thứ lane F cảnh báo: *8-12 lớp nợ tồn kêu cùng lúc ⇒ người tưởng máy hỏng rồi tắt máy* — và khi đó **cả cái cờ chặn thật cũng chết theo**.

### Q.4 — 🔴 CHƯA CẮM: điều-kiện-vào W3b còn thiếu một vế

Điều-kiện-vào W3b = **P1 đã chốt** (✅ PA-2, S180) **+ rider-jump W2 đã soak INFORM ≥1 phiên** (❌ **chưa** — W2 land 2026-08-07, cùng ngày).

⇒ Phân loại ở trên **đã xong và có thể cắm**, nhưng **mã thoát chưa được đổi ở bất kỳ máy nào**. Mọi máy governance **vẫn `exit 0`**. Cắm khi soak đủ; đây là chặn **tự tan theo thời gian**, không cần ai phán thêm.
