# sub-investigator-2 — spec-cách-làm draft (Giai đoạn B, fable-real single deep-pass)

> Ghi TĂNG-DẦN trong lúc làm (chống #53, bài S123). Trạng thái: **HOÀN TẤT** (6/6 việc ground-truthed + spec'd).
> Engine: fable-real-single · investigator-codebase · 2026-07-16 · run S127-adap-dot-16-07
> Nguồn: spec-invest-cach-lam-16-07-2026.md + sub-reviewer-1-verdict.md (verdict A) + 6 broadcast inbox (hash 6/6 verified ở run.md)

## Trạng thái ground-truth per việc

- [x] Việc 1 (bản 5) — rag.json — GT XONG (LỆCH-1 vị-trí: file trong repo SE)
- [x] Việc 2 (bản 1) — re-verify nhịp 4 mục — GT XONG (a/b/c/d đều verified đĩa)
- [x] Việc 3 (bản 2) — 3-câu-hỏi × 7 vòng lặp — GT XONG (bảng 7×3 + seal-gap loop 2/7 confirmed)
- [x] Việc 4 (bản 3) — nhãn đã-đo — GT XONG (C1+C2 verified; sweep ứng viên 3 = 0 độc-lập mới, 2 borderline cùng-lớp)
- [x] Việc 5 (bản 4) — n-a nắm-hướng — GT XONG (hub tự khai §6/§7)
- [x] Việc 6 (thư 0) — adap-reports ×5 + email gộp — GT XONG (khuôn LOCK + send-email 6c/7 + WAL:12)

---

# VIỆC 1 (bản 5, f5ce2778) — flip `contextual_retrieval` true→false

## Ground-truth (TỰ MỞ đĩa)

| Anchor | Đĩa nói | vs verdict A |
|---|---|---|
| `D:\...\SOLUTION_ERP\.claude\rag.json:26` | `"contextual_retrieval": true,` | ✓ KHỚP (nhưng file ở repo SE — xem LỆCH-1) |
| `...\rag.json:31` | rationale `"Flag true but per v1.3 §12.1 + §9.4: ... Evaluate per eval recall@5 trial week 3."` — trial 2026-06-16 treo, không chạy | ✓ KHỚP |
| `AI_INFRA\claude-rag\lib\projects.py:39` | `"contextual_retrieval": False,  # OWNER-FINAL 2026-07-16 (s100)...` — default khung ĐÃ false + owner-final rationale sẵn | ✓ KHỚP (mirror — SE KHÔNG sửa) |
| `AI_INFRA\.claude\rag.json:33` | hub tự config `false` từ 2026-05-26 (rationale :38) | (bổ sung — khớp claim bản 5 "default false từ cuối tháng Năm") |
| `projects.py:54 cfg.setdefault` | chỉ merge key THIẾU → SE override `true` THẮNG default | Xác nhận hedge "đúng sẵn" KHÔNG áp SE ✓ |

## Spec execute

- **File đích:** `D:\Dropbox\CONG_VIEC\SOLUTION\SOLUTION_ERP\.claude\rag.json` (TRONG repo SE — KHÔNG đụng AI_INFRA)
- **Diff:**
  - Line 26 before: `  "contextual_retrieval": true,` → after: `  "contextual_retrieval": false,`
  - Line 31 before: `"contextual_retrieval_rationale": "Flag true but per v1.3 §12.1 + §9.4: SOLUTION_ERP chunks self-contained (gotchas, patterns, decisions) → Contextual Retrieval prepend likely wasteful. Evaluate per eval recall@5 trial week 3."`
  - after (đề xuất): `"contextual_retrieval_rationale": "FALSE — OWNER-FINAL fleet-wide 2026-07-16 (broadcast f5ce2778: hub-owner chốt false toàn fleet; flag trong khung chỉ gate structural title-prepend ở chunking.py — 0 API-call, KHÔNG phải dead-config-vì-thiếu-key). Lineage SE: true 2026-05-26 → flip S127 2026-07-16. Rationale cũ 'Evaluate trial week 3' = revisit ĐÓNG bởi owner-final (trial không chạy). Recall-delta chưa đo (hub khai); data đã nhúng giữ nguyên tới re-bootstrap kế (AI_INFRA op). Mirror khung: projects.py:39 default False."`
- **Lệnh verify (chạy được):**
  ```powershell
  python -c "import json; c=json.load(open(r'D:\Dropbox\CONG_VIEC\SOLUTION\SOLUTION_ERP\.claude\rag.json', encoding='utf-8')); print(c['contextual_retrieval'])"
  # expected output: False   (đồng thời chứng JSON parse OK — không vỡ file)
  ```
- **Owner-gate:** KHÔNG cần gate mới — hub-owner đã chốt fleet-wide + anh đã gõ `/adap-apply` trong đề bài S127 (consent per-invocation). Quyền SE sửa = tiền lệ S41 tự sửa `exclude_paths` cùng file. Báo anh trong closeout + báo hub 1 dòng (gộp email Việc 6). Hiệu-lực index chờ re-bootstrap = AI_INFRA-op (KHÔNG tự chạy bootstrap.py — charter v2, cần VOYAGE key).
- **Lane D:** HMW-worker mechanical ✅ (edit in-repo 2 dòng + verify; KHÔNG cross-repo write)
- **Acceptance D:** lệnh verify trên in `False` + `git diff --stat` chỉ 1 file `.claude/rag.json`.

---

# VIỆC 2 (bản 1, 85bf89ca) — re-verify nhịp: 4 mục (a)-(d)

## Ground-truth (TỰ MỞ đĩa)

| Anchor | Đĩa nói | vs verdict A |
|---|---|---|
| `docs/governance/adap-reports/2026-07-15-Governance-h17-cadence-update-bookend.md:8` | `...7 khoản cũ SAI (3 nhịp · "ở nguồn" 6/15/3 · >=/OVERDUE · "đến hạn" trigger · "delta run-2" · self-check >= · "dogfood mốc-0").` | ✓ KHỚP — "7 khoản cũ SAI" lệch bản published (broadcast §2: "năm thành sai hoặc sai một nửa, hai khoản đổi cách đọc"; reviewer_gate M-1 fold "3-chỗ") |
| `.claude/commands/session-start.md:206` | Honest-caveat: `hub nói rõ "số của các em..." ... Chỉnh lại sau chu-kỳ-2 — n=1 ở hub là mocc-0, chưa ai được bán "đã chứng minh hiệu-quả"` | ✓ KHỚP — stale: neo "n=1 ở hub / mốc-0 hub" (hub ĐÃ GỠ counter → không bao giờ có run-2 hub; typo "mocc-0") |
| `.claude/agent-memory/memory-budget.json:123` `_owner_ratified` | `"...anh chot 6/15/3, 'tuong tu Hub'... Re-tune after cycle-2 (H24 caveat (c): the real delta only appears from run-2; n=1 at the hub is mocc-0...)"` | ✓ KHỚP — stale cùng class: "tuong tu Hub" + neo run-2 CỦA HUB (nay không tồn tại) |
| `.claude/governance/.session-counter.json:13-20` | `counter=6, last_ticked S127 (07-16), last_audit light/deep@3 (S124, 07-15)` → tick 3→6 trong 2 ngày | ✓ KHỚP verdict A "(c) GIỮ counter — phiên ngắn-nhiều, điều-kiện gỡ hub (1-phiên/ngày + trả-mọi-lượt) KHÔNG áp" |
| `broadcasts/_index.md:33-38` | 6 row INBOUND 2026-07-16, tất cả `pending` + folder `(root)` | ✓ KHỚP — khuôn move: header `:11` "pending (ở inbox/ root) → processed (đã MOVE vào inbox/<from>/)" |

## Spec execute (4 sub-việc)

### 2a — sửa adap-report bookend dòng 8
- **File đích:** `D:\...\SOLUTION_ERP\docs\governance\adap-reports\2026-07-15-Governance-h17-cadence-update-bookend.md`
- **Diff dòng 8:** before `...chuyển **bookend** (rà đầy-đủ 2-đầu mỗi phiên). 7 khoản cũ SAI (3 nhịp · ...)` → after `...chuyển **bookend** (rà đầy-đủ 2-đầu mỗi phiên). 7 khoản cũ cần soi lại — **5 sai/sai-một-nửa + 2 chỉ đổi-cách-đọc** (3 nhịp · "ở nguồn" 6/15/3 · >=/OVERDUE · "đến hạn" trigger [lõi (a) máy-không-tự-bắn VẪN ĐỨNG] · "delta run-2" · self-check >= [idempotent GIỮ] · "dogfood mốc-0").` — GIỮ nguyên enumeration 7 mục, chỉ sửa phân-loại tổng + chèn 2 note ngoặc.
- **Verify:** `Select-String -Path "docs\governance\adap-reports\2026-07-15-*.md" -Pattern "5 sai"` → 1 hit; `-Pattern "7 khoản cũ SAI"` → 0 hit.
- **Gate:** không — đây là đính-chính khớp bản published (derived-flush class). Lane D: HMW-worker ✅.

### 2b — 2 citation stale re-tune (neo cycle-2 CỦA SE)
- **File 1:** `.claude/commands/session-start.md:206` — before: `**Chỉnh lại sau chu-kỳ-2** — n=1 ở hub là mocc-0, **chưa ai được bán câu "đã chứng minh hiệu-quả"**.` → after (đề xuất): `**Chỉnh lại sau chu-kỳ-2 CỦA SE** (deep-audit lần 2, xem .session-counter.json last_audit). Hub đã GỠ counter (bookend 07-15, sha 85bf89ca) → ví-dụ 6/15/3 "ở nguồn" = lịch-sử, KHÔNG còn mốc hub để so; delta hub hứa từ run-2 KHÔNG BAO GIỜ có (hub gỡ trước run-2) — **chưa ai được bán câu "đã chứng minh hiệu-quả"**.` (giữ vế đầu dòng 206 nguyên: "SE chọn cùng 6/15/3 là điểm khởi-đầu anh CỐ Ý chọn").
- **File 2:** `.claude/agent-memory/memory-budget.json:123` `_owner_ratified` — before chứa `'tuong tu Hub'` + `Re-tune after cycle-2 (H24 caveat (c): the real delta only appears from run-2; n=1 at the hub is mocc-0, so nobody may sell 'proven effective' yet)` → after (đề xuất, ASCII-safe giữ style file): `"owner-decisions-15-07-2026 Q2 -- anh chot 6/15/3 (dat thoi diem do hub CUNG dung 6/15/3; hub GO counter 2026-07-15 bookend 85bf89ca -> vi-du 'o nguon' nay la LICH-SU, khong con moc hub). HONEST-CAVEAT khi bao hub: SE chon 6/15/3 = DELIBERATE STARTING POINT cua owner, NOT copy vo-thuc. Re-tune after cycle-2 CUA SE (deep-audit lan 2 tinh tu .session-counter.json last_audit; delta hub hua tu run-2 khong bao gio co - hub go truoc run-2), nobody may sell 'proven effective' yet."`
- **Verify:** `Select-String -Path ".claude\agent-memory\memory-budget.json" -Pattern "mocc-0|tuong tu Hub"` → 0 hit; JSON parse OK: `python -c "import json; json.load(open(r'.claude\agent-memory\memory-budget.json', encoding='utf-8')); print('OK')"`. session-start.md: `Select-String -Pattern "n=1 ở hub"` → 0 hit.
- **Gate:** `_owner_ratified` là lời-chốt CỦA ANH → wording đổi cần anh XÁC NHẬN 1 dòng (không đổi 6/15/3, chỉ đổi câu neo). Lane D: soạn diff = HMW-worker; APPLY memory-budget.json chờ anh OK (session-start.md:206 = doc dẫn-xuất, worker apply được).

### 2c — counter GIỮ NGUYÊN (0 diff)
- Không sửa gì. Ghi vào adap-report: điều-kiện gỡ của hub (§4 bookend: 1-phiên/ngày + owner-trả-mọi-lượt) KHÔNG áp SE — bằng-chứng đĩa: counter 3→6 trong 2 ngày (`.session-counter.json:13-16`). Lane D: đưa vào text adap-report Việc 6.

### 2d — STAGE-2 move 6 file inbox root → `inbox/ai_infra/` + flip 6 row _index
- **Khuôn hiện tại (đĩa):** `_index.md:11` — pending (root) → processed (MOVE vào `inbox/<from>/`). 6 file: `2026-07-16-ai_infra-to-se-huong-dan-adap-4-ban-moi.md` + `2026-07-15-Governance-h17-cadence-update-bookend.md` + 4 file `2026-07-16-Governance-*.md`.
- **Diff:** `git mv broadcasts/inbox/<6 file>.md broadcasts/inbox/ai_infra/` + `_index.md` 6 row: `pending`→`processed`, `(root)`→`ai_infra` (sha cột GIỮ).
- **Verify:** `(Get-ChildItem broadcasts\inbox\*.md).Count` → 0 file .md còn ở root; `Get-FileHash` 3 file spot-check sau move == sha-prefix trong _index (byte-preserve); `Select-String -Path broadcasts\_index.md -Pattern "\(root\)"` → 0 hit ở 6 row đó.
- **Thứ-tự:** move SAU KHI adap-reports ×5 viết xong (Việc 6) — vì adap-report cần đọc file gốc; move là bước chốt xử-lý. Lane D: HMW-worker ✅ (mechanical, có verify hash).

---

# VIỆC 3 (bản 2, 291550ff) — inventory 3-câu-hỏi × 7 vòng lặp SE

## Ground-truth: bảng 7 vòng × 3 câu (mọi anchor TỰ MỞ đĩa)

| # | Vòng lặp | q1: trigger đọc instrument SỐNG? | q2: bảo-toàn-byte + NIÊM-PHONG? | q3: ĐO/LÀM tách + phanh? |
|---|---|---|---|---|
| 1 | wal-flush Stop-hook (`.claude/hooks/wal-flush.ps1`) | SỐNG — `git diff --cached --quiet` per-path (:17-18) mỗi turn; sau commit diff rỗng → hội tụ | không move; git commit = content-addressed sha (niêm-phong máy sẵn) | ĐO=:17-18 / LÀM=commit :20-23 chỉ khi cand>0; phanh = rebase-interlock :12 + fail-open :2 |
| 2 | memory-archive-gate.ps1 (planner L1-cap) | SỐNG — PASS-1 đo byte MEMORY.md trên đĩa mỗi run (header :11-15); tunables đọc live từ budget `archive_gate` (:44-51) | ⚠️ **GAP THẬT** — gate = DRY-planner (:6-7 "Does NOT move"); MOVE do em-main TAY; A7 chỉ verify pointer-resolve + file-exists + size>0 (:16-19) ≠ niêm-phong nội-dung; byte-preserve = kỷ-luật tay (vd budget:153 tooling-auditor S106 "moved-not-cut md5-verified") | ĐO=planner / LÀM=người; phanh đủ 3 tầng: A4 hysteresis 0.85 + A5 keep_floor 5 + A6 strike 2 (budget:34-37) |
| 3 | crystallized-backfill.ps1 | SỐNG — đo byte `hotload_sources` tươi mỗi run (:105-115); KHÔNG đọc `budget.measured` | n/a — DRY print-only; pour = em-main tay per-session | ĐO=print plan / LÀM=tay; phanh = precondition `target>0 AND headroom>0` (:126-131); target = owner-authority (budget:74) |
| 4 | governance-detectors.ps1 | SỐNG — đọc docs live + config `h24_cadence` từ budget; key thiếu → **FAIL-LOUD đo-0, cấm default** (:833-845) | n/a — flag-only, không move | ĐO-only by design; LÀM=em-main; INFORM-not-enforce |
| 5 | measure-agent-memory.ps1 | Script đo SỐNG (`Get-Item .Length` :14-23, stdout-only :36-41 — KHÔNG tự ghi budget); NHƯNG snapshot transcribe vào `budget.measured` (:144) = ĐÔNG-CỨNG giữa 2 lần chạy. **Đã được né đúng cách:** consumer `memory-selfimprove-audit.ps1:18` + `:110` khai "budget.measured is STALE — re-measure on disk / ignored"; archive-gate cũng đo live ⇒ **0 trigger tự-động đọc snapshot** (display/bookkeeping-only) | n/a | ĐO-only |
| 6 | sleep-recovery L2 gist (`.claude/commands/sleep-recovery-memory-l2.md`) | SỐNG — trigger tay HOẶC INFORM-only đọc `last_sleep_at` (budget:4); field do CHÍNH command set sau run (Phase 4.4, :54) = instrument phản-ứng hành-động vòng lặp; skip file đã có `.gist.md` (:59) → hội tụ | DERIVE additive KHÔNG move (verbatim ở-lại-đĩa :28); seal-analog = coverage-diff GATE (budget l2_gist rule :29) + reviewer Fidelity (G-001) — kiểm NGƯỜI/AI, chưa máy | ĐO=Phase 0.2 detect / LÀM=nén reviewer-gated; phanh = double-distill guard `distill-gen≥1` REFUSE (:60) + guard-rỗng |
| 7 | curate L1→L2 (nghi-thức em-main closeout) | SỐNG — trigger = size L1 đọc thật lúc closeout (MEMORY.md curate log: hook-triggered @23.9KB/@21.4KB) + planner loop-2 đo live | ⚠️ **GAP cùng lớp loop-2** — "byte-exact append" + append-only (budget l2_verbatim :24) = kỷ-luật TAY; không phép niêm-phong máy sau move | ĐO=planner / LÀM=người; phanh = A4/A5/A6 + value_protect advisory (budget:38-41) |

## Kết luận inventory (input cho adap-report bản 2)

- **q1:** KHÔNG có bom instrument-đông-cứng loại hub — mọi trigger đọc live; snapshot đông-cứng duy nhất (`budget.measured`) có 0 consumer tự-động (bị ignore chủ-động, evidence `memory-selfimprove-audit.ps1:18,110`). Standing-note: CẤM wire trigger tương-lai vào `budget.measured` — nếu cần thì tái-cơ-sở như bài hub.
- **q2:** **GAP THẬT tập trung ở 2 vòng CÓ MOVE (loop 2+7)**: có bảo-toàn-byte kỷ-luật-tay + pointer-check A7, **KHÔNG có niêm-phong máy** (kho-mới = kho-cũ + phần-thêm đúng byte + khối-dời là substring nguyên văn). Khớp seed verdict A.
- **q3:** mọi vòng có LÀM đều tách tầng + có phanh (hysteresis/keep-floor/strike/precondition/distill-guard/interlock).

## Spec execute

- **File đích:** `docs/governance/adap-reports/2026-07-16-Governance-tang-luu-tru-so-cai-va-bai-hoc-instrument-dong-cung.md` (NEW, REPORT-FORMAT LOCK 5 trường — khuôn `adap-report.md:13-19`)
- **Nội dung:** nấc `executed` (inventory tự-áp = chính hành-động adopt; 3 câu hỏi đã chạy trên 7 vòng) · evidence = bảng trên (file:line) · tailored = "port nguyên 3 CÂU HỎI; ngưỡng/số hub KHÔNG chép (SE đã có phanh riêng A4/A5/A6 từ H11)" · honest-caveat = seal-gap loop 2+7 + đề-xuất-chờ-anh.
- **Đề-xuất chờ anh (KHÔNG build wave này):** codify bước **seal-verify sau move** vào nghi-thức curate (md5 file trước/sau + `Select-String -SimpleMatch` đầu/cuối khối-dời trong archive = substring-containment) — mức NGHI-THỨC/doc-checklist, chưa viết tool (đúng mandate bản 2 "KHÔNG bảo bạn chép công-cụ").
- **Verify:** file tồn tại + đủ 5 trường (`Select-String -Pattern "nac G-011|evidence|tailored|honest"`) + có từ "niêm-phong" trong caveat.
- **Lane D:** HMW-worker mechanical ✅ (transcribe từ bảng draft này — KHÔNG cần tự điều-tra lại); seal-verify codify = CHỜ-ANH.
- **Acceptance D:** `Test-Path docs\governance\adap-reports\2026-07-16-Governance-tang-luu-tru-so-cai-va-bai-hoc-instrument-dong-cung.md` → True; grep 5 trường đủ.

---

# VIỆC 4 (bản 3, 190c11ba) — kiểm-kê nhãn "đã-đo" + xử 2 ứng viên + câu cửa-duyệt

## Ground-truth kiểm-kê (grep `calibrat|measured|empirical|đã-đo` toàn `scripts/*.ps1` + `hmw.js` + `memory-budget.json`)

| Ứng viên | Đĩa nói | Phân loại |
|---|---|---|
| **C1** `scripts/crystallized-backfill.ps1:117` (+ header :25 "CALIBRATED RANGE") | `# calibrated RANGE (invariant 4): tok_low = bytes/4, tok_high = bytes/3.0` — :118-119 hardcode `/4.0` `/3.0`; KHÔNG assert, KHÔNG negative-control, KHÔNG data-point gốc | ✓ KHỚP verdict A — nhãn sống bằng uy-tín |
| **C2** `memory-budget.json:89` `"measured_token_estimate": 55000` | TÊN field mang "measured"; note :90 tự khai "**honest mid estimate** (~19K byte-measured + ~36K harness-injected-**est**)"; :92 khai "NOT actively subtracted by the current scripts" = **0 consumer tự-động** | ✓ KHỚP verdict A — metadata giàu ≠ phản-chứng |
| Ứng viên 3? | **KHÔNG có hằng-số mới:** `hmw.js` 0-hit; các MEASURED khác đều là đo-live-mỗi-run hoặc probe-có-artifact: `mfe-eval.ps1:266` "(MEASURED, not target-then-force)" = computed live; `spawn-model-audit.ps1:33,45` = probe S126 thật; `wal-recovery-test.ps1` EMPIRICAL = execute-and-measure per-run (ca0/ca3 "Declared, not hidden" :375); `agent-frontmatter-eol-check.ps1:65,304` = computed-from-measured per-run; `memory-selfimprove-audit.ps1:283,304,322` "calibration-interim" = miễn-trừ visible sẵn | Sweep XONG — 0 ứng viên độc-lập thứ 3 |
| Borderline (cùng-lớp, ghi nhận) | (a) `memory-budget.json:144` section `measured` = snapshot S107 stale-by-design NHƯNG 0 automated consumer (đã ignore, xem Việc 3 loop 5) → OK-by-architecture, note "byte-governor snapshot" :145 đã visible. (b) `memory-budget.json:65` "VN-diacritic hot-memory ~3.0-3.5 byte/tok" = NGUỒN của /3.0 — không provenance, nằm trong honest_caveats | (b) xử cùng C1 (1 class) |

**Honest scope-caveat:** sweep phủ đúng scope spec (scripts/*.ps1 + hmw.js + memory-budget.json). KHÔNG quét văn-xuôi docs/ — hub bản 3 §5 cũng đóng lối văn-xuôi (toàn cảnh-báo-giả).

## Spec execute (4 sub-việc)

### 4a — C1: hạ-nhãn (lối-thoát 3 "bỏ nhãn đo-lường") — comment-only, 0 behavior change
- **File:** `scripts/crystallized-backfill.ps1` — 2 chỗ:
  - `:25` before `#   (4) CALIBRATED RANGE: token headroom is a RANGE [bytes/4 .. bytes/3.0], NOT the` → after `#   (4) HEURISTIC RANGE (convention, NOT measured): token headroom is a RANGE [bytes/4 .. bytes/3.0], NOT the`
  - `:117` before `# calibrated RANGE (invariant 4): tok_low = optimistic (bytes/4), tok_high = worst (bytes/3.0)` → after `# heuristic RANGE (invariant 4): divisors = convention char/4 + VN ~3.0-3.5 byte/tok — CHUA do tokenizer that tai SE (see dinh-chinh letter 58f5afd8 2026-07-16). tok_low = optimistic (bytes/4), tok_high = worst (bytes/3.0)`
- **Cùng-lớp đã grep (0 diff thêm):** `mfe-eval.ps1:166-167,180` dùng /4.0-/3.0 nhưng KHÔNG nhãn calibrated (khai RANGE honest) → giữ. `memory-budget.json:65` thêm đuôi `(convention -- chua do tokenizer that tai SE; dinh-chinh 58f5afd8)` — gộp gate với 2b.
- **Verify:** `Select-String -Path scripts\crystallized-backfill.ps1 -Pattern "calibrat" -CaseSensitive:$false` → 0 hit; chạy `powershell.exe -ExecutionPolicy Bypass -File scripts\crystallized-backfill.ps1` → exit 0, output giữ dòng "tok RANGE [low..high]". ⚠️ giữ pure-ASCII PS 5.1 (gotcha #30).
- **Lane:** HMW-worker ✅.

### 4b — C2: chọn lối-thoát — CHỜ ANH chọn 1 trong 2
- **Option-iii (bỏ nhãn, sạch nhất):** rename key `measured_token_estimate` → `token_floor_estimate` (memory-budget.json:89). **Điều-kiện tiên-quyết D:** `Grep "measured_token_estimate"` toàn repo → nếu >1 file (docs/adap-reports nhắc tên) thì update mọi ref cùng commit; consumer script = 0 (đã khai :92, grep re-confirm).
- **Option-ii (miễn-trừ visible, ít-chạm):** giữ tên, thêm sibling field `"_measured_label_exemption": "NAME says measured but value = honest MID-ESTIMATE (19K byte-measured + ~36K harness-injected-est, not byte-countable locally) -- exemption per san-su-that 190c11ba 3-loi-thoat; phep kiem lam no truot = re-run _s112_remeasure procedure"` ngay sau :89.
- **Verify (either):** JSON parse OK + grep key mới/exemption 1 hit.
- **Lane:** CHỜ-ANH chọn → worker apply. (Gộp cùng câu hỏi gate 2b — 1 lần hỏi.)

### 4c — câu cửa-duyệt vào checklist reviewer
- **File:** `.claude/agents/reviewer.md` — anchor `:35` `### 2. Apply 5-category checklist` → append 1 mục (cuối section): `**Measured-label gate (sàn-sự-thật 190c11ba):** diff chứa con-số mang nhãn đo-lường (measured/empirical/calibrated/đã-đo)? → hỏi: "phép kiểm nào khiến con số này TRƯỢT nếu nó sai?" Không trả lời được → yêu cầu 1 trong 3: phản-chứng chạy được · miễn-trừ lý-do visible · bỏ nhãn.`
- **Caveat:** agent .md không hot-reload → nấc `verified-pending` (restart/spawn-test sau).
- **Verify:** `Select-String -Path .claude\agents\reviewer.md -Pattern "TRƯỢT" ` → ≥1 hit.
- **Lane:** HMW-worker ✅.

### 4d — adap-report bản 3
- **File:** `docs/governance/adap-reports/2026-07-16-Governance-vong-tu-bao-tri-thu-nam-san-su-that-nhan-da-do.md` (NEW, 5 trường). Nấc `executed` (sau 4a/4c) — riêng 4b theo lối anh chọn. Evidence = bảng kiểm-kê + positive-exemplars có sẵn (thư đính-chính 58f5afd8 = negative-control đã chạy; `wal-recovery-test.ps1` + `spawn-model-audit.ps1` = measured-đúng-nghĩa). Honest-caveat: máy-quét cuối-phiên của hub KHÔNG port (tuỳ-chọn per bản 3 §4 — "luật + câu cửa-duyệt mới là phần chuyển được"); văn-xuôi ngoài scope.
- **Lane:** HMW-worker ✅.

---

# VIỆC 5 (bản 4, 9234a7aa) — n-a nắm-hướng: CHỈ adap-report

- **Ground-truth:** broadcast §6 "**Chưa cần làm gì cả — bản này để nắm hướng**" + §7 "chưa build, chưa dùng thử" — hub tự khai. ✓ KHỚP verdict A n-a + CẤM copy mục 2.
- **File đích:** `docs/governance/adap-reports/2026-07-16-Governance-session-logic-tach-session-vat-ly-huong-van-hanh-moi.md` (NEW, 5 trường)
- **Nội dung:** nấc `agreed` (nắm-hướng; 0 hành-động theo chỉ-định hub §6 — KHÔNG phải n-a-vì-không-fit, mà hub-chỉ-định-chưa-làm; reviewer #2 chốt wording nấc). Evidence = precursor SE ĐÃ CÓ (mapping 5-vòng: gặt=harvest-curator · soi-lead=H24 2-vai · tự-đo=MFE/H17 · nén-kho=sleep-recovery+archive-gate · sàn-sự-thật=Việc-4-đợt-này; + H22 WAL `/pause·/tiep` + counter content-addressed = đúng hướng "điểm dừng chủ-động"). Honest-caveat: KHÔNG mô tả mục 2 như thứ SE sẽ áp (hub chưa build — trích §7).
- **Verify:** file tồn tại + chứa trích `"chưa build, chưa dùng thử"` + 0 câu "SE sẽ áp mục 2".
- **Lane D:** HMW-worker ✅.

---

# VIỆC 6 (thư 0, 181a6d19) — adap-reports ×5 + email hub GỘP 1 thư

## Ground-truth khuôn

- **REPORT-FORMAT LOCK:** `adap-report.md:13-19` — đúng 5 trường {id-broadcast · nấc G-011 (agreed|executed|verified-pending|n-a — KHÔNG tự khai verified) · evidence đo THẬT (commit-sha·file·byte/dòng) · tailored+skip-vì-sao · honest-caveat}; idempotent update (:33); Write-tool only (:43).
- **Email khuôn:** `send-email.md:24-34` — id `<YYYY-MM-DD>-se-to-ai_infra-<slug>`, sha canonical strip-`\r`+strip-1-leading-newline (🔴 CẤM `Get-Content -Raw` — :28), Write tool, **selftest-stamp 6c** NGAY sau Write, log `_index` bước 7 **CÙNG LƯỢT** (bài reconcile S123 `_index.md:75`); to=ai_infra → không cần bản CC.
- **WAL:12 (đĩa):** ask do-token = pending (errata batch hub) · ask #2 bookend ĐÃ RESOLVE S127 ✓ KHỚP verdict A row 0 — **đừng đóng ask do-token trong email**.

## Spec execute

- **5 file adap-reports:**
  1. `2026-07-15-Governance-h17-cadence-update-bookend.md` — **UPDATE** (sau 2a): thêm mục "Re-verify nhịp S127": 4 sàn nguyên · counter GIỮ + evidence 3→6/2-ngày · 2 citation re-tuned · nấc `executed`.
  2. Bản 2 — NEW (Việc 3).
  3. Bản 3 — NEW (Việc 4d).
  4. Bản 4 — NEW (Việc 5).
  5. Bản 5 — NEW: nấc `executed` + evidence = diff rag.json:26/:31 + commit-sha + verify-output `False`; honest-caveat "hiệu-lực index chờ re-bootstrap (AI_INFRA op); data cũ giữ nguyên tới re-index (broadcast §3)".
- **Email GỘP:** id đề-xuất `2026-07-<ngày-gửi>-se-to-ai_infra-adap-dot-16-07-bao-nac` → `broadcasts/outbox/ai_infra/`. Body ≤ ~1 trang: nấc per-bản ×5 (1 dòng/bản) + ack thư 0 (3 ghi-nợ hub = acknowledge-only, không cần SE làm gì) + 1 dòng "contextual_retrieval flipped false (rag.json SE) — chờ re-bootstrap" + 1 dòng counter-GIỮ (điều-kiện gỡ hub không áp: phiên ngắn-nhiều, 3 tick/2 ngày) + ask do-token GIỮ pending. **Full-grammar VN outward** (harness-7). Reviewer-gate outward trước gửi (send-email.md:37 — wave này = HMW-review Harness-9 2-workflow phủ).
- **Thứ-tự D:** 4a/4c/2a/2b-đợi-gate → 5 reports → email (6c stamp + bước 7 cùng lượt) → STAGE-2 move (2d) → closeout.
- **Verify:** 5 file tồn tại đủ 5 trường; email selftest-stamp PASS + `_index` OUTBOUND +1 row; `git log --oneline` các commit scope `[CLAUDE] Docs:`/`Governance`.
- **Lane D:** HMW-worker ✅ toàn bộ (input = draft này); riêng thứ-tự phải giữ.

---

# PHÂN-LANE D tổng + gate chờ anh (gộp 1 lần hỏi)

| Việc | Lane | Ghi chú |
|---|---|---|
| 1 | HMW-worker | in-repo SE (LỆCH-1); verify python parse |
| 2a | HMW-worker | đính-chính khớp published |
| 2b | ½ worker ½ CHỜ-ANH | session-start.md = worker; memory-budget.json `_owner_ratified` = anh OK wording |
| 2c | 0-diff | text vào report bản 1 |
| 2d | HMW-worker | chạy CUỐI, hash-verify trước move (check-email.md:28) |
| 3 | HMW-worker (transcribe) | seal-verify codify = CHỜ-ANH (backlog) |
| 4a | HMW-worker | comment-only, ASCII #30 |
| 4b | CHỜ-ANH chọn iii/ii | rồi worker apply |
| 4c | HMW-worker | verified-pending restart |
| 4d+5+6 | HMW-worker | theo khuôn LOCK + send-email 6c/7 cùng lượt |

**3 gate chờ anh (1 câu hỏi gộp):** (i) wording mới `_owner_ratified` (2b — không đổi 6/15/3) · (ii) C2 lối-thoát: rename vs exemption-note (4b) · (iii) seal-verify curate ritual = codify doc-checklist hay defer (Việc 3).

# Self-acceptance (spec ③) — tự check trước return

- [x] 6 việc × 4-trường {file-đích · diff before→after · lệnh verify · gate} + phân-lane D
- [x] ≥5 evidence file:line TỰ MỞ (đếm được ~18: rag.json:26/:31 · projects.py:39/:54 · AI_INFRA rag.json:33/:38 · bookend-report:8 · session-start.md:206 · memory-budget.json:4/:65/:89/:92/:123/:144 · .session-counter.json:13-20 · _index.md:11/:33-38/:75 · backfill:25/:117-119/:126-131 · mfe-eval:166-180 · selfimprove-audit:18/:110 · wal-flush:12-23 · detectors:833-845 · measure:14-41 · sleep-cmd:28/:52-60 · adap-report.md:13-19 · send-email.md:28/:31-33 · check-email:20-28 · WAL:12 · reviewer.md:35)
- [x] ≥1 LỆCH explicit (LỆCH-1 vị-trí file Việc 1) + các KHỚP có thử-phá (xem addendum LỆCH section)
- [x] Per việc ≥1 acceptance chạy được cho D
- [x] Draft = file DUY NHẤT được ghi; 0 file khác chạm; 0 store_memory

## Mục LỆCH vs verdict A (adversarial log — cập nhật dần)

### LỆCH-1 (Việc 1 — VỊ-TRÍ file, không phải giá-trị): config cần flip nằm TRONG repo SE, KHÔNG phải AI_INFRA

- **Spec B (lead brief) nói:** "Việc 1 nằm ở repo khác: `D:\Dropbox\CONG_VIEC\AI_INFRA\**` — tìm config RAG per-project SE trong khung AI_INFRA".
- **Đĩa nói:** file per-project của SE = `D:\Dropbox\CONG_VIEC\SOLUTION\SOLUTION_ERP\.claude\rag.json` (TRONG repo SE). Cơ chế: `AI_INFRA\claude-rag\lib\projects.py:43-56 load_project_config()` walk-up từ cwd tìm `.claude/rag.json` per-repo; `cfg.setdefault` chỉ merge key THIẾU → key `contextual_retrieval` CÓ trong file SE nên **override default False của khung**.
- **Giá-trị verdict A KHỚP đĩa 100%:** SE `rag.json:26` = `"contextual_retrieval": true,` ✓ · `:31` rationale `"...Evaluate per eval recall@5 trial week 3."` treo (trial 2026-06-16 không chạy) ✓ · mirror `projects.py:39` = `False` + comment `OWNER-FINAL 2026-07-16 (s100)` ĐÃ có sẵn phía hub ✓.
- **Phía AI_INFRA KHÔNG cần sửa gì:** `AI_INFRA\.claude\rag.json:33` đã `false` (từ 2026-05-26, rationale :38) + `projects.py:39` đã `False` owner-final. SE chỉ sửa file của mình.
- **Hệ-quả lane D:** Việc 1 KHÔNG phải cross-repo-write → HMW worker mechanical ĐƯỢC (edit in-repo 2 dòng), không cần lead-solo cross-repo. AI_INFRA chỉ-đọc để verify mirror (đã verify lượt này).
- **Hedge bản 5 "có thể đúng sẵn" KHÔNG áp SE — CONFIRMED trên đĩa:** SE override explicit `true` line 26 → phải flip (khớp verdict A).

### Addendum — các KHỚP đã THỬ PHÁ (adversarial log, không chỉ xác nhận mù)

| Anchor verdict A | Cách thử phá | Kết quả |
|---|---|---|
| rag.json:26/:31 | Nghi file verdict A trỏ = AI_INFRA rag.json → mở CẢ HAI file + trace cơ-chế load (`projects.py:43-56`) | Giá-trị khớp ở file SE; AI_INFRA:33 đã false → LỆCH-1 (vị-trí, spec theo đĩa) |
| bookend-report dòng 8 "7 khoản SAI" | Đối chiếu ngược bản published §2 + reviewer_gate M-1 ("năm-sai-hai-đổi-cách-đọc 3-chỗ") | KHỚP lệch-thật — report SE viết theo draft cũ trước fold M-1 |
| session-start.md:206 | Đọc cả block :185-206 xem caveat có tự-đứng không cần hub không | Stale THẬT: neo "n=1 ở hub"/run-2-hub nay không tồn tại (hub gỡ trước run-2, bookend §4) |
| memory-budget.json `_owner_ratified` | Grep line-number thật (:123, verdict A không ghi số dòng) + xem 6/15/3 có phải đổi không | Chỉ đổi CÂU NEO, số giữ — khớp scope verdict A "(c) GIỮ counter" |
| counter "phiên ngắn-nhiều" | Mở `.session-counter.json` đếm tick thật thay vì tin mô-tả | 3→6 trong 07-15→07-16 (2 ngày) = đúng điều-kiện-KHÔNG-gỡ |
| backfill:117-119 "calibrated" | Grep cùng-lớp `/4.0|/3.0` toàn scripts xem verdict A có sót site nào | mfe-eval:166-167 cùng divisor NHƯNG không nhãn calibrated (RANGE honest :180) → chỉ C1 cần hạ-nhãn; nguồn hằng-số = budget:65 (bổ sung ngoài verdict A) |
| "bản 2 seed: budget.measured STALE consumer ignore" | Mở selfimprove-audit :18/:110 + kiểm archive-gate/backfill có đọc `budget.measured` không | Cả 2 script đo live, 0 automated reader → seed ĐÚNG và còn MẠNH hơn (0 reader, không chỉ 1 reader-ignore) |
