Re-audit Harness-8/9/10/10-refine + checklist v1/v2 + hmw vs canonical AI_INFRA (mandate Harness-9 B1+B2): audit wf_13868efb-ea7 -> implement wf_ac43b5ff-7d1 -> review wf_d482e10d-5dd. SE was BEHIND Harness-10 flat. - run-trace SUBFOLDER->FLAT: hmw.js (:103 subMd + :52 schema + H4.5->H8 drift) + workflows/README full-rewrite + runs/README + session-start/end + agents/README Upgrade S72 + _ledger; 5 old S71 runs KEEP subfolder (C8 dual-accept). node --check OK. - adopt 2 pending broadcasts (checklist-v2 + h10-flat-detector-refine). - port /sleep-recovery-memory-l2 (A8, J2-tailored SE-only, floor intact, live skill). - detector refine-b TAILORED-OUT (SE Workflow-tool no-CLI-bypass; containment git-diff+tracked+orphan-scan G-015). - REVIEW (B2) caught 2 IMPLEMENT-self-assess missed (hmw.js:52 schema-stale + sleep-cmd auto-check un-wired overclaim) -> fixed (auto-check WIRED: budget.json +last_sleep_at + session-start/end INFORM). +3 minor fixed. - em-main containment-check caught 1 reviewer residual-write (raw-Workflow no writeGuard) -> revert (reverse-finding #4). B3 self-correct: runs path 14->22. - sleep-recovery-memory-l2 all = NO-OP (all periods already gisted). last_sleep_at set. 0 production code. State unchanged: Mig 53 / 88 tables / 306 test / 68 gotcha / menu 54 / bundle BgNCjwsG/CBvh0vtf. adap-report + email ai_infra (5f511fe5c0f2). 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— sổ run 2-nhịp: ghi OPEN-beat lúc mở run + CLOSE-beat (timestamp + verdict + harvest) lúc đóng. Orphan = OPEN mà không CLOSE → phải giải-quyết-cứng (điều tra + đóng tay hoặc đánh-dấu aborted). 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Ẹ (~2-3 phút, read/analyze — vd recon) | workflow DÀI / sinh nhiều detail / cần audit-trail |
| 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) |
Mặc định DEFAULT. RUN-TRACE chỉ bật khi workflow dài/nhiều detail/cần dấu-vết (set
args.run = {name, dir}). 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), và ghi OPEN-beat vàoruns/_ledger.md. ⚠️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(9 sub) → 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 TAILORED-OUT — SE chạy workflow qua Anthropic Workflow tool (KHÔNG có CLI-launcher để lách như node-CLI) → bypass-surface ~N/A; containment = git-diff + run-folder TRACKED + ledger orphan-scan (G-015). 3 nguyên-tắc detector (whitelist launcher · path-variant match · anchor launch-key + nghiệm-thu quan-hệ) đã cân-nhắc, N/A cho threat-model SE. Chi-tiết
runs/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.