diff --git a/.claude/agents/README.md b/.claude/agents/README.md index 5bcb09b..97d4cfb 100644 --- a/.claude/agents/README.md +++ b/.claude/agents/README.md @@ -205,7 +205,7 @@ All 12 agent có **4 RAG-READ MCP**: `search_memory` + `search_code` (BM25, pref - **Keyword = QUYỀN, KHÔNG lệnh (T4):** "workflow"/"ultracode" mở quyền hỏi, KHÔNG auto-run. Mode-OFF + "chạy workflow" → TỪ CHỐI + nhắc `/ultra-on`. CẤM native `/effort ultracode`. *(Bài học 515K-token false-trigger.)* - **Scope (S1):** Workflow fan-out CHỈ repo SOLUTION_ERP — KHÔNG fan-out repo/corpus khác. - **Checkpoint (S2):** `hmw.js` **throw** nếu `checkpointApproved≠true` (mechanized tripwire anti-accidental). Em main BÁO {số agent·vai·task} @inform → set cờ → fan-out (KHÔNG chờ confirm từng lần; marker-ON=consent). Sub KHÔNG spawn sub (S3). -- **VALID_ROLES (10 — whitelist `hmw.js`):** `investigator-codebase` · `investigator-api` · `implementer-backend` · `implementer-frontend` · `test-specialist` · `reviewer` · `cicd-monitor` · `frontend-designer` · `database-agent` (+S57 — S56 đã dùng 3× qua fail-soft WARN) · `office-document` (+S107 — Office WRITE OD1–OD10). Role lạ → default subagent + WARN (fail-soft, S4c). +- **VALID_ROLES (12 — whitelist `hmw.js`, đủ roster):** `investigator-codebase` · `investigator-api` · `implementer-backend` · `implementer-frontend` · `test-specialist` · `reviewer` · `cicd-monitor` · `frontend-designer` · `database-agent` (+S57 — S56 đã dùng 3× qua fail-soft WARN) · `office-document` (+S107 — Office WRITE OD1–OD10) · `tooling-auditor` + `harvest-curator` (+S110 anh-directed — H21 roster-parity lệnh-B; monitor vẫn INFORM-only, lane RETURN-only). Role lạ → default subagent + WARN (fail-soft, S4c). - **Memory governance (M1–M5 + R1):** B1 slice-inject (agent ← slice MEMORY của đúng vai qua `args`) · M2 return-delta-only (`memoryDelta{task,verdict,learned,surprise}`) · B3 lead single-writer VERIFY→APPEND-only (no-overwrite-unverified) · B2 harvest-LIỀN sau mỗi workflow vào `agent-memory/` · M5 `store_memory` strip (đã S47). **Containment = defense-in-depth** (git-diff + Qdrant chunk-count post-P2), KHÔNG allowlist đơn-độc (G-015: sub vẫn giữ Bash/Write — KHÔNG "read-only"). > Floor T/S/M/R đầy đủ → `.claude/commands/ultra-on.md`. adap-report → `docs/governance/adap-reports/2026-06-03-Agent-ultracode-hmw-mem-governance.md`. diff --git a/.claude/commands/fable-clone.md b/.claude/commands/fable-clone.md index 80ccb1f..d3c7d75 100644 --- a/.claude/commands/fable-clone.md +++ b/.claude/commands/fable-clone.md @@ -18,7 +18,7 @@ argument-hint: <đề-bài phán-quyết> — vd "reviewer r ## 🔴 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 `` 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`. +- ✅ **VALID_ROLES đủ roster 12 (S110 anh-directed):** 2 monitor `tooling-auditor` · `harvest-curator` đã bổ sung vào `hmw.js` VALID_ROLES (10→12) — lệnh-B dùng được trọn roster. *(🧊 limitation cũ 10-vai + H6-design "monitor ngoài workflow" superseded điểm này; monitor vẫn INFORM-only, lane RETURN-only.)* - 🔒 **Honest-note (a/b):** bảo-đảm = **owner-gated tầng lệnh + kỷ-luật lead**, **KHÔNG code-enforced**; lệnh/alias = cách anh **gán vai nhanh**, hệ **KHÔNG tự chọn vai**. ## 🔴 Spec-file 3-mục BẮT BUỘC mỗi run (H21 ①) @@ -31,7 +31,7 @@ Mỗi lần chạy engine-đắt PHẢI kết-tinh 1 spec theo pipeline **propos - 🔒 **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). +- **ả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 = **12 vai** đủ roster từ S110; 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). diff --git a/.claude/commands/ultra-on.md b/.claude/commands/ultra-on.md index 251da5e..fdd1a01 100644 --- a/.claude/commands/ultra-on.md +++ b/.claude/commands/ultra-on.md @@ -21,8 +21,8 @@ argument-hint: (trống = bật mode · hoặc kèm task lớn đầu tiên) - **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ạ → default subagent + cảnh báo). - **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 — 10 sub) -`investigator-codebase` · `investigator-api` · `implementer-backend` · `implementer-frontend` · `test-specialist` · `reviewer` · `cicd-monitor` · `frontend-designer` · `database-agent` · `office-document` (+S107) +## VALID_ROLES (roster SOLUTION_ERP — 12 sub, đủ roster từ S110) +`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) > Role lạ ∉ list → `hmw.js` degrade về default subagent + WARN (fail-soft, KHÔNG crash). Windows MAX_PATH (Dropbox nested) → KHÔNG `isolation:worktree`. ## Quy trình HMW — vai trò từng phase diff --git a/.claude/governance/ACTIVE-MARKS.md b/.claude/governance/ACTIVE-MARKS.md index 357f252..28b3105 100644 --- a/.claude/governance/ACTIVE-MARKS.md +++ b/.claude/governance/ACTIVE-MARKS.md @@ -16,7 +16,7 @@ | `RC-pqhuy1987-20-06-2026-10-29-10` | `engine §E` (≙ §P) | Codify **User-Mark + chữ-ký RC** (Harness-12/13) — chữ-ký quyết-định governance + 4 cấp + no-cảm-tính deterministic + report-before-stamp | **pain:** quyết-định governance bị quên / giảm-bằng-cảm-tính (không chữ-ký+tier) · **volume:** SE tích-lũy Harness 1-14 cần audit-trail nhất-quán · **quality:** RC-sig = minh-oan + tranh-luận-bằng-bằng-chứng + trách-nhiệm-2-chiều | null | 🔖 **Active-High** (anh-confirm S79 · P4 dogfood: invest-wf→review-wf→báo-cáo→confirm→stamp) | | `RC-pqhuy1987-20-06-2026-10-29-11` | `rules.md §6.6 DM-time/age` (≙ §F4.2-ext / H-14) | **Mở-rộng mark-1** — time/age/recency-decay = **false-proxy** (cùng-họ team-size); kiến-trúc KHÔNG dựa cũ / lâu-chưa-dùng / auto-decay; trần budget=(dung-lượng÷tốc-độ-thay-mới) KHÔNG núm-decay-tuổi, drift=đường-nền-cuộn KHÔNG cửa-sổ-tuổi; **additive** (mark-1 GIỮ) | **pain:** cap∝chunk_count = Goodhart-vanity + age-window drift = alarm-spam (sự-cố thật H-14); SE memory-budget từng dễ mắc "giảm-theo-độ-cũ" · **volume:** 6 dự-án áp budget/drift/eval + SE L1/L2/L3 + archive-gate · **quality:** age-decay cắt memory-tốt = false-economy (DM-004 Goodhart §6.6) | null (additive) | 🔖 **Active-High** (anh-confirm S79 via `/user-mark-active-high` · P4 DACI · supersedes:null) | | `RC-pqhuy1987-20-06-2026-23-07-37` | `harness-11-engine.md §G` + `memory-budget.json` + `rules.md §6.6` (≙ AI_INFRA H-15) | **H-15 memory-budget per-agent (token-based):** token-governor (**v3 §G.5 S83:** Tầng-1 hot-feed per-role **lead 380K (v4 §G.5 S94 owner-override, SE-specific để chứa full read-set ~368K — lead KHÔNG còn AI_INFRA-parity)/mem-sub 60K/wf-sub 50K** (subs giữ parity) + **spawn-fill-to-budget** (sub Tầng-1 = MEMORY.md byte-cap + spawn-prompt giàu, `spawn_fill_directive`); **v2 §G.4 S82:** L2/L3 **bỏ-trần** on-demand + báo-% 2-đầu-phiên; con-số = **quyền CHỦ-DỰ-ÁN/anh** + AI thực-thi-đúng-số + báo-%) + **value-gated archival** (giữ recurring-bug/anti-pattern/gotcha bất-kể tuổi) + fill-L1-full (budget = sàn-tận-dụng KHÔNG trần-tiết-kiệm) + work-state-block @session-start + %-print 2-đầu-phiên + 2-governor (byte⟂token) | **pain:** tiết-kiệm-token → quên-việc/rơi-trạng-thái giữa phiên (sự-cố thật — Tầng-1 mỏng = lead quên việc nhiều phiên, bằng-chứng v2); SE keep-floor age-based có thể archive gotcha cũ ra khỏi L1 — value-gate FLAG đã bắt thật (test-specialist gotcha#/guard) · **volume:** 11-agent × (SÀN 30K + Tầng-1 hot-feed per-role lead 220K/mem-sub 60K/wf-sub 50K, v3 §G.5 full-parity) always-load/spawn + L2 archive ~240KB (cicd 194KB) cần value-protect · **quality:** quên-việc → làm-lại → tốn-hơn (Goodhart); giữ hard-won lessons | null (additive — mark `…11` GIỮ; H-15 mở-rộng value-axis xuống tầng-bộ-nhớ) | 🔖 **Active-High** (anh-confirm S81 · **v2-delta anh-confirm S82** `RC-pqhuy1987-21-06-2026-01-58-01` — hot-feed-lớn/bỏ-trần/anh-authority · **v3-delta anh-directed S83** `RC-pqhuy1987-22-06-2026-16-35-37` — full-parity 220/60/50 + spawn-fill-to-budget · **v4-delta anh-directed S94** `RC-pqhuy1987-29-06-2026-23-25-50` — lead 220K→**380K** SE-override để chứa full read-set ~368K (⚠️ ~97% fill = context-rot trade-off owner-accepted; trần budget ⟂ harness Read-25K/call → mega-line STATUS/HANDOFF VẪN cần re-tier mới Read-trọn), P4 DACI report-before-stamp ✓) | -| `RC-pqhuy1987-03-07-2026-17-46-35` | `harness-11-engine.md §K` + `.claude/commands/fable-{real,clone}.md` + marker `.claude/fable-real-mode.on` (≙ AI_INFRA H-19) | **H-19 "model ảo" ensemble + thật/ảo depth-toggle cho 2 vị-trí phán-quyết** (reviewer=cổng-cuối · investigator-codebase=ground-truth). **3 floor-point:** (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õ lệnh (KHÔNG auto/số-dư) · (3) mọi vai khác giữ model mặc-định. ⚠️ **VACUOUSLY-MET-SE-today** (all-inherit → 2 vị-trí ĐÃ top-model → point-2 grant 0-runtime-delta; point-3 trivial vì SE 0 vai tier-thấp); value = future-proof floor + ensemble-designation + toggle governance-record — KHÔNG overclaim runtime-delta | **pain:** "quyết-theo-từng-tác-vụ dễ quên hạ-tầng" (sự-cố thật fleet đã RCA) → floor-record chống drift + audit-trail cho phép-2-vị-trí-top-model khi Fable về + phân-tầng · **volume:** 2 vị-trí × 2 mode × N-lane ensemble cần scope-guard (GAP-1 leak all-inherit che tới khi Fable về) · **quality:** anti-consensus-catch (dogfood S101 WF2 Lane-B bắt `workflows/README:51` sweep-sót, `f229b07`) > single-reviewer — ensemble-value = tầng phản-biện KHÔNG cost | null (additive — KHÔNG thay H8/bracket; THÊM ensemble+toggle) | 🔖 **Active-High** (anh-confirm S101 via AskUserQuestion "Formal adopt + RC-stamp" · P4 report-before-stamp: `/check-email`→WF1-investigate `wf_5f308fd8-744`→present→confirm→stamp) | +| `RC-pqhuy1987-11-07-2026-20-42-01` | `harness-11-engine.md §K.E` + `.claude/commands/fable-{real,clone}.md` + `session-start BƯỚC 0.5b/0.6` (≙ AI_INFRA H-21 + model-tier-v3) | **H-21 engine-đắt PER-INVOCATION + spec-file kết-tinh + MTv3 lead owner-choice** (supersede-partial H19). **Sàn:** (1) engine-đắt CHỈ chạy trong lượt anh gõ `/fable-real\|/fable-clone <đề-bài>` — vai anh gán đích-danh ∈ roster 12, thiếu/sai → hỏi anh, lead KHÔNG tự ý (kể cả HMW-ON) · (2) mỗi run sinh **spec-file 3-mục** (engine propose → lead verify → LEAD ghi → worker hạng-hai thực thi theo spec, kể cả run chấm/verify) · (3) lead = **frontier-class do anh chọn 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ụ), outage đóng → hỏi anh ĐÚNG 1 dòng · (4) 4 ghi-chú trung-thực a-d giữ nguyên nấc (owner-gated + kỷ-luật, KHÔNG code-enforced). K.C 3 GAP-guard + định-nghĩa 2 engine GIỮ từ H19 | **pain:** "quyết-theo-từng-tác-vụ dễ quên hạ-tầng" (kế thừa H19) + cách-làm bay hơi trong prompt → spec-file kết tinh git-tracked (sự-cố thật hub) + flip-chain dán nhãn outage khi thật ra owner-choice · **volume:** mọi lượt engine-đắt × 12 vai × 2 lệnh + BƯỚC 0.6 mỗi phiên + worker-pipeline theo spec · **quality:** audit-trail spec qua git + owner-gated chống auto-elevate + reviewer-Fable dogfood run-1 bắt 5 Major thật (M1 worker-đổi-fact · M2 boundary-gap → VALID_ROLES 12) | `RC-pqhuy1987-03-07-2026-17-46-35` (partial — floor-point 1/2 + marker-toggle; K.C + 2-engine GIỮ) | 🔖 **Active-High** (anh-confirm S110 via AskUserQuestion "Stamp mark MỚI thay mark cũ" · P4 report-before-stamp: `/check-email`→invest-Fable→spec→WF `wf_0c3b307f-a64`→reviewer-Fable PASS_WITH_FIXES→fix→present→confirm→stamp) | ## 🟢 ACTIVE (follow + nhắc-lại xuyên-suốt — HIỆN @session) _(trống)_ @@ -25,4 +25,7 @@ _(trống)_ _(trống)_ ## 📦 SUPERSEDED / DISABLED (ẨN khỏi session display — giữ audit-trail, KHÔNG xóa) -_(trống)_ + +| ID (RC-signature) | §-target SE (≙ AI_INFRA) | What | objective-criteria (pain · volume · quality) | supersedes | Status | +|---|---|---|---|---|---| +| `RC-pqhuy1987-03-07-2026-17-46-35` | `harness-11-engine.md §K` + `.claude/commands/fable-{real,clone}.md` + marker `.claude/fable-real-mode.on` (≙ AI_INFRA H-19) | **H-19 "model ảo" ensemble + thật/ảo depth-toggle cho 2 vị-trí phán-quyết** (reviewer=cổng-cuối · investigator-codebase=ground-truth). **3 floor-point:** (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õ lệnh (KHÔNG auto/số-dư) · (3) mọi vai khác giữ model mặc-định. ⚠️ VACUOUSLY-MET-SE-today lúc stamp; first-real-run S108 đóng nấc | **pain:** "quyết-theo-từng-tác-vụ dễ quên hạ-tầng" (sự-cố thật fleet đã RCA) · **volume:** 2 vị-trí × 2 mode × N-lane ensemble cần scope-guard · **quality:** anti-consensus-catch (dogfood S101 `f229b07`) | null (additive) | 📦 **SUPERSEDED-partial S110** bởi `RC-pqhuy1987-11-07-2026-20-42-01` (H21+MTv3 per-invocation — floor-point 1/2 + marker-toggle thay; K.C 3 GAP-guard + định-nghĩa 2 engine GIỮ SỐNG trong mark mới). Stamp gốc: anh-confirm S101 · P4 dogfood WF1 `wf_5f308fd8-744` + WF2 `wf_ed5b972f-a4d` | diff --git a/.claude/workflows/README.md b/.claude/workflows/README.md index ca8c0be..febd612 100644 --- a/.claude/workflows/README.md +++ b/.claude/workflows/README.md @@ -32,7 +32,7 @@ Phân biệt RAW (prefix `sub-`) vs VERIFIED (suffix `-synthesis.md`) bằng **T ## Quy trình RUN-TRACE (B1–B6) 1. **B3 SCAFFOLD TRƯỚC (em main @P1):** tạo `runs//` + `run.md` (FLAT — KHÔNG cần `sub-md/`/`harvest/` subfolder hay `.gitkeep`; file `sub-*`/`*-synthesis.md` sinh phẳng cùng cấp khi fan-out chạy). *(🧊 bước "ghi OPEN-beat vào `runs/_ledger.md`" retired H18-B S100 — orphan-authority = folder-scan.)* ⚠️ `hmw.js` chạy JS-sandbox **no-filesystem** → KHÔNG tự tạo folder; **em main Write @P1** TRƯỚC khi invoke Workflow. (Đây là fragile-point — quên scaffold = run mất dấu-vết âm-thầm; xem `runs/README.md` §C7.) -2. **B1 spawn-from-real-sub:** mỗi task `role ∈ VALID_ROLES` (10 sub) → workflow-agent = sub THẬT (`agentType` inherit memory-pack slice + skill identity), KHÔNG agent vô-danh. +2. **B1 spawn-from-real-sub:** mỗi task `role ∈ VALID_ROLES` (12 sub — đủ roster từ S110, +2 monitor anh-directed) → workflow-agent = sub THẬT (`agentType` inherit memory-pack slice + skill identity), KHÔNG agent vô-danh. 3. **B4 phân-quyền TOOL-AWARE:** `hmw.js` inject vào prompt mỗi sub đường-dẫn `runs//sub--.md` (phẳng) + lệnh ghi ĐÚNG file đó. - **Write sub (CÓ Write/Edit):** implementer-backend · implementer-frontend · test-specialist · frontend-designer → ghi-direct sub-MD via Write/Edit. - **Read-only sub (CHỉ Bash):** investigator-codebase · investigator-api · reviewer · cicd-monitor → 🔴 KHÔNG Bash-write MD (mojibake) → full-detail vào `findings` + `subMdPath` → **em main scribe @P3** (single-writer). diff --git a/.claude/workflows/hmw.js b/.claude/workflows/hmw.js index c1e7849..f1f6610 100644 --- a/.claude/workflows/hmw.js +++ b/.claude/workflows/hmw.js @@ -25,6 +25,8 @@ const VALID_ROLES = [ 'test-specialist', 'reviewer', 'cicd-monitor', 'frontend-designer', 'database-agent', // +S57 — S56 dùng 3× qua fail-soft WARN; read-advisory DB lens (DB1-DB11) 'office-document', // +S107 — Office document WRITE specialist (OD1-OD10; docx/xlsx/pptx/pdf + form-engine) + 'tooling-auditor', 'harvest-curator', // +S110 anh-directed (H21 roster-parity lệnh-B ensemble; supersede + // điểm H6-design "monitor ngoài workflow" — monitor VẪN INFORM-only, lane RETURN-only nên không xung đột) ] // ─── H8 all-inherit top-tier (Harness-8 adopt 2026-06-16 — thay thế two-tier H4.5) ── diff --git a/docs/STATUS.md b/docs/STATUS.md index 540180c..d5a0d36 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -35,7 +35,7 @@ | Task | Owner | Status | |---|---|---| -| ✅ **S110 adopt H21 + model-tier-v3** (4 msg AI_INFRA hash-verified 4/4) — marker fable-real RETIRED → **per-invocation** `/fable-real\|/fable-clone <đề-bài>` + **spec-file 3-mục mỗi run engine-đắt** (K.E mới) + MTv3 lead=owner-choice (BƯỚC 0.6 reword, 0 revert-nghĩa-vụ, 1-line-ask) + triage-S5 hot-reload ENV-DEPENDENT caveat. Pipeline đúng lệnh anh: invest-**Fable** → spec `runs/2026-07-11-h21-mtv3-adopt/` → WF **`wf_0c3b307f-a64`** 3-worker-**Opus** → reviewer-**Fable** **PASS_WITH_FIXES** (5M+9m → fixed; M2 = boundary-gap lệnh-B × 2 monitor ∉ VALID_ROLES documented). ⚠️ #53-garble ×2 (invest + reviewer Fable-lane) → **SendMessage-resume recover 2/2 sạch**. 2 adap-report + 3 supersede-note + STAGE-2 done | 👤 em main + 🟦🟥 Fable + 3 Opus-worker | 🟢 done | +| ✅ **S110 adopt H21 + model-tier-v3** (4 msg AI_INFRA hash-verified 4/4) — marker fable-real RETIRED → **per-invocation** `/fable-real\|/fable-clone <đề-bài>` + **spec-file 3-mục mỗi run engine-đắt** (K.E mới) + MTv3 lead=owner-choice (BƯỚC 0.6 reword, 0 revert-nghĩa-vụ, 1-line-ask) + triage-S5 hot-reload ENV-DEPENDENT caveat. Pipeline đúng lệnh anh: invest-**Fable** → spec `runs/2026-07-11-h21-mtv3-adopt/` → WF **`wf_0c3b307f-a64`** 3-worker-**Opus** → reviewer-**Fable** **PASS_WITH_FIXES** (5M+9m → fixed; M2 boundary-gap lệnh-B × 2 monitor → **RESOLVED cùng phiên: anh-directed VALID_ROLES 10→12** đủ roster). ⚠️ #53-garble ×2 (invest + reviewer Fable-lane) → **SendMessage-resume recover 2/2 sạch**. 2 adap-report + 3 supersede-note + STAGE-2 done | 👤 em main + 🟦🟥 Fable + 3 Opus-worker | 🟢 done | | **Mark-proposal H21+MTv3** (supersede `RC-…17-46-35` → 📦) — trình anh cuối phiên | 👤 anh | ⚪ pending anh confirm | | **PE "lỗi phân quyền vào phiếu"** (anh Kiệt UAT) — chờ **số-phiếu + user** soi config workflow | 👤 em main | ⚪ pending (chờ anh specifics, carry S103) | diff --git a/docs/governance/adap-reports/2026-07-10-Governance-harness-21-spec-file-invocation.md b/docs/governance/adap-reports/2026-07-10-Governance-harness-21-spec-file-invocation.md index 3cc25e7..a41d6e2 100644 --- a/docs/governance/adap-reports/2026-07-10-Governance-harness-21-spec-file-invocation.md +++ b/docs/governance/adap-reports/2026-07-10-Governance-harness-21-spec-file-invocation.md @@ -17,7 +17,7 @@ ## 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//` git-TRACKED → owner audit qua git, đúng mục-đích khoản ①); naming `spec--.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 #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). → **RESOLVED CÙNG PHIÊN:** anh-directed (AskUserQuestion S110) bổ sung 2 monitor → VALID_ROLES **12** đủ roster (`hmw.js:28-29`, node --check PASS; supersede điểm H6-design "monitor ngoài workflow" — monitor vẫn INFORM-only, lane RETURN-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). diff --git a/docs/governance/fable-real-runbook.md b/docs/governance/fable-real-runbook.md index f340be2..4a1f33a 100644 --- a/docs/governance/fable-real-runbook.md +++ b/docs/governance/fable-real-runbook.md @@ -91,12 +91,12 @@ Rule gitignore neo tại **`.gitignore:92`** (`.claude/fable-real-mode.on`), đ | 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`) | 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) | +| 6 | **role / agentType** | `VALID_ROLES \| undefined` | `hmw.js:22-30` (whitelist) + filter + `agentType` | vai engine-đắt = **anh gán** (H21, mọi vai roster 12; §3/§4 template = `reviewer` · `investigator-codebase`); VALID_ROLES = 12 đủ roster (+2 monitor S110) | | 7 | **memoryPack** | `Record` | `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--.md`) | | 10 | **SCHEMA.memoryDelta** | `{task,verdict,learned,surprise}` 4-field required | `hmw.js:54-64` (required `:57`) | **RETURN-only**; agent KHÔNG tự ghi ký-ức → em-main harvest @P3 | -| 11 | **VALID_ROLES** | `const string[10]` | `hmw.js:22-28` | 8 core + `database-agent`(S57) + `office-document`(S107) | +| 11 | **VALID_ROLES** | `const string[12]` | `hmw.js:22-30` | 8 core + `database-agent`(S57) + `office-document`(S107) + `tooling-auditor`/`harvest-curator`(S110 anh-directed) | | 12 | **engine-label** | string (em-main stamp — KHÔNG có field trong SCHEMA) | `§K.C GAP-2` `harness-11:329` | em-main @P3 gắn nhãn engine đã dùng (xem 2.4) | **resolveModel logic thật (`hmw.js:37-45`) — trích:** @@ -172,7 +172,7 @@ Nguồn: `harness-11-engine.md §K.C:327-330`. Pin để stamp CÓ NGHĨA (khôn | Tình huống | Engine | Cơ-chế thực-thi | |---|---|---| -| anh gõ `/fable-clone <đề-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-clone <đề-bài>` | 🟢 **lệnh-B ensemble** | `hmw.js parallel` N lane same-role + em-main synthesize (2.3 JSON) — VALID_ROLES 12 đủ roster (S110) | | anh gõ `/fable-real <đề-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) | @@ -441,7 +441,7 @@ args = { | GAP | Rủi-ro (engine) | Cách bấm | Nguồn | |---|---|---|---| -| **GAP-1 scope-creep** | `hmw.js` VALID_ROLES nhận cả 10 vai KHÔNG gate → all-inherit CHE leak | CLONE `taskList` MỌI `role:'reviewer'` (N-lane CÙNG vai, KHÔNG mixed-roster) | `§K.C:328` · `hmw.js:22-28` | +| **GAP-1 scope-creep** | `hmw.js` VALID_ROLES nhận cả 12 vai KHÔNG gate → all-inherit CHE leak | CLONE `taskList` MỌI `role:'reviewer'` (N-lane CÙNG vai, KHÔNG mixed-roster) | `§K.C:328` · `hmw.js:22-30` | | **GAP-2 engine-label** | SCHEMA `memoryDelta` KHÔNG field engine | em-main **stamp nhãn engine @P3 harvest** (`real\|clone--Sxxx`) = convention | `§K.C:329` · `hmw.js:54-64` | | **GAP-3 AS-10 fragment** | N lane giữ Bash (fails-open) → phân-mảnh trí-nhớ | N lane **RETURN-only** → em-main ghi **1 entry / vai** (+ nhãn) | `§K.C:330` · `fable-real.md:26` | diff --git a/docs/governance/harness-11-engine.md b/docs/governance/harness-11-engine.md index ecbec03..1d8d652 100644 --- a/docs/governance/harness-11-engine.md +++ b/docs/governance/harness-11-engine.md @@ -329,7 +329,7 @@ SE đã có RAG golden-set harness (KHÔNG phải gap): `eval/golden-set-solutio → **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). → **lệnh-B ensemble-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ả 12 vai (9 lúc adopt S101; +office-document S107; +2 monitor S110 anh-directed), 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). @@ -342,7 +342,7 @@ SE đã có RAG golden-set harness (KHÔNG phải gap): `eval/golden-set-solutio | `/fable-real <đề-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 <đề-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:** `` ∈ 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. +- **(i) Vai owner-gán per-invocation:** `` ∈ 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). ✅ **VALID_ROLES = 12 đủ roster (S110 anh-directed):** 2 monitor đã bổ sung (10→12) — lệnh-B trọn roster. *(🧊 limitation cũ "2 monitor ∉ 10-vai → fail-soft default-subagent" + H6-design "monitor ngoài workflow" superseded điểm này; monitor vẫn INFORM-only, lane RETURN-only.)* - **(ii) Spec-file pipeline (mỗi run engine-đắt PHẢI sinh):** `.claude/workflows/runs//spec--.md` — 3-heading CỐ-ĐỊNH: **[1] Tính-năng/đề-bài** (1–3 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.