Files
solution-erp/.claude/commands/send-email.md
pqhuy1987 2757e418a1
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m43s
[CLAUDE] Docs: closeout OUTWARD wave adap đợt-9/10 + vá drift skill-matrix H24
Closeout 4 mục OUTWARD của wave S141-S142 (anh gật @S143):
- adap-report 7/7 thư, đủ 5 trường REPORT-FORMAT LOCK, evidence đo thật
- email hub báo-nấc (sha 6c94873f72e0, selftest_verify exit 0, log _index cùng lượt)
- STAGE-2: 7 thư -> inbox/ai_infra/, _index 0 pending, cross-check 7/7
- squash K=8 wal: -> commit chốt

Ngoài wave: agents/README skill-matrix thiếu 2 row H24 (drift S121) -> 15/17 thành 17/17.

Nấc cao nhất khai được = executed-file/verified-pending-restart (trio CHƯA spawn).
2 phát hiện khai thẳng theo G-015 (chi tiết trong report + email):
- whitelist `tools:` KHÔNG chặn ghi ở runtime: 6 vai read-only bị append Write+Edit
- pull-lag do "watch broadcasts/inbox" canh nhầm chỗ

TICK H24: counter 16->17 (S143), 3-điều-kiện OK-reachable, không fail-loud.
Detector TOTAL 46 == baseline 46, 0 flag mới.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 12:32:27 +07:00

4.8 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 ALL \r + strip 1 leading newline — Y HỆT receive + khớp scripts/stamp_verify.py bản port LOCAL — KHÔNG trỏ hub-path nữa): $txt=[Text.Encoding]::UTF8.GetString([IO.File]::ReadAllBytes($f)) -replace "^\uFEFF",""; (($txt -replace "\r","") -split "(?m)^---\s*$",3)[2] -replace "^\n","" → SHA256-UTF8. 🔴 CẤM Get-Content -Raw cho hash (PS 5.1 đọc UTF-8-no-BOM bằng ANSI → hash sai — S125 false-tamper).
  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. 6c. 🔴 Selftest-stamp (H19-ack 2026-07-03 — chống sai-phương-pháp + sửa-sau-stamp): NGAY sau Write, recompute SHA256(body-canonical) file vừa ghi (Y HỆT bước 4: split-frontmatter + strip-1-leading-newline + UTF8) → so content_sha256 frontmatter. Lệch → ABORT gửi + báo anh (KHÔNG log _index, KHÔNG relay). Khớp → tiếp. (Bài học: file 2026-06-18-...harness-10... stamp bằng body KHÔNG-strip-newline → lệch canonical, AI_INFRA bắt; 12/13 file khác đúng. Bước này chẩn cả 2 lớp lỗi.)
    • 🔴 ƯU TIÊN chạy SCRIPT thay vì gõ tay: python scripts/stamp_verify.py broadcasts/outbox/<to>/<id>.mdbản port LOCAL (hub-path AI_INFRA/scripts/... chỉ còn là nguồn re-pull khi hub đổi §N canon). exit 0 = PASS → tiếp; exit 1 → đọc verdict: WRONG-METHOD = stamp sai phương-pháp (re-stamp canonical) ≠ MISMATCH = nghi sửa-sau-stamp. Hai lớp lỗi này khác cách xử, đừng gộp.
    • Rút hash declared — CÙNG mẫu KHOAN-DUNG như /check-email 4(b): content_sha256:\s*"?([0-9a-fA-F]{8,64})"? (phủ có-ngoặc · không-ngoặc · rút-gọn ≥8-hex so bằng tiền-tố). 🔴 CẤM quote-strict content_sha256:\s*([0-9a-fA-F]+) — whiff dấu " ⇒ rút rỗng ⇒ ABORT oan chính thư mình vừa ghi đúng (S141). Đầu-đọc gửi và đầu-đọc nhận PHẢI cùng một mẫu, lệch mẫu = hai bên cãi nhau về một file lành.
  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.