[CLAUDE] Docs: S110 adopt H21 + model-tier-v3 — engine-đắt per-invocation (/fable-real|/fable-clone <vai> <đề-bài>, marker RETIRED) + spec-file 3-mục K.E + MTv3 lead owner-choice + triage-S5 env-dependent; WF wf_0c3b307f-a64 3-worker-Opus + invest/reviewer Fable PASS_WITH_FIXES 5M-fixed + email 01d9096e + 2 adap-report + STAGE-2 ×4

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-07-11 20:39:15 +07:00
parent 162f0b9dc5
commit debe82fce5
25 changed files with 566 additions and 112 deletions

View File

@ -91,6 +91,8 @@ Bearer từ `POST api.solutions.com.vn/api/auth/login` → status matrix expecte
- **2026-07-10 (S108 first-real-run H19) `[engine: fable-real-single · Fable-S108]`** (em-main harvest B3, GAP-2/3): Task cite-audit 3 artifact S108 (fable-real-runbook 610-line + adap-request hot-reload + email-draft), ~111 anchor. Verdict **PARTIAL — 103/111 exact**: 7 off-by-1/2 (cụm reviewer:37-56 + investigator:46/:77 — systematic quanh code-fence) + 1 drift-note-stale (runbook:123 “9 vai” trong khi engine :328 đã 10) + email-fact FALSE **bắt trúng bẫy honesty** (hmw.js:31 chưa-sửa lúc audit → em-main vá thật sau verdict). Learned: worker-draft cite lệch ±1-2 quanh fence → audit MỞ ĐÚNG DÒNG đừng tin range · drift-note về file khác re-check ngay-trước-commit (canonical có thể được patch song song). Surprise: **meta-drift 2 tầng** — đoạn cảnh-báo-drift tự drift vì engine update TRƯỚC khi note viết xong. Return dòng-1 VERDICT-header chuẩn, 0 garble.
- **2026-07-11 (S110 H21+MTv3 deep-pass) `[engine: fable-real-single · Fable-S110]`:** Task ground-truth 2 broadcast (H21 spec-file+per-invocation · MTv3 owner-choice) + inventory TOKEN toàn repo + SPEC 3-mục. Verdict **PASS**: (1) **12 persona file SẠCH 0-hit** fable/engine-token (grep 2 vòng cả `engine-đắt|top-model|ensemble`) — NGƯỢC hub vòng-1 bắt persona-phụ lỗi; (2) MTv3 self-check regex §5 chính-thức **0-hit** nhưng extended "lead LUÔN top-model" bắt 5 ACTIVE (engine:332 K.D · runbook:140/:455 · fable-real.md:17 · mark ACTIVE-MARKS:19) = **regex-heuristic-miss class** — sister diễn-đạt khác cụm regex; (3) **hmw.js:38 comment "tier:'fable' khi hệ-trọng" = xung-đột MTv3 §1.3/H21 §3** (đường nâng hạng-nhất DUY NHẤT = owner gõ; comment cho lead-discretion) — comment-only fix; (4) hmw-mode.on = HỆ KHÁC (consent fan-out T3 `ultracode-hmw-mem-governance`, content tự khai /ultra-on) — ngoài scope H21; (5) mega-line "VẪN ON" class = **standing-imperative-trong-history-blurb** (S109-header + HANDOFF NEXT-anh = ACTIVE cần sửa; blurb-body = snapshot giữ). Bẫy fidelity lớn nhất: MTv3 §1.2/1.3 "sub gán cứng hạng-hai" đọc như floor → tưởng phá H8 all-inherit; triage-reply S2 CÙNG NGÀY waive đích-danh ("không đổi gì với form all-inherit"). ⚠️ #53 garble lượt return đầu (trả status-line giữa-chừng thay verdict) → coordinator SendMessage re-emit trong-session = recover OK, diary ghi trước re-emit.
---
## 🔄 Curate trigger

View File

@ -90,6 +90,7 @@ Adversarial pre-commit reviewer SOLUTION_ERP. Read-only verify + live curl prod
- **2026-07-10 (S108 first-real-run H19) `[fable-real-single]`** — **FAIL** (1 CRITICAL + 4 MAJOR + 6 minor; em-main 37-fix cùng phiên): email claim “đã sửa comment” khi hmw.js chưa sửa. Lesson: doc assemble-từ-N-worker → grep stale-claim theo CLASS toàn file sau fix đại diện; mọi outward-claim “đã sửa X” phải cat X trước gate. → `archive/2026-07.md`.
- **2026-07-10 (S109 sleep-recovery P3b fidelity-gate 2 gist L2 tooling-auditor + harvest-curator) `[fable-real-single]`:** **PASS_WITH_FIXES** (3 fix, 0 re-distill): (1) gist-2 meta-count "15 entry" ≠ disk 14 — count COPY từ brief, không đếm disk; (2) delta tự-tính "+8.8KB" cạnh cặp 32.2→41.1 (=8.9) — **self-computed derivative = lớp false-specificity MỚI** ngoài S88 merge-mis-attribution; (3) N/A-justification "(resolved monthly S96)" over-claim — ERD-debt §16+ CÒN pending (root CLAUDE.md), chỉ "(55)" resolved → **fact-claim trong N/A-note verify như content**. Bịa=0 ("S49" vượt-verbatim nhưng TRUE — chéo reviewer `_INDEX.md:28`); đảo-nghĩa=0 ("suýt" giữ ×2); drop-oan=0; 3 self-flag honesty NGUYÊN; pointer 10/10 unique+đúng-entry. Lesson: gist-metadata + số-tự-tính + drop-justification = 3 bề mặt lỗi máy token-coverage mù. Return Verdict-header dòng-1, 0 garble.
- **2026-07-11 (S110 H21+MTv3 adopt cổng-cuối, uncommitted 13-file) `[fable-real-single]`:** **PASS_WITH_FIXES** (0C/5M/~9m). Sàn-5-điểm + 4-note a-d + MTv3-4-vế ĐỦ trên bề mặt chính (2 command + 0.5b/0.6 + engine K.E); X1 hmw nguyên; marker xóa; X8 sạch (mọi "code-enforced" negated). CATCH: (1) worker đổi-fact khi reword — fable-clone:33 "VALID_ROLES nhận cả 12 vai" nhưng hmw.js:22-28 = **10** (engine K.C nói đúng 10) → **claim-về-code trong doc phải grep code lại kể cả khi chỉ reword**; (2) roster-12 promise × VALID_ROLES-10 → lệnh-B 2 vai monitor degrade DEFAULT-subagent silent (hmw.js:104 fail-soft, mất persona+memory-pack) — floor mới EXPOSE edge code cũ mà H19 2-vai-cố-định che khuất; (3) point-edit sót cụm GIỮA-section: runbook §5.1 P5 "EXCLUDED all-but-2" đối đầu P0-mới roster-12 CÙNG checklist; §4.2 fixed nhưng mirror §3.2/§3.3 MISS (asymmetric-mirror-edit); §2.5 q1/q3+bảng marker nguyên un-🧊; (4) 3 supersede-note trỏ 2 adap-report CHƯA tạo = dangling-pointer + outward chưa qua gate. Lesson: sweep hậu-supersede phải đi theo CONCEPT-cluster từng section — acceptance token-hẹp ("Test-Path ngoài 🧊 = 0") PASS trong khi semantics cũ còn nguyên cụm. #53 garble lượt return (status-line thay verdict) → coordinator re-emit request trong-session = recover OK, diary ghi trước re-emit.
---

View File

@ -15,7 +15,7 @@
> **Upgrade S75 (2026-06-18 — Harness-11 engine bộ-nhớ-và-governance TỰ-BẢO-TRÌ adopt):** engine tự-DÒ toàn-diện (luôn tươi báo cờ) + AUTO chỉ semantic-null git-diff + **single-writer bar-KHÔNG-hạ (D9)** + đổi-luật owner-approve (D7). 🔑 Canonical → [`docs/governance/harness-11-engine.md`](../../docs/governance/harness-11-engine.md) (**KHÔNG copy luật ở đây — B1 dogfood**). Artifact MỚI: `scripts/governance-detectors.ps1` (C1 broken-pointer + C2/B3 staleness + C3 vocab-fork + C4 self-exclusion, NO-API DÒ+FLAG-only, **runtime-proven** bắt drift root CLAUDE.md mig53→55 + 0 self-match; số flag động → run-trace) + `scripts/memory-archive-gate.ps1` (PHẦN A hysteresis 0.85/keep-floor 5/2-strike/A7 NO-API L1-eval) + budget.json `archive_gate`. 3-tier D5(AUTO)/D6(DÒ+FLAG)/D7(owner-approve) + one-direction-lock D8 (canonical→derived) codify ở engine-doc. Cadence wired: D1 session-start §2.1.3 (chạy detector) · D2 session-end §L.b(c) (archive-gate). Áp qua workflow: audit `wf_7fdc3bd5-930` + implement `wf_c5e5844e-7c1` + review `wf_d7ca1ff8-942` + double-check `wf_a0b68d2f-30e`. adap-report `docs/governance/adap-reports/2026-06-18-Governance-harness-11.md`.
> **Upgrade S79 (2026-06-20 — User-Mark H-12/13 canonical §P + Harness-14 Eval/Budget/Outcome adopt):** áp **canonical §P đầy-đủ** (P1-P10) khi anh gõ `/user-mark-active-high` "áp đầy-đủ chính-xác nhất theo AI_INFRA". Artifact: **4 lệnh** `.claude/commands/user-mark-{active-high,active,medium,disable}.md` (DACI report-before-stamp) + ledger `.claude/governance/ACTIVE-MARKS.md` (4 cấp Active-High/Active/Medium/Disable + display-filter) + `harness-11-engine.md §E` (cơ-chế P1-P10) **+§F** (Harness-14 3-mức maturity) + `rules.md §6.6` (objective-criteria: KHÔNG quy-mô-đội / KHÔNG thời-gian-tuổi) + session-start §2.1.4 / session-end §L.b(h) mark-display. **3 mark Active-High stamped** anh-confirm S79 (`RC-pqhuy1987-20-06-2026-10-29-09/10/11`). completeness-gate H-6→H-13 ĐẠT (H-8 11/11 inherit no-`[1m]`). 4 workflow: invest `wf_82337f7f-95c` + review `wf_a7cbe93e-912` + align-re-review `wf_9d3beebb-a95` + H14-review `wf_4d4eba6f-8a0`. ⚠️ restart CLI (lệnh/session no hot-reload). adap-report 3× (`…rc-signature` + `…harness-all-update` + `2026-06-20-Governance-harness-14`).
> **Upgrade S93 (2026-06-29 — Harness-16 MFE adopt):** **memory-fidelity-EVAL** (đo nạp-vs-nhớ-vs-dùng bằng SỐ ĐO, KHÁC H6.7 `memoryDelta`-routing-fidelity). Artifact: `scripts/mfe-eval.ps1` (deterministic NO-API: LEAD coverage-FIT token-RANGE + age-band flag-not-cut + Goodhart-anchor strikes/RCA · SUB per-role coverage ĐO-THẬT prose-only→N/A · sub-workflow N/A) + `eval/mfe/` (seed sample-questions stable-id-anchored + README) + `memory-budget.json:mfe` config + engine **§H** + artifact-row. Judge recall/apply = **SCAFFOLD-only** (chờ age-maturity + independent-judge). Wire **opt-in** `session-start §2.1.6` + `session-end §L.b(c)` (param `eval`, no-param=như cũ). 🔴 **READS-not-writes** `token_governor` (owner-authority). C3 alias-map recorded §H (KHÔNG seed $aliasSets). 2-workflow: WF1 implement-investigate `wf_4c63e1bd-99e` + WF2 review `wf_13e3d35a-023` (3-lane PASS: code-gate denom-29-re-derived + cross-harness 0-conflict + honesty 5-floor). adap-report `2026-06-29-Governance-harness-16-mfe.md` + email AI_INFRA. ⚠️ restart CLI.
> **Upgrade S107 (2026-07-10 — +office-document, 12th sub):** **+office-document (📄 Office document WRITE specialist)** — anh giao trực tiếp S107 ("Sub chính" mảng Office). Floor **OD1OD10** (skill-first · 🔴 fidelity-to-template 100% · extract-không-bịa · round-trip verify · file-mới-không-đè-gốc · boundary-code ⟂ implementer-backend). Skill nạp: bộ 4 Office standalone (`docx`·`xlsx`·`pptx`·`pdf`) + `form-engine` (project). VALID_ROLES `hmw.js` 9→**10**. Use-case SE: extract spec Excel/Word anh gửi (Database NCC → Supplier Phase B khi unpark) · chuẩn hóa template 8 form placeholder · document deliverable · screenshot→docx #74 · verify render form-engine. ✅ **verified-runtime S107 CÙNG PHIÊN** — registry HOT-RELOAD agent MỚI giữa phiên (harness mới; S27 restart-lesson giữ cho EDIT agent hiện có, chưa re-verify) + spawn-test PASS (OD1 skill invoke · OD4 extract-honest — finding: 2 template `wwwroot/templates` **0 placeholder `{{field}}`**, mẫu blank "…………..", mapping ở render-engine hoặc chưa placeholder-hóa · OD5 round-trip 37KB VN-dấu · OD7 gốc nguyên vẹn).
> **Upgrade S107 (2026-07-10 — +office-document, 12th sub):** **+office-document (📄 Office document WRITE specialist)** — anh giao trực tiếp S107 ("Sub chính" mảng Office). Floor **OD1OD10** (skill-first · 🔴 fidelity-to-template 100% · extract-không-bịa · round-trip verify · file-mới-không-đè-gốc · boundary-code ⟂ implementer-backend). Skill nạp: bộ 4 Office standalone (`docx`·`xlsx`·`pptx`·`pdf`) + `form-engine` (project). VALID_ROLES `hmw.js` 9→**10**. Use-case SE: extract spec Excel/Word anh gửi (Database NCC → Supplier Phase B khi unpark) · chuẩn hóa template 8 form placeholder · document deliverable · screenshot→docx #74 · verify render form-engine. ✅ **verified-runtime S107 CÙNG PHIÊN** — registry HOT-RELOAD agent MỚI giữa phiên (harness mới; ⚠️ **ENV-DEPENDENT** — hub experiment 2026-07-11 NGƯỢC kết quả [0 notice + spawn not-found ×2] → KHÔNG fleet-generalize, restart = default an toàn; S27 restart-lesson giữ cho EDIT agent hiện có, chưa re-verify) + spawn-test PASS (OD1 skill invoke · OD4 extract-honest — finding: 2 template `wwwroot/templates` **0 placeholder `{{field}}`**, mẫu blank "…………..", mapping ở render-engine hoặc chưa placeholder-hóa · OD5 round-trip 37KB VN-dấu · OD7 gốc nguyên vẹn).
---
@ -261,3 +261,4 @@ Each agent `.claude/agent-memory/<name>/MEMORY.md` persistent diary. Spawn auto-
## ⚠️ CLI restart required
Agent definition change (S39 split 4→7) → **anh main restart Claude Code CLI** để registry hot-reload (per S27 lesson — model:inherit + new agent files). Verify post-restart: spawn smoke test mỗi agent mới (investigator-api / implementer-frontend / test-specialist) confirm load OK.
> **Cập nhật S107 (2026-07-10):** harness hiện tại **HOT-RELOAD agent file MỚI giữa phiên** (office-document tạo + spawn-test PASS cùng phiên, 0 restart). S27 lesson thu hẹp còn: **EDIT agent đang tồn tại** + command `.md` (chưa re-verify hot-reload) → restart vẫn là default an toàn cho 2 ca đó.
> ⚠️ **ENV-DEPENDENT (S110 2026-07-11 — triage-reply S5 hub):** hub chạy CÙNG experiment ADD-agent-mới → kết quả NGƯỢC (0 system-notice + spawn "not found" ×2 qua turn-boundary) ⇒ hot-reload-ADD-mới KHÔNG fleet-proof, chỉ verified trên env SE tại S107; **restart = default an toàn MỌI ca** khi nghi ngờ.

View File

@ -1,15 +1,40 @@
---
description: Về Fable-clone mode (H19, MẶC-ĐỊNH) — 2 vị-trí phán-quyết (reviewer + investigator-codebase) chạy ensemble tier-2-mạnh-nhất (N lane đa-lăng-kính CÙNG vai + em-main refute+synthesize) thay top-model thật. Xóa marker fable-real-mode.on. Cặp /fable-real.
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 12> <đề-bài phán-quyết> — vd "reviewer rà commit X" · "investigator-codebase truy bug Y"
---
# /fable-clone — Về Fable-clone (ảo / ensemble, MẶC-ĐỊNH) cho 2 vị-trí phán-quyết (H19)
# /fable-clone — ENGINE-ĐẮT LỆNH-B: 1 vai × ENSEMBLE tier-2 (per-invocation, H21)
> Cặp **`/fable-real`**. 🔴 restart Claude Code sau khi tạo/sửa (no hot-reload).
> Xóa marker `.claude/fable-real-mode.on` (Remove-Item; không có → "đã ở ảo-mode sẵn"). Về **MẶC-ĐỊNH**: 2 vị-trí phán-quyết chạy **ensemble tier-2** = "bản sao Fable" — để dành quota top-model cho lead.
> **Ảo-ensemble = reuse HMW** (hmw.js `parallel` multi-lane + em-main P3/P4 refute+synthesize) — pattern đã dogfood **S101 WF2** (3-lane reviewer bắt README:51 stale-label mà token-exact sweep sót, commit `f229b07`). KHÔNG cần build engine mới.
> 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).
## 🔴 Guard (§K engine — bất-biến cả 2 mode)
- **N lane CÙNG 1 vai phán-quyết** (reviewer HOẶC investigator-codebase, multi-lens), KHÔNG mixed-roster fan-out.
- **N lane RETURN-only** → em-main single-writer ghi 1 MEMORY entry + nhãn engine (H19 §5).
- Phạm-vi CHỈ 2 vị-trí; lead + mọi vai khác KHÔNG đụng (H19 §3).
- Bật/tắt mode = quyền anh (gõ lệnh), KHÔNG auto.
**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 12 (H21 ②)
`investigator-codebase` · `investigator-api` · `implementer-backend` · `implementer-frontend` · `frontend-designer` · `database-agent` · `office-document` · `test-specialist` · `reviewer` · `cicd-monitor` · `tooling-auditor` · `harvest-curator`.
- **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**.
- ⚠️ **Limitation lệnh-B × 2 vai monitor:** `tooling-auditor` · `harvest-curator` **`hmw.js` VALID_ROLES (10 vai)** → ensemble qua hmw sẽ **fail-soft rơi default-subagent** (mất persona + memory-pack, chỉ WARN log). Cần ensemble cho 2 vai này → em main báo anh (bổ sung VALID_ROLES = đổi code, chờ anh duyệt) HOẶC dùng lệnh-A `/fable-real`.
- 🔒 **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).
## 🔴 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 = **10 vai** — 2 monitor ∉ list, xem limitation trên; KHÔNG gate vai — all-inherit **che** leak tới khi Fable về + phân-tầng).
- **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).
## 🔴 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.

View File

@ -1,27 +1,41 @@
---
description: BẬT Fable-real mode (H19) — 2 vị-trí phán-quyết (reviewer=cổng-cuối + investigator-codebase=ground-truth) chạy SINGLE top-model THẬT (deep pass) thay ensemble ảo. /fable-clone về mặc-định. Gõ = anh CONSENT nâng 2 vị-trí lên top-model chế-độ thật (H19 §4, không tự-động).
argument-hint: (trống = bật thật-mode · hoặc kèm task phán-quyết đầu tiên)
description: /fable-real <vai> <đề-bài> — ENGINE-ĐẮT LỆNH-A per-invocation (H21): vai anh GÁN chạy 1 LẦN SINGLE top-model THẬT (Fable 5; outage → single-Opus-1M/run) deep-pass cho ĐÚNG đề-bài đó, hiệu-lực CHỈ lượt đó — 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-clone.
argument-hint: <vai roster 12> <đề-bài phán-quyết> — vd "reviewer rà-soát commit X" · "investigator-codebase truy nguồn bug Y"
---
# /fable-real — BẬT Fable-real (thật / single top-model) cho 2 vị-trí phán-quyết (H19)
# /fable-real — ENGINE-ĐẮT LỆNH-A: 1 vai × SINGLE top-model deep-pass (per-invocation, H21)
> Cặp **`/fable-clone`**. 🔴 restart Claude Code sau khi tạo/sửa (command `.md` no hot-reload).
> 📘 **Runbook vận hành** (hàm/biến/checklist 2 lane × 2 mode + AC 8-tiêu-chí + anti-patterns): [`docs/governance/fable-real-runbook.md`](../../docs/governance/fable-real-runbook.md) (S108 — first-real-run dogfooded).
> **Adopt H19 (S101, 2026-07-03)** — floor-change model-tier, RC-stamp `RC-pqhuy1987-03-07-2026-17-46-35` (`ACTIVE-MARKS.md`). Gõ lệnh = **anh CONSENT** cho 2 vị-trí phán-quyết chạm **top-model chế-độ THẬT** (single deep run) — KHÔNG tự-động, CHỈ khi anh gõ (H19 §4/§9 point-2).
> **Mode persist qua marker:** `/fable-real` → em main tạo `.claude/fable-real-mode.on` (Write) → SỐNG qua session/compact. `/fable-clone` xóa (về ảo mặc-định). marker = source-of-truth · **gitignored** (KHÔNG commit — tránh thật-mode kẹt-ON khi clone = burn quota top-model).
> Cặp **`/fable-clone`** (lệnh-B ensemble). 🔴 restart Claude Code sau khi tạo/sửa (command `.md` no hot-reload).
> **Adopt H21 S110 (2026-07-11)** — supersede semantics **toggle-marker H19 (S101)**. KHÔNG còn `.claude/fable-real-mode.on`, KHÔNG còn mode persist qua session/compact: engine-đắt CHỈ SỐNG trong **lượt anh gõ lệnh** này.
> 📘 **Runbook vận-hành** (hàm/biến/checklist per-invocation + AC + anti-patterns): [`docs/governance/fable-real-runbook.md`](../../docs/governance/fable-real-runbook.md).
> 🔧 **Guard ensemble / single-writer:** [`docs/governance/harness-11-engine.md`](../../docs/governance/harness-11-engine.md) §K (engine).
**Task phán-quyết đầu (nếu có):** $ARGUMENTS
**Vai + đề-bài lượt này:** $ARGUMENTS
## 🔴 Phạm-vi SÀN (H19 §3 — bất-biến, KHÔNG lan sang vai khác)
- CHỈ **2 vị-trí phán-quyết**: `reviewer` (cổng rà-soát cuối — adversarial + thử-phá + phân-xử) + `investigator-codebase` (ground-truth/xác-minh sự-thật — truy bằng-chứng gốc chống bịa + RCA). KHÔNG vai khác.
- **Lead** luôn top-model (tuyệt-đối KHÔNG đụng). **Mọi vai khác** (implementer/test/cicd/frontend-designer/…) giữ model mặc-định như cũ.
- Đổi mode CHỈ khi anh gõ lệnh — KHÔNG auto theo số-dư/cảm-tính (giữ quyết-định-khách-quan, mark `RC-…10-29-09`).
## 🔴 Semantics per-invocation (H21 ①/②)
- **`/fable-real <vai> <đề-bài>`** = vai anh gán chạy **1 LẦN top-model THẬT** (sâu nhất, đắt nhất) cho ĐÚNG đề-bài đó. Fable up = single-Fable; Fable **outage** (H5, lỗi `"Model isn't available"`) = single-**Opus-1M** fallback **theo từng lần chạy** (KHÔNG mode toàn-cục).
- **Hiệu-lực CHỈ lượt đó** — hết lượt là hết. KHÔNG marker, KHÔNG persist. Lượt sau muốn engine-đắt = gõ lại lệnh.
## Cơ-chế 2 mode (H19 §4)
- **Fable-real (thật, marker CÓ):** 2 vị-trí chạy **1 lần top-model trực-tiếp** (sâu nhất, đắt nhất). Fable up = single-Fable; Fable down (H5) = single-Opus-1M fallback **theo từng lần chạy** (KHÔNG đổi mode toàn-cục).
- **Fable-clone (ảo, marker VẮNG = mặc-định):** 2 vị-trí 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.
## 🔴 Vai BẮT BUỘC ∈ roster 12 (H21 ②)
`investigator-codebase` · `investigator-api` · `implementer-backend` · `implementer-frontend` · `frontend-designer` · `database-agent` · `office-document` · `test-specialist` · `reviewer` · `cicd-monitor` · `tooling-auditor` · `harvest-curator`.
- **Thiếu `<vai>` HOẶC vai ngoài roster** → em main **hỏi lại anh 1 dòng** ("engine-đắt cần vai đích-danh — vai nào?"), **KHÔNG tự chọn vai**.
- 🔒 **Honest-note (a):** "không tự chọn vai" = tầng **KỶ-LUẬT owner-gated** (anh phải gõ vai) — **KHÔNG claim code-enforced**.
- 🔒 **Honest-note (b):** lệnh/alias = cách anh **GÁN VAI NHANH**, vẫn phải anh gõ — hệ **KHÔNG tự chọn vai**.
## 🔴 Guard ensemble (§K engine — 3 floor-fidelity, WF1 `wf_5f308fd8-744` bắt)
- **ả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 nhận cả 10 vai, KHÔNG gate — all-inherit che leak tới khi Fable về).
- **N lane RETURN-only**; em-main single-writer (B3) ghi **1 MEMORY entry** đúng vai đó + **gắn nhãn engine đã dùng** (H19 §5 — hmw SCHEMA `memoryDelta` KHÔNG có field engine → em-main stamp @P3 harvest).
- Một vai = một trí-nhớ dù chạy thật/ảo/engine nào (chống AS-10 fragment N-lane).
## 🔴 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 top-model đề-xuất [đề-bài · cách làm · checklist]. Engine KHÔNG tự ghi.
2. **Lead verify** — lead soi + chỉnh nội-dung propose.
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).
## 🔴 Floor model-tier v3 (broadcast 2026-07-11)
- **Lead = frontier-class do ANH chọn per-session** {Fable 5 | Opus 4.8 — cả hai **1M MAX**}. **CẤM lớp model thấp (Sonnet/Haiku-class) ngồi ghế lead.**
- **Engine-đắt per-invocation = đường DUY NHẤT nâng 1 vai lên hạng-nhất**, chỉ trong lượt lệnh anh gõ. Ngoài lệnh, mọi vai giữ model roster mặc-định (**H8 all-inherit** — cả 12 sub `model: inherit` theo lead).
- ⚠️ **Lead KHÔNG tự ý gọi engine-đắt****kể cả khi HMW-mode ON**. Engine-đắt chỉ chạy khi anh gõ `/fable-real|/fable-clone <vai> <đề-bài>`.
## 🔴 Guard (§K engine — bất-biến)
- **Single deep-pass 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ù chạy thật/ảo/engine nào (chống AS-10 fragment). Guard ensemble N-lane đầy-đủ (khi cặp `/fable-clone` chạy) → §K.

View File

@ -24,17 +24,25 @@ Em main đọc `.claude/hmw-mode.on` → **BÁO ngay đầu response** (anh kh
> 🚦 **T4 + H6.1 (governed-ultracode, adopt S63):** keyword "workflow"/"ultracode" = **QUYỀN hỏi** khi **mode-OFF** (+ "chạy workflow" → em **TỪ CHỐI + nhắc gõ `/ultra-on`**). 🟢 **Mode-ON (H6.1): task SUBSTANTIVE (≥2 bước độc-lập · multi-file · sweep/audit/review/migration/research/verify-heavy) → em TỰ author+chạy Workflow HMW (KHÔNG cần gõ "workflow"; marker-ON = consent); TRIVIAL (<2-3' · 1-file · hỏi-đáp · governance-authoring single-writer) → solo.** CẤM native `/effort ultracode` (mất guard).
## 📋 BƯỚC 0.5b — Fable-real/clone mode marker check (H19 — adopt S101)
## 📋 BƯỚC 0.5b — Engine-đắt per-invocation (H21 — adopt S110, supersede H19 marker)
Em main đọc `.claude/fable-real-mode.on` **BÁO ngay** (mode phán-quyết 2 vị-trí `reviewer` + `investigator-codebase`):
- **Marker TỒN TẠI** → **🔴 Fable-real mode = ON** — 2 vị-trí phán-quyết chạy SINGLE top-model THẬT (deep pass). `/fable-clone` về ảo-ensemble.
- **Marker KHÔNG có** → **🟢 Fable-clone mode (MẶC-ĐỊNH, ảo)** — 2 vị-trí chạy ensemble tier-2 (N lane CÙNG vai + em-main synthesize) khi heavy-judgment. `/fable-real` bật thật.
**KHÔNG còn mode/marker để đọc** `.claude/fable-real-mode.on` **retired S110** (H19 marker-toggle nghỉ). Engine-đắt (nâng 1 vai lên hạng-nhất) **CHỈ chạy trong lượt anh gõ lệnh**, KHÔNG persist qua session/compact:
- **`/fable-real <vai> <đề-bài>`** → lệnh-A: vai anh gán chạy **SINGLE top-model THẬT** deep-pass, 1 lượt.
- **`/fable-clone <vai> <đề-bài>`** → lệnh-B: vai anh gán chạy **ENSEMBLE tier-2** (N lane CÙNG vai + em-main synthesize), 1 lượt.
- **Vai anh gán đích-danh ∈ roster 12**; **thiếu/sai vai → em main hỏi anh, KHÔNG tự chọn**.
- **Mỗi run sinh spec-file 3-mục** (engine propose → **lead verify + ghi** `.claude/workflows/runs/<run-id>/spec-<tên>-<dd-mm-yyyy>.md` → worker thực-thi THEO spec bơm qua args). ⚠️ **Lead KHÔNG tự ý gọi** engine-đắt (kể cả HMW-mode ON).
> 🚦 **H19 §3 scope:** mode CHỈ đổi model 2 vị-trí phán-quyết (reviewer=cổng-cuối · investigator-codebase=ground-truth) — **lead + mọi vai khác KHÔNG đụng**. Đổi mode = quyền anh gõ lệnh (KHÔNG auto/số-dư). ⚠️ **Vacuously-inert dưới all-inherit + Fable-outage** (2 vị-trí đã top-model) → báo-mode để future-proof + nhắc anh khi Fable về + phân-tầng. (Reader này đóng gap WF2-Lane-A "marker write-only": marker giờ có consumer.) **Runbook thao-tác 2 lane (hàm/biến/checklist) →** `docs/governance/fable-real-runbook.md` (S108).
> 🧊 **Lịch-sử:** H19 marker-toggle + 2-vai-cố-định (reviewer + investigator-codebase), S101→S110 → **retired H21**; 2 lệnh chuyển **per-invocation** (vai anh gán bất-kỳ ∈ roster 12). Chi-tiết → [`harness-11-engine.md`](../../docs/governance/harness-11-engine.md) §K + [`fable-real-runbook.md`](../../docs/governance/fable-real-runbook.md).
## 📋 BƯỚC 0.6 — Model-availability check (H5 — adopt S63)
## 📋 BƯỚC 0.6 — Model-availability check (H5 — adopt S63 · MTv3 reword S110)
Em main xác nhận **lead model resolve được** đầu session. Lead SE = **Fable 5 (1M) Max** (per H4). **DOWN** = lỗi `"Model isn't available — claude-fable-5[1m]"` → fallback **`/model claude-opus-4-8[1m]`** (Opus 4.8 · 1M · Max — top-tier, KHÔNG hạ §A1; **KHÔNG sửa frontmatter agent**promote `inherit` tự theo lead → two-tier tạm collapse single-tier Opus, **revert-FREE** khi Fable về). Phản xạ THỦ-CÔNG (không hook tự-switch). ✅/⚠️ **Runtime = per-session (Fable ↔ Opus, outage-driven)** — Fable DOWN → H5-fallback Opus tự-kích revert-free (KHÔNG sửa frontmatter); Fable UP → tự về. **Lịch-sử flip-chain đầy-đủ (S98→nay) = canonical [`docs/STATUS.md` §Sub-agents]** (🔴 S106 gộp 1-chain per anh-confirm — reader này KHÔNG enumerate/cập-nhật mỗi flip; chống churn 4-file/flip). BƯỚC 0.6 probe MỖI phiên xác-định runtime SỐNG (per-session — KHÔNG tin note phiên trước, KHÔNG steady-state).
Em main xác nhận **lead model resolve được** đầu session. **Lead = frontier-class do ANH CHỌN per-session** {**Fable 5 (1M) Max** | **Opus 4.8 (1M) Max**}**owner-choice hợp-lệ CHÍNH THỨC** (đổi giữa phiên OK, ghi 1 dòng session-record); **CẤM lớp model thấp (Sonnet/Haiku-class) ngồi ghế lead** (§A1 floor).
**Outage-path (H5, GIỮ):** lead-model DOWN = lỗi `"Model isn't available — claude-fable-5[1m]"` → fallback **`/model claude-opus-4-8[1m]`** (Opus 4.8 · 1M · Max — top-tier, KHÔNG hạ §A1; **KHÔNG sửa frontmatter agent** — promote `inherit` tự theo lead → two-tier tạm collapse single-tier Opus, **revert-FREE**). Phản-xạ THỦ-CÔNG (không hook tự-switch).
**Outage đóng:** phiên **ĐẦU TIÊN** sau đó em main hỏi anh **ĐÚNG 1 DÒNG** ("model hạng-nhất resolve lại — giữ hạng-hai hay đổi?"), **hỏi 1 lần, không lặp** (thay auto-revert cũ). **Flip-record từ nay gắn nhãn {owner-choice | outage}** khi ghi: **owner-chọn-hạng-hai ≠ outage → 0 caveat / 0 nghĩa-vụ revert**; chỉ outage-fallback mới mang caveat tạm-thời.
**Lịch-sử flip-chain đầy-đủ (S98→nay) = canonical [`docs/STATUS.md` §Sub-agents]** (🔴 S106 gộp 1-chain per anh-confirm — reader này KHÔNG enumerate/cập-nhật mỗi flip; chống churn 4-file/flip). **BƯỚC 0.6 probe MỖI phiên** xác-định runtime SỐNG (per-session — KHÔNG tin note phiên trước, KHÔNG steady-state).
## Phase 1 — READ (load context)

View File

@ -35,7 +35,9 @@ const VALID_ROLES = [
// hmw KHÔNG set model cho role-có-frontmatter → return undefined, frontmatter (inherit) tự lo.
// Role-less (H6.2 governed-ultracode): default = inherit lead-model (top-tier) — KHÔNG pin rẻ làm default.
// H8.2 "workflow nhanh nhất" = song song tối đa + xuất nhanh, KHÔNG hạ model làm rẻ.
// Escape-hatch per-task tier:'opus' GIỮ cho sweep/cost (ngoại lệ có chủ đích); tier:'fable' = force lead-tier khi hệ-trọng.
// Escape-hatch per-task tier:'opus' GIỮ cho sweep/cost (ngoại lệ có chủ đích); tier:'fable' CHỈ hợp lệ
// trong lượt lệnh engine-đắt anh gõ kèm vai (/fable-real|/fable-clone <vai> <đề-bài> — H21 S110);
// lead KHÔNG tự ý elevate theo phán-đoán riêng (MTv3 §1.3: đường DUY NHẤT nâng 1 vai lên hạng-nhất = lệnh owner).
function resolveModel(role, rawRole, tier, i) {
if (tier === 'fable' || tier === 'opus') return tier
if (tier) log(`⚠️ hmw: tier "${tier}" lạ (task #${i}) → bỏ qua, dùng mặc định H8 (inherit top-tier)`)

View File

@ -0,0 +1,7 @@
# Run — 2026-07-11-h21-mtv3-adopt (S110)
- **Đề-bài:** Adopt Harness-21 (spec-file + per-invocation engine-đắt) + model-tier-v3 (lead owner-choice) + triage-reply actions (S5 hot-reload env-dependent caveat). Nguồn: 4 message AI_INFRA nhận 2026-07-11 (hash verified 4/4).
- **Lệnh anh (owner-gated, H21 semantic):** `/fable-real inves và review — chủ đề các vấn đề trong email nhận được. hmw cho đám Opus 4.8 MAX xử lý` — vai engine-đắt anh gán đích-danh: `investigator-codebase` (ground-truth) + `reviewer` (cổng-cuối); worker thực thi = Opus 4.8 MAX.
- **Spec:** [`spec-h21-mtv3-adopt-11-07-2026.md`](spec-h21-mtv3-adopt-11-07-2026.md) — engine-propose bởi investigator-codebase (Fable-real single-deep-pass, #53-garble → SendMessage-resume recover OK) → lead verified + chỉnh 2 điểm (worker edit-direct thay draft-relay · row-11 review-gate = reviewer Fable-real per lệnh anh) → lead ghi (single-writer, H21 note-c).
- **Pipeline:** invest-Fable (done) → spec (file này) → WF implement worker-Opus (3 lane disjoint-file) → em-main phần still-mine (marker/triage-S5/hmw.js:38/STATUS-HANDOFF/adap-reports/email/mark-proposal) → reviewer-Fable cổng-cuối → STAGE-2 move + commit.
- **Run-id workflow:** WF-implement: **`wf_0c3b307f-a64`** (3/3 worker Opus DONE, 0 error, schema-clean; ~387K tok) · invest-Fable + reviewer-Fable: spawn-direct (không qua workflow; invest #53-garble → SendMessage-resume recover OK).

View File

@ -0,0 +1,49 @@
# SPEC — h21-mtv3-adopt — 11-07-2026 (S110)
> **Provenance (H21 note-c):** engine-propose = investigator-codebase **Fable-real single-deep-pass** (vai anh gán trong lệnh; #53-garble lượt return → SendMessage-resume recover, verdict PASS) → **lead verified + chỉnh 2 điểm** (worker Opus edit-DIRECT file được giao thay vì draft-relay [precedent S103 build-lane, git-diff backstop] · row-11 review-gate = reviewer Fable-real per lệnh anh) → **lead tự ghi file này** (single-writer). Worker KHÔNG tự đọc file — lead bơm nguyên văn qua prompt/args (hmw.js:9 pattern).
## Mục 1 — Tính-năng / đề-bài
Adopt **Harness-21** + **model-tier-v3** trên SOLUTION_ERP: chuyển engine-đắt từ mode-marker + 2-vai-cố-định sang **per-invocation** (`/fable-real <vai> <đề-bài>` = single top-model deep-pass · `/fable-clone <vai> <đề-bài>` = ensemble tier-2), mỗi run engine-đắt sinh **spec-file 3-mục** (engine propose → lead verify + ghi → worker thực thi theo spec bơm qua args); reword floor model-tier "lead LUÔN top-model" → "lead = frontier-class owner-choice {Fable 5 | Opus 4.8 — cả hai 1M MAX}, CẤM Sonnet/Haiku-class ghế lead" + phân biệt owner-choice vs outage (0 caveat / 0 revert-nghĩa-vụ khi owner chọn) + 1-line-ask phiên đầu sau outage đóng; + triage-S5 caveat hot-reload ENV-DEPENDENT.
**Xong nghĩa là:** grep token-cũ trên tài liệu ACTIVE = 0 sót · marker file đã xóa · 4 ghi-chú trung-thực a-d hiện diện · 2 adap-report + email AI_INFRA gửi · mark mới trình anh chờ confirm (KHÔNG tự stamp).
## Mục 2 — Cách implement
### Quyết định thiết kế
- **D1 — Lệnh:** GIỮ tên 2 lệnh (form tự quyết H21 §6), đổi semantics: `<vai>` BẮT BUỘC ∈ 12-sub roster + `<đề-bài>`; hiệu lực CHỈ lượt đó, 0 marker. Thiếu/sai vai → hỏi anh 1 dòng, KHÔNG tự chọn. Honest-note a/b: bảo-đảm = owner-gated tầng lệnh + kỷ-luật lead, KHÔNG claim code-enforced; lệnh gõ không-vai = hỏi lại (không có alias tự-chọn-vai).
- **D2 — Spec-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]). Run chấm/verify CŨNG sinh (mục-2 = kế-hoạch xử issue — note d). Worker nhận spec QUA ARGS/prompt (không tự Read). Reuse run-trace H10 git-TRACKED → anh audit qua git.
- **D3 — Marker:** xóa `.claude/fable-real-mode.on` (em-main, đã làm trước WF); `.gitignore:89-92` GIỮ pattern (file cũ Dropbox-sync tái xuất vẫn ignored) + comment → "🧊 retired H21 S110 — chỉ còn phòng-hờ".
- **D4 — session-start BƯỚC 0.5b:** retire-reword GIỮ số thứ tự (tránh renumber churn): nội dung mới = "Engine-đắt H21: KHÔNG còn mode/marker — chỉ chạy trong lượt anh gõ `/fable-real|/fable-clone <vai> <đề-bài>`; lead không tự gọi". **BƯỚC 0.5 (HMW) GIỮ NGUYÊN.**
- **D5 — engine §K:** banner supersede-partial ngay dưới title `:315` + point-edit K.A (2 vai → reference-example, vai do anh gán) + K.B (marker/toggle → 🧊 note-supersede từng gạch, giữ nguyên văn cũ có đánh dấu — KHÔNG rewrite) + K.D point-1 reword MTv3 + point-2 reword per-invocation; **K.C GIỮ 3 GAP-guard** (chỉ đổi trigger-wording "clone-mode" → "lệnh-B ensemble"); **+K.E MỚI**: spec-file pipeline 3-mục + 4 honest-note a-d + bảng 2 lệnh per-invocation.
- **D6 — runbook (60KB — point-edit ~20 cụm, KHÔNG rewrite):** title banner H21 · §1 dùng-nhanh (đọc-marker → lệnh-owner-lượt-này) · §2.1 marker-lifecycle đóng khung 🧊 history + thêm "INVOCATION lifecycle" · `$mode``$engine{real-single, clone-ensemble}` derive từ TÊN LỆNH lượt này · `:140`/`:455` floor reword MTv3 · §2.5 matrix (:145-158) tương-tác 2 marker → còn 1 marker hmw + per-invocation · §5.1 PRE-FLIGHT vars `MARKER_PRESENT/MODE/ANH_CONSENT_REAL``INVOCATION{lệnh,vai,đề-bài}/ROLE_VALID/SPEC_PATH` · AP-4 (báo marker-state) → AP mới "chạy engine-đắt ngoài lượt-lệnh anh = vi phạm" · template lane §3/§4 GIỮ làm ví dụ per-invocation · §5.5 dogfood-form S108 GIỮ snapshot + 1 dòng đầu "form theo khung H19-marker, trước H21".
- **D7 — session-start BƯỚC 0.6:** +4 vế MTv3 (lead = owner-choice per-session {Fable|Opus 4.8}, đổi giữa phiên hợp lệ ghi 1 dòng) · outage-path H5 GIỮ · bỏ "Fable UP → tự về" (auto-revert) → "outage đóng → phiên đầu hỏi anh ĐÚNG 1 DÒNG ('hạng-nhất resolve lại — giữ hạng-hai hay đổi?'), 1 lần" · flip-record gắn nhãn {owner-choice|outage}.
- **D8 — Mark:** đề xuất 1 mark MỚI (H21+MTv3 gộp) supersede `RC-pqhuy1987-03-07-2026-17-46-35` → row cũ 📦; **CHỜ anh confirm** — em-main KHÔNG tự stamp/sửa (P8).
- **D9 — Triage-S5:** caveat ENV-DEPENDENT 3 chỗ: `agents/README.md:18` + `:263` + user-memory `project_harness4_two_tier_model.md` — "hub experiment NGƯỢC (0 notice + spawn not-found ×2) ⇒ ENV-DEPENDENT, KHÔNG fleet-generalize từ 1 datapoint; restart = default an toàn".
- **D10 — hmw.js:38:** reword COMMENT ONLY ("tier:'fable' CHỈ dùng trong lượt lệnh engine-đắt anh gõ (H21) — lead KHÔNG tự ý"); code KHÔNG đổi.
- **D11 — Outward:** 2 adap-report (H21 + MTv3 — MTv3 report PHẢI cite triage-S2 waive all-inherit) + 3 supersede-note 1-dòng header lên adap-report cũ (H19 fable-clone · model-tier-v2-pin-simple · checklist-model-tier) + email AI_INFRA kèm run-id.
- **D12 — STATUS/HANDOFF:** S110 blurb mới ("H21 adopted — marker retired, per-invocation") + 🧊-inline tại 2 câu "VẪN ON" + HANDOFF NEXT-anh item(1) thay bằng hướng-dẫn lệnh mới + restart-CLI note.
### Ràng buộc thật
Worker Opus edit-DIRECT trong PHẠM VI file được giao (disjoint 3 lane), mọi write khác = residual → em-main git-diff revert (AS-10 backstop) · governance ledger (ACTIVE-MARKS) + user-memory + STATUS/HANDOFF + marker + email = em-main tự làm · EDIT command/session-start `.md` = restart CLI mới ăn runtime (S27 + S5 env-dependent) · HISTORY (session-log · archive verbatim · adap-report body cũ · diary · dogfood-form) GIỮ nguyên văn.
### Đường chết cần né
(X1) gỡ nhầm `hmw-mode.on`/BƯỚC 0.5/`ultra-*` — HỆ KHÁC (HMW fan-out consent, evidence: ultra-on/off grep `fable`=0) · (X2) sửa session-log/verbatim archive · (X3) rewrite runbook toàn bộ · (X4) worker Write file NGOÀI phạm-vi giao · (X5) tự stamp/sửa mark · (X6) quên restart-CLI note → chạy semantics cũ · (X7) đổi code hmw.js (chỉ comment) · (X8) claim "code-enforced" (note a cấm) · (X9) xóa gitignore pattern (file cũ sync lại → commit → semantics-ma).
## Mục 3 — Checklist thực hiện
| # | Vai | Deliverable | Acceptance (đo được) |
|---|---|---|---|
| 1 | em-main | Xóa marker + `.gitignore:89-91` comment 🧊 | `Test-Path .claude/fable-real-mode.on` = False; `git check-ignore` vẫn IGNORED |
| 2 | worker-opus-1 (edit-direct) | Redesign 2 command file (D1) + honest-note a/b | grep `Write.*marker\|Remove-Item` 2 file = 0 dòng ACTIVE; `<vai>` bắt buộc documented; "hỏi lại anh" present |
| 3 | worker-opus-1 (edit-direct) | session-start BƯỚC 0.5b reword (D4) + BƯỚC 0.6 MTv3 (D7) | grep "Marker TỒN TẠI" vùng 0.5b = 0; grep "tự về" BƯỚC 0.6 = 0; "ĐÚNG 1 DÒNG" ≥ 1; BƯỚC 0.5 HMW untouched |
| 4 | worker-opus-2 (edit-direct) | engine §K banner + K.A/K.B/K.D point-edit + K.E mới (D5) | 4 note a-d grep-được; K.D point-1 = "frontier-class owner-choice"; văn cũ còn nguyên kèm 🧊 |
| 5 | worker-opus-3 (edit-direct) | runbook ~20 point-edit (D6) | grep `Test-Path .claude/fable-real-mode.on` ngoài khối-🧊/history = 0; title có banner H21 |
| 6 | em-main | STATUS/HANDOFF S110 (D12) @closeout | HANDOFF NEXT-anh hết "/fable-clone nếu muốn về ảo"; blurb S110 chứa "per-invocation" |
| 7 | em-main | Triage-S5 caveat 3 file (D9) | grep "ENV-DEPENDENT" ≥1 hit mỗi file |
| 8 | em-main | hmw.js:38 comment (D10) | grep "khi hệ-trọng" hmw.js = 0; `node --check` OK |
| 9 | em-main (nằm trong D5/K.E) | Spec-template + naming codify | Template 3-heading grep-được trong engine K.E |
| 10 | em-main | 2 adap-report + 3 supersede-note + email + đề-xuất mark (D8/D11) | 2 report mới có hash-verify; ACTIVE-MARKS row cũ CHƯA đổi (chờ anh); AskUserQuestion đã trình |
| 11 | reviewer **Fable-real** (vai anh gán trong lệnh) | Cổng-cuối sweep 2-đầu-khác-trục: grep-suite token-cũ ACTIVE=0 + 4-note present + boundary hmw nguyên + spec-compliance + biên-case (vai sai/thiếu → hỏi anh?) | Verdict PASS/FAIL kèm evidence; hmw-mode.on + BƯỚC 0.5 untouched |
| 12 | em-main | Restart-CLI note cho anh | HANDOFF NEXT-anh có dòng restart |
**Map sàn-5-điểm H21 §6:** (1) spec-file 3-mục → #9+D2 · (2) worker theo spec → D2 pipe-args · (3) chỉ chạy khi owner gõ → D1 · (4) vai owner gán đích-danh → D1 · (5) lead không tự gọi → D1+D10+AP-mới-runbook.