# spec — adap-review S125 → hmw @Opus 4.8 MAX (16-07-2026)

> H21 spec-file 3-mục. Engine `/fable-real` vai compound anh gõ (reviewer + investigator-codebase) propose → lead verify → lead ghi (phiên này lead=Fable=engine, single-context — honest-note run.md). **Worker phiên sau thực-thi THEO spec này — bơm QUA args/prompt, worker KHÔNG tự Read file** (H21 ④).

## ① Tính-năng / đề-bài

Xử lý phần còn lại của mạch adap-wave S125 (đã xong: adap `phuong-phap-dem-token` + relabel cận-trên + vá hash-verify byte-safe + email đính chính hub + STAGE-2 hygiene — evidence: `run.md` cùng folder). Phần còn lại chia 3 lớp: **(A) runtime-verify chỉ làm được SAU RESTART** (frontmatter/settings mới ăn), **(B) fan-out + closeout** phiên Opus 4.8 MAX làm, **(C/D) owner-gated + deferred** — surface, KHÔNG tự làm.

## ② Cách implement

Phiên kế: anh restart Claude Code → `/model` Opus 4.8 MAX (lead owner-choice, floor mtv3) → `/tiep` (đọc WAL → verify ground-truth → nối mạch — đây CHÍNH LÀ pilot H22 resume đổi-model, ghi kết quả D5). Chạy **NHÓM A trước** (A1 độc lập, quyết định /fable-real còn sống không), rồi **hmw fan-out NHÓM B** (scaffold `runs/<id>/` @P1 + `args.run` — ≥3 task ⇒ run-trace BẮT BUỘC sàn H22; spec này bơm qua args). C/D chỉ surface trong báo cáo cuối + closeout.

## ③ Checklist (vai · deliverable · acceptance ĐO ĐƯỢC)

### NHÓM A — restart-runtime verify (làm ĐẦU phiên, trước fan-out lớn)
- [ ] **A1 · H23-precedence test** `[carry:h23-fable-test-postrestart]` · vai: em-main + 1 spawn hmw `tier:'fable'` · deliverable: dòng model THỰC-TẾ resolve (`scripts/spawn-model-audit.ps1` per `session-start.md:52`) ghi vào run-folder · acceptance: **1 trong 2 chữ**: `fable` (spawn thắng ⇒ `/fable-real` SỐNG) hoặc `opus` (frontmatter thắng ⇒ `/fable-real` NO-OP → surface anh re-pin) + **báo hub** (đã hứa s124-report §3).
- [ ] **A2 · worker-tier-pin runtime** · vai: em-main · deliverable: spawn-model-audit ≥1 worker KHÔNG tier override · acceptance: resolve = `opus` (pin ăn thật, không còn inherit-lead).
- [ ] **A3 · autoMemoryDirectory WRITE-path** · vai: em-main · deliverable: 1 memory write mới sau restart · acceptance: file mới xuất hiện dưới `.claude/auto-memory/` (git-track ĐÃ ĐẠT S125: 50 tracked/0 dirty — chỉ còn WRITE-path).

### NHÓM B — hmw fan-out @Opus MAX + closeout
- [ ] **B1 · Sweep "all-inherit" floor-sống repo-rộng** · vai: investigator-codebase (quét) + em-main (vá) · deliverable: bảng hit → phân loại floor-sống/lineage (S125 đã vá `fable-real.md:37` + `fable-clone.md:43`; đã xác minh lineage-OK: `session-start.md:52`, `hmw.js` comments) · acceptance: grep `all-inherit` trên tracked .md (TRỪ frozen: `runs/` · `sessions/` · `outbox/` · `inbox/` · `archive/` · adap-reports lịch-sử) → **0 floor-sống**; lineage GIỮ nguyên.
- [ ] **B2 · Verify memory `project_harness4` body** · vai: em-main · deliverable: đọc body file memory · acceptance: body khớp worker-tier-pin S124 (index ĐÃ đúng; carry (c) HANDOFF đóng được nếu khớp).
- [ ] **B3 · Retier-megaline** `[carry:retier-megaline]` 🔒 OWNER · vai: em-main soạn · deliverable: 1 trang phương án tách/re-tier mega-line STATUS/HANDOFF dùng số DẢI mới ([12–27]% CẬN-TRÊN — KHÔNG "27% đo được") + trade-off · acceptance: anh chọn 1 (giữ/tách/re-tier); **KHÔNG tự đổi**.
- [ ] **B4 · memory-budget.json:74 wording** 🔒 OWNER · vai: em-main · deliverable: diff 1-dòng `"real-token headroom"` → `"cận-trên (heuristic notice) headroom"` · acceptance: anh gật mới apply (config anh ký mark `…01-58-01`).
- [ ] **B5 · Closeout GỘP S125+S126** · vai: em-main + monitor H1/H2 · deliverable: STATUS Recently-Done + HANDOFF brief (tiering giữ 2-3 session) + session-log `2026-07-16-S125-S126-…` + memory-flush roster + harvest-gate 5-trục + re-stamp **đủ 8 carry anh** (6 product + 2 governance) · acceptance: session-end checklist PASS + porcelain 0 sau commit.
- [ ] **B6 · Hub follow-up** · vai: em-main · deliverable: `/check-email AI_INFRA` — xử reply đính-chính + kiểm 2 broadcast được re-stamp chưa (`stamp_verify.py` hết NO-DECLARED-SHA?) + README §32/fallback-snippet fix chưa · acceptance: adap-report/-request update theo thực-tế trả lời (KHÔNG stamp trước khi hub làm).

### NHÓM C — product carries (owner-held — CHỈ re-stamp visibility, anh quyết chạy cái nào)
- [ ] **C1–C6:** `uat-s117` · `pe-phanquyen` · `bvaau` · `binh-le-decision` · `tra-bui-relogin` · `account-trung` — S125 verified **6/6 còn trong HANDOFF** · acceptance closeout: đủ 6 sau re-stamp, 0 rớt. (+ Export PDF pending — chờ anh xếp lịch.)

### NHÓM D — deferred / notes
- [ ] **D1** Monthly drift audit — hạn kế **2026-08-01** (chưa tới; S96 chạy 07-01).
- [ ] **D2** H24 cadence — light kế @counter 9 (hiện 4) · deep @18 · jump nếu 1 class repeat ≥3 (hiện max 1). Không nợ.
- [ ] **D3** (optional, đợi hub reply) port pattern `check_email_pull.py` s76 SE-side.
- [ ] **D4** (nice-to-have) probe VN-text 150K chars → datapoint #2 gửi hub (đóng caveat ASCII-only).
- [ ] **D5** Ghi kết quả **pilot H22 resume đổi-model** (/pause Fable → /tiep Opus) vào memory `project_h22` + adap H22 (pilot "kill/đổi-acc" pending từ S111).
- [ ] **D6** agent-memory L1 gần trần đọc 24,4KB — ứng viên hook-curate kế (moved-not-cut như S125 inv-cb 23,9→16,9KB): frontend-designer 21,5KB · cicd-monitor 20,9KB · reviewer 19,9KB · test-specialist 19,1KB.

### Điều-kiện dừng / an-toàn
- KHÔNG đổi budget-SỐ, KHÔNG store_memory từ sub, single-writer B3 giữ nguyên. Mọi item 🔒 OWNER = surface + chờ, không execute. Sau NHÓM B: `/pause` (đúng đề-bài anh S125).
