# OWNER-DECISIONS — S119 adap 6 broadcast (2026-07-15)

> ## ✅ ACK CUỐI PHIÊN (anh ký S119, sau cổng-cuối `wf_cb964f83-331` GO-WITH-FIXES fix#8)
>
> **(a) PA-2 hình-thức — ✅ "stamp đồng ý".** Anh duyệt PA-2 thực-thi bằng **PA-2a** (hằng-số `TIER2_EXPECTED_FULL_ID = 'claude-opus-4-8'` cạnh `resolveModel`, `hmw.js`) **+ PA-2b** (`scripts/spawn-model-audit.ps1` so model-thực-tế-resolve vs kỳ-vọng, informational, lệch ⇒ owner quyết re-pin) — **THAY** neo-tại-spawn.
> 🔸 **Nấc trung-thực GIỮ NGUYÊN khi báo hub (gate-M1 bắt, KHÔNG được xoá):** tiền-đề *"param `model:` chỉ nhận enum alias `sonnet|opus|haiku|fable`"* = **đọc tài-liệu harness (Agent-tool schema)**, **CHƯA thử truyền full-id để xem có bị từ-chối không**. Anh duyệt hình-thức **trên tiền-đề đã khai đúng nấc này**. Nếu W2 thử full-id mà harness **nhận** ⇒ báo lại anh (tiền-đề sai ⇒ PA-2 có thể về hình-thức nguyên-bản).
>
> **(b) Hook-interlock vs floor N.2 — ✅ đồng ý.** Phân loại **TRONG KHUNG**: interlock (`Test-Path .git/rebase-merge → exit 0` đầu `wal-flush.ps1`) **KHÔNG thêm hành-vi** cho hook — nó **thu hẹp**, chặn hook **tự-hủy** (commit lên detached HEAD = phá chính floor N.2 mà nó phục-vụ). ⇒ **KHÔNG cần adap-request**; **khai ở adap-report**.
> ⇒ Đối-chiếu: **R3 side-ref VẪN = VƯỢT KHUNG** (lệch N.2 *"git add 3 path + git commit"* = **đổi cơ-chế persist**) ⇒ **PHẢI request**. Ranh-giới: *thu-hẹp-để-tự-bảo-vệ* = trong khung · *đổi-cơ-chế* = vượt khung.
>
> **⇒ fix#8 ĐÓNG.** Gate-blocker còn lại của cổng-cuối = **0**. Wave W0→W6 **được phép chạy** (phiên sau, per anh chốt B).


> Anh (project-owner) chốt trong phiên. Lead ghi (B3 single-writer). **Merge vào spec §3.4 sau khi review xong** (không sửa spec lúc 4 reviewer đang đọc = tránh race).

---

## Nguyên-tắc governance MỚI anh đặt ra (S119) — 🔴 rộng hơn 1 câu trả lời

> **"Kiến-trúc harness thì phải GIỐNG, nhưng cho phép điều-chỉnh TRONG cho phép; nếu điều-chỉnh VƯỢT KHUNG thì phải có REQUEST để anh và AI_INFRA review qua. Cái này cũng nên REPORT lại cho AI_INFRA tổng-hợp và broadcast lại cho các Project-Sister khác nắm và update."**

**Diễn giải thành luật vận-hành (lead đề-xuất, chờ anh xác nhận wording):**

| Nấc | Nghĩa | Hành-động |
|---|---|---|
| **Trong khung** | Lệch **FORM** mà broadcast tường-minh cho phép tự-quyết | Tự làm, khai ở adap-report |
| **Vượt khung** | Lệch **FUNCTION-FLOOR** (dù có lý-lẽ tốt) | 🔴 **KHÔNG tự làm** → `/adap-request` → anh + AI_INFRA review |
| **Phát-hiện khung tự mâu-thuẫn** | Broadcast A ⟂ broadcast B trên cùng trục | 🔴 **Report** → hub tổng-hợp → **re-broadcast fleet** |

**Áp ngay lượt này:**
- SE all-inherit vs H23 = **TRONG khung** (pin-simple: *"form mỗi đội tự quyết"*, *"cả hai đều đạt sàn"*) ⇒ KHÔNG cần request cho việc lệch form.
- **R3 side-ref** (hook → `refs/wal/snapshot`) = **VƯỢT KHUNG** (lệch N.2 floor *"git add 3 path + git commit"*) ⇒ 🔴 **PHẢI request, CẤM tự làm** — đúng nguyên-tắc anh vừa đặt.
- **R1 (H8 ⟂ pin-simple ⟂ H23)** + **R4 (EOL nhân-quả sai + mô-hình thiếu)** = **khung tự mâu-thuẫn / khung sai** ⇒ report để hub tổng-hợp + re-broadcast sister.

---

## Q1 — H23 mức-độ adopt → ✅ **PA-2** (anh chốt)

**Anh chọn:** `PA-2 (PA-1 + neo full-id cho tier:'opus' → chặn Opus đời sau trôi)`

### 🔴 RÀNG-BUỘC KỸ-THUẬT — PA-2 **đúng-như-chữ là BẤT-KHẢ-THI**; lead báo trước khi thực-thi

**Đo (lead, 2026-07-15):**
- `hmw.js:44` — `if (tier === 'fable' || tier === 'opus') return tier` ⇒ trả **ALIAS**, không phải full-id.
- Param `model:` tại điểm spawn (Workflow `agent()` opts.model) **chỉ nhận enum alias** `sonnet|opus|haiku|fable` ⇒ **KHÔNG nhét full-id vào được**.
- `grep "claude-opus-4-8" .claude/` (trừ agent-memory + runs) ⇒ **0 full-id SỐNG**; chỉ còn: `agents/README.md:3/:9/:12` (comment **lịch-sử**), `session-start.md:41` (đường **outage** H5), `hmw.js:36` (comment *"KHÔNG còn demote-pin"*).
- ⇒ SE **không có tệp-định-nghĩa nào mang full-id** (12/12 = `inherit`, đúng H8) ⇒ **không có chỗ neo theo cách H23 mô tả** (*"thẩm-quyền phiên-bản = full-id ở tệp định-nghĩa"*).

**⇒ Kết-luận:** "neo full-id **TẠI điểm spawn**" = **không làm được**. Đây **KHÔNG phải** lý-do bác PA-2 — mà là **đổi HÌNH-THỨC** thực-thi cho đúng ý-định anh.

### ✅ PA-2 khả-thi — theo đúng đơn thuốc của CHÍNH H23 §2(2)

> H23 §2(2) nguyên-văn: *"Alias tại điểm spawn chỉ khoá **họ model**, không khoá được phiên-bản. Vì vậy, khi nhà-cung-cấp phát-hành model kế-tiếp trong cùng họ, alias có thể **trôi** sang model mới: bạn PHẢI **soi model-thực-tế được resolve** (đọc metadata của lượt chạy) TRƯỚC khi tin, và nếu lệch → **owner quyết re-pin**."*

**PA-2-SE = 2 phần:**

| Phần | Việc | File | Acceptance ĐO ĐƯỢC |
|---|---|---|---|
| **PA-2a** — khai báo kỳ-vọng | Hằng-số có thẩm-quyền `TIER2_EXPECTED_FULL_ID = 'claude-opus-4-8'` đặt **ngay cạnh `resolveModel`** (`hmw.js:~43`), kèm comment: *"alias `'opus'` khoá HỌ, KHÔNG khoá phiên-bản (H23 §2(2)); hằng-số này = phiên-bản KỲ-VỌNG; lệch ⇒ owner quyết re-pin (anh-chốt S119 PA-2)"*. ⚠️ **KHÔNG** `[1m]` suffix (gotcha #37) | `hmw.js` | `Grep tool` `TIER2_EXPECTED_FULL_ID` ⇒ ≥1 hit; giá-trị = `claude-opus-4-8` |
| **PA-2b** — check resolved-vs-expected | `scripts/spawn-model-audit.ps1` — **chỉ-đọc**, rà transcript **phiên hiện-tại** (`C:\Users\pqhuy\.claude\projects\<proj>\<sess>\subagents\workflows\wf_*/agent-*.jsonl`), đối-chiếu model-thực-tế-resolve vs `TIER2_EXPECTED_FULL_ID`. **Informational, KHÔNG chặn** (H23 §2(4)). Lệch ⇒ in cờ ⇒ **anh quyết re-pin** | `scripts/` MỚI | Chạy trên phiên có lane `tier:'opus'` ⇒ in `{n dispatch · n explicit · n mismatch}`; **fault-inject**: giả expected = `claude-opus-9-9` ⇒ **PHẢI FLAG** (không chỉ happy-path PASS) |

**🔴 3 khai-thật BẮT BUỘC giữ khi báo hub (H23 §2(4) tự yêu-cầu):**
1. Đây là **phép soi theo quy-ước (spot-check)**, **KHÔNG enforcement** — runtime **không chặn**.
2. Quét **lịch-sử cũ** sẽ ra rất nhiều "thiếu tham-số" từ **trước quy-ước** ⇒ **bình-thường, không phải bão lỗi** ⇒ chỉ nhìn **phiên hiện-tại**.
3. Báo-cáo của nó **KHÔNG được đọc thành "đã áp đủ sàn"** — nó chỉ đo **tính-tường-minh trong transcript**, không đo độ-phủ tài-liệu.

**+ giữ nguyên PA-1 (a)(b)(c)(d)** như spec §2.3.

**🔸 Lệch hub (khai ở adap-report):** hub neo full-id **ở frontmatter** (17/17 `model: claude-opus-4-8`) — SE **không thể** (H8 = `inherit`, lệnh anh S66). SE neo ở **hằng-số + audit-check**. **Cùng FUNCTION** (chặn alias-drift), **khác FORM** ⇒ **TRONG khung** (pin-simple: form tự-quyết) ⇒ **không cần request**, chỉ khai.

---

## Q2 — Số nhịp H24 → ✅ **6 / 15 / 3** (anh chốt, "tương tự Hub")

| Nhịp | Số | Ghi-chú |
|---|---|---|
| **rà-nhẹ** | mỗi **6** phiên | |
| **rà-sâu** | mỗi **15** phiên | |
| **jump-K** | 1 class-flag lặp **3** lần ⇒ nhảy rà sớm | |

**Nơi đặt (single-source — H24 §2(3) *"mọi số đọc từ config single-source; tài-liệu/persona TRỎ key, KHÔNG chép số"*):**
- Key mới trong `.claude/agent-memory/memory-budget.json` → block `h24_cadence: { light_every: 6, deep_every: 15, jump_on_class_repeat: 3 }`.
- ⚠️ **Bẫy đã biết (lane E):** Stop-hook `wal-flush.ps1:7` auto-commit `agent-memory/` **mỗi turn** ⇒ counter **KHÔNG** để dạng blind-increment ⇒ **content-based** `last_ticked_session: "S119"` + idempotent-key = **HEAD commit-sha @tick**.
- State counter tách riêng: `.claude/governance/.session-counter.json` (mẫu sẵn: `.archive-strikes.json` · `.mfe-state.json`).

**🔸 Khai-thật giữ khi báo hub:** hub dặn *"số của bạn = config của bạn; **đừng chép ba con-số này**"*. SE **chọn trùng hub (6/15/3)** — **anh-chốt có chủ-đích** làm **khởi-điểm**, KHÔNG phải chép-vô-thức; điều-chỉnh sau **chu-kỳ-2** (H24 caveat (c): *"giá-trị delta thật chỉ xuất-hiện từ run-2"*).

---

## Q3 — Quy-ước khoá carry → ✅ **Đồng ý** `[carry:<slug>]`

**Format:** gắn cuối mỗi mục NEXT trong `docs/HANDOFF.md` mega-line.
**Ví-dụ:** `(2) quyết binh.le … [carry:binh-le-decision]` · `(3) 2 account trùng … [carry:account-trung-le-thanh-binh]`

**Vì sao cần (GAP-2, lane D):** carry SE hiện là **văn-xuôi KHÔNG khoá** ⇒ detector tuổi-carry **không chạy được** (không có gì để track qua các phiên).

**Định-nghĩa "dòng-carry" (🔴 lane D — SE-specific):** = **đoạn LOGIC `NEXT anh` / `NEXT em` BÊN TRONG mega-line**, **KHÔNG** phải dòng vật-lý (mega-line = 46,735 ký-tự/1 dòng ở `HANDOFF.md:5`).

**Luật đếm (H24 §2(2)):** khoá sống qua **≥ M dòng-carry LIÊN-TIẾP gần nhất** ⇒ flag "quá tuổi" (M = `h24_cadence` config). Chuỗi tính **trên các dòng CÓ carry**; phiên không phát dòng carry ⇒ **KHÔNG phá chuỗi**. Reset **CHỈ** khi khoá **vắng trên một dòng CÓ carry** (= việc đã xong/bỏ). Cụm **owner đang chủ-động giữ** ⇒ tag **INFORM-only** (khỏi thành nhiễu).

**Backfill:** gắn `[carry:*]` cho carry **đang sống** ở `HANDOFF.md` (binh.le · account-trùng · PE-phân-quyền · BVAAU ×2) — **KHÔNG** truy-ngược lịch-sử (no-retrofit).

---

## Q4 — 57 wal: đã lọt remote → ✅ **KHÔNG DỌN** (anh đã đồng ý)

Giữ nguyên. 3 lý-do → spec §3.5 (nặng nhất: **rewrite = tự vô-hiệu-hoá bằng-chứng VERIFIED-RUNTIME của chính H22** — `12071c5` cited 12 file + `67be443` cited 10 file = 2 commit chứng-minh hook-FIRE ở `engine:407` **và trong adopt-report ĐÃ GỬI hub**).

---

## Δ tác-động lên spec (merge sau review)

| Mục spec | Đổi |
|---|---|
| §3.4 O1 | ⚪ chờ → ✅ **PA-2** + **thêm §2.3-bis PA-2a/PA-2b** (hình-thức đổi: hằng-số + audit, KHÔNG neo-tại-spawn) |
| §3.4 O2 | ⚪ chờ → ✅ **6/15/3** + key `h24_cadence` trong `memory-budget.json` |
| §3.4 O3 | ⚪ chờ → ✅ `[carry:<slug>]` + định-nghĩa dòng-carry = đoạn LOGIC |
| §3.4 O4 | ✅ giữ |
| §2.3 | +PA-2a/PA-2b (2 việc mới: `hmw.js` hằng-số · `scripts/spawn-model-audit.ps1` MỚI) |
| §3.2 xung-đột | `hmw.js` **3 → 4 hạng-mục** (Sàn-1 gate · VALID_ROLES 12→14 · H23 note-đầu-cây · **+PA-2a hằng-số**) ⇒ vẫn **GỘP 1 EDIT** |
| §3.3 wave | **W1 +1 lane**: `scripts/spawn-model-audit.ps1` (disjoint, song song được) |
| §3.6 | R1/R2/R4 giữ · **R3 = VƯỢT KHUNG ⇒ bắt buộc request** (nguyên-tắc anh S119) |
| §3.7 n-a | **H23 §2(4) bộ-soát: "n-a chưa dựng" → GỠ** — PA-2b **dựng thật** |
| §3.9 | +3 acceptance: `TIER2_EXPECTED_FULL_ID` ≥1 hit · spawn-audit fault-inject FLAG · `h24_cadence` đọc từ config (0 hardcode) |

**Nấc sau PA-2:** `executed → restart-then-verify` (hmw.js = .js **không** phải command → hot-reload? **CHƯA VERIFY** — `hmw.js` nạp lúc Workflow chạy ⇒ **khả năng ăn ngay**, nhưng ENV-DEPENDENT ⇒ verify bằng run thật, không giả-định).
