--- description: BẬT HMW-mode SOLUTION_ERP — task LỚN chạy Workflow fan-out (roster ĐẦY-ĐỦ — số vai canonical ở docs/STATUS.md §Sub-agents, KHÔNG chép số) + sub giữ ký ức slice + verify-before-memory-write (no-overwrite-unverified) + harvest LIỀN sau mỗi workflow. /ultra-off để tắt. Gõ = anh CONSENT chạy Workflow (deliberate on-ramp). argument-hint: (trống = bật mode · hoặc kèm task lớn đầu tiên) --- # /ultra-on — BẬT HMW-mode (SOLUTION_ERP) > Cặp **`/ultra-off`**. 🔴 restart Claude Code sau khi tạo/sửa (command `.md` no hot-reload). > Gõ lệnh này = **CONSENT chạy Workflow fan-out** · scope **CHỈ repo SOLUTION_ERP** (S1 — KHÔNG fan-out repo/corpus khác) · workflow-agent = **worker-tier-pin `opus`+`effort:max`** (role-có-frontmatter, S124; lead = DEFAULT Opus 5 MAX (thư `9c909007` @S149 (re-stamp 07-25 G-024a; pre `59ce1d0f`) — 🧊 MTv3 owner-choice-per-session S110 superseded-VALUE; Fable = `/model` đầu phiên hoặc `/fable-real`); role-less→inherit lead S63; Fable qua /fable-real). > **Mode persist qua marker:** `/ultra-on` → em main tạo `.claude/hmw-mode.on` (Write) + vào mode → SỐNG qua session/compact. `/ultra-off` xóa. **`/session-start` đọc marker → BÁO anh ON/OFF** (khỏi quên đang ở mode đốt-token). marker = source-of-truth · **gitignored** (KHÔNG commit — tránh mode kẹt-ON khi clone = on-ramp ungoverned). **Task đầu (nếu có):** $ARGUMENTS ## 🚦 Keyword = QUYỀN, KHÔNG phải LỆNH (T4 — bài học 515K-token false-trigger) - Chữ "workflow" / "ultracode" trong câu anh HOẶC trong reminder harness = **MỞ QUYỀN hỏi** (eligibility-to-ask), **KHÔNG** auto-run Workflow. - Mode-OFF + anh nói "chạy workflow" → em main **TỪ CHỐI + nhắc anh gõ `/ultra-on`**, KHÔNG tự chạy. - 🔴 CẤM dùng native `/effort ultracode` (nó auto-author+run workflow MỌI task — KHÔNG checkpoint / KHÔNG memory-harvest / KHÔNG scope-guard = ngược thiết kế). HMW = home-built orchestrator-workers, **marker-gated**. - 🟢 **H6.1 (governed-ultracode, adopt S63) — mode-ON = auto-HMW:** mode ON → task **SUBSTANTIVE** (≥2 bước độc-lập · multi-file · sweep/audit/review/migration/research/verify-heavy) em main **TỰ author+chạy Workflow** (KHÔNG cần anh gõ "workflow"; marker-ON = standing consent — vẫn checkpoint INFORM `{số agent·vai·task}` rồi chạy NGAY). Task **TRIVIAL / governance-authoring single-writer** → solo (chống token-nổ). Ranh giới = "workflow có giúp THẬT không"; nghi-ngờ nghiêng workflow, KHÔNG workflow 1-câu-hỏi-đáp. = lấy sự-tiện native ultracode + GIỮ guard HMW. (H6.7 role+memory-fidelity ĐÃ là floor sẵn: `agentType ∈ VALID_ROLES` + `memoryDelta`→agent-memory single-writer B3.) ## Phân loại (em main mỗi task) - **HMW (LỚN):** fan-out nhiều file/nguồn — sweep · audit · cross-stack review · mass migration · multi-source research. Số task THOẢI MÁI (harness queue theo slot, KHÔNG cap cứng) · spawn **ĐÚNG VAI** (`agentType` ∈ VALID_ROLES; role lạ ∉ VALID_ROLES → `hmw.js` THROW STOP-HARD + báo owner (REC-3 2026-07-13); role-less null → inherit lead). - **Thường (nhỏ):** <30min · 1–2 file · hỏi-đáp → Agent-tool spawn lẻ / solo theo `.claude/agents/README.md` decision-tree, KHÔNG HMW. ## VALID_ROLES (roster SOLUTION_ERP — số vai canonical → [`docs/STATUS.md`](../../docs/STATUS.md) §Sub-agents, B1 KHÔNG chép số ở đây) `investigator-codebase` · `investigator-api` · `implementer-backend` · `implementer-frontend` · `test-specialist` · `reviewer` · `cicd-monitor` · `frontend-designer` · `database-agent` · `office-document` (+S107) · `tooling-auditor` · `harvest-curator` (+S110 anh-directed — monitor vẫn INFORM-only, lane RETURN-only) · `lead-stale-auditor` · `lead-gap-auditor` (**+S121 W2** — 2 monitor H24 lead-self-audit, INFORM-only propose-only; class-flag = enum ĐÓNG `lead_self_audit.flag_classes` ở `.claude/agent-memory/memory-budget.json`, nhịp = `h24_cadence` cùng file) > Role lạ ∉ VALID_ROLES → `hmw.js` **THROW (STOP-HARD)** + báo owner thêm vai (REC-3 2026-07-13; fail-soft cũ "đứt âm-thầm" đã bỏ); role-less null → inherit lead. Windows MAX_PATH (Dropbox nested) → KHÔNG `isolation:worktree`. ## Quy trình HMW — vai trò từng phase | Phase | Ai | Làm | |---|---|---| | **P0** prep | 👤 em main | đọc MEMORY sub liên quan → **memory-pack SLICE/vai** (KHÔNG full) + `taskList` + chụp **chunk-count Qdrant baseline** + git status sạch | | **P1** decide | sub liên quan (full memory) | recommend approach + **acceptance-checklist** → em main chốt plan | | 🔴 **P1-run** scaffold | 👤 em main | **BẮT BUỘC khi `taskList.length ≥ 3`** (Sàn-1 H22, cơ-khí-hoá S121 W2): scaffold `.claude/workflows/runs//` (TRACKED) + `run.md` kèm **`## taskList snapshot`** → truyền `args.run = { name, dir }`. **Thiếu cờ + ≥3 task ⇒ `hmw.js` THROW STOP-HARD.** Script chạy JS-sandbox **KHÔNG filesystem** ⇒ tự nó không tạo folder được ⇒ đây là lý-do gate nằm ở em-main chứ không ở script. Bỏ qua ⇒ chết giữa run là **mất trace** (per-turn returns chết theo phiên; **chỉ file trên đĩa sống sót**) ⇒ `/tiep` §4 phải chạy lại TỪ ĐẦU thay vì cắt-gọt. 🔸 Ngưỡng *"hoặc ước >5 phút"* KHÔNG cơ-khí-hoá được ⇒ phần đó là kỷ-luật lead. 🔸 raw `Workflow`/`Agent` tool = **kẽ CÒN-LẠI** không gate được từ đây | | ⏸ **checkpoint** (inform) | 👤 em main | BÁO `{số agent · vai · task}` @inform → set `args.checkpointApproved=true` → fan-out NGAY (marker-ON=consent; anh interrupt nếu sai — KHÔNG chờ confirm từng lần) | | **P2** execute | Workflow `hmw` | fan-out agent: **memory-pack injected** qua `args` + `agentType` + schema. DEFAULT read/analyze; write = file-disjoint. **worker-tier-pin** (S124): role-có-frontmatter = `opus`+`effort:max` · role-less→inherit lead · per-task `tier:'opus'` escape-hatch (`tier:'fable'` CHỈ trong lượt lệnh engine-đắt anh gõ — H21 S110; H23-precedence ĐO S126: spawn-param THẮNG pin ⇒ /fable-real sống) | | **P3** harvest | 👤 em main (single-writer) | **NGAY sau P2** → VERIFY delta + APPEND-only vào MEMORY.md **mọi agent tham gia** (B3) | | **P4** final | sub quality (full memory) | reviewer PASS/FAIL · cicd-monitor drift · investigator verify · implementer/test scope → return delta | | **→** | 👤 em main | synthesize + **git-diff** + **chunk-count check** + commit (anh OK) | ## 🧠 KỶ LUẬT KÝ ỨC (cốt lõi — M1..M5 + R1) - **B1 (M1) có ký ức:** agent vai X ← memory-pack **slice của đúng sub X** (qua `args`; script KHÔNG đọc file — lead đọc `.claude/agent-memory/X/MEMORY.md` @P0 rồi bơm @P2). KHÔNG full memory. - **B2 (M4) đúng chỗ + harvest-LIỀN:** delta vai X → `.claude/agent-memory/X/MEMORY.md`. Harvest NGAY sau MỖI workflow (KHÔNG gom cuối session) → memory mọi agent fresh TRƯỚC lần spawn kế. Tốc-độ KHÔNG override B3. - **B3 (M3) KHÔNG ghi đè nếu chưa kiểm tra:** em main = **single-writer**, VERIFY delta → **APPEND-only**; KHÔNG overwrite/sửa/xóa entry cũ trừ khi verified; delta nghi ngờ → **pending-verify** (không nhập). *(Generalize: memory cũ = tài sản.)* - **R1 return contract:** mỗi agent return `findings` + `memoryDelta{task,verdict,learned,surprise}` (bắt buộc) + `checklistEvidence` (tùy). Agent **CHỈ return** — KHÔNG tự ghi ký ức kênh nào. - **M5 prereq (verify-ONLY, KHÔNG re-author):** `store_memory` đã strip khỏi MỌI sub (broadcast `Memory-store-memory-strip-global`, applied S47) → kênh RAG-write mechanized-blocked. Re-verify intact: `grep store_memory .claude/agents/*.md` → **0** ở dòng `tools:`. ### 🔴 Enforcement THẬT (G-015 — KHÔNG overclaim) - **Mechanized** = CHỈ `store_memory` gỡ khỏi allowlist (tool RAG-write đó **không-gọi-được**). KHÔNG = agent "read-only". - *"KHÔNG ghi file MEMORY.md"* = **prompt-rule, CHƯA mechanized** — sub vẫn giữ `Bash` (+ `Write/Edit` vai write) = kênh ghi MỞ (Bash ghi file bất kỳ / curl thẳng Qdrant `:6333`). - **Containment thật = defense-in-depth:** `git diff` post-P2 (bắt file-write) + **chunk-count Qdrant pre/post-P2** (bắt RAG-write). Lỗ residual (ghi ngoài-repo / Qdrant net-zero-delta) → sandbox / strip-`Bash` khỏi vai read-only = **defer** (Bash cần cho audit). **Guards:** S1 scope-repo-mình · S2 checkpoint-throw (`hmw.js` GIỮ anti-accidental) · S3 sub-KHÔNG-spawn-sub · B3 + harvest-liền · git-diff + chunk-count post-P2 · same-model · số-task-thoải-mái + spawn-đúng-vai · KHÔNG bỏ P3.