Files
solution-erp/.claude/agents/README.md
pqhuy1987 090ab1cdfd [CLAUDE] Skill: doi STYLE 3 vai — production-la-chuan (anh chot S176)
Anh giao truc tiep, ly do do duoc: "may cu lam di lam lai hoai".
Luat loi anh dat: "cac tinh nang da deploy thanh production roi thi se la
chuan, tru khi tao co dieu chinh lai lan nua".

Ca THAT lam anh neu — S176 vong-4b: lead dung thung rac KHKK thieu banner do
+ thieu dau "xoa ~", trong khi man thung rac Duyet NCC DA CHAY PROD co du ca
hai. Anh phai tu chup man PE gui sang bao "anh chi la mau". Mot luot lam lai
dang le khong can, vi ban chuan da nam san trong repo.

3 vai (khong phai 4 — anh neu 4 roi tu chot lai 3: "3 con tao nham" +
"chot theo y may"). Con clean-code-reviewer-style bi bo vi no phu chong ca 3
con kia nen KHONG viet noi cau scope-roi ma roster nay bat buoc; truc
clean-code (dat ten, trung lap, mat-do comment, pattern drift) gop vao tung
con trong dia phan cua no.

- front-end-reviewer-style : fe-admin/src/** + fe-user/src/**
- back-end-reviewer-style  : src/Backend/** TRU Persistence/**
- database-reviewer-style  : Persistence/** + ten bang/cot/index

Thiet ke:
- "Production = chuan" DO DUOC, khong phai khau hieu: repo auto-deploy main
  => `git diff origin/main...HEAD` = phan MOI; phan con lai tren origin/main
  = da production = chuan. Moi vai phai DI TIM ANH EM DA CHAY THAT roi doi
  chieu, va bao cao PHAI neu file:line cua ban chuan do.
- Ve "tru khi tao dieu chinh lai" = MIEN-TRU co dieu kien: bang chung owner
  phai CHI DUOC RA (prompt / _context FLOW dong "> anh:" / commit / WAL),
  KHONG duoc suy. Khong thay => van FLAG kem "(chua thay bang-chung owner)".
  Sai ve phia hoi thua, khong ve phia im lang de lot.
- Truc DONG-NHAT (giong ban da chay khong) VUONG GOC truc DUNG-SAI cua
  `reviewer` (co bug khong) => chay SONG SONG duoc, khong giam nhau.
- Luat style TRO docs/rules.md, CAM chep vao persona (B1) — chep la de nguon
  su-that thu hai roi drift.
- Bai S176 dua thang vao persona: "be mau thi be HINH, dung be LOI KHAI"
  (banner PE co cau "khong con tinh vao luy ke"; grep luy ke trong KHKK = 0
  hit => be nguyen la dan mot khang-dinh chua chung minh len man nguoi dung).
- May truoc, vai sau: FE co ESLint chay truoc. BE do duoc la 0 may style nao
  gac (0 .editorconfig, 0 analyzer, 0 dotnet format trong CI) nen con BE phai
  ganh ca lop co-hoc — da khai thang trong persona kem ghi chu: cam duoc may
  vao CI thi PHAI cap nhat lai persona do.
- Moi vai bat buoc co dong thach-CLEAN khi tra DAT: "DAT" suong khong phan
  biet duoc voi "chua soi".

Wiring: hmw.js VALID_ROLES 23->26 + writeGuard liet 3 vai vao nhanh read-only
(khong the de chung roi nham nhanh Bash-write MD, rui ro mojibake G-009) ·
agents/README bang Skill-assignment + RULE BAT BUOC (goi theo glob diff cham
dau; diff khong cham => KHONG goi, khong phai bo sot) · STATUS Sub-agents
23->26.

🔸 Nac trung-thuc: executed-file / verified-pending-restart — 3 vai CHUA
spawn-probe lan nao.
⚠️ roster 26 > hmw_width.cap 20 => full-roster-sweep LOUD-skip rong hon truoc;
so cap = quyen anh (O-7 van treo).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 10:07:21 +07:00

56 KiB
Raw Blame History

Multi-agent SOLUTION_ERP — Master Coordination Guide

🔴 Số vai canonical → docs/STATUS.md §Sub-agents. KHÔNG chép số vào file này (B1 derived-trỏ-canonical). Bản trước S122 cứng-hoá "12-agent" ở 8 chỗ trong khi roster đã 14 — đó chính là class view-stale-role-desc, và agents/README bị lấy làm ví-dụ minh-hoạ cho class đó trong lead-stale-auditor.md. Vá @S122 bằng cách bỏ số, không phải bằng cách đổi số — đổi số thì roster kế lại stale.

Architecture: sub-agents worker-tier-pin opus+effort:max (owner-decision S124 2026-07-15 — thay thế all-inherit Harness-8, trước nữa two-tier Harness-4) + em main lead DEFAULT Opus 5 MAX (thư 9c909007 @S149 (re-stamp 07-25 G-024a; pre 59ce1d0f); Fable = anh /model·/fable-real🧊 idiom "anh chọn per-session" superseded-VALUE) coordinator — nhóm product/quality (7 core S39 + frontend-designer pink S47 + database-agent read-advisory S52 + 📄 office-document S107) + nhóm monitor INFORM-only (H1 tooling-auditor + H2 harvest-curator, 2026-06-07 Harness 1 · H24 lead-stale-auditor + lead-gap-auditor, S121 W2 · trio-memory harness-eval + harness-refine + harness-audit, S141 · round-KIỂM ×3 ring1-audit/ring2-audit/ring4-audit, S145 [C4/C4b TÁCH mỗi-vòng-1-con] · bộ-ba vòng Ctx ctx-curator/ctx-verifier/ctx-audit, S153 [adopt 0df10df4 — OWNER-VETO hub-form 3-vai: nháp@pause · nạp@tiep · chuỗi@2-bookend]). 🔴 Liệt-kê NHÓM, KHÔNG tổng-số — số vai canonical → docs/STATUS.md §Sub-agents (đúng luật dòng đầu file: vá bằng BỎ số, không ĐỔI số). Tier: TOÀN BỘ sub model: opus + effort: max (worker-tier-pin S124 — sub cố-định KHÔNG theo lead; đo S126: lane no-tier resolve claude-opus-4-8 DÙ lead=Fable = pin ăn runtime, và per-task tier:'fable' THẮNG pin trong lượt lệnh engine-đắt anh gõ. Lead runtime = default Opus 5 MAX (thư 9c909007 @S149 (re-stamp 07-25 G-024a; pre 59ce1d0f); Fable = anh /model·/fable-real); lịch-sử flip-chain lead = canonical [docs/STATUS.md §Sub-agents] (🔴 S106 gộp 1-chain per anh-confirm — reader này KHÔNG enumerate/cập-nhật mỗi flip; BƯỚC 0.6 probe mỗi phiên xác-định runtime lead SỐNG) · effort Max (env machine-wide + frontmatter). SE KHÔNG có lớp helper/gopher rẻ (mọi sub đều substantive memory-bearing → worker-tier = opus+max, KHÔNG hạ thấp hơn). (Lineage: two-tier H4 [4 promote inherit + 7 demote pin claude-opus-4-8] → all-inherit H8 S66S123 → worker-tier-pin S124 — chi-tiết ở Upgrade 2026-06-10 + S66 dưới.) 🔍 Đếm roster = ĐO ĐĨA, đừng tin số trong doc: ls -1 .claude/agents/*.md | grep -v README | wc -l. ⚠️ Glob thô ls .claude/agents/*.md bắt LUÔN README.md ⇒ ra thừa 1 — đây là bẫy số-học thật (R2-C1: acceptance cũ =14 FAIL trên implementation ĐÚNG, và ép "sửa" bằng cách xoá README.md = catastrophic-Goodhart). Upgrade S52 (2026-06-08 — AI_INFRA broadcast 2026-06-08-Agent-database-codebase-agents): +database-agent (read-advisory DB specialist, floor DB1DB11) — schema/query/migration-design-review/perf/concurrency (DB11 RowVersion vá lost-update S43). Tailor READ-tier (implementer-backend vẫn author) · color OMIT (8 standard hết) · store_memory strip. codebase-agent = SKIP n-a (investigator-codebase đã cover grep/audit + csharp-lsp Windows no-op). verified-runtime — spawned OK S53 (first real spawn, caught Mig 46 committed-but-unapplied-local drift) + S56 2× (pre-golive-verify schema-stream + golive-harden design+review). DB11 lost-update fix landed S56 (atomic ExecuteUpdate + Serializable tx, gotcha #58). Pattern: Anthropic Building Effective Agents orchestrator-workers + Cognition "writes single-threaded" hybrid + post-deploy automated watchdog. Upgrade S39 (2026-05-29): 4→7 agent (split investigator + implementer, +test-specialist) + budget +50% + 5 RAG MCP per agent. Reference BVAAU 7-agent config (adapted, NOT copied — SOLUTION_ERP 2-FE-app fit + 6 skill proven battle-test 38 session). Prior: S20t12 initial 3 + S21t1 +cicd-monitor. Upgrade S47 (2026-06-02): +frontend-designer (8th sub, pink) — FD1FD10 visual-verification design floor (forked AI_INFRA canonical, broadcast Agent-frontend-designer-floor). + store_memory STRIPPED khỏi MỌI sub → lead = sole RAG-writer (broadcast Memory-store-memory-strip-global); sub ghi finding → MEMORY.md (file). adap-reports: docs/governance/adap-reports/. Upgrade 2026-06-07 (Harness 1·2·3 adopt — AI_INFRA broadcast): +2 monitor sub INFORM-only tooling-auditor (H1 tooling/docs-freshness 4-mặt) + harvest-curator (H2 harvest-integrity 5-trục) → roster 8→10, TÁCH BIỆT per anh-mandate (H1≠H2 "hay quên+nhầm"). + wave-folder memory-isolation (Harness 2 — hmw.js wave-mode + .claude/workflows/wave-*/ gitignored, B1B6). + email channel broadcasts/ (Harness 3 — cross-project comms, self-id=se). KHÔNG copy-paste AI_INFRA — tailor SE roster/stack. Upgrade 2026-06-10 (Harness-4 two-tier model — AI_INFRA broadcast harness-4-model-tier-promotion + model-fable-5-max): lead = Fable 5 (1M) Max (user-level machine-wide, SE không project-pin) · sub two-tier theo tiêu chí H4.3 (a gate≥writer · b verdict-nuôi-quyết-định · c chống-rubber-stamp · d 1M-thật): promote 4 giữ inherit (reviewer·investigator-codebase·database-agent·harvest-curator) + demote 7 pin claude-opus-4-8 (full-id no-suffix — gotcha #37 cấm [1m]; runtime resolve [1m] 1M trên máy chung per AI_INFRA s20). hmw.js tier-map H4.5 (role-less → 'opus' · per-task tier:'fable'|'opus' override). Email-back AI_INFRA H4.7 BẮT BUỘC. Justification per-vị-trí: adap-report 2026-06-10-Governance-harness-4-model-tier-promotion.md. Upgrade S63 (2026-06-15 — Harness-5 + 6 adopt): H5 model-fallback⚠️ Fable 5/Mythos 5 suspended 2026-06-12 no-ETA → lead SE tạm Opus 4.8 (1M) Max (promote inherit tự theo → two-tier collapse single-tier Opus; demote-pin giữ; revert-FREE khi Fable về: đổi lead lại + spawn-test). KHÔNG sửa frontmatter · external-outage blameless KHÔNG RCA · session-start BƯỚC 0.6 check. H6 governed-ultracode — mode-ON: substantive task TỰ chạy HMW (KHÔNG đợi keyword "workflow"); workflow-agent default = inherit lead (hmw.js role-less 'opus'→inherit) · role-fidelity (agentType ∈ VALID_ROLES) + memory-fidelity (memoryDelta→đúng agent-memory single-writer) ĐÃ sẵn từ HMW-engine. adap-report 2026-06-13-Governance-harness-5-... + 2026-06-15-Agent-harness-6-.... Upgrade S64 (2026-06-15 — Harness-7 writing-quality adopt): sàn chất lượng viết hướng ra ngoài (email · broadcast · adap-report · tài-liệu-sister · câu trả lời lead cho anh) phải tiếng Việt rõ nghĩa, câu hoàn chỉnh, đủ dấu câu, đúng ngữ pháp (O1); nội bộ giữ lối nén §6.4/§6.5 (O2 — bất đối xứng); reviewer +Category 6 writing-quality (O3, verified-pending-restart). Rule canonical docs/rules.md §1.1. adap-report 2026-06-15-Governance-harness-7-writing-quality.md. body-hash a4580ea9… verified-MATCH (lesson gotcha #61: verify body-hash PHẢI đọc UTF-8 tường minh, PS5.1 default mis-decode tiếng Việt → false-mismatch). Upgrade S66 (2026-06-16 — Harness-8 all-inherit + workflow-fastest adopt): 🔴 BẮT BUỘC (anh-chốt, mọi sister; chất lượng trên chi phí). H8.1 — toàn bộ 11 sub-agent có memory → model: inherit (ăn top-tier lead), GỠ cơ chế demote two-tier của Harness-4 (7 sub pin claude-opus-4-8 đã flip inherit: 2 implementer · test-specialist · cicd-monitor · investigator-api · frontend-designer · tooling-auditor; 4 đã-inherit giữ nguyên reviewer·investigator-codebase·database-agent·harvest-curator). SE KHÔNG có helper/gopher rẻ để chừa → cả 11 lên inherit. Escape-hatch per-task tier:'opus' (hmw.js) GIỮ cho sweep/cost. H8.2 — chạy workflow nhanh nhất: song song tối đa + xuất nhanh + lead auto-HMW cho task substantive (theo H6) — "nhanh" = parallelism, KHÔNG phải hạ model. Caveat (trung thực): runtime HIỆN KHÔNG đổi (inherit = Opus 4.8 1M vì Fable suspended H5 — trùng two-tier đã collapse); khác biệt thật khi Fable về (cả đội tự lên Fable 5 không sửa frontmatter) + H5.6 restore gọn hơn (chỉ đổi lead). Frontmatter no hot-reload → executed-file → runtime-verified S98 (2026-07-02 Fable-restore: inherit-chain spawn-test ×2 self-report claude-fable-5 — "cả đội tự lên Fable, 0 sửa frontmatter" xảy ra đúng thiết kế). [1m] cấm trong frontmatter model (gotcha #37). adap-report 2026-06-16-Governance-harness-8-all-inherit-workflow-fastest.md. Upgrade S70 (2026-06-17 — Harness-9 L2-recovery + adap 2-workflow adopt): (1) PROCESS-mandate 🔴 BẮT BUỘC (PART 2/3, áp MỌI adap từ nay): mỗi adap 1 Harness = 2 workflow tách biệt (IMPLEMENT + REVIEW double-check RIÊNG) + REPORT về AI_INFRA kèm run-id bằng chứng; task ngắn-nhưng-cần-confirm VẪN phải review-workflow. Codify .claude/commands/adap-apply.md. (2) L2 dark-matter recovery (PART 1, tailored): archive agent-memory/<sub>/archive/*.md KHÔNG vào RAG → build archive/_INDEX.md (mục-lục 1-dòng/bản-ghi + con-trỏ substring sha-keyed, fallback Ctrl-F, KHÔNG line-hint) + <period>.gist.md (nén 4-field ADDITIVE, distill-gen counter, verbatim FROZEN) + memory-budget.json (seed-by-measure qua scripts/measure-agent-memory.ps1) + budget-audit @session-start (§2.1.2) + .ragignore guard. Rollout S70 (đầy-đủ-nhất, stage investigate→implement→audit qua 3 Workflow run-id): 4 over-cap sub (cicd-monitor · investigator-codebase · reviewer · implementer-backend). adap-report 2026-06-17-Governance-harness-9-l2-recovery-and-adap-workflow.md. Upgrade S72 (2026-06-18 — Harness-10 flat-refine + checklist-v2 adopt): run-trace SUBFOLDER→FLAT (file phẳng cùng cấp: sub-<role>-<i>.md raw + <stage>-synthesis.md verified, KHÔNG sub-md//harvest/ subdir) — hmw.js (:103 subMd path) + workflows/README + runs/README + session-start/end + decision-tree (dòng dưới) repoint. C8 migration: 5 run cũ S71 GIỮ subfolder (đừng rewrite history); close-gate dual-accept cả hai dạng. +/sleep-recovery-memory-l2 (đóng A8 — port §J2-tailored SE-only: sleep-compress L2 gist additive, INFORM-only ≥7d). Anti-bypass detector (refine b): TAILORED-OUT — SE dùng Anthropic Workflow tool (no CLI-launcher bypass-surface), containment = git-diff + run-folder TRACKED + ledger orphan-scan (G-015). 3 run-id bằng-chứng: audit wf_13868efb-ea7 · implement wf_ac43b5ff-7d1 · review (pending). adap-report 2026-06-18-Governance-harness-10-flat-refine-checklist-v2.md (pending). Upgrade S75 (2026-06-18 — Harness-11 engine bộ-nhớ-và-governance TỰ-BẢO-TRÌ adopt): engine tự-DÒ toàn-diện (luôn tươi báo cờ) + AUTO chỉ semantic-null git-diff + single-writer bar-KHÔNG-hạ (D9) + đổi-luật owner-approve (D7). 🔑 Canonical → docs/governance/harness-11-engine.md (KHÔNG copy luật ở đây — B1 dogfood). Artifact MỚI: scripts/governance-detectors.ps1 (C1 broken-pointer + C2/B3 staleness + C3 vocab-fork + C4 self-exclusion, NO-API DÒ+FLAG-only, runtime-proven bắt drift root CLAUDE.md mig53→55 + 0 self-match; số flag động → run-trace) + scripts/memory-archive-gate.ps1 (PHẦN A hysteresis 0.85/keep-floor 5/2-strike/A7 NO-API L1-eval) + budget.json archive_gate. 3-tier D5(AUTO)/D6(DÒ+FLAG)/D7(owner-approve) + one-direction-lock D8 (canonical→derived) codify ở engine-doc. Cadence wired: D1 session-start §2.1.3 (chạy detector) · D2 session-end §L.b(c) (archive-gate). Áp qua workflow: audit wf_7fdc3bd5-930 + implement wf_c5e5844e-7c1 + review wf_d7ca1ff8-942 + double-check wf_a0b68d2f-30e. adap-report docs/governance/adap-reports/2026-06-18-Governance-harness-11.md. Upgrade S79 (2026-06-20 — User-Mark H-12/13 canonical §P + Harness-14 Eval/Budget/Outcome adopt): áp canonical §P đầy-đủ (P1-P10) khi anh gõ /user-mark-active-high "áp đầy-đủ chính-xác nhất theo AI_INFRA". Artifact: 4 lệnh .claude/commands/user-mark-{active-high,active,medium,disable}.md (DACI report-before-stamp) + ledger .claude/governance/ACTIVE-MARKS.md (4 cấp Active-High/Active/Medium/Disable + display-filter) + harness-11-engine.md §E (cơ-chế P1-P10) +§F (Harness-14 3-mức maturity) + rules.md §6.6 (objective-criteria: KHÔNG quy-mô-đội / KHÔNG thời-gian-tuổi) + session-start §2.1.4 / session-end §L.b(h) mark-display. 3 mark Active-High stamped anh-confirm S79 (RC-pqhuy1987-20-06-2026-10-29-09/10/11). completeness-gate H-6→H-13 ĐẠT (H-8 11/11 inherit no-[1m]). 4 workflow: invest wf_82337f7f-95c + review wf_a7cbe93e-912 + align-re-review wf_9d3beebb-a95 + H14-review wf_4d4eba6f-8a0. ⚠️ restart CLI (lệnh/session no hot-reload). adap-report 3× (…rc-signature + …harness-all-update + 2026-06-20-Governance-harness-14). Upgrade S93 (2026-06-29 — Harness-16 MFE adopt): memory-fidelity-EVAL (đo nạp-vs-nhớ-vs-dùng bằng SỐ ĐO, KHÁC H6.7 memoryDelta-routing-fidelity). Artifact: scripts/mfe-eval.ps1 (deterministic NO-API: LEAD coverage-FIT token-RANGE + age-band flag-not-cut + Goodhart-anchor strikes/RCA · SUB per-role coverage ĐO-THẬT prose-only→N/A · sub-workflow N/A) + eval/mfe/ (seed sample-questions stable-id-anchored + README) + memory-budget.json:mfe config + engine §H + artifact-row. Judge recall/apply = SCAFFOLD-only (chờ age-maturity + independent-judge). Wire opt-in session-start §2.1.6 + session-end §L.b(c) (param eval, no-param=như cũ). 🔴 READS-not-writes token_governor (owner-authority). C3 alias-map recorded §H (KHÔNG seed $aliasSets). 2-workflow: WF1 implement-investigate wf_4c63e1bd-99e + WF2 review wf_13e3d35a-023 (3-lane PASS: code-gate denom-29-re-derived + cross-harness 0-conflict + honesty 5-floor). adap-report 2026-06-29-Governance-harness-16-mfe.md + email AI_INFRA. ⚠️ restart CLI. Upgrade S107 (2026-07-10 — +office-document, 12th sub): +office-document (📄 Office document WRITE specialist) — anh giao trực tiếp S107 ("Sub chính" mảng Office). Floor OD1OD10 (skill-first · 🔴 fidelity-to-template 100% · extract-không-bịa · round-trip verify · file-mới-không-đè-gốc · boundary-code ⟂ implementer-backend). Skill nạp: bộ 4 Office standalone (docx·xlsx·pptx·pdf) + form-engine (project). VALID_ROLES hmw.js 9→10. Use-case SE: extract spec Excel/Word anh gửi (Database NCC → Supplier Phase B khi unpark) · chuẩn hóa template 8 form placeholder · document deliverable · screenshot→docx #74 · verify render form-engine. verified-runtime S107 CÙNG PHIÊN — registry HOT-RELOAD agent MỚI giữa phiên (harness mới; ⚠️ ENV-DEPENDENT — hub experiment 2026-07-11 NGƯỢC kết quả [0 notice + spawn not-found ×2] → KHÔNG fleet-generalize, restart = default an toàn; S27 restart-lesson giữ cho EDIT agent hiện có, chưa re-verify) + spawn-test PASS (OD1 skill invoke · OD4 extract-honest — finding: 2 template wwwroot/templates 0 placeholder {{field}}, mẫu blank "…………..", mapping ở render-engine hoặc chưa placeholder-hóa · OD5 round-trip 37KB VN-dấu · OD7 gốc nguyên vẹn).


🎯 Architecture

Diagram dưới = 7 core lane (pre-S47 snapshot) — KHÔNG phải roster hiện-hành. Roster THẬT = 7 core (diagram) + 🩷 frontend-designer (S47) + 🔵 database-agent (S52) + 📄 office-document (S107) + 🟫 tooling-auditor H1 + harvest-curator H2 (2026-06-07 Harness 1) + 🔷 lead-stale-auditor + 🔶 lead-gap-auditor (H24, S121 W2) + 🧪 harness-eval + 🧪 harness-refine + 🧪 harness-audit (trio-memory, S141) + 🔬 ring1-audit + 🔬 ring2-audit + 🔬 ring4-audit (round-KIỂM ×3, S145 — C4/C4b TÁCH mỗi-vòng-1-con: vòng tooling/harvest · soi-lead H24 · nén-ngủ) + 🔎 ctx-curator + 🔎 ctx-verifier + 🔎 ctx-audit (bộ-ba vòng Ctx lớp trí-nhớ MỀM _mind, S153 — adopt 0df10df4, OWNER-VETO hub-form 3-vai: vai-1 nháp@mỗi-pause [carve-out §1] · vai-2 đối-chiếu+nạp@mỗi-tiep · vai-3 chuỗi@2-bookend) — xem skill matrix + decision tree + tool grant dưới. Số vai canonical → docs/STATUS.md §Sub-agents. (Cosmetic ASCII chưa vẽ lại — H1 tooling-auditor flag drift này @session-start.) 🔴 Bài S143 — enumeration TÊN cũng lão-hoá, và grep-theo-SỐ không bắt được: sweep roster wave S141S142 đặt acceptance là grep "roster 14|14/14|14 folder|14 vai" → 0 hit ⇒ tuyên bố sạch. Nhưng đúng 2 dòng tự xưng là bản gốc về roster — dòng NÀY ("Roster THẬT") và :225 ("VALID_ROLES … ĐỦ roster") — liệt kê TÊN, không chứa con số nào ⇒ lọt lưới, giữ 14 vai qua cả wave. Acceptance cho lần sau: ĐẾM PHẦN TỬ trong mọi enumeration rồi so canonical, đừng so hình-dạng chuỗi.

┌──────────────────────────────────────────────────────────────┐
│ EM (Main) — lead default Opus 5 MAX (owner /model·/fable-real)│
│ • Reasoning + write code (single-threaded principle)          │
│ • Schema/UX/architecture decision + cross-stack tight coupling│
│ • Coordinate TOÀN roster sub-agent via spawn + SendMessage    │
│ • Synthesize cross-agent findings + commit/push (em main only)│
│ • Fallback solo nếu spawn fail (gotcha #53 truncate / 529)    │
└──────────────────────────────────────────────────────────────┘
        ↓ spawn + keep-alive (worker-tier-pin S124: MỌI sub `model: opus`+`effort: max` = worker-tier; lead=default Opus 5 MAX per 9c909007 (re-stamp; pre 59ce1d0f); Fable qua /model·/fable-real)
  ── RESEARCH (READ) ──────────  ── IMPLEMENT (WRITE) ────────────  ── QUALITY ──────────
  ┌──────────────────┐ ┌───────┐ ┌─────────────────┐ ┌──────────┐ ┌────────┐ ┌─────────┐ ┌────────┐
  │investigator-     │ │invest-│ │implementer-     │ │implement-│ │test-   │ │reviewer │ │cicd-   │
  │codebase          │ │igator-│ │backend          │ │er-       │ │special-│ │         │ │monitor │
  │                  │ │api    │ │                 │ │frontend  │ │ist     │ │         │ │        │
  │ INTERNAL audit   │ │EXTERN-│ │ .NET Domain+App │ │ FE 2 app │ │ tests/ │ │adversa- │ │post-   │
  │ SQL/EF/grep/     │ │AL docs│ │ +Infra+Api      │ │cookie-   │ │dedica- │ │rial pre-│ │deploy  │
  │ reference mirror │ │CVE/lib│ │ entity/CQRS/Mig │ │cutter    │ │ted     │ │commit + │ │Gitea + │
  │                  │ │/cross-│ │ /Controller     │ │mirror    │ │xUnit   │ │live curl│ │bundle  │
  │                  │ │project│ │                 │ │SHA256    │ │        │ │         │ │+ smoke │
  └──────────────────┘ └───────┘ └─────────────────┘ └──────────┘ └────────┘ └─────────┘ └────────┘
       cyan              blue       yellow              orange       purple      red         green

🚨 RULE BẮT BUỘC (S39 updated)

Em main BẮT BUỘC phân việc cho sub-agent đúng vai trò khi ACCEPT criteria match. Budget +50% → lean toward delegate + parallel, ít em main solo fallback.

Workflow forward S39+:

  • Trước mọi task → classify qua decision tree dưới
  • Read-only research → split: internal codebase audit → investigator-codebase · external docs/CVE/lib → investigator-api (có thể spawn parallel cả 2)
  • WRITE scaffold → split: .NET backend → implementer-backend · FE 2 app → implementer-frontend (parallel khi independent — vd BE entity + FE types cùng lúc)
  • Test → test-specialist dedicated (KHÔNG để implementer kiêm)
  • Deploy claim → cicd-monitor sau push (skip docs-only gotcha #41)
  • Heavy diff / security / wire BE claim → reviewer pre-commit
  • 🔴 ĐỘI STYLE (S176, anh chốt) — MỖI LƯỢT REVIEW gọi THÊM 1 lần, song song reviewer: front-end-reviewer-style · back-end-reviewer-style · database-reviewer-style.
    • Gọi con nào = theo DIFF chạm đâu (git diff --name-only origin/main...HEAD): fe-*/src/** → FE · src/Backend/** trừ Persistence/** → BE · Persistence/** → DB. Diff không chạm ⇒ KHÔNG gọi, không phải bỏ sót.
    • Trục của đội này ⟂ reviewer: đội STYLE soi ĐỒNG-NHẤT (có giống bản đã chạy không), reviewer soi ĐÚNG-SAI (có bug không). Chạy song song được vì không giẫm nhau.
    • 🔴 Luật lõi anh giao: "các tính năng đã deploy thành production rồi thì sẽ là chuẩn, trừ khi tao có điều chỉnh lại lần nữa" — lý do sinh đội: "mày cứ làm đi làm lại hoài". Ca thật S176 vòng-4b: thùng rác KHKK thiếu banner + dấu xoá mà màn Duyệt NCC đã chạy prod có đủ ⇒ anh phải chụp màn gửi làm mẫu. Một lượt làm lại đáng lẽ không cần.
    • 🔸 Máy trước, vai sau: FE có ESLint chạy trước (npm run lint); BE hiện 0 máy style nào gác (đo S176) nên con BE gánh nặng hơn. Cắm được .editorconfig + dotnet format --verify-no-changes vào CI thì trả lớp cơ-học về máy và cập nhật lại persona con BE.
    • 🧊 Anh nêu ban đầu 4 con (có clean-code-reviewer-style) rồi tự chốt lại 3 ("3 con tao nhầm" + "chốt theo ý mày"): con clean-code phủ chồng cả 3 con kia nên không viết nổi câu scope rời mà roster này bắt buộc ⇒ trục clean-code (đặt tên · trùng lặp · mật-độ comment · pattern drift) gộp vào từng con trong địa phận của nó.

Em main solo CHỈ khi: schema/UX/architecture decision · cross-stack tight coupling · bug fix reasoning chain · gotcha #53 fallback (spawn truncate/529 → em main solo reliable, proven S37 BE 700 LOC + FE 4 file).

Anti-truncation rules (gotcha #53 — 5× occurrence S35-S37):

  • Spawn prompt = RICH, fill-to-budget (H15-v3 S83 — supersedes old "≤8K brief"): nạp INPUT tới token-budget của sub (mem-sub 60K / wf-sub 50K per memory-budget.json:spawn_fill_directive) bằng context GIÁ-TRỊ cao (relevant gotchas + state + full task-context + docs/memory liên-quan) — KHÔNG padding. Truncation #53 = rủi-ro RETURN của agent (vá bằng lean memoryDelta return + em-main recover-disk), KHÔNG vá bằng starve INPUT. (Heuristic "≤8K brief" cũ = guard thời context-nhỏ S36, nay nghỉ.)
  • Tiered Memory v1: L1 HOT soft-cap ~30KB + L2 archive on-demand + L3 RAG just-in-time (per AI_INFRA policy). Investigator 32KB S37 truncate = lesson; soft-cap ~30KB tránh tái diễn.
  • Agent keep entry ≤ 1.5K chars (frontmatter rule mỗi agent).
  • Em main grep verify manual nếu agent return truncated mid-task.
  • 529 Overload transient → em main solo fallback (KHÔNG retry loop).

🔄 Invocation decision tree (em main apply)

├── Read-only INTERNAL audit (codebase/SQL/EF diff/grep > 5 files)?
│     → investigator-codebase (cyan)
│
├── Read-only EXTERNAL (official docs / NuGet-npm CVE / lib eval / cross-project ref)?
│     → investigator-api (blue)
│     → Cả 2 investigator parallel OK khi task cần both (vd "audit current + research best practice")
│
├── DB schema-design / migration design-review / perf audit (N+1·index·projection) / transaction-concurrency (RowVersion lost-update)?
│     → database-agent (read-advisory, floor DB1DB11) — DESIGN/REVIEW/PERF/CONCURRENCY-advise; implementer-backend AUTHOR sau
│     ⟂ vs investigator-codebase: deep DB-layer (introspection/query-plan/concurrency) vs broad codebase grep/audit
│     ⓘ Schema-design quyết-định-cuối vẫn em main solo; database-agent = deep-DB lens hỗ trợ + review implementer output
│
├── OFFICE DOCUMENT (đọc/tạo/sửa/convert docx·xlsx·pptx·pdf / extract spec file anh gửi / template form placeholder / báo cáo document / screenshot→docx #74)?
│     → office-document (📄) [OD1OD10; skill docx·xlsx·pptx·pdf + form-engine]
│     ⟂ vs implementer-backend: C# render-engine (OpenXml/ClosedXML/LibreOffice service trong src/) = implementer-backend · office-document = FILE-level document/template/spec-extract (KHÔNG đụng src/·fe-*·tests/)
│
├── WRITE .NET backend (entity/EF Config/Mig/CQRS/Controller/DbInit)?
│     ✓ Spec deterministic · pattern proven >1× · >30min · ≤2 layer
│     → implementer-backend (yellow) [Case 1/2/3/5]
│
├── WRITE FE 2 app (page/types/component cookie-cutter mirror)?
│     ✓ UX flow chốt by em main · spec deterministic
│     → implementer-frontend (orange) [Case 1/2]
│     → BE + FE parallel khi independent (em main chốt DTO shape first)
│
├── WRITE FE DESIGN/REDESIGN (đẹp thật / UX mới / greenfield visual — KHÔNG mechanical mirror)?
│     ✓ design-system-first + visual-verification loop (Playwright screenshot ≥2 viewport → rubric → fix)
│     → frontend-designer (pink) [FD1FD10 floor]
│     ⟂ vs implementer-frontend: đẹp/UX/thiết kế → frontend-designer · cookie-cutter SHA256 mirror theo spec → implementer-frontend (KHÔNG double-touch 1 file UI)
│
├── WRITE test (xUnit Domain policy / Infra handler / authz regression)?
│     → test-specialist (purple) [test-before bug/critical, test-after feature UAT]
│
├── After push code commit (NOT docs-only)?
│     → cicd-monitor (green) — Gitea poll + bundle hash + Mig prod + smoke
│
├── Adversarial pre-commit / heavy diff / wire BE claim / security?
│     → reviewer (red) — Smart Friend 5-category + live curl
│
├── @session-start/@session-end TOOLING-FRESHNESS audit (skill·sub-role·plugin·docs 4-mặt + drift)?
│     → tooling-auditor (H1 monitor, INFORM-only) — báo state+diff @start · chốt+new-alloc @end · em main APPEND
│
├── @session-end HARVEST-INTEGRITY gate (5-trục Coverage/Completeness/Fidelity/Placement/Corruption) / run-folder harvest (`runs/<run-id>/<stage>-synthesis.md` ← `sub-<role>-<i>.md` phẳng, Harness-10 h10-refine; run cũ S71 `harvest/`←`sub-md/`) / @session-start harvest mới?
│     → harvest-curator (H2 monitor, INFORM-only) — propose delta · em main single-writer VERIFY→APPEND · Fidelity nghi → reviewer
│
├── @session-end §L.b(g-bis) — KIỂM vòng tooling/harvest (verify OUTPUT H1+H2, AUTO sau đo, KHÔNG consent)?
│     → ring1-audit (round-KIỂM monitor, INFORM-only, C4/C4b S145 vai #1/3) — verdict per-claim + tự tái-dựng ≥1 số + thách-CLEAN · no-self-exempt ≠ H1/H2 · NO-OP nếu H1/H2 không chạy · em main VERIFY→APPEND
│
├── @session-end §L.b(j)(ii-bis) — KIỂM vòng soi-lead H24 (verify OUTPUT lead-stale+lead-gap, AUTO sau cặp H24)?
│     → ring2-audit (round-KIỂM monitor, INFORM-only, C4/C4b S145 vai #2/3) — verdict per-FLAG + thách-CLEAN (H24 báo ít/0 FLAG → tự soi 1 surface tìm FLAG sót) · no-self-exempt ≠ lead-stale/lead-gap · KHÔNG soi lead trực-tiếp · NO-OP nếu H24 không chạy
│
├── sau `/sleep-recovery-memory-l2` Phase 4.5 — KIỂM vòng nén-ngủ (verify gist+Fidelity, AUTO sau nén)?
│     → ring4-audit (round-KIỂM monitor, INFORM-only, C4/C4b S145 vai #3/3) — verdict per-claim + tự đo byte + thách-CLEAN (mở 1 gist vs `<period>.md` gốc) · no-self-exempt độc-lập lượt nén · NO-OP nếu 0 gist tươi
│
├── @session-start §2.1.9 / @session-end §L.b(k) — ĐỒNG-KIỂM CHÍNH-HỆ-MEMORY (độ-giữ · hành-động · đúng-spec), anh ĐÃ GẬT consent?
│     → **TUẦN TỰ 3 spawn RIÊNG** (🔴 CẤM `parallel()`; CẤM tự chạy khi chưa consent):
│        1. harness-eval (trio-memory monitor, INFORM-only) — ĐO: đọc output instrument + budget.json → SỐ nguyên-văn + verdict
│        2. harness-refine (…) — ĐỀ-XUẤT: đọc `harness-eval-return.md` PIN → action 4-lớp + mục "đã cân-nhắc→BÁC"
│        3. harness-audit (…) — KIỂM: đọc run-folder PIN → ĐẠT/TRƯỢT per-claim + re-chạy ≥2 số load-bearing
│     ⟂ vs H1/H2/H24/round-KIỂM: H1 = tooling-freshness · H2 = harvest-integrity · H24 = soi LEAD · round-KIỂM ×3 (`ring1-audit`/`ring2-audit`/`ring4-audit`) = KIỂM 3 vòng tooling-harvest / soi-lead H24 / nén-ngủ [đọc output con-đo vòng mình] · trio = soi CHÍNH HỆ MEMORY (corpus agent-memory)
│     ⟂ vs reviewer: trio KHÔNG chấm diff-code; đụng thao-tác harvest → NHƯỜNG harvest-curator
│     🔴 3 vai KHÔNG có Write/Edit ⇒ lead scribe return từng con vào `runs/<run-id>/harness-{eval,refine,audit}-return.md` NGAY
│
├── Quick task < 30 min?  → Em solo direct
│
└── Schema/UX/architecture/cross-stack tight/bug reasoning chain?
      → Em solo (Cognition) + investigator pre-flight optional + reviewer pre-commit

📋 Phân việc matrix — split boundary (CRITICAL)

Layer / File Owner
src/Backend/SolutionErp.{Domain,Application,Infrastructure,Api}/** implementer-backend
fe-admin/src/** + fe-user/src/** (cookie-cutter mirror scaffold theo spec) implementer-frontend
FE design/UX/redesign (aesthetic · new visual · design-system · a11y polish) frontend-designer (self-gate rubric FD4 trước reviewer)
tests/** test-specialist
Mig design / FK strategy / discriminator / schema em main solo (database-agent deep-DB design-review/concurrency-advise optional + implementer-backend scaffold sau khi chốt)
DB schema introspection / query-perf (N+1·index) / migration design-review / concurrency RowVersion database-agent (read-advisory — DESIGN/REVIEW/ADVISE, KHÔNG author file)
File Office (docx/xlsx/pptx/pdf) — template 8 form + spec-extract file anh gửi + document deliverable + screenshot→docx office-document (📄 FILE-level — KHÔNG đụng src/·fe-*·tests/; render-engine code = implementer-backend)
UX flow (drawer/tab/modal) / page structure em main solo (implementer-frontend scaffold sau khi chốt)
Internal SQL/EF/grep audit investigator-codebase
External docs/CVE/lib/cross-project investigator-api
Pre-commit verify reviewer (NEVER write)
Post-deploy verify cicd-monitor (NEVER write)

Boundary dứt khoát: implementer-backend KHÔNG touch FE · implementer-frontend KHÔNG touch BE (chỉ Read DTO shape) · cả 2 implementer KHÔNG viết test (→ test-specialist) · test-specialist reveal prod bug → REPORT em main KHÔNG fix · frontend-designer = design/UX/đẹp (FE-only, KHÔNG BE/DB) ⟂ implementer-frontend = mechanical mirror theo spec — KHÔNG double-touch cùng 1 file UI (chồng lấn → escalate em main). office-document = FILE Office (docx/xlsx/pptx/pdf · template · spec-extract) ⟂ implementer-backend = C# render-engine trong src/ — file-level vs code-level, KHÔNG double-touch.


🛠️ Skill assignment (6 skill, re-distributed S39)

Agent Skills
investigator-codebase contract-workflow + permission-matrix + ef-core-migration
investigator-api dependency-audit-erp
implementer-backend ef-core-migration + permission-matrix + contract-workflow + form-engine
implementer-frontend permission-matrix
test-specialist contract-workflow + permission-matrix
reviewer dependency-audit-erp + contract-workflow + permission-matrix
front-end-reviewer-style (đội STYLE, S176) permission-matrix🔴 luật style FE KHÔNG ở skill mà ở docs/rules.md + bản ĐÃ PRODUCTION (B1 trỏ, cấm chép). Chạy SAU máy npm run lint
back-end-reviewer-style (đội STYLE, S176) contract-workflow + permission-matrix🔴 BE 0 máy style gác (đo S176: 0 .editorconfig/analyzer/dotnet format) nên vai gánh cả lớp cơ-học, khác con FE
database-reviewer-style (đội STYLE, S176) ef-core-migration (3-file rule = trục đắt nhất) — 🔴 chỉ soi ĐẶT TÊN + hình-dạng migration, KHÔNG phán schema (đó là database-agent)
cicd-monitor iis-deploy-runbook + dependency-audit-erp + ef-core-migration
frontend-designer frontend-design + senior-frontend + brand-guidelines + theme-factory + webapp-testing (FD2 loop) + web-artifacts-builder
database-agent (read-advisory S52) sql-database-assistant (SQL Server first-class — KHÔNG cover EF-Core) + ef-core-migration (EF Core 10 pin + 3-file rule)
office-document (📄 S107) docx + xlsx + pptx + pdf (bộ 4 Office standalone ~/.claude/skills/ — duplicate namespaced anthropic-skills:* → dùng standalone) + form-engine (project — template 8 form HĐ {{field}} + PDF LibreOffice + RG-001)
tooling-auditor (monitor H1) ref-only — reads skill registry, KHÔNG dùng domain skill
harvest-curator (monitor H2) none — deterministic 5-trục scan + Fidelity-escalate reviewer
lead-stale-auditor (monitor H24, S121 W2) ref-only — ĐỌC output scripts/governance-detectors.ps1 làm nền (KHÔNG chạy lại) + enum ĐÓNG lead_self_audit.flag_classes (memory-budget.json), KHÔNG dùng domain skill
lead-gap-auditor (monitor H24, S121 W2) ref-only — cùng nguồn lead-stale-auditor (output máy + enum ĐÓNG flag_classes); trục CÁI-THIẾU nên máy gần như mù, KHÔNG dùng domain skill
harness-eval (monitor trio-memory, S141) ref-only — ĐỌC output scripts/{measure-agent-memory,mfe-eval,memory-archive-gate,crystallized-backfill,nhip-no-probe}.ps1, KHÔNG dùng domain skill
harness-refine (monitor trio-memory, S141) ref-only — reads harness-eval-return.md (PIN) + reinject-ledger.md, KHÔNG dùng domain skill
harness-audit (monitor trio-memory, S141) ref-only — reads run-folder PIN + memory-budget.json + scripts/; re-chạy ≥2 số load-bearing để đối-chứng
ring1-audit (monitor round-KIỂM, S145) ref-only — ĐỌC output H1 tooling-auditor + H2 harvest-curator (KHÔNG chạy lại đo) + tự đếm .claude/agents/*.md/run-folder đối-chứng; no-self-exempt ≠ H1/H2; KHÔNG dùng domain skill
ring2-audit (monitor round-KIỂM, S145) ref-only — ĐỌC output lead-stale-auditor + lead-gap-auditor FLAG (KHÔNG re-soi-lead) + flag_classes enum ĐÓNG + class_repeat; no-self-exempt ≠ 2 vai H24; KHÔNG dùng domain skill
ring4-audit (monitor round-KIỂM, S145) ref-only — ĐỌC output /sleep-recovery-memory-l2 .gist.md + Fidelity verdict; tự đo byte gốc vs gist; no-self-exempt độc-lập lượt nén; KHÔNG dùng domain skill
ctx-audit (vai-3 vòng Ctx, S153) ref-only — SOI-CHUỖI _mind @2-bookend: bất-biến
ctx-curator (vai-1 vòng Ctx, S153 OWNER-VETO) ref-only — KIỂM bản NHÁP block @mỗi-/pause (5 khoản ngữ-nghĩa, SAU mind-check --draft); trả CHỈ văn bản DAT|SUA|SKIP-CO-KHAI ≤12 dòng; carve-out duy nhất pause.md §1; KHÔNG lấn @tiep/2-đầu; KHÔNG dùng domain skill
ctx-verifier (vai-2 vòng Ctx, S153 OWNER-VETO) ref-only — ĐỐI-CHIẾU 4-khoản (B-vs-next: TIN-SỔ-MÁY) + BẢN NẠP-LẠI ≤15 dòng @mỗi-/tiep, kết LEAD-PHAI-NHAC-LAI:; KHÔNG nạp NỀN hộ lead (tiep_reload = việc lead); KHÔNG lấn @pause/2-đầu; KHÔNG dùng domain skill

🔧 Tool grant (S39 — +3 RAG MCP per agent)

MỌI agent trong roster có 4 RAG-READ MCP: search_memory + search_code (BM25, prefer over Read full file — tiết kiệm token) + cross_project_search + list_projects. Base tools per role (READ: Read/Grep/Glob/Bash [+WebFetch/Search cho api] · WRITE: +Edit/Write/Skill).

2 monitor sub (tooling-auditor H1 + harvest-curator H2 — 2026-06-07): read-only toolset KHAI TRONG frontmatter = [Read, Grep, Glob, Bash, +4 RAG-read], NO store_memory, NO Write/Edit (mirror investigator read-set). 🔴 Đây là điều KHAI, KHÔNG phải điều ĐƯỢC CẤP — đo S143 trên 9 vai read-only (2 monitor này + 2×H24 + 3×trio + reviewer + investigator-codebase): runtime APPEND Write+Edit vào cuối tool-list bất kể frontmatter. Nhân-chứng: reviewer (frontmatter 0 Write/Edit) đã Write+Edit thật. ⇒ mọi câu "read-only" dưới đây đọc là ý-định, không phải enforcement. INFORM-only — propose → em main single-writer VERIFY→APPEND (B3). 🔴 G-015 accuracy (Harness-10 run-trace model, runs/README.md §Containment🧊 _ledger.md retired H18-B S100): run-folder runs/<run-id>/ được git TRACKED → mọi write HIỆN trong git-diff = audit trực-tiếp. Containment: tracked-change NGOÀI runs/<run-id>/ VÀ NGOÀI code-disjoint đã giao = vi-phạm (thay model Harness-2 B6 "mọi tracked-change = vi-phạm"). G-015 no-overclaim: TRACKED ≠ read-only-enforced — sub vẫn giữ Bash (write-channel mở qua shell/curl) → containment THẬT = em main single-writer + git-diff(in-repo) + chunk-count (RAG), KHÔNG allowlist đơn-độc.

⚠️ store_memory GỠ khỏi MỌI sub (2026-06-02 — AI_INFRA broadcast Memory-store-memory-strip-global, adap-report cùng id).lead (em main) = sole RAG-writer (mechanized failure-safe: sub vật-lý không gọi được store_memory). Sub tìm thấy finding/pattern mới → ghi MEMORY.md (file); lead + re-index đưa vào RAG. Accuracy (G-015): đây KHÔNG = sub "read-only" — sub vẫn giữ Bash (+ vai write giữ Write/Edit); containment thật = defense-in-depth git-diff + Qdrant chunk-count, chưa phải allowlist đơn độc.


🔌 External skill/plugin mapping (H3 — Harness 1 adopt 2026-06-07)

Floor H3: nạp đúng skill/plugin hợp stack, gộp-vai KHÔNG phình roster. Audit (investigator-api 2026-06-07; tooling-auditor H1 re-count S53): 18 plugin registered (15 enabled / 3 disabled) user-global (~/.claude/settings.json — +csharp-lsp +typescript-lsp +session-report vs S49's 15) + ~23 standalone skill (~/.claude/skills/). 0 agent mới — mọi cái = skill→gộp-vai-hiện-có. Nấc: enabled/available → assigned (bảng dưới = doc) → used (per-session auto-trigger). tooling-auditor (H1) rà new-alloc mỗi session-end.

Skill/plugin (nguồn) Value-locus Map → vai Ghi chú
sql-database-assistant (standalone) skill-only investigator-codebase + implementer-backend SQL/EF query; đọc kèm ef-core-migration (KHÔNG override pin EF Core 10 / dbo single-schema)
frontend-design (standalone, KHÔNG enable plugin trùng) skill-only frontend-designer duplicate plugin↔standalone → chọn standalone
skill-creator skill-only mọi sub (khi tạo skill project) additive
claude-md-management (claude-md-improver) skill+cmd em main doc-maintenance
pr-review-toolkit (silent-failure-hunter / type-design-analyzer / comment-analyzer / pr-test-analyzer) agent-bearing reviewer (tham-chiếu .md như CHECKLIST, KHÔNG enable agent) giữ roster reviewer canonical
session-report (node .mjs, Win-OK Node 20) skill-only em main / cicd-monitor optional — token/spawn-cost observability

🔴 KHÔNG DÙNG (tránh phình roster + name-collision — H3.3)🔄 vá @S153 (H1 F-6 → ring1 F-r2 chốt số): tiêu-đề cũ ghi "KHÔNG enable" nhưng đo ~/.claude/settings.json thì 3 site dưới đây ĐANG enabled: true (csharp-lsp :33 · commit-commands :31 · feature-dev — plugin này ship THẬT agents/code-reviewer.md nên nó là hard-site, không phải nấc-khác) ⇒ vị-từ SAI ở tầng enabled. Nấc THẬT của khối này = enabled nhưng CỐ Ý KHÔNG DÙNG / dùng một phần (used, không phải bit enable). 🔴 Trạng-thái enable THẬT đọc ~/.claude/settings.json:17-35 — bảng này nói về dùng hay không. Ranh sạch: code-review@ = nấc-khác (plugin ship 0 agent, ring1 tự nhận trượt claim "4-phẳng" của chính nó @open) · pr-review-toolkit/code-modernization/hookify = false thật trên đĩa. 🔸 Số đã đi qua 3 lượt: H1 @open "3" → ring1 @open "4" → H1 @close "2 hard + 2 nấc-khác" → ring1 @close "3 hard + 1 nấc-khác" (mở thư-mục plugin đếm agent thật). Bản chốt = bản cuối, vì nó là bản DUY NHẤT chạm vào agents/ của từng plugin.

  • code-modernization (5 agent: legacy-analyst/security-auditor/test-engineer…) — SE = .NET 10 greenfield, agent-set trùng test-specialist/reviewer/investigator. Chỉ cmd modernize-assess/map ad-hoc khi port NamGroup module.
  • code-reviewer (×3 nguồn: pr-review-toolkit + feature-dev + standalone skill) collide roster reviewergiữ reviewer canonical, KHÔNG dùng plugin code-reviewer.
  • csharp-lspWindows no-op (csharp-ls không trên PATH; cần dotnet tool install --global csharp-ls trước). Defer (Bash dotnet build + grep symbol đủ).
  • commit-commands/commit-push-pr — giả định GitHub gh; SE = Gitea → partial no-op (chỉ commit.md dùng được).

🚦 HMW-mode — Workflow fan-out governance (S49, broadcast ultracode-hmw-mem-governance)

Áp dụng KHI chạy Workflow runtime fan-out (.claude/workflows/hmw.js). Vận hành thường (Agent-tool spawn lẻ / parallel-trong-1-message) KHÔNG đổi — decision-tree trên vẫn chuẩn. Toggle: /ultra-on · /ultra-off.

  • Toggle 2-lệnh = on-ramp DUY NHẤT (T1/T2): /ultra-on tạo marker .claude/hmw-mode.on (gitignored) + vào mode · /ultra-off xóa. Marker = single-source-of-truth, persist qua session/compact. /session-start đọc marker → BÁO ON/OFF (T3).
  • 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 (whitelist hmw.js — ĐỦ roster; số vai canonical → docs/STATUS.md §Sub-agents, B1 KHÔNG chép số): 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 OD1OD10) · tooling-auditor + harvest-curator (+S110 anh-directed — H21 roster-parity lệnh-B) · lead-stale-auditor + lead-gap-auditor (+S121 W2 — H24 lead-self-audit) · harness-eval + harness-refine + harness-audit (+S141 — trio-memory) · ring1-audit + ring2-audit + ring4-audit (+S145 — C4/C4b round-KIỂM ×3: vòng tooling/harvest · soi-lead H24 · nén-ngủ; AUTO fire-after-measure, no-self-exempt, NO-OP nếu vòng không đo) · ctx-curator + ctx-verifier + ctx-audit (+S153 OWNER-VETO hub-form 3-vai 0df10df4 — vòng Ctx lớp mềm _mind: vai-1 KIỂM-nháp @mỗi-/pause [carve-out duy nhất của luật "NGỪNG spawn" §1] · vai-2 ĐỐI-CHIẾU+NẠP @mỗi-/tiep · vai-3 SOI-CHUỖI 2 đầu phiên; cả 3 trả CHỈ văn-bản). 🔸 Cả 13 monitor đều INFORM-only, lane RETURN-only (propose-only; 13 + 10 worker = roster 23, số canonical → STATUS §Sub-agents). 🔴 KHÔNG đọc "KHÔNG Write/Edit" thành cơ-chế chặn — đo S143: frontmatter 9 vai read-only không khai Write/Edit, nhưng runtime VẪN cấp, nối ở cuối tool-list (nhân-chứng trực-tiếp: reviewer đã Write+Edit thật trong runs/2026-07-22-S143-closeout-audit/). Whitelist = tuyên-bố ý-định; containment THẬT = em main single-writer + git-diff commit-gate. Role lạ ∉ VALID_ROLES → hmw.js THROW (STOP-HARD) + báo owner (S4c, DIRECTED REC-3 2026-07-13); role-less null → inherit lead.
    • 🔴 2 vai H24 = trục RIÊNG, KHÔNG gộp H1/H2: H1 tooling-auditor = tooling-freshness · H2 harvest-curator = harvest-integrity · H24 = soi chính LEAD (lead-stale-auditor = cái CÓ-nhưng-LỆCH · lead-gap-auditor = cái BỊ THIẾU). Class-flag lấy từ enum ĐÓNG lead_self_audit.flag_classes (.claude/agent-memory/memory-budget.json) — vai KHÔNG tự chế class; cặp light chạy VÔ-ĐIỀU-KIỆN mỗi bookend (hình B @S149); chỉ deep còn cổng h24_cadence.deep_every (session-start §2.1.8 · session-end §L.b(j)). 🧊 Mệnh-đề cũ "theo NHỊP, không phải mỗi phiên" GỠ @S164 — trái hành-vi đo được (S154 counter≈28 · S158 counter=32 đều < light_every mà cặp VẪN chạy); đây là site thứ 7 của FLAG-1 sau khi 6 site trong 2 file LỆNH vá @S159 — lớp persona/doc sót lại.
    • ⚠️ Đổi roster = đổi 2 BỀ-MẶT ĐỘC-LẬP: (1) file .md trong .claude/agents/Agent-tool registry · (2) hằng VALID_ROLES trong hmw.jsworkflow agentType. Sửa 1 quên 1 = vai spawn được tay nhưng THROW trong workflow (hoặc ngược lại). 🔴 Registry = ảnh-chụp lúc khởi phiên, KHÔNG hot-reload ⇒ vai mới cần RESTART + spawn-probe THẬT (session-start §0.6b) — ls + grep VALID_ROLES là điều-kiện CẦN, KHÔNG ĐỦ.
  • Memory governance (M1M5 + 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/<role> · 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.


💾 Memory discipline

Each agent .claude/agent-memory/<name>/MEMORY.md persistent diary. Spawn auto-inject first 200 lines/25KB. Update BEFORE return (BẮT BUỘC, entry ≤ 1.5K chars). Folder = ĐO ĐĨA, KHÔNG enumerate ở đây (ls .claude/agent-memory/*/MEMORY.md | wc -l — mỗi vai roster 1 folder; số vai canonical → docs/STATUS.md §Sub-agents — đúng luật dòng-1 file này: vá bằng BỎ số, không ĐỔI số). (🧊 S151 XOÁ đoạn khai "17 folder + ring dir RỖNG + ls thô ra 18 là ảo-giác": nó SAI từ 398d343 — cả 3 ring diary đã tracked CÓ RUỘT — và là lập-luận tự-niêm-phong dạy người soi sau gỡ cờ; H1 F-2 HIGH + stale FLAG-1 @S151. Xoá lập-luận, không chỉ đổi số.)

Tiered Memory Policy v1 (adopt AI_INFRA bulletin 2026-05-29 — thay ngưỡng cứng ">25KB archive" bằng tiered + just-in-time; size to ≠ chất lượng, context-rot):

  • L1 HOT = MEMORY.md soft-cap ~30KB (role + patterns + anti-patterns + 5-8 entry gần nhất) → auto-inject mỗi spawn
  • L2 COLD = archive/<YYYY-MM>.md verbatim (activity cũ) → Read on-demand. Harness-9 (S70): archive/_INDEX.md mục-lục 1-dòng/bản-ghi (con-trỏ substring sha-keyed, fallback Ctrl-F, frozen-additive) = inject "tấm bản-đồ"; verbatim + archive/<period>.gist.md (nén 4-field, distill-gen counter) = đọc-theo-nhu-cầu. "Inject mục-lục, KHÔNG inject lãnh-thổ." Budget-audit @session-start (§2.1.2 session-start.md) chống quên chỉnh ngân sách.
  • L3 SEARCHABLE = RAG search_memory → just-in-time
  • Discipline: search L3 / Read L2 TRƯỚC khi deep-dive (đừng nhồi L1). Agent nhớ vô hạn qua L2+L3, context spawn vẫn gọn. Curate khi L1 > ~30KB (KHÔNG còn hard 25KB).

End-of-session: em main SendMessage mỗi agent flush MEMORY → đọc 7 update → synthesize cross-agent → integrate project memory/session log → commit/push.


📊 Cost reality — re-ground S144 (2026-07-22)

🔴 KHAI ĐƠN-VỊ TRƯỚC (bắt buộc — cost-lens:28 cột "đốt đơn-vị NÀO"): Bảng dưới đo bằng subagent_tokens do harness báo per-run (tổng token của sub, gồm cả phần cache-read). ⚠️ KHÁC đơn-vị bảng cũ ("Effective tokens billed (after caching)") và KHÁC cả 2 đơn-vị hub dùng ở depth-cost (vào+ra tách riêng). ⇒ KHÔNG so trực tiếp được với số hub. Xem §residual.

Lớp spawn Đo THẬT S144 n Ghi chú
Probe tối thiểu (cấm gọi tool) ~28.0K/vai 3 registry-probe trio; sàn dưới của một lần spawn
Monitor audit đầy đủ (H1/H2) ~223232K/vai 2 vai × 2 lượt gồm lượt resume sau #53
Lane invest (đọc 3 file + verify) ~164K/lane 5 wf_491c05a8-6dc 819.982 / 5
Lane review (chấm 1 spec + spot-check) ~144K/lane 3 wf_301d3943-144 432.515 / 3

Phiên S144 (governance-heavy, 13 spawn + 3 workflow): ~2,3M subagent_tokens cho riêng sub.

🔴 Bài học đắt nhất của phiên: lane CHẾT vẫn ĐỐT ĐỦ

wf_491c05a8-6dc: 3/5 lane cháy maxTurns:20~490K token đốt, 0 sản phẩm. ⇒ Cost thật KHÔNG tỉ lệ với kết quả — phải đếm token/lane-SỐNG, không phải token/lane-phóng. Vá: hmw.js C1 nay LOUD-báo lane chết (trước đây .filter(Boolean) nuốt lặng ⇒ số này vô hình).

Nhánh TỰ LÀM TƯƠI (auto-toan-vong:29-31 — O-4e)

Bảng này đóng băng từ thời roster 7 vai tới nay (roster đã lớn hơn nhiều — canonical → docs/STATUS.md §Sub-agents, KHÔNG hardcode số) = đúng bệnh "số-đo-đóng-băng" hub vá. 🔴 Luật từ nay: khi roster đổi hoặc số đo lệch >30% so lần ghi trước ⇒ đọc lại + cập nhật NGAY trong phiên đó, không ghi-nhận-rồi-treo-disposition. (Ngưỡng 30% = AI-tự-đặt, đảo được — không phải số owner.)

Residual (khai thẳng, không tô)

  • 🔴 Falsifier depth-cost:59 VẪN CHƯA trả lời được: nó hỏi "bảng cost ghi đơn-vị nào, lệch mấy lần" — SE dùng đơn-vị thứ ba, muốn so phải đo lại theo đơn-vị hub (vào/ra tách). C9 chỉ đóng phần re-ground roster 7→17, KHÔNG đóng phần so-sánh-chéo-nhà.
  • Số cũ (~1.85M / ~9× solo) gỡ vì mẫu-số roster đã sai 7 vs 17; không giữ để so — hai đơn-vị khác nhau, so là tự lừa.

+50% budget (vs prior ~700K opt / ~1.35M heavy → now ~1.05M opt / ~2M heavy ceiling). Max 20× plan absorbs ~5× comfortable. Trade-off justify: split nhẹ hơn mỗi spawn (giảm gotcha #53 truncate) + parallel BE+FE+test (giảm wall-clock) + test-specialist clear coverage gap backlog (quality).


🎯 Project tunings (SOLUTION_ERP)

Stack: .NET 10 Clean Arch + CQRS MediatR + EF Core 10 + SQL Server + 2 React 19 Vite 8 FE + Gitea CI + Windows IIS.

State 🧊 FROZEN-HISTORICAL (S38 — 2026-05-28; số CỐ Ý không cập nhật — state sống → docs/STATUS.md §CURRENT STATE; nhãn thêm @S151 per H1 F-8 "sửa NHÃN, KHÔNG sửa SỐ"): 40 mig · 84 tables · ~223 endpoints · 53 FE pages · 130 test PASS · 53 gotchas · 27 memory · 6 skills · 7 sub-agents · Phase 10 COMPLETE 11/11 Plan G-*.

Windows MAX_PATH: project path nested + Dropbox-managed → implementer KHÔNG dùng isolation: worktree. Default branch OK.

UAT live mode (Phase 9): feedback_uat_skip_verify — skip dotnet test mỗi chunk, vẫn npm run build × 2. test-specialist test-after khi UAT confirm; test-before cho bug/critical algo.


🔗 References

  • Anthropic Building Effective Agents
  • Cognition "Don't Build Multi-Agents"
  • BVAAU 7-agent reference: D:\Dropbox\CONG_VIEC\BENHVIEN_A_AU\SOURCE_CODDE\.claude\agents\ (adapted S39 — split trục + 5 RAG tool; SOLUTION_ERP giữ 6 skill + backend/frontend split thay domain/infra cho 2-FE-app fit)
  • Memory: feedback_per_chunk_commit · feedback_uat_skip_verify · feedback_audit_reuse_before_clone · feedback_implementer_truncation_mitigation (gotcha #53)

⚠️ CLI restart required

Agent definition change (S39 split 4→7) → anh main restart Claude Code CLI để registry hot-reload (per S27 lesson — model:inherit + new agent files). Verify post-restart: spawn smoke test mỗi agent mới (investigator-api / implementer-frontend / test-specialist) confirm load OK.

Cập nhật S107 (2026-07-10): harness hiện tại HOT-RELOAD agent file MỚI giữa phiên (office-document tạo + spawn-test PASS cùng phiên, 0 restart). S27 lesson thu hẹp còn: EDIT agent đang tồn tại + command .md (chưa re-verify hot-reload) → restart vẫn là default an toàn cho 2 ca đó. ⚠️ ENV-DEPENDENT (S110 2026-07-11 — triage-reply S5 hub): hub chạy CÙNG experiment ADD-agent-mới → kết quả NGƯỢC (0 system-notice + spawn "not found" ×2 qua turn-boundary) ⇒ hot-reload-ADD-mới KHÔNG fleet-proof, chỉ verified trên env SE tại S107; restart = default an toàn MỌI ca khi nghi ngờ.