Files
solution-erp/.claude/commands/send-email.md
pqhuy1987 e27d877172 [CLAUDE] Infra: adopt AI_INFRA Harness 1/2/3 — monitor subs (roster 8->10) + wave-folder isolation + email channel (S49)
Harness 1 (Self-observability): NEW tooling-auditor (H1 tooling/docs-freshness 4-faceted) + harvest-curator (H2 harvest-integrity 5-axis) INFORM-only monitor subs, TACH BIET per anh-mandate -> roster 8->10. Wire session-start Phase 2.1.1 RE-REPORT + session-end L.b 6->7-step (H2 5-axis GATE + H1 chot + B5 wave-gom). H3 plugin/skill = gop-vai doc, 0 new agent.

Harness 2 (wave-folder isolation): hmw.js WAVE-MODE (subMdPath + tool-aware writeGuard) + .gitignore wave-*/ + agent-teams/ (B6 git-check-ignore verified) + NEW workflows/README convention. Harness 3 (email channel): broadcasts/ (6+6 folder + 13 .gitkeep + _index + inbox/README, committed) + send/check-email cmd (self=se) + adap-apply base-path fix outbox/all/.

HMW-mode ON: recon fan-out 4 read-only agent -> em main single-writer WRITE -> reviewer PASS all 3. Containment: git-diff 1 benign self-MEMORY + chunk-count 2414=2414 (0 RAG-write). Nac executed-file, verified-runtime PENDING CLI restart. 3 adap-reports + session log. Test 181 unchanged (no product code). CI runs (hmw.js/.gitignore/.gitkeep not path-ignored) but no bundle/migration change.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 23:18:43 +07:00

3.0 KiB

description, argument-hint
description argument-hint
Gửi email cross-project qua broadcasts/ (Harness 3 §N) cho SOLUTION_ERP (self=se). Ghi outbox/<to>/ repo MÌNH. §J2. Adopt AI_INFRA Harness 3 (2026-06-07). <to_project> [category] [intent...]

/send-email <to_project> — gửi email cross-project (Harness 3 · self=se)

🔴 Kênh DUY NHẤT (§N) · chỉ ghi repo MÌNH (§J2). self=se. Detail: AI_INFRA broadcasts/README.md §Harness 3 (pull cross_project_search).

Tham số

  • $1 = to_project (BẮT BUỘC) ∈ 6 project ≠ se (self/unknown → ABORT).
  • $2 = category ∈ Governance·Agent·Memory·Rag·Mcp·Skill·Cmd·Coord (default Coord). infra-CC ACTIVE: categoryCoord + toai_infra → auto bản-2 vào outbox/ai_infra/ (bước 6b) để AI_INFRA giám sát infra-comms.

Project-path map (7 project — se dùng 6 ≠ self · path-coupling, web-migration sẽ bỏ)

id broadcasts root
ai_infra D:\Dropbox\CONG_VIEC\AI_INFRA\broadcasts
vipix D:\Dropbox\CONG_VIEC\VIPIX_MULTISITE_PROJECT\broadcasts
se D:\Dropbox\CONG_VIEC\SOLUTION\SOLUTION_ERP\broadcasts (← self)
dyd D:\Dropbox\CONG_VIEC\DAI_Y_DUOC\DH_Y_DUOC_SOURCECODE\DH_Y_DUOC\broadcasts
namgroup D:\Dropbox\CONG_VIEC\NAMGROUP\SOURCECODE_CÔNG_TY\NAMGROUP\broadcasts
ashico D:\Dropbox\CONG_VIEC\ASHICO\SOURCE_CODE_WEBSITE_ASHICO\broadcasts
bvaau D:\Dropbox\CONG_VIEC\BENHVIEN_A_AU\SOURCE_CODDE\broadcasts

Quy trình

  1. Validate $1 ∈ 6 others (≠ se/unknown) → else ABORT.
  2. Soạn body markdown theo intent.
  3. id = <YYYY-MM-DD>-se-to-<to>-<slug> (unique).
  4. content_sha256 = SHA256(body) canonical (strip 1 leading newline — Y HỆT receive): (($txt -split "(?m)^---\s*$",3)[2] -replace "^\r?\n","") → SHA256-UTF8.
  5. Frontmatter: id · from: se · to: <to> · category · type: broadcast|update|fix|report|request|coord · date · content_sha256 · nac: sent.
  6. Ghi broadcasts/outbox/<to>/<id>.md (Write tool, KHÔNG shell-write — chống mojibake). [chỉ repo MÌNH §J2] 6b. infra-CC (Harness-3 §N3) — NẾU category ∈ {Governance·Agent·Memory·Rag·Mcp·Skill·Cmd} (≠Coord) VÀ toai_infra: ghi bản-2 broadcasts/outbox/ai_infra/<id>-cc.md (Write tool — repo MÌNH = §J2-safe, KHÔNG ghi inbox ai_infra) — body + content_sha256 Y HỆT primary; frontmatter id: <id>-cc · from: se · to: ai_infra · cc-of: <to> · category · type · date · content_sha256 · nac: sent. (Đã có outbox/ai_infra/.gitkeep.) → AI_INFRA pull qua /check-email se.
  7. Log append broadcasts/_index.md §OUTBOUND (+ 1 row tag cc nếu có bản-2).
  8. Báo. KHÔNG tự relay — bên nhận tự /check-email se.

Luật

🔴 §N single-channel · 🔴 §J2 chỉ-ghi-repo-mình · from+to BẮT BUỘC · id unique · folder khớp to · infra-CC bản-2 (category≠Coord → outbox/ai_infra/, ghi repo MÌNH = §J2-safe). Outward content → reviewer-gate (no-overclaim G-015) trước relay.