- adap broadcast phuong-phap-dem-token (type:new): negative-control tai lap 3-probe (notice-N = heuristic char-dem, KHONG phai token that) -> relabel STATUS:41 + HANDOFF:5 x2 + do-token report ADDENDUM (dai [31K byte/4 - 70,9K notice] => lead-share [8,2-18,7]%) - false-TAMPER RCA: PS5.1 Get-Content -Raw doc UTF-8-no-BOM bang ANSI -> va check-email/send-email byte-safe + verifier-suspect-first; stamp hub verify OK bang stamp_verify.py (exit-0) - email dinh-chinh hub (58f5afd8, selftest exit-0 x2) + adap-report + adap-request hash-verify-byte-safe-decode + FYI 2 broadcast no-stamp - STAGE-2: git mv 7 broadcast processed -> inbox/ai_infra/ (root sach) - fable-real review+invest (vai compound reviewer+inv-cb): run-trace + spec 3-muc + checklist A-D cho hmw @Opus 4.8 MAX; va stale all-inherit fable-real.md:37 + fable-clone.md:43 - hook-curate inv-cb MEMORY 23,9->16,9KB moved-not-cut (14 dong + 2 digest -> archive/2026-07.md) - h18 memory +sibling-test-2-chieu; monitor self-compact S125-start + counter tick=4 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
72 lines
9.2 KiB
Markdown
72 lines
9.2 KiB
Markdown
---
|
||
description: /fable-clone <vai> <đề-bài> — ENGINE-ĐẮT LỆNH-B per-invocation (H21): vai anh GÁN 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) cho đề-bài đó — KHÔNG marker, KHÔNG mode persist. Thiếu/sai vai → em main hỏi lại anh 1 dòng, KHÔNG tự chọn. Cặp /fable-real.
|
||
argument-hint: <vai ∈ roster 14> <đề-bài phán-quyết> — vd "reviewer rà commit X" · "investigator-codebase truy bug Y"
|
||
---
|
||
|
||
# /fable-clone — ENGINE-ĐẮT LỆNH-B: 1 vai × ENSEMBLE tier-2 (per-invocation, H21)
|
||
|
||
> Cặp **`/fable-real`** (lệnh-A single top-model). 🔴 restart Claude Code sau khi tạo/sửa (no hot-reload).
|
||
> **Adopt H21 S110 (2026-07-11)** — supersede semantics **toggle-marker H19 (S101)**. KHÔNG còn mode-ảo mặc-định để "về", KHÔNG còn marker: cả 2 lệnh giờ = engine-đắt **per-invocation**, chỉ SỐNG trong lượt anh gõ.
|
||
> 📘 **Runbook:** [`docs/governance/fable-real-runbook.md`](../../docs/governance/fable-real-runbook.md) · 🔧 **Guard §K:** [`docs/governance/harness-11-engine.md`](../../docs/governance/harness-11-engine.md) §K (engine).
|
||
|
||
**Vai + đề-bài lượt này:** $ARGUMENTS
|
||
|
||
## 🔴 Semantics per-invocation (H21 ①/②)
|
||
- **`/fable-clone <vai> <đề-bài>`** = vai anh gán chạy **ENSEMBLE tier-2-mạnh-nhất** = **N lane đa-lăng-kính CÙNG 1 VAI** (qua HMW `parallel`) + em-main **refute + synthesize** (P3/P4) = "bản sao Fable". Rẻ quota top-model, giữ tầng phản-biện chống-đồng-thuận-sai.
|
||
- **Hiệu-lực CHỈ lượt đó** — **KHÔNG còn "về mặc-định"**, KHÔNG marker, KHÔNG persist (H19 mode thật/ảo đã retired H21). Lượt sau muốn ensemble = gõ lại lệnh.
|
||
|
||
## 🔴 Vai BẮT BUỘC ∈ roster 14 (H21 ②)
|
||
`investigator-codebase` · `investigator-api` · `implementer-backend` · `implementer-frontend` · `frontend-designer` · `database-agent` · `office-document` · `test-specialist` · `reviewer` · `cicd-monitor` · `tooling-auditor` · `harvest-curator` · `lead-view-auditor` · `lead-omission-auditor`.
|
||
- **Thiếu `<vai>` HOẶC vai ngoài roster** → em main **hỏi lại anh 1 dòng**, **KHÔNG tự chọn vai**.
|
||
- ✅ **VALID_ROLES đủ roster 14** — canonical đếm ở [`docs/STATUS.md`](../../docs/STATUS.md) §Sub-agents (B1 derived-trỏ-canonical; **KHÔNG chép số ở đây khi roster đổi** — đó chính là class `view-stale-role-desc` mà `lead-view-auditor` soi). Lịch-sử: 10→12 (S110, +2 monitor `tooling-auditor`/`harvest-curator`) → **12→14 (S121 W2, +2 monitor H24 `lead-view-auditor`/`lead-omission-auditor`)**. *(🧊 limitation cũ 10-vai + H6-design "monitor ngoài workflow" superseded; monitor vẫn INFORM-only, lane RETURN-only.)*
|
||
- 🔒 **Honest-note (a/b):** bảo-đảm = **owner-gated tầng lệnh + kỷ-luật lead**, **KHÔNG code-enforced**; lệnh/alias = cách anh **gán vai nhanh**, hệ **KHÔNG tự chọn vai**.
|
||
|
||
## 🔴 Spec-file 3-mục BẮT BUỘC mỗi run (H21 ①)
|
||
Mỗi lần chạy engine-đắt PHẢI kết-tinh 1 spec theo pipeline **propose → verify → ghi → thực-thi**:
|
||
1. **Engine propose-only** — vai chạy ensemble đề-xuất [đề-bài · cách làm · checklist]. Engine KHÔNG tự ghi.
|
||
2. **Lead verify** — lead soi + chỉnh (P3/P4 refute + synthesize N lane).
|
||
3. **Lead ghi** file `.claude/workflows/runs/<run-id>/spec-<tên-tính-năng>-<dd-mm-yyyy>.md` — **3 heading cố-định:** ① Tính-năng/đề-bài · ② Cách implement · ③ Checklist (vai + deliverable + acceptance **ĐO ĐƯỢC**).
|
||
4. **Worker thực-thi THEO spec** — spec bơm **QUA ARGS/prompt** (worker KHÔNG tự Read file).
|
||
- 🔒 **Honest-note (c):** file spec do **LEAD ghi SAU khi verify** — engine KHÔNG tự ghi.
|
||
- 🔒 **Honest-note (d):** run **chấm/verify CŨNG sinh spec-file** (kế-hoạch xử issue = "cách làm" cần kết-tinh).
|
||
|
||
## 🔴 Cờ `args.run` — RUN-TRACE BẮT BUỘC khi ≥3 lane (Sàn-1 H22, cơ-khí-hoá S121 W2)
|
||
🔴 **`/fable-clone` ensemble hầu như LUÔN ≥3 lane** (run S119 = 5 lane) ⇒ **cờ này gần như LUÔN bắt buộc**.
|
||
Trước khi gọi Workflow `hmw`, lead **PHẢI** @P1:
|
||
1. Scaffold `.claude/workflows/runs/<run-id>/` (TRACKED) + `run.md` kèm **`## taskList snapshot`**.
|
||
2. Truyền `args.run = { name:'<run-id>', dir:'.claude/workflows/runs/<run-id>' }`.
|
||
|
||
**Thiếu cờ + ≥3 task ⇒ `hmw.js` THROW (STOP-HARD), KHÔNG fail-soft.** Vì sao gate: script chạy JS-sandbox **KHÔNG filesystem** ⇒ tự nó không tạo được folder ⇒ trước S121 sàn này chỉ là **kỷ-luật người** (đo thật @S119: `git grep args.run .claude/commands/` = **0 hit** ⇒ 4/4 wrapper KHÔNG cờ ⇒ sàn danh-nghĩa). Hậu-quả thật khi thiếu: chết giữa run ⇒ **per-turn returns mất theo phiên, chỉ file trên đĩa sống sót** ⇒ `/tiep` §4 không có vật-liệu cắt-gọt ⇒ chạy lại TỪ ĐẦU (S118 raw-Agent 7-spawn ⇒ 0 run-folder).
|
||
🔸 **Khai thật:** gate chỉ phủ đường `hmw.js`. Ngưỡng *"hoặc ước >5 phút"* **KHÔNG cơ-khí-hoá được** (script không đo trước thời-lượng) ⇒ phần đó vẫn là kỷ-luật lead. **raw `Workflow`/`Agent` tool = kẽ CÒN-LẠI**, đi thẳng không qua file này ⇒ mất writeGuard + run-trace.
|
||
|
||
## 🔴 Guard ensemble (§K engine — 3 floor-fidelity)
|
||
- **ảo-ensemble = N lane CÙNG 1 vai phán-quyết** (multi-lens trên 1 vai), **KHÔNG** mixed-roster fan-out (`hmw.js` VALID_ROLES = **roster đầy-đủ**, canonical → [`docs/STATUS.md`](../../docs/STATUS.md) §Sub-agents; KHÔNG gate vai — worker-tier-pin S124 **che** leak qua frontmatter `opus` (xem :57), hết thời all-inherit ăn-theo-lead).
|
||
- **N lane RETURN-only**; em-main **single-writer** (B3) ghi **1 MEMORY entry** đúng vai đó + **gắn nhãn engine đã dùng** (hmw SCHEMA `memoryDelta` KHÔNG field engine → em-main stamp @P3 harvest).
|
||
- **Một vai = một trí-nhớ** dù N lane (chống AS-10 fragment N-lane).
|
||
|
||
## 🔴 GAP#6 — lane ensemble PHẢI mang `tier:'opus'` (KHÔNG để inherit)
|
||
|
||
🔴 **Lệnh này tự định-nghĩa mình là "ENSEMBLE **tier-2**" ⇒ lane BUỘC phải chạy tier-2, KHÔNG phải tier của lead.**
|
||
|
||
```js
|
||
taskList: [ { role:'<vai anh gán>', tier:'opus', label:'lens-1', prompt:'…' },
|
||
{ role:'<vai anh gán>', tier:'opus', label:'lens-2', prompt:'…' }, … ]
|
||
```
|
||
|
||
**Vì sao GIỮ (đổi nấc S124)** (`hmw.js` `resolveModel()`: `if (tier==='fable'||tier==='opus') return tier`):
|
||
- 🔴 **N×Fable-risk NAY được PIN che:** frontmatter đổi `inherit`→`opus` (worker-tier-pin S124) ⇒ **thiếu `tier`** → role-có-frontmatter → `model: opus` → lane = **opus (tier-2), KHÔNG còn ăn lead**. Vậy dù lead=Fable, lane vẫn opus (KHÔNG còn N×Fable). ⇒ `tier:'opus'` nay = **belt-and-suspenders** (explicit-is-better), KHÔNG còn là chốt-chặn DUY-NHẤT như thời all-inherit.
|
||
- ⇒ Lỗi cũ 🟥 reviewer @S108 (lead=Fable → ensemble N×Fable) = **đã vá bằng pin**, giữ mô-tả làm lịch-sử.
|
||
- 🔴 **Lỗ THẬT còn lại = `tier:'fable'` của `/fable-real`** (KHÁC frontmatter opus) → H23-precedence (xem dưới): nếu frontmatter thắng, `/fable-real` KHÔNG lên Fable được.
|
||
|
||
### 🔴 CHƯA VERIFY — precedence spawn-param ⟂ frontmatter (H23 §2(2), khai bắt-buộc)
|
||
|
||
**Ở SE cả hai ĐANG cùng hiện-diện:** `hmw.js` trả alias vào `agent(…, {model:…})` **TRONG KHI** frontmatter **toàn roster** = **`opus`** (worker-tier-pin S124). **Chưa ai test bên nào THẮNG** (`hmw.js:44-52` mang cùng ghi-chú này).
|
||
🔴 **Nếu frontmatter (opus) thắng ⇒ `tier:'fable'` của `/fable-real` = NO-OP** ⇒ KHÔNG escalate Fable được (owner dùng `/model` tay). *(`tier:'opus'` thì trùng frontmatter, vô-hại.)*
|
||
**Phép thử — NAY TESTABLE kể cả lead=Opus (đổi từ DEFER):** vì frontmatter=`opus`≠`fable`, chạy 1 lane `tier:'fable'` → đọc model THỰC-TẾ resolve: `fable`=spawn thắng · `opus`=frontmatter thắng — **phân-biệt được bất-kể lead**. ⚠️ **CHỜ RESTART** kích-hoạt frontmatter mới rồi chạy (phiên kế). 🔴 Khai thẳng: **CHƯA test lượt này**, đừng bán quá nấc.
|
||
**Đang có (PA-2, anh chốt O1) = 2 lớp GIÁN-TIẾP, KHÔNG thay được phép thử trên:** PA-2a hằng-số `TIER2_EXPECTED_FULL_ID = 'claude-opus-4-8'` (`hmw.js:53`) + PA-2b `scripts/spawn-model-audit.ps1` so resolved-vs-expected. 🔸 Neo-tại-spawn = **bất-khả-thi** (param chỉ nhận enum alias) — và **chính mệnh-đề đó cũng CHƯA thử** truyền full-id xem có bị từ-chối không (fix#8a).
|
||
> ⚠️ **Grep `tier:'opus'` ≥1 hit = ĐIỀU-KIỆN CẦN, KHÔNG ĐỦ** — nó chỉ đo **CHỮ trong file**, không đo runtime ⇒ **Goodhart-able 100%**.
|
||
|
||
## 🔴 Floor model-tier v3 + lead-discipline
|
||
- **Lead = frontier-class do ANH chọn per-session** {Fable 5 | Opus 4.8 — **1M MAX**}; **CẤM Sonnet/Haiku-class ghế lead**. Engine-đắt per-invocation = đường DUY NHẤT nâng 1 vai lên hạng-nhất.
|
||
- ⚠️ **Lead KHÔNG tự ý gọi engine-đắt** — **kể cả khi HMW-mode ON**; chỉ chạy khi anh gõ lệnh.
|