Files
solution-erp/.claude/workflows/runs/2026-07-11-h21-mtv3-adopt/spec-h21-mtv3-adopt-11-07-2026.md

50 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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

# 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.