[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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,6 @@
# adap-report — 2026-07-03-Agent-harness-19-fable-clone (SE)
> ⚠️ **H21 supersede-partial (S110, 2026-07-11):** marker-toggle `.claude/fable-real-mode.on` + 2-vai-verdict-mặc-định ghi trong report này = **RETIRED** → per-invocation `/fable-real|/fable-clone <vai> <đề-bài>` (owner gõ kèm vai + spec-file 3-mục mỗi run). Xem `2026-07-10-Governance-harness-21-spec-file-invocation.md` (adap-reports). Định-nghĩa 2 engine + ký-ức-đổ-về-đúng-vai + guard K.C GIỮ NGUYÊN. Body dưới = record lịch-sử S101, giữ nguyên văn.
> **Broadcast:** `2026-07-03-Agent-harness-19-fable-clone.md` (outbox/all AI_INFRA). **Adopt S101 (2026-07-03), anh-directed** (`/check-email AI_INFRA` → `/adap-apply` → AskUserQuestion "Formal adopt + RC-stamp" + "full 2-workflow").
> **Integrity gate:** `content_sha256` re-compute = `6909299a…` **MATCH ✓** (canonical split-frontmatter + strip-1-leading-newline + SHA256-UTF8). Frontmatter **có `reviewer_gate: PASS`** (format-regression H18 — thiếu field — đã được sửa; cả 4 broadcast đợt 07-03 đều mang field). `supersedes_scope: extend` (thêm cơ-chế ensemble cho 2 vị-trí phán-quyết; KHÔNG supersede floor "lead luôn top-model").
> **Harness-9 mandate 2-workflow:** WF1 investigate **`wf_5f308fd8-744`** (3 lane: wiring + mapping + adversarial-critique → SOUND_WITH_CONCERNS, tự bắt 3 floor-fidelity gap; run bị mất theo session-interruption rồi resume-cached) + WF2 review **`wf_ed5b972f-a4d`** (→ **PASS_WITH_CONCERNS** 0-BLOCKING: Lane-A mechanism PWC [1 CONCERN marker write-only no-reader → FIXED S101 session-start BƯỚC 0.5b reader] · Lane-B gov-record PASS [RC-mark 3-floor verbatim + vacuous-honest] · Lane-C adap-honesty PASS [4 broadcast hash MATCH indep-recompute + model-tier 12/12 + no-overclaim]). ⚠️ **GAP-3 AS-10 fired LIVE** trong WF2 — reviewer-lanes tự-ghi `reviewer/MEMORY.md` dù RETURN-only-intent (harness "intentional" → KEPT + verified) → dogfood-validate §K.C "GAP-3 = convention KHÔNG mechanism" ngay trong lúc review chính bản codify GAP-3.

View File

@ -1,4 +1,5 @@
# adap-report — 2026-07-03-Governance-checklist-model-tier (SE)
> ⚠️ **MTv3 delta A1/A2 (S110, 2026-07-11):** checklist bundle này nhận 2 mục sửa từ model-tier-v3 — **A1:** lead = hạng-hai do owner chọn → cũng PASS (không chỉ "hạng-nhất hoặc outage-fallback") · **A2:** nghĩa-vụ "revert khi top-model về" CHỈ áp path outage; owner-choice KHÔNG có nghĩa-vụ revert. Xem `2026-07-11-Governance-model-tier-v3-lead-owner-choice.md` (adap-reports). Body dưới = record lịch-sử S101.
> **Broadcast:** `2026-07-03-Governance-checklist-model-tier.md` (`content_sha256` re-compute `a7ff304b…` **MATCH ✓**, `reviewer_gate: PASS`). Checklist 12-point đi kèm model-tier bundle 07-03.
> **Verdict:** self-verify = **12/12 (10 actively-met + A4-A6 N/A-by-valid-form all-inherit)** — chi tiết per-item + grep-evidence ở report chính bundle này: **`2026-07-03-Governance-model-tier-fable-opus.md`**. Điểm cần nhớ: C3 `[1m]` = 0 (frontmatter-scoped awk; naive `grep [1m]` cho 4 hit PROSE = false-positive → codify frontmatter-scoped idiom). Không mục A nào thiếu → **đạt sàn**.

View File

@ -1,5 +1,6 @@
# adap-report — 2026-07-03-Governance-model-tier-v2-pin-simple (SE)
> ⚠️ **MTv3 supersede-partial (S110, 2026-07-11):** khoản v2 "(a) lead LUÔN top-model" trong report này → reword "lead = frontier-class owner-choice per-session {Fable 5 | Opus 4.8 — 1M MAX}; CẤM Sonnet/Haiku-class ghế lead" + owner-chọn-hạng-hai ≠ outage (0 caveat/0 revert-nghĩa-vụ). Xem `2026-07-11-Governance-model-tier-v3-lead-owner-choice.md` (adap-reports). Body dưới = record lịch-sử S101, giữ nguyên văn.
> **Broadcast:** `2026-07-03-Governance-model-tier-v2-pin-simple.md` (`content_sha256` re-compute `eed277f7…` **MATCH ✓**, `reviewer_gate: PASS`, `supersedes_scope: none`). Update nhẹ FORM nội-bộ AI_INFRA, **KHÔNG mandate** ("các đội KHÔNG bắt buộc làm theo").
> **Verdict: n-a-by-form-choice (đạt sàn qua form khác).** v2 "pin đơn giản" (mọi sub gán-cứng tier-2 dưới lead + drop reviewer-độc-lập ở cửa-ra, thay bằng cổng-máy + lead-phán-quyết-cuối) = **một form-option**. SE **KHÔNG áp** — giữ **all-inherit** vì owner-directive S66 ("chất-lượng trên chi-phí" — SE không có lớp helper/gopher rẻ để chừa) + mark `RC-…10-29-09` (cấm bác chức-năng bằng "overkill solo-dev").
>

View File

@ -0,0 +1,24 @@
# adap-report — 2026-07-10-Governance-harness-21-spec-file-invocation (SE)
> **Broadcast:** `2026-07-10-Governance-harness-21-spec-file-invocation.md` (outbox/all AI_INFRA). **Adopt S110 (2026-07-11), anh-directed** (`/check-email AI_INFRA` + lệnh anh nguyên văn: `"/fable-real inves và review — chủ đề các vấn đề trong email nhận được. hmw cho đám Opus 4.8 MAX xử lý"` — chính lệnh này ĐÃ đúng khung H21: owner gõ + vai đích-danh + worker hạng-hai).
> **Integrity gate:** whole-file `Get-FileHash` copy==nguồn ✓ + body `content_sha256` re-compute `19cc954b…` **MATCH ✓** (canonical split-frontmatter + strip-1-leading-newline + SHA256-UTF8). `reviewer_gate: PASS-WITH-FIXES` (gate-outward AI_INFRA WF-3 `wf_61e7fc76`). `supersedes_scope: partial` (trên H19 "model ảo ensemble" — 2 khoản thay: 2-vai-cố-định + mode-switch; định-nghĩa 2 engine + ký-ức-đúng-vai + chất-lượng GIỮ).
> **Harness-9 mandate 2-workflow + engine-đắt lượt này:** invest = **investigator-codebase Fable-real single-deep-pass** (spawn-direct; ⚠️ #53-garble → SendMessage-resume recover, verdict PASS đầy đủ) → lead verify + ghi **spec-file 3-mục** `.claude/workflows/runs/2026-07-11-h21-mtv3-adopt/spec-h21-mtv3-adopt-11-07-2026.md` (dogfood khoản-① NGAY lượt adopt — run-1) → WF implement **`wf_0c3b307f-a64`** (3 worker **Opus 4.8 MAX** `model:'opus'` edit-direct, 3/3 DONE 0-error schema-clean) → review = **reviewer Fable-real single-deep-pass** (⚠️ #53-garble lần 2 → SendMessage-resume recover) → **PASS_WITH_FIXES** (0 Critical · 5 Major M1-M5 · 9 minor) → em-main fix trọn M1-M4 + minors cùng phiên, M5 = chính file này + file MTv3 (khớp filename đã cite trong 3 supersede-note).
## Nấc per-khoản (G-011: agreed / executed / verified)
| Khoản (sàn 🔴) | Nấc | Evidence |
|---|---|---|
| **① Spec-file 3-mục mỗi run engine-đắt** (engine propose-only → lead verify → LEAD ghi → worker theo spec) | **executed + dogfood run-1 CÙNG LƯỢT** | Template + pipeline codify `harness-11-engine.md §K.E(ii)`; 2 command `fable-real.md:25-32` / `fable-clone.md:23-30`; runbook §2.1-bis; spec thật `runs/2026-07-11-h21-mtv3-adopt/spec-h21-mtv3-adopt-11-07-2026.md` (3-heading, provenance ghi rõ engine-propose → lead-verified-2-chỉnh → lead-ghi) |
| **② Owner-gõ-kèm-vai; BỎ mode-marker + BỎ 2-vai-cố-định; lead không tự ý** | **executed** | Marker `.claude/fable-real-mode.on` **ĐÃ XÓA** (Test-Path=False; `.gitignore:92` giữ pattern phòng-hờ + comment 🧊); 2 command redesign per-invocation `<vai> <đề-bài>` (vai ∈ roster 12, thiếu/sai → hỏi anh); session-start BƯỚC 0.5b reword reader-H21; engine K.A/K.B/K.D 🧊-supersede + K.E mới; runbook ~30 point-edit ($mode→$engine/INVOCATION, AP-4-mới "chạy ngoài lượt-lệnh = vi phạm") |
| **4 ghi-chú trung-thực a-d** | **executed (hiện diện đủ)** | K.E(iii) 4 note nguyên ý; `fable-real.md:22-23,31-32` + `fable-clone.md:21,29-30`; runbook §2.1-bis note-block. (a) giữ đúng nấc "owner-gated tầng lệnh + kỷ-luật lead, KHÔNG code-enforced" — grep "code-enforced" toàn bộ = phủ-định |
| **Migration khoản 5** (gỡ marker · grep token cũ toàn repo kể cả persona) | **executed + reviewer-verified** | 12 persona `.claude/agents/*.md` = **0 hit** (SẠCH — ngược bài học hub "chỗ sót ở persona phụ"); grep-suite post-fix: `Test-Path` marker 4/4 hit đều dòng-🧊, "LUÔN top-model" ACTIVE=0; HISTORY (session-log/archive/diary/adap-report-body-cũ/dogfood-form S108) giữ nguyên văn |
| **Sàn 5-điểm §6** | **executed 5/5** | Reviewer Fable bảng-đối-chiếu: ①spec-file ✓ ②worker-theo-spec (bơm args, `hmw.js` không đọc file) ✓ ③chỉ-chạy-khi-owner-gõ ✓ ④vai-owner-gán ✓ ⑤lead-không-tự-ý (kể cả HMW-ON; `hmw.js:38-40` comment reword `tier:'fable'` chỉ trong lượt lệnh) ✓ |
## Tailored / phát-hiện-riêng / honest-caveat
- **Tailored form:** giữ TÊN 2 lệnh cũ `/fable-real|/fable-clone` (= lệnh-A/lệnh-B; H21 §6 "tên lệnh tự quyết") — đổi semantics toggle→per-invocation; spec-file đặt trong run-trace H10 sẵn có (`.claude/workflows/runs/<run-id>/` git-TRACKED → owner audit qua git, đúng mục-đích khoản ①); naming `spec-<tên-tính-năng>-<dd-mm-yyyy>.md`.
- **Phát-hiện-riêng #1 (boundary-gap M2):** lệnh-B × 2 vai monitor (`tooling-auditor`/`harvest-curator`) — 2 vai ∉ `hmw.js` VALID_ROLES (10) → ensemble fail-soft **default-subagent mất persona** (H19 2-vai-cố-định che edge này; roster-12 promise mở ra mới lộ). Xử: document limitation ở `fable-clone.md` + K.E(i); bổ sung VALID_ROLES = đổi code, **chờ anh quyết** (không tự sửa trong đợt docs-only).
- **Phát-hiện-riêng #2 (worker-đổi-fact M1):** worker Opus khi reword tự đổi "10 vai"→"12 vai" trong câu mô tả VALID_ROLES = sai fact code — reviewer Fable bắt, em-main fix. Lesson: worker-draft đụng CON SỐ về code → cross-check code thật trước commit.
- **Phát-hiện-riêng #3 (sweep-theo-token mù semantics M3):** acceptance "grep `Test-Path` ngoài 🧊 = 0" PASS trong khi ~16 cụm semantics-cũ chưa-đánh-dấu vẫn sống (nặng nhất: P5 "2 vai EXCLUDED" mâu thuẫn ROLE_VALID roster-12 TRONG CÙNG checklist) — đúng lớp lỗi broadcast §5 cảnh báo, bắt bởi reviewer-Fable đọc-semantics (không phải grep). Fix point-edit trọn.
- **Honest-caveat:** (i) "lead không tự ý" = **kỷ-luật + owner-gated tầng lệnh, KHÔNG code-enforced**`hmw.js` không gate vai, đường `tier:'fable'` còn nguyên (đúng note-a broadcast); (ii) dogfood = **run-1 duy nhất** (chính lượt adopt này) — chưa có số-liệu N-run pipeline spec→worker (không claim); (iii) command `.md` sửa = **restart CLI mới ăn runtime** (registry hot-reload description ĐÃ thấy giữa phiên nhưng body-execution chưa re-verify — đồng bộ caveat ENV-DEPENDENT triage-S5); (iv) mark `RC-…17-46-35` (H19) = quyền anh — em đề xuất mark mới supersede, **CHƯA stamp, chờ anh** (P8).
- **#53 return-garble ×2 trong CHÍNH lượt này** (cả invest lẫn reviewer Fable-lane — đúng correlation reasoning-lane adap-request `2026-07-06-se-53-garble…`): **SendMessage-resume recover 2/2 sạch** — data-point mới củng cố mitigation-set đã gửi hub (S6 triage-reply đã ACCEPT codify).

View File

@ -0,0 +1,22 @@
# adap-report — 2026-07-11-Governance-model-tier-v3-lead-owner-choice (SE)
> **Broadcast:** `2026-07-11-Governance-model-tier-v3-lead-owner-choice.md` (outbox/all AI_INFRA) + notify directed `2026-07-11-ai_infra-to-se-notify-model-tier-v3`. **Adopt S110 (2026-07-11)** cùng đợt H21 (chung pipeline: invest-Fable → spec → WF `wf_0c3b307f-a64` worker-Opus → reviewer-Fable PASS_WITH_FIXES → fix trọn).
> **Integrity gate:** whole-file hash copy==nguồn ✓ ×2 + body `content_sha256` re-compute `1b3aa909…` (broadcast) / `a979743…` (notify) **MATCH ✓**. `reviewer_gate: PASS-WITH-FIXES` (review-wf AI_INFRA `wf_3556e539`). `supersedes_scope: partial` (model-tier-v2 khoản "main duy nhất hạng nhất" + đuôi floor "main luôn top-model" + checklist delta A1/A2; sub-gán-cứng + helper + engine-đắt per-invocation GIỮ).
## Nấc per-vế (G-011)
| Vế broadcast | Nấc | Evidence |
|---|---|---|
| **§1.1 lead = owner-choice per-session {hạng-nhất \| hạng-hai 1M MAX}, đổi giữa phiên hợp lệ (ghi 1 dòng)** | **executed** | `session-start.md` BƯỚC 0.6 reword (owner-choice chính-thức + session-record 1 dòng); `fable-real.md:35` + `fable-clone.md:38` floor-line; engine K.D(1) reword; runbook `:165/:483` + bảng biến lead-runtime "owner-choice CHÍNH + outage-path PHỤ" |
| **§1.2-1.3 sub hạng-hai gán cứng; đường duy nhất nâng hạng-nhất = engine-đắt per-invocation** | **n-a-by-form-choice (đạt sàn qua form khác) — hub ĐÃ WAIVE ĐÍCH DANH** | Triage-reply S2 nguyên văn: *"không đổi gì với form all-inherit của bạn; function-floor mới chỉ CẤM Sonnet/Haiku-class ở ghế lead, còn danh sách sub là form tự quyết"* (`inbox/ai_infra/2026-07-11-ai_infra-to-se-triage-reply-s1-s6.md:22`). SE giữ **H8 all-inherit** (owner-directive S66, mark `RC-…10-29-09`). Vế "đường duy nhất nâng vai" vẫn ÁP: `hmw.js:38-40` comment `tier:'fable'` chỉ trong lượt lệnh engine-đắt |
| **§2 owner-choice ≠ outage (0 caveat/0 revert-nghĩa-vụ); outage chỉ khi resolve-error thật; 1-line-ask phiên đầu sau outage đóng** | **executed** | BƯỚC 0.6: bỏ "Fable UP → tự về" (auto-revert) → "hỏi anh ĐÚNG 1 DÒNG, 1 lần"; flip-record gắn nhãn {owner-choice\|outage}; H5-fallback outage-path GIỮ nguyên |
| **§3 floor reword "lead = frontier-class owner-choice; CẤM Sonnet/Haiku-class ghế lead"** | **executed** | K.D(1) + runbook `:165/:483` + 2 command; văn cũ "lead LUÔN top-model" giữ 🧊-strikethrough (L.B không rewrite) |
| **§4 checklist delta A1/A2** | **executed (note-supersede)** | Header-note lên `adap-reports/2026-07-03-Governance-checklist-model-tier.md` (A1 hạng-hai-owner-chọn cũng PASS · A2 revert-nghĩa-vụ chỉ outage-path) |
| **§5 self-check regex** | **executed — 0-hit regex + 5 hit cụm-khác ĐÃ SỬA** | Regex chính thức chạy nguyên văn = 0 hit; grep mở rộng "LUÔN/luôn top-model" bắt 5 ACTIVE (engine K.D:332 · runbook :140/:455 · fable-real.md:17 · session-start 0.6) → sửa hết; post-fix ACTIVE=0 (reviewer-Fable verify). **Data-point cho fleet: "0-hit regex ≠ xong" — caveat §5 broadcast là THẬT trên SE** |
## Tailored / honest-caveat
- **Đã diễn ra trên SE trước khi adopt (data-point live):** chính phiên S110 lead = Fable do... availability, nhưng flip-chain S98→S109 trước đây dán nhãn "outage-driven" toàn bộ — từ nay BƯỚC 0.6 gắn nhãn {owner-choice|outage} từng flip; lịch-sử cũ GIỮ nguyên (không truy-ngược re-label).
- **ACTIVE-MARKS `RC-…17-46-35` floor-point-1 "lead LUÔN top-model"** = văn mark anh đã ký → em **KHÔNG tự sửa** (P8); đề xuất mark MỚI (H21+MTv3 gộp, supersede row cũ → 📦) trình anh cùng phiên — chưa stamp.
- **Trade-off ghi MỘT LẦN (broadcast §3):** phiên lead=hạng-hai thì cổng-rà-soát-cuối của lead chạy hạng-hai — machine-gates (selftest-stamp, path-filter, test-gate 440, detector) GIỮ nguyên; revisit-trigger kế thừa: lỗi outward lọt cổng ≥2 lần → anh re-eval.
- **Model mới cùng lớp:** owner xác nhận thuộc frontier-class TRƯỚC khi ngồi ghế lead — AI không tự suy (đã nằm trong BƯỚC 0.6 reword).

View File

@ -1,25 +1,29 @@
# FABLE-REAL RUNBOOK — vận hành H19 thật/ảo cho 2 vị-trí phán-quyết (reviewer · investigator-codebase)
# FABLE-REAL RUNBOOK — vận hành engine-đắt per-invocation (H21 S110; gốc H19 thật/ảo 2 vị-trí)
> **Tầng:** RUNBOOK thi-hành ("cách bấm nút"). **LUẬT** = engine [`harness-11-engine.md` PHẦN K](harness-11-engine.md) (K.A ánh-xạ vai · K.B 2-mode · K.C 3 GAP-guard · K.D 3 floor-point) + RC-mark `RC-pqhuy1987-03-07-2026-17-46-35` ([`ACTIVE-MARKS.md`](../../.claude/governance/ACTIVE-MARKS.md)). **B1: file này TRỎ canonical, KHÔNG copy luật.**
> ⚠️ **H21 adopt S110 (2026-07-11):** mode-marker + 2-vai-mặc-định **RETIRED** → **per-invocation** engine-đắt chỉ chạy trong lượt anh gõ `/fable-real`\|`/fable-clone <vai> <đề-bài>`; vai anh gán đích-danh; mỗi run sinh **spec-file 3-mục** (engine propose → lead verify+ghi → worker theo spec). Các mục marker/`$mode` dưới = 🧊 lịch-sử H19 (giữ nguyên văn); biến-đọc MỚI = **INVOCATION**{lệnh, vai, đề-bài} từ chính lượt lệnh (§2.1-bis). *Neo model-tier-v3: lead = frontier-class anh chọn per-session {Fable 5 \| Opus 4.8 — 1M MAX}.*
> **Tầng:** RUNBOOK thi-hành ("cách bấm nút"). **LUẬT** = engine [`harness-11-engine.md` PHẦN K](harness-11-engine.md) (K.A ánh-xạ vai · K.B 2-mode 🧊 · K.C 3 GAP-guard · K.D 3 floor-point · **K.E per-invocation H21**) + RC-mark `RC-pqhuy1987-03-07-2026-17-46-35` ([`ACTIVE-MARKS.md`](../../.claude/governance/ACTIVE-MARKS.md)). **B1: file này TRỎ canonical, KHÔNG copy luật.**
> **Sinh S108 (2026-07-10), anh yêu cầu "plan cụ thể hàm/biến/checklist → ra file":** draft 4-section bởi 4 worker Opus 4.8 Max (HMW mode-A `wf_2f85b3f6-3dc`, role-less tier-2 — đúng phân-tầng "đám Opus xử lý") → em-main assemble + sửa 8 stale-runtime-claim (6 đợt-assemble + 2 reviewer-catch §3.5/§4.3) (worker tin comment `hmw.js:31` snapshot cũ "Fable suspended" — S108 thật ra Fable UP) → **Fable-real review 2-đầu-khác-trục** (first-real-run dogfood §5.5, verdict điền form).
> **Đối-tượng đọc:** em-main (lead) các phiên sau — file này đủ để bấm đúng nút không cần đọc lại broadcast gốc.
## 1. DÙNG NHANH (5 phút)
1. **Đọc marker:** `Test-Path .claude/fable-real-mode.on` → CÓ = **real** · VẮNG = **clone** (⚠️ semantic INVERSE vs hmw-mode — §2.1).
1. **Xác định engine (lượt lệnh):** từ TÊN LỆNH anh vừa gõ lượt này — `/fable-real` = **real-single** · `/fable-clone` = **clone-ensemble**; KHÔNG còn marker để đọc (🧊 H19 retired — §2.1-bis).
2. **Probe lead-runtime** (BƯỚC 0.6, per-session): Fable hay Opus-1M(H5)? — quyết engine-label + cost-note, KHÔNG quyết mode.
3. **Chọn lane** (R1 §5.2): cần SỰ-THẬT/file:line/RCA → `investigator-codebase` (§3) · cần PHÁN-QUYẾT gate/adversarial → `reviewer` (§4) · artifact hệ-trọng (governance-doc, email outward, supersede-sweep) → **CẢ 2 song-song** (2-đầu-khác-trục).
4. **Spawn:** REAL (marker CÓ + anh đã`/fable-real`) = Agent-tool LẺ 1 con (§3.2/§4.2 template) · CLONE (default) = `hmw.js` N-lane **CÙNG vai** (§3.3/§4.3 JSON).
3. **Vai = ANH GÁN trong lệnh** (H21 — INVOCATION, KHÔNG phải em-main chọn): §3/§4 dưới = template 2 vai tham-chiếu hay-gán-nhất (cần SỰ-THẬT/file:line/RCA → `investigator-codebase` §3 · cần PHÁN-QUYẾT gate/adversarial → `reviewer` §4); artifact hệ-trọng → em-main ĐỀ XUẤT anh gõ CẢ 2 (2-đầu-khác-trục), anh quyết.
4. **Spawn:** REAL (lượt anh gõ `/fable-real <vai>`) = Agent-tool LẺ 1 con (§3.2/§4.2 template) · CLONE (lượt anh gõ `/fable-clone <vai>`) = `hmw.js` N-lane **CÙNG vai** (§3.3/§4.3 JSON). *(🧊 H19: cũ đọc marker — nay per-invocation, §2.1-bis.)*
5. **Thu verdict** (dòng-1 `VERDICT:`/`Verdict:` — chống #53; garble → recover 3-nấc R5: diary → SendMessage-resume → em-main solo) → em-main **VERIFY** (V1, không rubber-stamp) → **harvest 1-entry/vai + `[engine: …]` stamp** (V3/V4) → **AC-check 8 tiêu-chí** (§5.4) → commit.
## 2. WIRING — marker, biến hệ thống, hàm hmw.js, 3 GAP-guard
> Engine `harness-11-engine.md §K` = **LUẬT** (Harness-19). Section này = **cách bấm nút** (wiring thi hành ngay), KHÔNG lặp lý-lẽ canonical. Mọi biến có TÊN·KIỂU·NGUỒN; mọi bước có lệnh/hàm chạy được; checklist đánh-tick kèm evidence-form.
> Engine `harness-11-engine.md §K` = **LUẬT** (Harness-19 + K.E per-invocation H21). Section này = **cách bấm nút** (wiring thi hành ngay), KHÔNG lặp lý-lẽ canonical. Mọi biến có TÊN·KIỂU·NGUỒN; mọi bước có lệnh/hàm chạy được; checklist đánh-tick kèm evidence-form.
---
### 2.1 — MARKER lifecycle: `.claude/fable-real-mode.on`
> 🧊 **Section này = lịch-sử H19 (retired H21 S110)** — marker đã xóa; giữ nguyên văn làm record. Lifecycle MỚI = **INVOCATION** (§2.1-bis dưới).
**Đường dẫn (KIỂU: file marker — nội-dung tùy ý, KHÔNG đọc):** `.claude/fable-real-mode.on` — CHỈ xét tồn-tại/vắng.
🔴 **Semantic INVERSE (bẫy — khác hmw-mode.on):**
@ -35,8 +39,10 @@
| Lệnh | Hành-động em-main | Nguồn |
|---|---|---|
| `/fable-real` | `Write` file `.claude/fable-real-mode.on` (bật thật) | `fable-real.md:10` |
| `/fable-clone` | `Remove-Item .claude/fable-real-mode.on` (về ảo; vắng sẵn → "đã ở ảo-mode") | `fable-clone.md:8` |
| 🧊 `/fable-real` (H19) | `Write` file `.claude/fable-real-mode.on` (bật thật) | `fable-real.md:10` |
| 🧊 `/fable-clone` (H19) | `Remove-Item .claude/fable-real-mode.on` (về ảo; vắng sẵn → "đã ở ảo-mode") | `fable-clone.md:8` |
| `/fable-real <vai> <đề-bài>` | lệnh-A single top-model (per-invocation, H21 — 0 marker, 0 persist) | `fable-real.md` (H21 redesign) |
| `/fable-clone <vai> <đề-bài>` | lệnh-B ensemble tier-2 (per-invocation, H21 — 0 marker, 0 persist) | `fable-clone.md` (H21 redesign) |
**Verify gitignored (BẮT BUỘC — commit marker → thật-mode STUCK-ON = burn quota top-model):**
@ -47,7 +53,9 @@ git check-ignore -v .claude/fable-real-mode.on && echo "IGNORED" || echo "NOT-ig
Rule gitignore neo tại **`.gitignore:92`** (`.claude/fable-real-mode.on`), đặt SAU `!.claude/**` để last-match-wins (`.gitignore:89-92`). Idiom `&& IGNORED || NOT` = lá-chắn: bất-kỳ output KHÁC "IGNORED" ⇒ DỪNG, KHÔNG toggle.
**Reader @session-start (BƯỚC 0.5b — đóng gap WF2-Lane-A "marker write-only"):** `session-start.md:27-33` — em-main đọc marker → BÁO ngay đầu response mode 2 vị-trí (`reviewer` + `investigator-codebase`). Không có reader = marker mù; bước này = consumer chính-thức.
> 🧊 Idiom marker chỉ còn giá-trị **phòng-hờ** (pattern `.gitignore:92` GIỮ — file cũ sync lại vẫn ignored, KHÔNG semantics H21).
**Reader @session-start (BƯỚC 0.5b — đóng gap WF2-Lane-A "marker write-only"):** `session-start.md:27-33` — em-main đọc marker → BÁO ngay đầu response mode 2 vị-trí (`reviewer` + `investigator-codebase`). Không có reader = marker mù; bước này = consumer chính-thức. *(🧊 cite = bản H19 cũ; BƯỚC 0.5b nay = reader per-invocation H21, không còn marker.)*
**☑ Checklist marker:**
- [ ] Toggle CHỈ khi anh gõ lệnh (KHÔNG số-dư/cảm-tính) — evidence: đối-chiếu `§K.B:325` + `fable-real.md:17`
@ -57,16 +65,33 @@ Rule gitignore neo tại **`.gitignore:92`** (`.claude/fable-real-mode.on`), đ
---
### 2.1-bis — INVOCATION lifecycle (H21 S110 — thay MARKER lifecycle §2.1)
> **Biến-đọc MỚI = INVOCATION{lệnh, vai, đề-bài}** — derive từ CHÍNH lượt lệnh anh gõ, KHÔNG file-state, **0 persist** (hết lượt = hết hiệu-lực, khác marker cũ dính qua session).
1. **Anh gõ lệnh** kèm vai + đề-bài: `/fable-real <vai> <đề-bài>` (single top-model) HOẶC `/fable-clone <vai> <đề-bài>` (ensemble tier-2).
2. **Parse** `{lệnh, vai, đề-bài}` từ `$ARGUMENTS` lượt đó — KHÔNG suy từ note/marker phiên trước.
3. **Vai ∉ roster 12 HOẶC thiếu vai/đề-bài****hỏi anh ĐÚNG 1 dòng, KHÔNG tự chọn vai** (owner-gated tầng lệnh + kỷ-luật lead — **KHÔNG code-enforced**).
4. **Chạy engine-đắt ĐÚNG 1 lượt** — lead KHÔNG tự gọi ngoài lượt-lệnh (kể cả HMW-mode ON, kể cả "thấy cần" — AP-4-mới §5.6).
5. **Engine propose → LEAD verify → LEAD tự ghi spec-file 3-mục** [① Tính-năng/đề-bài · ② Cách implement · ③ Checklist vai+deliverable+acceptance đo-được] — **engine KHÔNG tự ghi**.
6. **Worker (model thường MAX) thực-thi THEO spec** bơm qua args.
7. **Hết lượt = hết hiệu-lực** — 0 trạng-thái persist.
> ⚠️ **4 ghi-chú trung-thực (H21):** (a) "không tự chọn vai" = tầng **KỶ-LUẬT owner-gated**, KHÔNG claim code-enforced; (b) lệnh/alias = cách anh **GÁN VAI NHANH**, vẫn phải anh gõ — hệ không tự chọn vai; (c) spec-file do **LEAD ghi SAU verify** — engine không tự ghi; (d) run **chấm/verify CŨNG sinh spec-file** (kế-hoạch xử issue = "cách làm" cần kết-tinh).
---
### 2.2 — Bảng biến hệ thống (TÊN · KIỂU · NGUỒN · giá-trị)
| # | Biến | KIỂU | NGUỒN (file:line / lệnh đọc) | Giá-trị / ngữ-nghĩa |
|---|---|---|---|---|
| 1 | **marker-state** | boolean (file tồn-tại?) | `.claude/fable-real-mode.on` · reader `session-start.md:29` | CÓ=real · VẮNG=clone(default) |
| 2 | **lead-runtime** | enum `{Fable-5-1M · Opus-4.8-1M}` | **BƯỚC 0.6 probe** `session-start.md:35-37` (`/model` resolve / spawn-test) | **per-session, outage-driven**; KHÔNG tin note phiên trước, KHÔNG steady-state |
| 3 | **tier** (per-task) | `'fable' \| 'opus' \| undefined` | `hmw.js:18` (field taskList) + `resolveModel hmw.js:38` | `undefined`=inherit top-tier (clone mặc-định) · `'opus'`=pin tier-2 sweep/cost · `'fable'`=force lead-tier hệ-trọng |
| 1 | 🧊 **marker-state** (H19 retired) | boolean (file tồn-tại?) | `.claude/fable-real-mode.on` · reader `session-start.md:29` | 🧊 CÓ=real · VẮNG=clone(default) — retired H21 |
| 1b | **$engine** (H21) | enum `{real-single, clone-ensemble}` | derive từ TÊN LỆNH lượt này (`/fable-real`\|`/fable-clone`) — KHÔNG file-state (INVOCATION §2.1-bis) | thay marker-state; INVOCATION-derived, 0 persist |
| 2 | **lead-runtime** | enum `{Fable-5-1M · Opus-4.8-1M}` | **BƯỚC 0.6 probe** `session-start.md:35-37` (`/model` resolve / spawn-test) | **per-session — owner-choice CHÍNH** (MTv3: anh chọn mỗi phiên, đổi giữa phiên OK, 0 caveat/0 revert-nghĩa-vụ) + outage-path PHỤ (H5); KHÔNG tin note phiên trước, KHÔNG steady-state |
| 3 | **tier** (per-task) | `'fable' \| 'opus' \| undefined` | `hmw.js:18` (field taskList) + `resolveModel hmw.js:38` | `undefined`=inherit top-tier (clone mặc-định) · `'opus'`=pin tier-2 sweep/cost · `'fable'`=nâng lead-tier **CHỈ trong lượt lệnh engine-đắt anh gõ** (H21 — lead KHÔNG tự ý) |
| 4 | **checkpointApproved** | boolean | `hmw.js:77-79` (THROW nếu ≠true) | em-main set `true` SAU khi BÁO {số agent·vai·task} @inform → fan-out |
| 5 | **taskList[]** | `Array<{role,label,prompt,tier?}>` | `hmw.js:18` + `:71-72` (bắt buộc, non-empty) | mảng lane; **clone = N item CÙNG 1 role** |
| 6 | **role / agentType** | `VALID_ROLES \| undefined` | `hmw.js:22-28` (whitelist) + `:100` (filter) + `:139` (`agentType`) | 2 vị-trí phán-quyết ⊂ 10: **`reviewer`** hoặc **`investigator-codebase`** |
| 6 | **role / agentType** | `VALID_ROLES \| undefined` | `hmw.js:22-28` (whitelist) + `:100` (filter) + `:139` (`agentType`) | vai engine-đắt = **anh gán** (H21, mọi vai roster 12; §3/§4 template = `reviewer` · `investigator-codebase`); ⚠️ 2 monitor ∉ VALID_ROLES(10) → lệnh-B fail-soft default-subagent (limitation K.E) |
| 7 | **memoryPack** | `Record<role, slice>` | `hmw.js:15,85,103,125` | SLICE `MEMORY.md` của đúng vai (KHÔNG full) → inject prompt |
| 8 | **spec** | string | `hmw.js:16,86,126` | acceptance chung mọi lane |
| 9 | **run** (alias `wave`) | `{name,dir} \| null` | `hmw.js:19,92-93` | `null`=return-delta-only (mặc-định) · set=RUN-TRACE (sub ghi `sub-<role>-<i>.md`) |
@ -90,8 +115,8 @@ role có frontmatter → return undefined // H8 all-inherit top-tier (
| Việc | Cơ-chế | Lệnh / param chạy được | Khi nào dùng |
|---|---|---|---|
| **Clone ensemble** (N lane CÙNG vai) | `hmw.js parallel` (`:98`) → `agent()` (`:138-143`) | JSON args bên dưới — `taskList` = N item cùng `role` | Mặc-định (marker VẮNG) + heavy-judgment 1 trong 2 vị-trí |
| **Real single** (1 deep pass) | **Agent-tool spawn LẺ** (1 agent) | `agentType: "reviewer"` \| `"investigator-codebase"`, prompt deep-pass; model = lead-runtime (inherit) | Marker CÓ (anh gõ `/fable-real`) + cần 1 lăng-kính sâu nhất |
| **Clone ensemble** (N lane CÙNG vai) | `hmw.js parallel` (`:98`) → `agent()` (`:138-143`) | JSON args bên dưới — `taskList` = N item cùng `role` | Lượt anh gõ `/fable-clone <vai>` + heavy-judgment (H21 per-invocation; 🧊 cũ: marker VẮNG) |
| **Real single** (1 deep pass) | **Agent-tool spawn LẺ** (1 agent) | `agentType: "reviewer"` \| `"investigator-codebase"`, prompt deep-pass; model = lead-runtime (inherit) | Lượt anh gõ `/fable-real <vai>` + cần 1 lăng-kính sâu nhất (H21 per-invocation; 🧊 cũ: marker CÓ) |
| **Resume lane garble/truncate** | **SendMessage-resume in-session** | gửi lại agent đã spawn (KHÔNG re-spawn mới) | Lane trả wrong-slice (#53) — nấc 2 recovery-ladder (diary → SendMessage-resume S105 → em-main solo) |
| **Fallback cuối** | em-main solo | em-main tự làm vai phán-quyết | 529 overload / spawn truncate / SendMessage cũng garble |
@ -137,33 +162,34 @@ Nguồn: `harness-11-engine.md §K.C:327-330`. Pin để stamp CÓ NGHĨA (khôn
### 2.5 — Decision-matrix: KHI NÀO real vs clone
**Cổng vào (K.D 3 floor-point `RC-pqhuy1987-03-07-2026-17-46-35`, `harness-11:332` / `ACTIVE-MARKS.md`):** (1) **lead LUÔN top-model — KHÔNG đụng** · (2) CHỈ **2 vị-trí phán-quyết** chạm top-model, CHỈ real do **anh gõ** (KHÔNG auto) · (3) **mọi vai khác giữ mặc-định**.
**Cổng vào (K.D 3 floor-point `RC-pqhuy1987-03-07-2026-17-46-35`, `harness-11:332` / `ACTIVE-MARKS.md`):** (1) **lead = frontier-class do anh chọn per-session {Fable 5 | Opus 4.8 — 1M MAX} (model-tier-v3); CẤM Sonnet/Haiku-class ghế lead** · (2) **top-model deep-run CHỈ trong lượt lệnh engine-đắt anh gõ kèm vai (H21)** · (3) **mọi vai khác giữ mặc-định**. 🧊 *(văn K.D gốc: "lead LUÔN top-model — KHÔNG đụng · CHỈ 2 vị-trí phán-quyết chạm top-model, CHỈ real do anh gõ" — superseded model-tier-v3 + H21 per-invocation; giữ ý-nghĩa neo RC-mark.)*
**4 câu hỏi lọc:**
1. **Việc có phải 1 trong 2 vị-trí phán-quyết?** (`reviewer`=cổng-cuối · `investigator-codebase`=ground-truth). KHÔNG → **thoát** (vai khác giữ mặc-định, floor-3). `investigator-api`/`database-agent` EXCLUDED (`§K.A:320`).
2. **Heavy-judgment?** (wire-BE claim / security / schema-migration / cross-stack / RCA-chống-bịa / phân-xử mâu-thuẫn). Nhẹ/trivial → single spawn thường, KHÔNG ensemble.
3. **anh đã gõ `/fable-real`?** (marker CÓ?). KHÔNG gõ = clone-default.
4. **Fable up?** (BƯỚC 0.6). Chỉ ảnh-hưởng real-mode model per-run.
**4 câu hỏi lọc (H21 per-invocation):**
1. **Anh có gõ lệnh engine-đắt lượt này?** (`/fable-real|/fable-clone <vai> <đề-bài>`). KHÔNG → **thoát** (gate/verify thường ngày = sub thường qua workflow chuẩn — KHÔNG phải engine-đắt; lead không tự ý gọi).
2. **Heavy-judgment?** (wire-BE claim / security / schema-migration / cross-stack / RCA-chống-bịa / phân-xử mâu-thuẫn). Đây = tiêu-chí để em-main **ĐỀ XUẤT anh gõ lệnh** khi thấy cần — anh quyết. Nhẹ/trivial → khuyên anh khỏi tốn engine-đắt.
3. 🧊 *(H19 cũ: "anh đã gõ `/fable-real`? marker CÓ? KHÔNG gõ = clone-default" — retired H21: nay TÊN LỆNH = chọn engine, không còn default-mode.)*
4. **Fable up?** (BƯỚC 0.6). Chỉ ảnh-hưởng model per-run của lệnh-A (up=single-Fable · outage=single-Opus-1M).
| Tình huống | Mode | Cơ-chế thực-thi |
| Tình huống | Engine | Cơ-chế thực-thi |
|---|---|---|
| marker VẮNG + heavy-judgment 2 vị-trí | 🟢 **CLONE** | `hmw.js parallel` N lane same-role + em-main synthesize (2.3 JSON) |
| marker CÓ (anh gõ) + heavy-judgment | 🔴 **REAL** | Agent-tool spawn LẺ 1 agent, deep pass |
| việc KHÔNG thuộc 2 vị-trí | — | mặc-định, KHÔNG áp toggle (floor-3) |
| việc thuộc 2 vị-trí + NHẸ (không trivial) | — | single spawn thường 1 con (KHÔNG ensemble, KHÔNG deep-pass nghi-thức) — mode chỉ đổi CÁCH chạy heavy-judgment |
| trivial / <2-3' / 1-file | | em-main solo, không ensemble/không real |
| anh gõ `/fable-clone <vai> <đề-bài>` | 🟢 **lệnh-B ensemble** | `hmw.js parallel` N lane same-role + em-main synthesize (2.3 JSON) — ⚠️ 2 monitor ∉ VALID_ROLES → limitation K.E |
| anh gõ `/fable-real <vai> <đề-bài>` | 🔴 **lệnh-A single** | Agent-tool spawn LẺ 1 agent, deep pass |
| anh KHÔNG gõ lệnh engine-đắt | — | mặc-định (sub thường / workflow chuẩn; em-main có thể ĐỀ XUẤT anh gõ khi heavy-judgment) |
| việc NHẸ (không trivial) | — | single spawn thường 1 con (KHÔNG ensemble, KHÔNG deep-pass nghi-thức) |
| trivial / <2-3' / 1-file | | em-main solo |
🧊 *(bảng H19 cũ khóa theo marker VẮNG/CÓ + "2 vị-trí" — thay bằng bảng trên, H21 S110.)*
> Tương-tác 2 marker: `hmw-mode.on` (H6.1) quyết **CÓ fan-out HMW hay không** cho task substantive; `fable-real-mode.on` quyết **CÁCH chạy lane phán-quyết** (real/clone). Độc-lập — cả 2 ON: task substantive vẫn HMW, riêng lượt phán-quyết chạy real.
> **Tương-tác marker (H21):** còn **1 marker duy-nhất** `hmw-mode.on` (HMW fan-out consent — **HỆ KHÁC**, giữ nguyên, ngoài scope H21); engine-đắt = **per-invocation KHÔNG marker**. Cả hai độc-lập: **HMW-ON + anh gõ lệnh engine-đắt** trong phiên = task substantive vẫn HMW, riêng **lượt lệnh** chạy engine-đắt đúng vai. 🧊 *(cũ H19: 2 marker `hmw-mode.on` + `fable-real-mode.on` — cái sau retired H21.)*
**H5 per-run fallback (real-mode, `fable-real.md:20` / `§K.B:323`):** Fable **up** single-**Fable**; Fable **down** single-**Opus-1M** **theo TỪNG LẦN CHẠY** **KHÔNG flip marker** (mode vẫn "real" toàn-cục). Model do BƯỚC 0.6 probe quyết mỗi lần spawn.
**H5 per-run fallback (lệnh-A, `fable-real.md:16` / `§K.B:323`):** Fable **up** single-**Fable**; Fable **down** single-**Opus-1M** **theo TỪNG LẦN CHẠY** trong CHÍNH lượt lệnh đó. Model do BƯỚC 0.6 probe quyết mỗi lần spawn. 🧊 *(H19 wording "KHÔNG flip marker, mode vẫn real toàn-cục" — retired: H21 không còn mode toàn-cục để flip.)*
**💰 Cost-note (honest, `§K:334` / broadcast §8):** ensemble **KHÔNG rẻ hơn nhiều về token thô**. Value THẬT tiết-kiệm = **anti-consensus-catch** (dogfood S101 WF2 Lane-B bắt `workflows/README:51` stale-label token-sweep sót, commit `f229b07`) + **depth** + formalize ensemble-heavy-judgment + Fable-outage timeliness. Chọn real khi cần **1 lăng-kính sâu nhất**; chọn clone khi cần **N lăng-kính phản-biện** (rẻ quota top-model hơn nếu pin `tier:'opus'` lúc Fable về).
> ⚠️ **VACUOUS-hay-THẬT tùy runtime** (`§K.D:332` viết lúc Fable-outage): KHI Fable DOWN → real vs clone hội-tụ Opus-1M = 0 runtime-delta (vacuously-inert đúng nguyên-văn). KHI **Fable UP** (vd S108) → **phân-tầng THẬT bén**: real = single-Fable deep ⟂ clone pin `tier:'opus'` = ensemble tier-2 đúng nghĩa §K.B — cost-lever SỐNG, và **S108 = lần đầu** (dogfood §5.5).
** Checklist decision (mỗi mục tick + evidence):**
- [ ] Xác nhận việc {reviewer, investigator-codebase} evidence: `agentType` chọn `hmw.js:22-28`
- [ ] Đọc marker BƯỚC 0.5b mode đúng evidence: dòng BÁO mode @session-start
- [ ] Vai ANH GÁN roster 12 evidence: quote nguyên văn lệnh anh (H21; 2 monitor × lệnh-B limitation K.E) *(🧊 H19: "việc ∈ {reviewer, investigator-codebase}")*
- [ ] INVOCATION{lệnh, vai, đề-bài} parse đúng từ lượt lệnh evidence: quote lệnh *(🧊 H19: "đọc marker BƯỚC 0.5b")*
- [ ] BƯỚC 0.6 probe lead-runtime evidence: "lead=Fable" | "lead=Opus-1M(H5)"
- [ ] Clone: `taskList[*].role` đồng-nhất (GAP-1) evidence: grep taskList
- [ ] Harvest: 1 entry/vai + nhãn `[engine: …]` (GAP-2/3) evidence: diff `agent-memory/<role>/MEMORY.md`
@ -171,7 +197,7 @@ Nguồn: `harness-11-engine.md §K.C:327-330`. Pin để stamp CÓ NGHĨA (khôn
## 3. LANE INVESTIGATOR-CODEBASE (ground-truth — xác minh sự thật)
> **Vị-trí (b) của H19** — "Ground-truth / xác-minh sự-thật" = `investigator-codebase` (truy bằng-chứng gốc `file:line` + `sqlcmd` + `git`, chống bịa + RCA). `investigator-api` và `database-agent` **EXCLUDED** khỏi 2 vị-trí phán-quyết (`harness-11-engine.md:320`, K.A.b).
> **Vị-trí (b) của H19** — "Ground-truth / xác-minh sự-thật" = `investigator-codebase` (truy bằng-chứng gốc `file:line` + `sqlcmd` + `git`, chống bịa + RCA). `investigator-api` và `database-agent` **EXCLUDED** khỏi 2 vị-trí phán-quyết (`harness-11-engine.md:320`, K.A.b). *(H21: section này = **template tham-chiếu** cho vai hay-gán-nhất; vai thực-tế do ANH GÁN trong lệnh — mọi vai roster 12 hợp-lệ, "EXCLUDED" = ngữ-cảnh 2-vị-trí H19 cũ.)*
> **Luật ở đâu, nút ở đâu:** ngữ-nghĩa 2 mode + 3 GAP-guard + 3 floor-point = **engine §K** (`harness-11-engine.md:322-334`) — KHÔNG lặp lại ở đây. Section này = **cách bấm nút**: biến vào lane, tham-số spawn, checklist tick-được, fallback.
### 3.1 Bảng BIẾN đầu vào lane
@ -180,7 +206,8 @@ Mọi biến em-main chốt @P0/P1 rồi bơm vào lane. Kiểu + nguồn đọc
| Biến | Kiểu | Nguồn đọc (file:line / lệnh) | Ví-dụ giá-trị thật |
|---|---|---|---|
| `$mode` | `enum{real,clone}` | `Test-Path .claude/fable-real-mode.on` `$true`=real · `$false`=clone (marker = source-of-truth, `fable-real.md:10`; K.B `harness-11-engine.md:322-323`). Marker **gitignored** verify `git check-ignore .claude/fable-real-mode.on` | `real` (marker , `.claude/fable-real-mode.on:1` set S108) |
| 🧊 `$mode` (H19 retired) | `enum{real,clone}` | `Test-Path .claude/fable-real-mode.on` `$true`=real · `$false`=clone (marker = source-of-truth, `fable-real.md:10`; K.B `harness-11-engine.md:322-323`). Marker **gitignored** verify `git check-ignore .claude/fable-real-mode.on` | `real` (marker , `.claude/fable-real-mode.on:1` set S108) |
| `$engine` (H21) | enum `{real-single, clone-ensemble}` | derive từ TÊN LỆNH lượt này (`/fable-real`\|`/fable-clone`) KHÔNG file-state (INVOCATION §2.1-bis) | `real-single` (vd lượt anh `/fable-real <vai>`) |
| `$target` | `string` | Câu-hỏi sự-thật em-main đóng-khung @P1; nếu qua lệnh = `$ARGUMENTS` của `/fable-real` (`fable-real.md:12`) | `"PE multi-winner đã wire ĐỦ read-site sau đổi field single→multi — TRUE/FALSE + chỗ sót?"` |
| `$claimsList` | `array<string>` | em-main tách $target thành claim nguyên-tử @P1 | `["PurchaseEvaluation entity field multi-winner là collection (KHÔNG single Guid)", "PeService.ApproveV2Async đọc multi-winner ở MỌI read-site", "FE PE matrix render N winner"]` |
| `$evidencePaths` | `array<path\|glob>` | Con-trỏ seed từ recon P1 (KHÔNG giới-hạn lane mở rộng nếu cần) | `["src/Backend/SolutionErp.Domain/PurchaseEvaluations/*.cs", "src/Backend/SolutionErp.Application/PurchaseEvaluations/**/*.cs", "fe-user/src/**/pe/**/*.tsx"]` |
@ -191,7 +218,7 @@ Mọi biến em-main chốt @P0/P1 rồi bơm vào lane. Kiểu + nguồn đọc
### 3.2 REAL-mode — single-deep-pass qua Agent tool
Điều-kiện: `$mode == real` (marker ). Spawn **DUY NHẤT 1** `investigator-codebase` qua **Agent tool** (KHÔNG qua `hmw.js` hmw dành cho clone-ensemble), đào SÂU 1 lần. `model: inherit` (frontmatter `investigator-codebase.md:5`) top-tier lead: Fable up = Fable · Fable down (H5) = Opus-1M per-run 3.6).
Điều-kiện: lượt này **anh gõ `/fable-real <vai> <đề-bài>`** (H21 quote lệnh làm evidence). 🧊 *(H19: `$mode == real` marker CÓ.)* Spawn **DUY NHẤT 1** `investigator-codebase` qua **Agent tool** (KHÔNG qua `hmw.js` hmw dành cho clone-ensemble), đào SÂU 1 lần. `model: inherit` (frontmatter `investigator-codebase.md:5`) top-tier lead: Fable up = Fable · Fable down (H5) = Opus-1M per-run 3.6).
**Tham-số spawn (Agent tool / Task):**
@ -245,7 +272,7 @@ prompt: |
### 3.3 CLONE-mode — N-lane ensemble qua hmw.js parallel
Điều-kiện: `$mode == clone` (marker VẮNG = MẶC-ĐỊNH). N lane **CÙNG 1 vai** `investigator-codebase` (GAP-1: đa-lăng-kính, **KHÔNG** mixed-roster fan-out `harness-11-engine.md:328`), mỗi lane 1 lăng-kính `$lensList`. Reuse `hmw.js parallel` (dogfood S101, `fable-clone.md:8-9`).
Điều-kiện: lượt này **anh gõ `/fable-clone <vai> <đề-bài>`** (H21). 🧊 *(H19: `$mode == clone` marker VẮNG = mặc-định.)* N lane **CÙNG 1 vai** `investigator-codebase` (GAP-1: đa-lăng-kính, **KHÔNG** mixed-roster fan-out `harness-11-engine.md:328`), mỗi lane 1 lăng-kính `$lensList`. Reuse `hmw.js parallel` (dogfood S101, `fable-clone.md:8-9`).
**args JSON shape thật** (em-main bơm @P2 `hmw.js:14-20`):
@ -284,7 +311,7 @@ Ghi-chú shape:
Tick mỗi lần chạy lane (cả 2 mode trừ khi ghi `[clone]`/`[real]`):
- [ ] **1. `$mode` xác-định đúng** *evidence:* `Test-Path .claude/fable-real-mode.on` `real`/`clone` (K.B; `fable-real.md:10`)
- [ ] **1. INVOCATION xác-định đúng** {lệnh, vai, đề-bài} từ lượt lệnh anh; vai roster 12 (§2.1-bis, H21) *evidence:* quote nguyên-văn lệnh anh (🧊 cũ: `$mode` từ Test-Path marker)
- [ ] **2. Mỗi claim ∈ `$claimsList` có verdict** TRUE/FALSE/PARTIAL/UNCERTAIN *evidence:* block `CLAIMS:` đủ N dòng = `len($claimsList)`
- [ ] **3. Mỗi verdict neo `file:line` MỞ-ĐƯỢC** *evidence:* re-open `Read <path>:<line>` / `Grep -n` khớp nội-dung (persona `:43-48`)
- [ ] **4. Fabricate-guard** thiếu chứng "uncertain + lý-do", KHÔNG đoán *evidence:* grep return `uncertain|không tìm thấy` claim thiếu chứng (persona `:93`)
@ -309,13 +336,14 @@ Tick mỗi lần chạy lane (cả 2 mode trừ khi ghi `[clone]`/`[real]`):
## 4. LANE REVIEWER (cổng rà-soát cuối — adversarial)
> **Vai trò (engine §K.A, `docs/governance/harness-11-engine.md:320`):** `reviewer` = **(a) Cổng rà-soát cuối** — adversarial 6-category + Smart-Friend anti-rubber-stamp + live-curl falsify + phân-xử mâu-thuẫn. Persona canonical: `.claude/agents/reviewer.md`. Runbook này = **cách bấm nút** (H19 §K = LUẬT; KHÔNG lặp lại). 2 mode do marker quyết: **Fable-real** (single deep-pass top-model THẬT)**Fable-clone** (ensemble N-lane CÙNG vai, MẶC-ĐỊNH).
> **Vai trò (engine §K.A, `docs/governance/harness-11-engine.md:320`):** `reviewer` = **(a) Cổng rà-soát cuối** — adversarial 6-category + Smart-Friend anti-rubber-stamp + live-curl falsify + phân-xử mâu-thuẫn. Persona canonical: `.claude/agents/reviewer.md`. Runbook này = **cách bấm nút** (§K = LUẬT; KHÔNG lặp lại). Engine do **TÊN LỆNH lượt này** quyết (H21): `/fable-real` = single deep-pass top-model THẬT ⟺ `/fable-clone` = ensemble N-lane CÙNG vai. 🧊 *(H19: 2 mode do marker quyết, clone = mặc-định — retired.)*
### 4.1 — BẢNG BIẾN lane (tên · kiểu · nguồn đọc · ví-dụ)
| Biến | Kiểu | Nguồn (file:line hoặc lệnh đọc) | Ví-dụ |
|---|---|---|---|
| `$mode` | enum `real`\|`clone` | `Test-Path .claude/fable-real-mode.on` TỒN-TẠI=real, VẮNG=clone-default (`session-start.md:27-33` BƯỚC 0.5b · `fable-real.md:10`) | `clone` (marker vắng) |
| 🧊 `$mode` (H19 retired) | enum `real`\|`clone` | `Test-Path .claude/fable-real-mode.on` TỒN-TẠI=real, VẮNG=clone-default (`session-start.md:27-33` BƯỚC 0.5b · `fable-real.md:10`) | `clone` (marker vắng) |
| `$engine` (H21) | enum `{real-single, clone-ensemble}` | derive từ TÊN LỆNH lượt này (`/fable-real`\|`/fable-clone`) KHÔNG file-state (INVOCATION §2.1-bis) | `clone-ensemble` (vd lượt anh `/fable-clone <vai>`) |
| `$modelTier` | enum `fable`\|`opus` | BƯỚC 0.6 runtime probe (`session-start.md:35-37`) Fable UP=`fable`, outage=`opus` (H5); per-session KHÔNG steady-state | `fable` (S108 UP ×5 self-report) |
| `$reviewTarget` | diff-range \| file-set \| claim-set | `git diff base..head` (`reviewer.md:37,54`) | `HEAD~3..HEAD` 4 file, +180/-40 LOC |
| `$spec` | string (prompt gốc + acceptance) | em-main P1 `hmw.js:86,126` (`spec`) · `reviewer.md:36-42` | "Wire CRUD Supplier POST/PUT/DELETE + validator" |
@ -326,9 +354,9 @@ Tick mỗi lần chạy lane (cả 2 mode trừ khi ghi `[clone]`/`[real]`):
| `$verdictForm` | struct `{verdict, diffScope, catTable[6], issues{critical,major,minor}[file:line], liveVerifyTable, recommendation, tokenCost}` | `reviewer.md:201-242` | `verdict=FAIL; catTable[1]=FAIL(1 critical)` |
| `$memoryPackSlice` | string (slice reviewer diary) | `.claude/agent-memory/reviewer/MEMORY.md` `hmw.js:85,103` (SLICE, KHÔNG full) | "gotcha #44 silent-403 · #25 IIS 405 · wire-claim FP pattern" |
### 4.2 — REAL-mode (marker CÓ): single deep-pass Agent-tool
### 4.2 — REAL (lệnh-A `/fable-real`): single deep-pass Agent-tool *(🧊 H19: "marker CÓ")*
**Precondition:** `Test-Path .claude/fable-real-mode.on` = `True`. REAL = **1 spawn TRỰC-TIẾP** (KHÔNG qua `hmw.js` hmw = clone ensemble).
**Precondition (H21):** lượt này anh `/fable-real <vai>` kèm đề-bài (quote lệnh làm evidence). REAL = **1 spawn TRỰC-TIẾP** (KHÔNG qua `hmw.js` hmw = clone ensemble). 🧊 *(cũ H19: `Test-Path` marker = True.)*
**(a) Spawn param (Agent-tool / Task 1 lần):**
```
@ -374,7 +402,7 @@ Task/Agent(
**Chống #53 (truncation):** return LEAN (verdict + bảng + memoryDelta, KHÔNG kể-lể) nếu vẫn truncate mid-task, em-main **solo-fallback** lại (reliable, `agents/README.md:64,71`). 529-Overload transient solo, KHÔNG retry-loop.
### 4.3 — CLONE-mode (marker VẮNG = MẶC-ĐỊNH): N-lane CÙNG vai qua `hmw.js`
### 4.3 — CLONE (lệnh-B `/fable-clone`): N-lane CÙNG vai qua `hmw.js` *(🧊 H19: "marker VẮNG = mặc-định")*
Ensemble tier-2 = **reuse HMW `parallel`** (dogfood S101 WF2 3-lane bắt `README:51` stale-label token-sweep sót, commit `f229b07` `fable-clone.md:9`). em-main bơm `args` @P2 sau checkpoint:
@ -419,7 +447,7 @@ args = {
### 4.5 — CHECKLIST thi-hành (tick-được, mỗi mục có evidence-form)
- [ ] **1. Mode resolved** `Test-Path .claude/fable-real-mode.on` `real`\|`clone`. *Evidence:* bool + BƯỚC 0.5b báo (`session-start.md:27-33`).
- [ ] **1. INVOCATION xác-định đúng** {lệnh, vai, đề-bài} từ lượt lệnh anh; vai roster 12 2.1-bis, H21). *Evidence:* quote nguyên-văn lệnh anh . 🧊 *(cũ H19: Mode resolved từ Test-Path marker + BƯỚC 0.5b.)*
- [ ] **2. Runtime tier probed** BƯỚC 0.6 xác-định `inherit`=Fable\|Opus. *Evidence:* probe self-report `"claude-fable-5"`\|`"opus"` (`session-start.md:35-37`).
- [ ] **3. `$reviewTarget` chốt** diff-range/file-set cụ-thể. *Evidence:* `git diff --stat base..head` (số file, +Y/-Z LOC).
- [ ] **4. 6-category áp đủ** (Cat-6 CHỈ khi `$outwardFlag=Y`). *Evidence:* bảng 6-dòng PASS/FAIL trong `$verdictForm` (`reviewer.md:210-217`).
@ -452,11 +480,11 @@ args = {
### 4.8 — K.D 3 floor-point RC-stamped (governance neo — `RC-pqhuy1987-03-07-2026-17-46-35`, `ACTIVE-MARKS.md`)
(1) **lead LUÔN top-model** — lane này KHÔNG đụng lead · (2) **CHỈ** `reviewer`+`investigator-codebase` chạm top-model **chế-độ THẬT**, CHỈ khi anh gõ `/fable-real` (KHÔNG auto) · (3) mọi vai khác giữ default. ⚠️ **Nấc runtime tùy phiên** (`§K.D:332` viết lúc outage): Fable DOWN → point-2 vacuously-met (0 delta). **Fable UP** (vd S108) → point-2 = **grant THẬT** (real=Fable-deep ⟂ clone=Opus-ensemble tách bạch — phân-tầng sống). Stamp trung-thực theo probe từng phiên.
(1) **lead = frontier-class do anh chọn per-session {Fable 5 | Opus 4.8 — 1M MAX} (model-tier-v3); CẤM Sonnet/Haiku-class ghế lead** — lane này KHÔNG đụng lead · (2) **top-model deep-run CHỈ trong lượt lệnh engine-đắt anh gõ kèm vai (H21)** `reviewer`+`investigator-codebase` (khi anh gán) · (3) mọi vai khác giữ default. 🧊 *(văn K.D gốc: "lead LUÔN top-model · CHỈ reviewer+investigator-codebase chạm top-model chế-độ THẬT, CHỈ khi anh gõ /fable-real" — superseded model-tier-v3 + H21.)* ⚠️ **Nấc runtime tùy phiên** (`§K.D:332` viết lúc outage): Fable DOWN → point-2 vacuously-met (0 delta). **Fable UP** (vd S108) → point-2 = **grant THẬT** (real=Fable-deep ⟂ clone=Opus-ensemble tách bạch — phân-tầng sống). Stamp trung-thực theo probe từng phiên.
## 5. MASTER CHECKLIST + ACCEPTANCE + DOGFOOD
> **Tầng thi-hành ("cách bấm nút").** Luật ở engine `harness-11-engine.md §K` (K.A ánh-xạ vai · K.B 2 mode · K.C 3 GAP-guard · K.D 3 floor-point RC-stamp `RC-pqhuy1987-03-07-2026-17-46-35`). Section này KHÔNG lặp luật (B1 derived-TRỎ-canonical, `harness-11-engine.md:44-49`) — chỉ đưa **checklist đánh-tick + biến điền-được + lệnh spawn thật**. Mọi mục có **evidence-form**; mọi biến có **TÊN·KIỂU·NGUỒN**.
> **Tầng thi-hành ("cách bấm nút").** Luật ở engine `harness-11-engine.md §K` (K.A ánh-xạ vai · K.B 2 mode 🧊 · K.C 3 GAP-guard · K.D 3 floor-point RC-stamp `RC-pqhuy1987-03-07-2026-17-46-35` · **K.E per-invocation H21**). Section này KHÔNG lặp luật (B1 derived-TRỎ-canonical, `harness-11-engine.md:44-49`) — chỉ đưa **checklist đánh-tick + biến điền-được + lệnh spawn thật**. Mọi mục có **evidence-form**; mọi biến có **TÊN·KIỂU·NGUỒN**.
---
@ -466,23 +494,30 @@ args = {
| Biến | Kiểu | Nguồn (lệnh đọc / file:line) |
|---|---|---|
| `MARKER_PRESENT` | bool | `Test-Path .claude/fable-real-mode.on` (PS) / `[ -f .claude/fable-real-mode.on ]` (bash) — reader chuẩn = `session-start.md:27-31` BƯỚC 0.5b |
| `MODE` | enum `{real, clone}` | derive: `MARKER_PRESENT``real`; VẮNG → `clone` (mặc-định). Semantic INVERSE hmw (`harness-11-engine.md:325`) |
| `LEAD_MODEL` | string | `session-start.md:35-37` BƯỚC 0.6 probe → `claude-fable-5[1m]` (up) HOẶC `claude-opus-4-8[1m]` (H5-fallback) |
| `ANH_CONSENT_REAL` | bool | anh đã gõ `/fable-real` trong transcript phiên (lệnh đó Write marker) — K.D point-2 (`harness-11-engine.md:332`) |
| `POSITION` | enum `{reviewer, investigator-codebase}` | §K.A (`harness-11-engine.md:320`) — CHỈ 2 vai, KHÔNG vai khác |
| 🧊 `MARKER_PRESENT` (H19 retired) | bool | `Test-Path .claude/fable-real-mode.on` (PS) / `[ -f .claude/fable-real-mode.on ]` (bash) — reader chuẩn = `session-start.md:27-31` BƯỚC 0.5b |
| 🧊 `MODE` (H19 retired) | enum `{real, clone}` | derive: `MARKER_PRESENT``real`; VẮNG → `clone` (mặc-định). Semantic INVERSE hmw (`harness-11-engine.md:325`) |
| `LEAD_MODEL` | string | `session-start.md:35-37` BƯỚC 0.6 probe → `claude-fable-5[1m]` HOẶC `claude-opus-4-8[1m]` (model-tier-v3: anh chọn per-session; outage-fallback H5) |
| 🧊 `ANH_CONSENT_REAL` (H19 retired) | bool | anh đã gõ `/fable-real` trong transcript phiên (lệnh đó Write marker) — K.D point-2 (`harness-11-engine.md:332`) |
| 🧊 `POSITION` (H19 retired — thay bằng `INVOCATION.vai`) | enum `{reviewer, investigator-codebase}` | §K.A (`harness-11-engine.md:320`) — "CHỈ 2 vai" = ngữ-cảnh H19; H21: vai anh gán ∈ roster 12 |
| **`INVOCATION`** (H21) | struct `{lệnh, vai, đề-bài}` | parse từ lượt lệnh anh gõ (`/fable-real`\|`/fable-clone <vai> <đề-bài>`) — KHÔNG file-state, 0 persist (§2.1-bis) |
| **`ROLE_VALID`** (H21) | bool | `INVOCATION.vai ∈ roster 12`? (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/lạ → hỏi anh 1 dòng, KHÔNG tự chọn vai |
| **`SPEC_PATH`** (H21) | path | spec-file 3-mục [đề-bài · cách-impl · checklist vai+deliverable+acceptance] LEAD ghi SAU verify (engine propose → lead verify+ghi, engine KHÔNG tự ghi) |
**Checklist (tick từng mục · evidence bên phải):**
- [ ] **P0 — marker-state đọc THẬT** (KHÔNG đoán từ note phiên trước) → `Test-Path .claude/fable-real-mode.on`. *Evidence:* in ra `MARKER_PRESENT=<CÓ|VẮNG>` + `mtime` marker.
- [ ] **P1 — MODE xác-định** từ P0. *Evidence:* `MODE=real` (marker CÓ) hoặc `MODE=clone` (VẮNG, mặc-định).
- [ ] **P2 — lead-runtime probe (Fable/Opus)** = BƯỚC 0.6 (`session-start.md:35-37`), per-session KHÔNG tin note cũ. *Evidence:* `LEAD_MODEL=<model-id thật>`. ⚠️ **H5 per-run fallback:** Fable DOWN → 2 vị-trí chạy `single-Opus-1M` **theo TỪNG lần** (KHÔNG đổi `MODE` toàn-cục — `fable-real.md:20`, `harness-11-engine.md:323`).
- [ ] **P3 — anh-consent check (K.D point-2)** 🔴 `MODE=real` **CHỈ hợp-lệ** khi `ANH_CONSENT_REAL=true` (anh gõ `/fable-real`). Nếu em-main *muốn* real mà 0 marker → **STOP + nhắc anh gõ lệnh** (KHÔNG auto-bật theo số-dư/cảm-tính, mark `RC-…10-29-09`). *Evidence:* dòng `/fable-real` trong transcript **HOẶC** marker mtime (marker gitignored `.gitignore:92` nên không có git-log).
- [ ] 🧊 **P0 (H19 retired) — marker-state đọc THẬT** (KHÔNG đoán từ note phiên trước) → `Test-Path .claude/fable-real-mode.on`. *Evidence:* in ra `MARKER_PRESENT=<CÓ|VẮNG>` + `mtime` marker.
- [ ] **P0-mới (H21) — INVOCATION đọc THẬT từ lượt lệnh** (quote nguyên-văn lệnh anh làm evidence — **KHÔNG đoán**). *Evidence:* dòng lệnh `/fable-real`\|`/fable-clone <vai> <đề-bài>` anh gõ lượt này; parse `{lệnh, vai, đề-bài}` + check `ROLE_VALID` (vai ∈ roster 12) — thiếu → hỏi anh 1 dòng, KHÔNG tự chọn vai.
- [ ] 🧊 *(H19 retired)* **P1 — MODE xác-định** từ P0. *Evidence:* `MODE=real` (marker CÓ) hoặc `MODE=clone` (VẮNG, mặc-định).
- [ ] **P1-mới (H21) — `$engine` xác-định từ `INVOCATION.lệnh`.** *Evidence:* `/fable-real``real-single` · `/fable-clone``clone-ensemble` (quote lệnh).
- [ ] **P2 — lead-runtime probe (Fable/Opus)** = BƯỚC 0.6 (`session-start.md:35-37`), per-session KHÔNG tin note cũ. *Evidence:* `LEAD_MODEL=<model-id thật>`. ⚠️ **H5 per-run fallback:** Fable DOWN → lệnh-A chạy `single-Opus-1M` **theo TỪNG lần** trong CHÍNH lượt lệnh (`fable-real.md:16`, `harness-11-engine.md:323`; 🧊 H19 wording "không đổi MODE toàn-cục").
- [ ] 🧊 *(H19 retired — `ANH_CONSENT_REAL`/marker-mtime)* **P3 cũ** — consent qua marker.
- [ ] **P3-mới (H21) — owner-consent = CHÍNH lượt lệnh** 🔴 engine-đắt CHỈ hợp-lệ khi anh gõ `/fable-real|/fable-clone <vai> <đề-bài>` LƯỢT NÀY. Em-main *thấy cần* mà anh chưa gõ → **STOP + ĐỀ XUẤT anh gõ** (KHÔNG auto theo số-dư/cảm-tính, mark `RC-…10-29-09`; KHÔNG chạy rồi xin phép sau). *Evidence:* quote nguyên-văn lệnh anh lượt này.
- [ ] **P4 — budget-note** *Evidence + phân-loại cost-class:*
- `real` = 1 lane **top-model deep pass** (đắt nhất/lần; khi Fable về = single-Fable) — chỉ cho heavy-judgment.
- `clone` = **N-lane ensemble tier-2** (multi-lens; để dành quota top-model cho lead — `fable-clone.md:8`).
- ⚠️ **Cost-delta tùy runtime:** Fable DOWN → real vs clone 0 tier-delta (chỉ khác N-lane count). **Fable UP** → real=Fable-deep (đắt nhất/lần) ⟂ clone `tier:'opus'`=tier-2 (giữ quota Fable cho lead). Ghi honest theo probe (`harness-11-engine.md:332,334`).
- [ ] **P5 — scope-lock** = `POSITION ∈ {reviewer, investigator-codebase}` (§K.A). `investigator-api` / `database-agent` / mọi vai khác **EXCLUDED**. Lead + vai khác **KHÔNG đụng model** (K.D point-1/point-3). *Evidence:* vai lượt này ∈ tập 2.
- [ ] 🧊 *(H19 retired)* **P5 — scope-lock 2 vai** (`POSITION ∈ {reviewer, investigator-codebase}`, vai khác EXCLUDED).
- [ ] **P5-mới (H21) — scope-lock = `ROLE_VALID`**: `INVOCATION.vai ∈ roster 12` do ANH gán (thiếu/lạ → hỏi anh, KHÔNG tự chọn); ⚠️ 2 monitor × lệnh-B → limitation K.E (fail-soft default-subagent). Ngoài lượt lệnh: mọi vai giữ model roster (H8 all-inherit), lead KHÔNG tự elevate (K.D mới). *Evidence:* vai lượt này + quote lệnh.
---
@ -499,11 +534,11 @@ args = {
**Checklist:**
- [ ] **R1 — chọn LANE** *(decision rule):*
- wire-BE / deploy-claim / security / test-gate → **`reviewer`** (cổng adversarial, `reviewer.md`).
- "sự-thật gốc / file:line / RCA / schema-drift" → **`investigator-codebase`** (ground-truth, `investigator-codebase.md`).
- artifact **hệ-trọng** (governance-doc, supersede-sweep, email outward) → **CẢ 2 song-song = "2-đầu khác-trục"** (ground-truth ⟂ adversarial) chống cùng-góc-cùng-điểm-mù (Harness-20 L.B, `harness-11-engine.md:344`).
- *Evidence:* ghi `LANE=<…>` + lý-do 1 dòng.
- [ ] **R1 — vai = ANH GÁN trong lệnh (H21)** — em-main KHÔNG tự chọn; bảng dưới = gợi-ý khi em-main **ĐỀ XUẤT** anh gõ (hoặc anh hỏi "nên vai nào") *(🧊 H19: R1 = em-main "chọn LANE")*:
- wire-BE / deploy-claim / security / test-gate → gợi-ý **`reviewer`** (cổng adversarial, `reviewer.md`).
- "sự-thật gốc / file:line / RCA / schema-drift" → gợi-ý **`investigator-codebase`** (ground-truth, `investigator-codebase.md`).
- artifact **hệ-trọng** (governance-doc, supersede-sweep, email outward) → đề-xuất anh gõ **CẢ 2 = "2-đầu khác-trục"** (ground-truth ⟂ adversarial) chống cùng-góc-cùng-điểm-mù (Harness-20 L.B, `harness-11-engine.md:344`).
- *Evidence:* quote lệnh anh (vai đã gán) + lý-do 1 dòng nếu em-main có đề-xuất.
- [ ] **R2 — điền biến / spawn-args:**
- **CLONE** (hmw.js parallel) — điền JSON `args` (`hmw.js:13-20`); `taskList` = **N entry CÙNG `role`** (GAP-1):
```json
@ -529,7 +564,7 @@ args = {
- [ ] **R3 — GAP-guard tại spawn** *(tick cả 3):*
- GAP-1: mọi lane CÙNG **1 vai** (`taskList` roles distinct = 1), KHÔNG mixed-roster (`harness-11-engine.md:328`).
- Lane **RETURN-only**, 0 Write memory (write-guard `hmw.js:118-122`; GAP-3).
- Vai ∈ {reviewer, investigator-codebase} (không leak vai ngoài).
- Vai lane = **ĐÚNG vai anh gán trong lệnh** (không leak vai khác vào lane; 🧊 H19: "vai ∈ {reviewer, investigator-codebase}").
- [ ] **R4 — spawn + thu verdict.** *Evidence theo format vai:*
- `reviewer` → `Verdict: PASS|FAIL` + bảng 6-category + issues `[file:line][severity]` + Live-verify table (nếu deploy-claim) (`reviewer.md:203-242`).
- `investigator-codebase` → `Conclusion` (1-2 câu) + `Evidence: [file:line][data]` + `Surprises` + `Recommendation` (`investigator-codebase.md:44-52`).
@ -569,6 +604,8 @@ Một lượt phán-quyết **ĐẠT ⟺ tất-cả** AC dưới (đo-được,
### 5.5 — DOGFOOD-CASE ghi sẵn: **"first real-mode run"**
> 🧊 **Form dưới ghi theo khung H19-marker (trước H21 S110)** — snapshot lịch-sử, giữ nguyên văn (§5.5 + §2.1 = record H19).
> 🔴 Engine ghi rõ: thật-mode toggle **CHƯA chạy thật lần nào** (`harness-11-engine.md:334` "thật-mode toggle chưa chạy thật lần nào"). ⇒ **Lượt real đầu-tiên = dogfood chính runbook này.**
**Case định-sẵn:**
@ -601,10 +638,11 @@ Một lượt phán-quyết **ĐẠT ⟺ tất-cả** AC dưới (đo-được,
| # | Anti-pattern | Vi-phạm (nguồn) | Đúng phải làm | Detect |
|---|---|---|---|---|
| **AP-1** | Bật real **tự-động** không anh-gõ | K.D **point-2** (`harness-11-engine.md:332`) — real CHỈ do anh gõ `/fable-real` | 0 marker + muốn real ⇒ STOP + nhắc anh | transcript vắng `/fable-real` nhưng chạy real |
| **AP-1** | Bật real **tự-động** không anh-gõ | K.D **point-2** (`harness-11-engine.md:332`) — real CHỈ do anh gõ `/fable-real <vai> <đề-bài>` | muốn real mà anh chưa gõ LƯỢT NÀY ⇒ STOP + ĐỀ XUẤT anh gõ *(🧊 H19: "0 marker + muốn real ⇒ STOP")* | transcript lượt đó vắng `/fable-real` nhưng chạy real |
| **AP-2** | **Mixed-roster** ensemble (fan-out nhiều vai) | GAP-1 scope-creep leak (`:328`) — all-inherit CHE tới khi Fable về | N lane **CÙNG 1 vai** (multi-lens) | `taskList` roles distinct-count > 1 |
| **AP-3** | Lane **tự ghi memory** (store_memory / MEMORY.md / Bash-append) | GAP-3 / AS-10 fails-open (`:330,:120`) | RETURN-only; em-main ghi 1-entry/vai | git-diff `agent-memory/*` đổi trong P2 · RAG chunk-count |
| **AP-4** | Quên **báo marker-state** cuối phiên | marker persist qua session = BY-DESIGN (`fable-real.md:10`) nhưng thiếu báo → anh quên mode đang real (burn top-model ngoài ý) | session-end **BÁO marker-state + NHẮC anh** gõ `/fable-clone` nếu muốn về ảo (em-main KHÔNG tự toggle — K.D point-2); KHÔNG commit marker (gitignored `.gitignore:92`) | BƯỚC 0.5b @start + session-end marker-report |
| 🧊 **AP-4** (H19 retired) | Quên **báo marker-state** cuối phiên | marker persist qua session = BY-DESIGN (`fable-real.md:10`) nhưng thiếu báo → anh quên mode đang real (burn top-model ngoài ý) | session-end **BÁO marker-state + NHẮC anh** gõ `/fable-clone` nếu muốn về ảo (em-main KHÔNG tự toggle — K.D point-2); KHÔNG commit marker (gitignored `.gitignore:92`) | BƯỚC 0.5b @start + session-end marker-report |
| **AP-4-mới** (H21) | Chạy engine-đắt **NGOÀI lượt-lệnh** anh gõ | K.D point-2 + H21 §2.1-bis — engine-đắt CHỈ trong lượt anh gõ `/fable-real`\|`/fable-clone` kèm vai; kể cả **HMW-mode ON**, kể cả "thấy cần" = **VI-PHẠM** (lead KHÔNG tự ý) | Đợi lượt-lệnh anh; thiếu vai → **hỏi anh 1 dòng, KHÔNG tự chọn vai** | engine-đắt chạy mà transcript lượt đó vắng `/fable-real`\|`/fable-clone` |
| **AP-5** | Dùng real cho việc **trivial** | burn quota top-model vô-ích (§8 "ensemble không rẻ", `:334`) + H6.1 substantive→heavy | real CHỈ heavy-judgment (deploy-gate/security/governance-artifact) | task-class vs MODE |
| **AP-6** | Quên **engine-label** stamp | GAP-2 (`:329`) verdict vô-danh-engine, mất audit | em-main stamp `[engine:…]` @P3 (V4) | entry thiếu `[engine:…]` |
| **AP-7** | **Rubber-stamp** verdict (nuốt sub-verdict không VERIFY) | phá D9 single-writer (`:80`) + Smart-Friend (`reviewer.md:268`) | V1 độc-lập kiểm ≥1 claim + refute | post-run note 0 spot-check |

View File

@ -314,24 +314,45 @@ SE đã có RAG golden-set harness (KHÔNG phải gap): `eval/golden-set-solutio
## PHẦN K — Harness-19: "Model ảo" ensemble cho 2 vị-trí phán-quyết + thật/ảo depth-toggle (🔴 FUNCTION-FLOOR + 🟡 form ensemble-depth)
⚠️ **H21 supersede-partial (S110, 2026-07-11, broadcast `2026-07-10-Governance-harness-21`):** marker-toggle + 2-vai-verdict-mặc-định (K.B/K.A dưới) → **per-invocation owner-gõ-kèm-vai** (§K.E). Định-nghĩa 2 engine + ký-ức-đổ-về-đúng-vai (K.C) + chất-lượng GIỮ NGUYÊN từ H19 — KHÔNG re-adopt.
> **Adopt S101 (2026-07-03), anh-directed** (`/check-email AI_INFRA` + `/adap-apply` → "Formal adopt + RC-stamp" + "full 2-workflow"). AI_INFRA broadcast `2026-07-03-Agent-harness-19-fable-clone` (content_sha256 re-compute **MATCH ✓** `6909299a…`; +3 broadcast model-tier cùng đợt [`fable-opus` `ee00d253` · `checklist` `a7ff304b` · `v2-pin-simple` `eed277f7`] đều MATCH + đều có `reviewer_gate: PASS` → format-regression H18 [thiếu field] đã fix). Áp qua 2-workflow Harness-9: **WF1 investigate `wf_5f308fd8-744`** (3 lane wiring+mapping+adversarial, SOUND_WITH_CONCERNS — bắt 3 floor-fidelity gap; resume-after-interruption cached) + **WF2 review `wf_ed5b972f-a4d`** (→ **PASS_WITH_CONCERNS** 0-BLOCKING: Lane-A mechanism PWC [1 CONCERN marker write-only no-reader → **FIXED S101** thêm session-start BƯỚC 0.5b reader] · Lane-B gov-record PASS [RC-mark 3-floor verbatim + vacuous-honest, 7 refutation fail] · Lane-C adap-honesty PASS [4 hash MATCH indep + 12/12 + no-overclaim]. ⚠️ **GAP-3 AS-10 fired LIVE** — lanes tự-ghi reviewer-memory dù RETURN-only-intent; harness-sanctioned "intentional" → KEPT + verified → dogfood-validate §K.C "GAP-3 = convention-KHÔNG-mechanism"). **Additive** — KHÔNG thay H8 all-inherit / bracket / promote; chỉ THÊM ensemble + toggle cho 2 vị-trí phán-quyết.
**K.A — Ánh-xạ 2 vị-trí phán-quyết vào roster SE (🔴 §7 sàn — WF1-confirmed best-fit, no superior alt):**
- **(a) Cổng rà-soát cuối** = `reviewer` (adversarial 6-category + Smart-Friend anti-rubber-stamp + live-curl falsify + phân-xử mâu-thuẫn). **(b) Ground-truth/xác-minh sự-thật** = `investigator-codebase` (truy bằng-chứng gốc file:line + sqlcmd + git, chống bịa + RCA). `investigator-api` EXCLUDED (external-only) · `database-agent` EXCLUDED (DB-only subset). = cặp dogfood S101 (WF2 3-lane reviewer · WF1 3-lane investigator-codebase).
- **(a) Cổng rà-soát cuối** = `reviewer` (adversarial 6-category + Smart-Friend anti-rubber-stamp + live-curl falsify + phân-xử mâu-thuẫn). **(b) Ground-truth/xác-minh sự-thật** = `investigator-codebase` (truy bằng-chứng gốc file:line + sqlcmd + git, chống bịa + RCA). `investigator-api` EXCLUDED (external-only) · `database-agent` EXCLUDED (DB-only subset). = cặp dogfood S101 (WF2 3-lane reviewer · WF1 3-lane investigator-codebase). **(H21 S110):** cặp này = **REFERENCE-EXAMPLE/likely-pick** (dogfood S101/S108), **KHÔNG còn auto-default** — vai do anh gán đích-danh trong lệnh (§K.E), MỌI vai roster 12 hợp-lệ.
**K.B — Cơ-chế 2 mode thật/ảo (🔴 §4 sàn) + toggle marker (🟡 form):**
- **Fable-real (thật, marker `.claude/fable-real-mode.on` CÓ):** 2 vị-trí chạy **1 lần top-model trực-tiếp** (sâu nhất). Fable up=single-Fable · down (H5)=single-Opus-1M per-run fallback (KHÔNG đổi mode toàn-cục).
- **Fable-clone (ảo, marker VẮNG = MẶC-ĐỊNH, §4 ít-kinh-phí):** 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.js parallel`) + em-main **refute + synthesize** (P3/P4) = "bản sao Fable".
- **Toggle = 2 lệnh** `/fable-real` (Write marker) + `/fable-clone` (Remove marker) mirror `/ultra-on`/`/ultra-off` — ⚠️ **semantic INVERSE:** marker-VẮNG = ảo-DEFAULT (khác hmw: marker-CÓ = feature-ON). marker **gitignored** (verify `git check-ignore` ✓; commit → thật-mode stuck-ON clone = burn quota, TỆ HƠN hmw vì elevate tier). Đổi mode CHỈ khi anh gõ (§4 — KHÔNG auto theo số-dư/cảm-tính, giữ mark `RC-…10-29-09`).
- 🧊 (retired H21 S110) **Fable-real (thật, marker `.claude/fable-real-mode.on` CÓ):** 2 vị-trí chạy **1 lần top-model trực-tiếp** (sâu nhất). Fable up=single-Fable · down (H5)=single-Opus-1M per-run fallback (KHÔNG đổi mode toàn-cục).
- 🧊 (retired H21 S110) **Fable-clone (ảo, marker VẮNG = MẶC-ĐỊNH, §4 ít-kinh-phí):** 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.js parallel`) + em-main **refute + synthesize** (P3/P4) = "bản sao Fable".
- 🧊 (retired H21 S110) **Toggle = 2 lệnh** `/fable-real` (Write marker) + `/fable-clone` (Remove marker) mirror `/ultra-on`/`/ultra-off` — ⚠️ **semantic INVERSE:** marker-VẮNG = ảo-DEFAULT (khác hmw: marker-CÓ = feature-ON). marker **gitignored** (verify `git check-ignore` ✓; commit → thật-mode stuck-ON clone = burn quota, TỆ HƠN hmw vì elevate tier). Đổi mode CHỈ khi anh gõ (§4 — KHÔNG auto theo số-dư/cảm-tính, giữ mark `RC-…10-29-09`).
**Thay bằng §K.E per-invocation.** Marker file đã xóa S110; `.gitignore:92` giữ pattern phòng-hờ.
**K.C — 3 floor-fidelity gap (🔴 WF1-L3 bắt — pin để stamp CÓ NGHĨA, không paperwork):**
- **GAP-1 scope-creep guard:** `hmw.js` VALID_ROLES nhận cả 10 vai (9 lúc adopt S101; +office-document S107), KHÔNG gate → all-inherit **CHE** leak (mọi vai top-tier nên mixed-roster "trông ổn"; Fable về + phân-tầng thì rò top-tier ensemble sang vai ngoài 2 vị-trí = vi phạm §3 hard-scope). → **ảo-run = N lane CÙNG 1 vai phán-quyết** (multi-lens), KHÔNG mixed-roster fan-out.
- **GAP-1 scope-creep guard:** `hmw.js` VALID_ROLES nhận cả 10 vai (9 lúc adopt S101; +office-document S107), KHÔNG gate → all-inherit **CHE** leak (mọi vai top-tier nên mixed-roster "trông ổn"; Fable về + phân-tầng thì rò top-tier ensemble sang vai ngoài 2 vị-trí = vi phạm §3 hard-scope). → **lệnh-B ensemble-run = N lane CÙNG 1 vai phán-quyết** (multi-lens), KHÔNG mixed-roster fan-out.
- **GAP-2 engine-label (§5):** `hmw.js` SCHEMA `memoryDelta{task,verdict,learned,surprise}` KHÔNG field engine → em-main **stamp nhãn engine @P3 harvest** (single-writer B3), như S101 "model-note Opus-S101". = convention KHÔNG mechanism.
- **GAP-3 AS-10 fragment:** mỗi run-trace ghi `*-synthesis.md` residual + lane giữ Bash (AS-10 fails-open) → "1 vai = 1 trí-nhớ" qua N lane giữ CHỈ bởi em-main single-writer. → **N lane RETURN-only**, em-main ghi 1 MEMORY entry/vai (+ nhãn engine).
**K.D — 3 floor-point RC-stamped (🔴 §9 — `RC-pqhuy1987-03-07-2026-17-46-35`, `ACTIVE-MARKS.md`):** (1) lead LUÔN top-model (KHÔNG đụng) · (2) CHỈ 2 vị-trí phán-quyết chạm top-model, CHỈ chế-độ thật do anh gõ (KHÔNG auto) · (3) mọi vai khác giữ model mặc-định. ⚠️ **VACUOUSLY-MET-for-SE-today:** dưới all-inherit + Fable-outage, reviewer+investigator-codebase ĐÃ top-model (Opus-1M) → point-2 grant **0 runtime-delta**; point-3 trivially-held (SE không có "vai khác" tier-thấp — all-inherit S66). Stamp KHÔNG overclaim runtime-delta; value = future-proof floor + governance-record. *(S108 update: Fable-UP + first-real-run → point-2 grant hoạt-động THẬT lần đầu — 2 vị-trí single-Fable deep ⟂ worker-draft pin tier-2 Opus; "vacuously-met" KHÔNG còn là trạng-thái thường-trực, tùy BƯỚC 0.6 probe per-session.)*
**K.D — 3 floor-point RC-stamped (🔴 §9 — `RC-pqhuy1987-03-07-2026-17-46-35`, `ACTIVE-MARKS.md`):** (1) 🧊 ~~lead LUÔN top-model (KHÔNG đụng)~~ [retired H21/mtv3 S110] → **MỚI:** lead = **frontier-class** do anh chọn per-session {Fable 5 | Opus 4.8 — 1M MAX} (model-tier-v3 2026-07-11); CẤM Sonnet/Haiku-class ghế lead; owner-chọn-hạng-hai ≠ outage → 0 caveat/0 revert-nghĩa-vụ · (2) 🧊 ~~CHỈ 2 vị-trí phán-quyết chạm top-model, CHỈ chế-độ thật do anh gõ (KHÔNG auto)~~ [retired H21 S110] → **MỚI:** top-model deep-run CHỈ trong lượt lệnh engine-đắt anh gõ KÈM VAI đích-danh (H21) — không còn 2-vị-trí-mặc-định, không còn mode · (3) mọi vai khác giữ model mặc-định (roster-tier). ⚠️ **VACUOUSLY-MET-for-SE-today:** dưới all-inherit + Fable-outage, reviewer+investigator-codebase ĐÃ top-model (Opus-1M) → point-2 grant **0 runtime-delta**; point-3 trivially-held (SE không có "vai khác" tier-thấp — all-inherit S66). Stamp KHÔNG overclaim runtime-delta; value = future-proof floor + governance-record. *(S108 update: Fable-UP + first-real-run → point-2 grant hoạt-động THẬT lần đầu — 2 vị-trí single-Fable deep ⟂ worker-draft pin tier-2 Opus; "vacuously-met" KHÔNG còn là trạng-thái thường-trực, tùy BƯỚC 0.6 probe per-session.)*
**Honest nấc tổng §K:** value THẬT ≠ cost (broadcast §8 "ensemble không rẻ hơn nhiều về token thô") mà = **anti-consensus-catch** (dogfood S101 WF2 Lane-B bắt `workflows/README:51` stale-label token-exact-sweep sót, commit `f229b07` — run-folder ephemeral, cite COMMIT) + formalize ensemble-heavy-judgment + thật/ảo depth-toggle owner-control + Fable-outage timeliness. Nấc = **designed + dogfooded** (ensemble-pattern proven S101; thật-mode toggle **first-real-run S108 2026-07-10** — 2-lane single-Fable song song 2-đầu-khác-trục review chính `fable-real-runbook.md`, verdict FAIL-then-fixed đúng Smart-Friend, form kết quả → runbook §5.5). Mechanized THẬT = CHỈ marker-toggle (Write/Remove gitignored, verify-idiom) + `hmw.js` parallel-lanes; scope-guard + engine-label + single-writer = **convention** (em-main kỷ-luật, hmw.js không gate vai). RC-sig + command `.md` = executed-file, verified-pending-restart (no hot-reload).
**K.E — H21 per-invocation + spec-file kết-tinh (🔴 sàn 5-điểm, adopt S110 — supersede K.B toggle):**
| Lệnh | Engine | Cách chạy |
|---|---|---|
| `/fable-real <vai> <đề-bài>` | **lệnh-A** single top-model | 1 vai anh gán chạy 1 lần top-model THẬT (deep pass; Fable up → single-Fable · outage → single-Opus-1M/run) |
| `/fable-clone <vai> <đề-bài>` | **lệnh-B** ensemble tier-2 | N lane đa-lăng-kính CÙNG 1 vai (`hmw.js parallel`) + em-main refute+synthesize |
- **(i) Vai owner-gán per-invocation:** `<vai>` ∈ roster 12 (`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/sai vai → **em-main hỏi anh 1 dòng**, KHÔNG tự đoán. Hiệu-lực CHỈ lượt đó (không marker, không sticky-mode). ⚠️ **Limitation lệnh-B × 2 monitor:** `tooling-auditor`·`harvest-curator``hmw.js` VALID_ROLES (**10** vai) → ensemble qua hmw **fail-soft default-subagent** (mất persona); cần ensemble 2 vai này → anh duyệt bổ sung VALID_ROLES (đổi code) hoặc dùng lệnh-A.
- **(ii) Spec-file pipeline (mỗi run engine-đắt PHẢI sinh):** `.claude/workflows/runs/<run-id>/spec-<tên-tính-năng>-<dd-mm-yyyy>.md` — 3-heading CỐ-ĐỊNH: **[1] Tính-năng/đề-bài** (13 câu) · **[2] Cách implement** (bước + quyết-định + ràng-buộc + đường-chết) · **[3] Checklist** (vai + deliverable + acceptance đo được). Luồng: engine **propose-only** → lead **verify****LEAD ghi** (single-writer) → worker **Opus MAX** thực-thi THEO spec bơm qua `args` (`hmw.js` KHÔNG đọc file spec).
- **(iii) 4 ghi-chú trung-thực (🔴 phải hiện-diện — nấc owner-gated, KHÔNG code-enforced §X8):**
- **(a)** owner-gated tầng LỆNH + kỷ-luật lead, **KHÔNG code-enforced**`hmw.js` không gate vai; đường code `tier:'fable'` vẫn tồn-tại. Bảo-đảm = MỌI đường truy về lượt owner-gõ (kỷ-luật), không phải guard chặn.
- **(b)** lệnh/alias = cách anh **gán vai NHANH** — hệ **KHÔNG tự chọn vai**, vẫn phải anh gõ.
- **(c)** spec-file do **lead ghi SAU khi verify** — engine không tự ghi.
- **(d)** run **chấm/verify CŨNG sinh spec** (kế-hoạch xử issue = "cách làm" cần kết-tinh, không chỉ run implement).
- **(iv) Map sàn 5-điểm:** ① spec-file mỗi run · ② worker thực-thi THEO spec · ③ chỉ chạy khi owner gõ lệnh · ④ vai owner-gán đích-danh · ⑤ lead KHÔNG tự-ý gọi engine-đắt.
- **(v) Honest nấc K.E:** codify S110 + dogfood **run-1 = chính lượt adopt này** (spec-file `2026-07-11-h21-mtv3-adopt`); **mechanized = 0** (convention + git-tracked spec làm audit-trail — KHÔNG guard code-enforced).
**Honest nấc tổng §K:** value THẬT ≠ cost (broadcast §8 "ensemble không rẻ hơn nhiều về token thô") mà = **anti-consensus-catch** (dogfood S101 WF2 Lane-B bắt `workflows/README:51` stale-label token-exact-sweep sót, commit `f229b07` — run-folder ephemeral, cite COMMIT) + formalize ensemble-heavy-judgment + thật/ảo depth-toggle owner-control + Fable-outage timeliness. Nấc = **designed + dogfooded** (ensemble-pattern proven S101; thật-mode toggle **first-real-run S108 2026-07-10** — 2-lane single-Fable song song 2-đầu-khác-trục review chính `fable-real-runbook.md`, verdict FAIL-then-fixed đúng Smart-Friend, form kết quả → runbook §5.5). Mechanized THẬT (pre-H21, 🧊 marker-toggle retired S110) = CHỈ marker-toggle (Write/Remove gitignored, verify-idiom) + `hmw.js` parallel-lanes; scope-guard + engine-label + single-writer = **convention** (em-main kỷ-luật, hmw.js không gate vai). RC-sig + command `.md` = executed-file, verified-pending-restart (no hot-reload). **S110 H21-update:** marker-toggle retired (mechanized-marker không còn); per-invocation = owner-gated convention + spec-file git-tracked.
---