Wave adap-6-broadcast W2 = 1 OWNER / 1 COMMIT co chu dich. Cac manh phu-thuoc nhau, tach ra la vo
duong dang chay (R2-C3): gate o W2 ma co o W3 => moi /fable-clone >=3 lane THROW ngay truoc khi W3 kip va.
(1) hmw.js - 1 EDIT, 4 viec
- SAN-1 GATE co-khi-hoa: taskList>=3 && !args.run => THROW STOP-HARD.
Truoc S121 san nay chi la CHU trong doc ("script no-fs KHONG tu ep") => phu thuoc lead NHO.
Do that @S119: git grep args.run .claude/commands/ = 0 hit => 4/4 wrapper KHONG co => san danh-nghia.
Vi sao >=3: chet giua run dai ma khong co runs/<run-id>/ => per-turn returns mat theo phien,
CHI file tren dia song sot => /tiep §4 khong co vat-lieu cat-got => chay lai TU DAU (S118
raw-Agent 7-spawn => 0 run-folder). THROW chu khong fail-soft (fail-soft = dut am-tham).
- VALID_ROLES 12->14 (+lead-view-auditor +lead-omission-auditor).
- PA-2a: TIER2_EXPECTED_FULL_ID = 'claude-opus-4-8'. La HANG-SO KHAI-BAO, KHONG phai co-che neo
(neo-tai-spawn bat-kha-thi: param chi nhan alias; SE 0 full-id vi H8 all-inherit). Doc boi
scripts/spawn-model-audit.ps1 (W1b) - thieu hang-so => script FAIL-LOUD.
- H23 note CHUA-VERIFY giu nguyen nac: precedence spawn-param vs frontmatter khi CA HAI hien-dien
= CHUA TUNG TEST; phan-biet duoc CHI o phien lead=Fable => DEFER, khong ban qua nac. + fix#8a chua thu.
(2) 4 co wrapper CUNG COMMIT voi gate (San-1 (c))
fable-clone.md / fable-real.md / ultra-on.md => args.run: 0 -> 3 hit.
Wrapper thu 4 = raw-invoke em-main: KHONG co file de gan co => duoc GATE chan truc tiep
(chinh cu fault-inject duoi day di duong do). Khai that: gate chi phu hmw.js; nguong "hoac uoc
>5 phut" KHONG co-khi-hoa duoc (script khong do truoc thoi-luong) => van la ky-luat lead;
raw Workflow/Agent tool = ke CON-LAI khong gate duoc.
+ go so roster stale (view-stale-role-desc): "roster 12"/"12 sub"/"8-agent"/"9-agent" -> tro
canonical docs/STATUS.md §Sub-agents (B1). session-start.md con "roster 12" = W3 so-huu, KHONG dung.
(3) 2 vai MOI - H24 §2(1), cookie-cutter frontmatter monitor san
lead-view-auditor = view LECH source (5 class view-*)
lead-omission-auditor = cai BI THIEU (5 class gap-*)
model:inherit / memory:project / maxTurns:18 / 8 tool read-only / NO Write-Edit / propose-only.
KHONG gop vao tooling-auditor(H1)/harvest-curator(H2): H24 "gop la mat tieu-diem; can cap mat
CHI danh cho lead". Tu-vung view/omission chon tranh va-cham (detectors:15 da so-huu
derived-staleness; GAP qua-tai). 2 file 0-CR + block-scalar (giu ': ' N/A).
(4) memory-budget.json - single-source H24 §2(3)
h24_cadence { light_every:6, deep_every:15, jump_on_class_repeat:3 } (anh chot Q2).
lead_self_audit.flag_classes = enum DONG 10 class (5 view-* + 5 gap-*) - vai CAM tu che class
(v2 M4: enum song trong dau 1 lane => worker khong bao gio thay => tu che => loang thong-ke).
Honest-caveat giu de bao hub: hub dan "dung chep 3 con-so nay"; SE chon trung 6/15/3 = anh chot
CO CHU-DICH lam khoi-diem, KHONG phai chep vo-thuc; re-tune sau chu-ky-2.
(5) .claude/governance/.session-counter.json (NEW) - seed UNTICKED trung thuc
Content-based (idempotent-key = HEAD sha), KHONG blind-increment: hook wal-flush auto-commit
agent-memory/ MOI TURN => dem mu se vo nghia. Dat o .claude/governance/ CO CHU-DICH = ngoai
3 path hook (.claude/WAL.md, agent-memory/, workflows/runs/) => khong bi quet vao commit wal:.
counter=0 + last_ticked_*=null = SU THAT tai S121 (nghi-thuc tick land o W3); seed tick gia
se lam phep do cadence dau tien noi doi - dung thu H24 sinh ra de bat.
(6) STATUS.md 2 row - CUNG LANDING roster (R3-M2: lech => detector BAO tren chinh thay doi cua H24)
| Sub-agents | 12 -> 14 |
| Policies | 216 | ROW MOI - GAP-3 can no de resolve token 'policy'.
216 GROUND TU MA NGUON, khong chep tu spec: |MenuKeys.All| x |MenuKeys.Actions| = 54 x 4
(Program.cs:82-89 AddPolicy loop; MenuKeys.cs:167 Actions=[Read,Create,Update,Delete]).
=> Policies la DERIVED = Menu keys x 4 => 2 row BUOC doi cung nhau (ghi thang vao row).
VERIFY LEAD TU DO (khong tin return):
14/14/14 (roster / VALID_ROLES / agents-*.md tru README) = acceptance ② EOL.
Glob tho = 15 => xac nhan R2-C1: acceptance CU "ls agents/*.md = 14" se FAIL tren impl DUNG.
Hop-dong cheo W1<->W2 khep CA HAI chieu, do bang chinh script W1:
detector H24-2: "h24_cadence missing" -> "M = h24_cadence.light_every = 6 (read from config)"
spawn-model-audit: "expected constant missing" -> "[OK] expected = claude-opus-4-8 = owner-ratified"
GAP-3 policy: MISSING -> 216, va BAT NGAY permission-matrix/SKILL.md:3 "writes 240 policy but
canonical=216" (+:81 "writes 48") => TOTAL 49->50 (-1 fail-loud cadence, +2 policy) = so cong khop.
eol-check tu nhan 2 vai moi: scoped 37->39 (dem bang glob, khong hardcode).
FAULT-INJECT SAN-1 2 CHIEU (bai hoc W0.3: chi test 1 chieu thi dieu-kien viet nham van PASS):
(b) 3 task + KHONG args.run -> THROW, agent_count=0, subagent_tokens=0, 14ms (chan TRUOC spawn)
(a) 2 task + KHONG args.run -> gate IM, workflow launch binh thuong => khong over-fire, nguong
dung la >=3. Neu viet nham `if (!wave)` thieu nguong thi /fable-real 1-lane se chet oan.
CHUA VERIFY (khai that, KHONG gia vo):
14/14 spawn-probe SONG = PHAI chay SAU RESTART (registry = anh-chup khoi-phien; S120+S121 da do
2 lan xac nhan KHONG hot-reload agent MOI). Static-check KHONG du (broadcast ④d).
=> 2 vai moi hom nay moi chi TON TAI tren dia + trong VALID_ROLES, chua chung duoc SPAWN duoc.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
.claude/workflows/ — Workflow fan-out + run-trace convention (Harness-10)
Mục đích: convention cho HMW workflow fan-out + run-trace folder (mỗi workflow run → 1 thư mục
runs/<run-id>/git TRACKED, gom plan + per-sub + synthesis + ledger 2-nhịp). Adopt AI_INFRA Harness-10 (anh 06-18) — kế thừa wave-folder memory-isolation Harness-2 nhưng đổi từ transient-gitignored sang tracked-run-folder để audit trực-tiếp qua git-diff. 🆕 Cấu trúc PHẲNG (h10-refine 06-18): file phẳng cùng cấp trong run-folder (phân biệt RAW vs VERIFIED bằng TÊN), KHÔNG subfolder. Canonical rule: AI_INFRACANONICAL-RULES.md§J4 (return-delta default) + §J6 (run-trace + agent-team) — pull quacross_project_search, KHÔNG copy. Tailor SE 9-role roster + S1 scope.
Files (tracked)
hmw.js— HMW P2 fan-out script. 2 mode: DEFAULT return-delta-only (§J4) · RUN-TRACE mode (§J6,args.run).README.md— file này (convention).runs/— git TRACKED (qua negation.gitignore:83 !.claude/**), không gitignore. Mỗi workflow run = 1 sub-folderruns/<run-id>/. Xemruns/README.mdcho cấu trúc chi-tiết (FLAT) + ledger 2-nhịp + 3-layer anti-miss + C8 migration + detector-tailored-out.
Run-trace = mỗi workflow run → runs/<run-id>/ TRACKED (FLAT)
Mỗi lần chạy workflow fan-out (RUN-TRACE mode) → 1 thư mục run git theo dõi, file phẳng cùng cấp:
.claude/workflows/runs/<run-id>/ ← TRACKED · FLAT h10-refine (hiện trong git-diff = audit trực-tiếp)
├── run.md ← Run-MD chính — EM MAIN ghi @P1 (plan + agents-table + spec + guards + status OPEN→CLOSE)
├── sub-<role>-<i>.md ← per-sub RAW (prefix `sub-`) — full detail (write-sub ghi @P2 · read-only sub → em main scribe @P3)
└── <stage>-synthesis.md ← gom/VERIFIED (suffix `-synthesis.md`) — EM MAIN ghi NGAY sau mỗi fan-out turn (C4 per-turn primary)
Phân biệt RAW (prefix sub-) vs VERIFIED (suffix -synthesis.md) bằng TÊN file, KHÔNG subfolder. C8: 5 run cũ S71 (h10-invest…h910-curate) giữ sub-md/+harvest/ (đừng rewrite history); close-gate chấp nhận CẢ HAI dạng.
runs/_ledger.md— 🧊 RETIRED H18-B S100 (sổ 2-nhịp nghỉ-hưu — đo bắt-thật: true-orphan-catch 0/15 lifetime + mode-A coverage 0/8 workflow từ S93; 15 row lịch-sử GIỮ NGUYÊN, đảo-ngược = gỡ marker). Orphan-authority = folder-scan:runs/<id>/córun.mdmà*-synthesis.mdVẮNG/0-byte. Chi-tiếtruns/README.md.
2 MODE memory (anh 06-07, KHÔNG thay return-delta)
| DEFAULT return-delta-only (§J4) | RUN-TRACE mode (§J6) | |
|---|---|---|
| Khi dùng | fan-out NHỎ (<3 task VÀ ước ≤5 phút; read/analyze — vd recon) | workflow DÀI / sinh nhiều detail / cần audit-trail |
| Bắt buộc? (sàn H22 S111) | mode-A hợp lệ cho fan-out NHỎ | BẮT BUỘC khi run ≥3 task HOẶC ước chạy >5 phút (args.run → per-agent-file sub-<role>-<i>.md) |
| Sub ghi file? | KHÔNG — chỉ return memoryDelta + findings |
write-sub GHI full-detail vào runs/<run-id>/sub-<role>-<i>.md (phẳng); read-only sub → findings + subMdPath → em main scribe |
| Lead làm | VERIFY + APPEND @P3 (B3) | đọc sub-<role>-<i>.md on-demand + ghi <stage>-synthesis.md per-turn (C4) + H2 gom @session-end (B5, backstop) |
| Rủi ro mất detail | có (delta lossy) — chấp nhận cho việc nhẹ | KHÔNG (full-detail giữ trong run-folder tracked) |
Sàn H22 (S111) — FLIP policy: mode-A return-delta-only VẪN hợp lệ cho fan-out NHỎ, NHƯNG run ≥3 task HOẶC ước chạy >5 phút = BẮT BUỘC RUN-TRACE mode (
args.run→ per-agent-filesub-<role>-<i>.mdtrong run-folder). Lý-do: chết giữa run vẫn còn vật-liệu trên đĩa để/tiepnối lại — per-TURN ≠ per-TASK: returns mất khi chết giữa turn, nhưng file trên disk còn. Fan-out NHỎ dưới ngưỡng → DEFAULT return-delta-only vẫn OK (KHÔNG bắt MỌI fan-out tạo run-folder).
Quy trình RUN-TRACE (B1–B6)
- B3 SCAFFOLD TRƯỚC (em main @P1): tạo
runs/<run-id>/+run.md(FLAT — KHÔNG cầnsub-md//harvest/subfolder hay.gitkeep; filesub-*/*-synthesis.mdsinh phẳng cùng cấp khi fan-out chạy). (🧊 bước "ghi OPEN-beat vàoruns/_ledger.md" retired H18-B S100 — orphan-authority = folder-scan.) ⚠️hmw.jschạ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; xemruns/README.md§C7.) - 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 (agentTypeinherit memory-pack slice + skill identity), KHÔNG agent vô-danh. - B4 phân-quyền TOOL-AWARE:
hmw.jsinject vào prompt mỗi sub đường-dẫnruns/<run-id>/sub-<role>-<i>.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).
- B6 ISOLATION (AUDIT cẩn-thận): sub CHỈ ghi trong
runs/<run-id>/(filesub-<role>-<i>.mdphẳng của mình) + code-file-disjoint nếu giao. 🔴 KHÔNG ghiagent-memory/*chính · KHÔNG MD canonical (CLAUDE/README/STATUS/agents) · KHÔNG sub-MD agent khác. Em maingit status/git diff+ chunk-count sau P2 → run-folder TRACKED → mọi write trong run-folder HIỆN trong diff = audit trực-tiếp; tracked-change NGOÀIruns/<run-id>/VÀ NGOÀI code-disjoint đã giao = vi-phạm (thay model Harness-2 B6 "mọi tracked-change = vi-phạm"). Verify pattern bằnggit check-ignore -v(test match thật, đừng tin .gitignore text — bẫy exit-code: dùng&& IGNORED || NOT). - B5 HARVEST (per-turn primary C4 + close-gate backstop): em main ghi
<stage>-synthesis.md(phẳng) NGAY sau mỗi fan-out turn (đọcsub-<role>-<i>.md+ findings → 5-trục integrity → consolidate). @session-end ⬜ harvest-curator H2 §L.b(f) VERIFY per-turn harvest đã xong cho mọiruns/<id>/(idempotent — KHÔNG re-APPEND, chống DUPLICATE-HARVEST) + giữ 5-trục GATE làm backstop, rồi đề-xuất em main APPEND vàoagent-memory/<role>sub tương-ứng.
Agent-team (.claude/agent-teams/<tên>/ — gitignored .gitignore:94)
- Cùng nguyên-lý isolation: teammate KHÔNG có memory-dir built-in (khác subagent) → folder riêng cho teammate ghi MD-session (A1, tránh overwrite memory chuẩn).
- Team spawn TỪ sub-agent chính có memory dự-án rõ-ràng (A2 — mang identity/skill sub thật trong 9 roster).
- H2 harvest-curator gom
.claude/agent-teams/<tên>/→ agent-memory tương-ứng (giống run-trace). - ⚠️ Caveat: Agent-Team experimental + Windows 11 in-process only (no split-pane) → SE CHƯA dùng team thật → A = convention-ready (n-a runtime), cơ-chế isolation chung qua workflow.
Guard
- S1: Workflow CHỈ repo SOLUTION_ERP — KHÔNG fan-out repo/corpus khác (
cross_project_search= READ reference only). - S2/S3: chỉ chạy khi HMW-mode ON (
/ultra-on→ marker.claude/hmw-mode.on) + checkpoint INFORM (hmw.jsthrow nếucheckpointApproved≠true) + sub KHÔNG spawn sub. - Anti-bypass detector (h10-refine b) — SE KHÔNG dựng detector; nhưng CẤM đọc thành "SE không có kẽ". 🔴 Bản trước S120 tuyên SE đã "tailored-out" khỏi lớp detector này và coi mặt-lách là gần-như-không-có ⇒ STALE, gỡ S120 W0.4 — bị bác ×3 bằng sự-kiện thật, không phải lý-lẽ. (Nguyên-văn claim cũ:
git log -p --follow -- .claude/workflows/README.md. Ở đây cố ý paraphrase, không trích literal: gate của W0.4 là một phép grep-chuỗi trên chính file này, mà grep không phân-biệt được claim-đang-sống với claim-đã-chết-được-trích-làm-bằng-chứng ⇒ trích nguyên-văn sẽ làm gate FAIL trên đúng bản sửa ĐÚNG. Cùng lý-do: không viết literal mẫu regex của gate vào đây — S120 đã mắc đúng bẫy đó, mẫu tự khớp chính nó. Ghi lại để adap-report nêu với hub: gate grep-chuỗi trên file nó kiểm = tự-tham-chiếu, cần neo bằng dấu-hiệu khác.) SE có 3 đường phóng workflow/agent, chỉ 1 đường gate được:/ultra-on→hmw.js— ✅ QUA gate (writeGuard · Sàn-1 marker · VALID_ROLES). Đường DUY NHẤT được phủ.- raw Workflow tool (Anthropic) — ❌ KHÔNG gate. S72 RECURRED: chạy REVIEW đường này ⇒ không inject writeGuard ⇒ reviewer tự ghi MEMORY +2850B over-cap ⇒ git-status bắt @session-end + revert. Kết-luận nguyên-văn
feedback_harness10_run_trace.md:20: "dùng RAW Workflow tool = MẤT governance của project-wrapper". 🔴 Chính run S119 đi đường này. - raw Agent tool — ❌ KHÔNG gate. S118: 7-spawn ⇒ 0 run-folder (việc rớt khỏi sổ).
🔴 Kẽ CÒN-LẠI (khai thẳng, KHÔNG overclaim): lách ở SE không cần CLI-launcher — gọi thẳng tool của harness là xong. ⇒ 3 nguyên-tắc detector (whitelist launcher · path-variant match · anchor launch-key + nghiệm-thu quan-hệ) N/A vì KHÔNG CÓ launcher để whitelist, KHÔNG phải vì "không có kẽ" — đây đúng là chỗ claim cũ trượt. Containment THẬT = em-main single-writer + git-diff (run-folder TRACKED nên mọi write in-repo hiện) + chunk-count RAG + folder-scan orphan (🧊
_ledgerretired H18-B S100) = phát-hiện-SAU, KHÔNG ngăn-chặn-TRƯỚC (G-015). Chi-tiếtruns/README.md.
- G-015 accuracy (no-overclaim): run-folder TRACKED ≠ read-only-ENFORCED — sub vẫn giữ Bash (write-channel mở: ghi-ngoài-repo git-diff mù / curl Qdrant). Containment THẬT = em-main single-writer + git-diff (in-repo, run-folder tracked nên hiện) + chunk-count (RAG), defense-in-depth, KHÔNG sandbox cứng. KHÔNG claim "ENFORCED", KHÔNG bỏ chunk-count.