Files
solution-erp/.claude/commands/fable-clone.md
pqhuy1987 c2d01f0dce
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m30s
[CLAUDE] Docs: S152 closeout — bookend hình B trọn 2 đầu + owner (30)(31)(32) + queue memory-ops TRỌN (squash 20 wal:)
- Owner 3-quyết: (30) JUMP để-nguyên-theo-nhịp · (31) 4 persona +NEVER-block (restart ĐÃ THOẢ) · (32) vòng 1→5 AUTO — lô consent gỡ 9 site (5 H1 + ring1-tự-bắt + 3 trio; E-013 EXT)
- Memory-ops TRỌN: A1-A4/D1/D2/R1/B-series — A7 392/392 · mfe 20/20-100% lần đầu · lead-gap drain 24.728→16.485B · strike-ledger + WARN-latch (-Ack = owner-action)
- V4 sleep AUTO đầu: 1 shard thật/16 KÊU · ring4 đầu-đời TRƯỢT-4/5 → 4 fix gist (scribe sub-ring4-close vì return-only)
- Thư model re-stamp: 59ce1d0f → 9c909007 published (G-024a) — adap-report Đính-chính @S152 + sweep 13 bề-mặt LIVE
- Bookend @close: stale 6 FLAG + gap 2 FLAG → vá 8/8; ring2 8/8 ĐẠT (4-A pin-bản-cắt → slot 33) · ring1 48Đ/5T/59-claim
- M9 13 đơn-vị diary (3 S151-deep hồi-tố) · #53 ×10-chắc → tally 60-cận-dưới + errata subject-1b85713
- Session-log 2 run= + completeness-gate 5-vòng ĐẠT · HANDOFF segment S152 (carry 3-đóng/3-mới/23-giữ; slot 33/34)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-26 01:58:30 +07:00

110 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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> <đề-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 (canonical → STATUS §Sub-agents; B1 — KHÔNG hardcode số) (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-stale-auditor` · `lead-gap-auditor` · **`harness-eval` · `harness-refine` · `harness-audit`** · **`ring1-audit` · `ring2-audit` · `ring4-audit`** (round-KIỂM ×3 S145).
- **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** — 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``lead-stale-auditor` soi). Lịch-sử: 10→12 (S110, +2 monitor `tooling-auditor`/`harvest-curator`) → 12→14 (S121 W2, +2 monitor H24 `lead-stale-auditor`/`lead-gap-auditor`) → **14→17 (S141, +3 trio-memory `harness-eval`/`harness-refine`/`harness-audit` — read-only INFORM-only, TUẦN TỰ eval→refine→audit)****17→20 (S145, +3 round-KIỂM `ring1-audit`/`ring2-audit`/`ring4-audit` — C4/C4b TÁCH mỗi-vòng-1-con, AUTO fire-after-measure)**. *(🧊 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.
## 🔴 ĐÓNG GÓI LANE THEO TRẦN LƯỢT (C2 — adap đợt-11 S144, có repro)
**Sự cố gốc `wf_491c05a8-6dc` (2026-07-22):** 5 lane `investigator-codebase` (`maxTurns: 20`) — **3 CHẾT, ~490K token đốt, 0 sản phẩm**.
Đo từ transcript: lane **sống** dùng 21/23 tool-use · lane **chết** dùng 28/34/35 ⇒ cháy lượt **khi vẫn đang đọc**, chưa tới bước ghi.
🔴 **Cơ chế phạt NGƯỢC ĐỜI:** lane càng cẩn thận càng chắc chết. Lỗi ở **LỆNH của lead**, không ở lane — lead giao lane-5 **mười file** với trần 20 lượt.
**3 luật đóng gói (áp mọi `/fable-clone` từ nay):**
1. **≤3 file/lane.** Lane phải đọc nhiều hơn ⇒ **tách lane**, đừng nới việc.
🔸 Số 3 = **AI tự đặt, đảo được** (không phải số owner).
2. 🔴 **ÉP GHI KHUNG RỖNG Ở LƯỢT 1-2** — trước khi đọc bất cứ gì. Rồi append dần.
*Vì sao "dặn ghi sớm" KHÔNG đủ:* prompt run-hỏng **đã** ghi *"ghi NGAY khi tìm ra từng cái"*, lane vẫn tự xếp việc ghi **sau** việc đọc ⇒ "ngay" của lead rơi **sau** vạch chết.
**Bằng chứng đối chứng:** run review `wf_301d3943-144` đổi đúng chỗ này (ép khung rỗng lượt 1-2, `maxTurns: 25`) ⇒ **3/3 lane sạch, 0 chết**. Cùng harness, cùng model, khác **thứ tự ghi**.
3. **Nêu trần lượt NGAY ĐẦU prompt** + phân bổ gợi ý (đọc → verify → chốt), để lane tự lượng sức.
**Acceptance (đã siết theo R3 — bỏ đếm-chữ):**
-**KHÔNG** dùng `grep -c 'trần lượt'` làm tiêu chí (gõ đúng cụm chữ là đạt = Goodhart thuần).
- ✅ Đo ở **run KẾ**: 0 lane chết.
- 🔸 **Khai hạn chế thật:** `hmw.js` C1 chỉ biết lane trả `null`, **KHÔNG phân biệt được NGUYÊN NHÂN** ⇒ mệnh đề *"chết vì cháy lượt"* hiện **chưa đo được bằng máy**, phải mở transcript đếm tool-use.
## 🔴 KHUÔN LABEL 4 THÀNH-PHẦN (C3 — `spawn-label:22-27`, BINDING)
Mọi spawn (Agent-tool `description` · `hmw` `label` · monitor · cổng review) mang đủ **4 thành-phần**:
```
{nhóm|Vòng-N|Core|Gate|WF} {vai} {pha/wave} s{N}
```
Ví dụ đang chạy: `Gate reviewer anchor s144` (24 ký tự) · `Vòng-3 harness-eval w1 @start s144`.
- **Vừa panel** ~≤40 ký tự; xung đột thì **đủ-thành-phần thắng ngắn-gọn** (`:25`).
- **Một khuôn duy nhất** toàn repo (`:26`).
- **Áp từ phiên kế** (`:51`) — spawn trước đó **giữ nguyên làm vết, KHÔNG sửa lùi** (khuôn hub `:43`).
**Acceptance (siết theo R3 — thêm control + neo artifact):**
-**Negative-control**: cắm 1 label thiếu {pha·phiên} → phép đọc-lại **PHẢI TRƯỢT**. Không trượt = thước mù.
-**Neo artifact**: label phải xuất hiện trong `runs/<id>/run.md` — panel là **ephemeral**, `grep` không truy được ⇒ không neo thì không tái lập, không audit được.
- ❌ Bỏ tiêu chí "chọn 3 task nói được {ai·gì·nhịp·phiên}" **đứng một mình** — đó là **tự chấm chính label mình vừa viết**, n=3, không artifact.
## 🔴 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.
### ✅ ĐÃ VERIFY S126 (2026-07-16) — precedence spawn-param ⟂ frontmatter (H23 §2(2); flip từ "CHƯA VERIFY")
**Đo thật (run `wf_f960dae2-fa0`, phiên đầu sau restart kích-hoạt frontmatter S124):** lane `reviewer` (frontmatter `opus`) + `tier:'fable'` → resolved **`claude-fable-5`** ⇒ **SPAWN-PARAM THẮNG hard-pin**`tier:'fable'` của `/fable-real` KHÔNG NO-OP — escalate Fable ĐƯỢC (`hmw.js:44-51` mang kết-quả + caveat cùng nội-dung). *(`tier:'opus'` trùng frontmatter, vô-hại như cũ.)*
Control: lane no-tier → `claude-opus-4-8` **DÙ lead=Fable** ⇒ pin ăn runtime (loại inherit-lead). **Caveat GIỮ:** retrospective (không hứa spawn tương-lai — PA-2b) · **ALIAS-pin only** (hub full-id KHÔNG covered) · **fix#8a vẫn mở** (param từ-chối full-id? chưa thử). Evidence: `runs/2026-07-16-S126-adap-spec-execute/runtime-verify-synthesis.md`.
**PA-2 (anh chốt O1) = 2 lớp GIÁN-TIẾP bổ-trợ:** 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.
> ⚠️ **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 = DEFAULT Opus 5 MAX** (thư `9c909007` @S149 (re-stamp 07-25 G-024a; pre `59ce1d0f`); cao hơn = anh `/model` hoặc `/fable-real` — 🧊 idiom owner-choice-per-session superseded-VALUE); **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.