[CLAUDE] Docs: closeout OUTWARD wave adap đợt-9/10 + vá drift skill-matrix H24
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m43s

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>
This commit is contained in:
pqhuy1987
2026-07-22 12:32:27 +07:00
parent b146e2bb4b
commit 2757e418a1
56 changed files with 2318 additions and 58 deletions

View File

@ -61,7 +61,7 @@ Registry sub-agent = **ảnh-chụp lúc khởi phiên** (đo 2 lần S120 + S12
- 🔴 **Bằng-chứng falsifiable DUY-NHẤT = spawn-probe THẬT** → spawn vai đó, nhận return. Static-check (`ls` + grep `VALID_ROLES`) **KHÔNG đủ** — đúng nguyên-văn broadcast ③(d): *"RESTART rồi VERIFY danh-sách agent"*.
**Khi nào chạy:** phiên **ĐẦU TIÊN sau khi roster đổi** (thêm/xoá/sửa vai), hoặc khi nghi registry lệch đĩa. Roster ổn-định → **skip** (không cần mỗi phiên).
**Cách:** spawn từng vai với task PROBE tối-thiểu (trả đúng `ALIVE|<role>`, cấm gọi tool) → đếm **N/N sống**. Đo S122: **14/14 ALIVE, 0 error, 0 garble**; 2 vai mới lean nhất (~26K tok).
**Cách:** spawn từng vai với task PROBE tối-thiểu (trả đúng `ALIVE|<role>`, cấm gọi tool) → đếm **N/N sống**. Đo S122: **toàn-roster-khi-đó ALIVE (N=14 tại thời-điểm S122), 0 error, 0 garble**; 2 vai mới lean nhất (~26K tok). 🔴 **Đây là MỐC ĐO LỊCH-SỬ (S122), KHÔNG phải roster hiện-tại:** +3 vai trio-memory (S141) **CHƯA probe lần nào** — lần probe đầu = phiên SAU restart (đừng đọc con số cũ thành "đủ roster hôm nay").
> 🔸 **Khai chặt phạm-vi (S122) — đừng đọc thành "đã phủ hết":** probe này phủ đường **Agent-tool registry**. Đường **`hmw.js VALID_ROLES` → `agentType`** là **BỀ-MẶT KHÁC**, chỉ chứng được khi có workflow THẬT gọi vai đó. Đổi roster = đổi **CẢ HAI bề-mặt** — 1 probe KHÔNG phủ cả 2.
> 🔸 `tool_uses=0` ở probe = **ĐÚNG THEO LỆNH** (mình cấm gọi tool, câu hỏi không cần tool) — **KHÔNG** phải chữ-ký #53 (= `tool_uses=0` **CỘNG VỚI** bịa đã-làm-việc). Đừng nhìn cột đó rồi tưởng dính garble.
@ -94,7 +94,7 @@ Em main đọc `.claude/WAL.md` (sổ mạch-việc-dở H22 — ghi-đè ≤40
## Phase 2 — AUDIT (state check)
### 2.1 Sub-agent state (topology — **10 product/quality + 4 monitor INFORM-only**; số vai canonical → [`docs/STATUS.md`](../../docs/STATUS.md) §Sub-agents, B1 KHÔNG chép số ở đây)
### 2.1 Sub-agent state (topology — **10 product/quality + monitor INFORM-only (H1 · H2 · 2×H24 · 3×trio-memory)**; số vai canonical → [`docs/STATUS.md`](../../docs/STATUS.md) §Sub-agents, B1 KHÔNG chép số ở đây)
- Check TOÀN roster đã spawn chưa:
- 🟦 **investigator-codebase** — internal SQL/EF/grep/reference mirror audit
- 🟦 **investigator-api** — external docs/CVE/lib/cross-project reference
@ -110,6 +110,10 @@ Em main đọc `.claude/WAL.md` (sổ mạch-việc-dở H22 — ghi-đè ≤40
-**harvest-curator** (monitor H2, INFORM-only) — harvest-integrity 5-trục (Coverage/Completeness/Fidelity/Placement/Corruption)
- 🔷 **lead-view-auditor** (monitor **H24**, INFORM-only, **+S121 W2**) — soi **VIEW LỆCH SOURCE** của chính cái LEAD surface (bản-tóm-tắt trỏ số cũ · tiêu-đề chưa bump · chú-thích-trạng-thái chưa lật · số trong mô-tả một VAI lệch · dư-lượng bất-đối-xứng)
- 🔶 **lead-omission-auditor** (monitor **H24**, INFORM-only, **+S121 W2**) — soi **CÁI BỊ THIẾU** trong cái LEAD surface (việc rớt khỏi work-state · carry rớt/quá-già · yêu-cầu owner ghi chung-chung mất specifics · quyết-định-treo chìm · memory nạp dưới hạn-mức)
- 🧪 **harness-eval** (monitor **trio-memory**, INFORM-only, **+S141**) — con **ĐO**: đọc output 5+1 instrument + `memory-budget.json` → TRẢ **số nguyên-văn** + so-baseline + verdict {HEALTHY|REGRESSION|MIXED}. 🔴 CẤM số-từ-trí-nhớ.
- 🧭 **harness-refine** (monitor **trio-memory**, INFORM-only, **+S141**) — con **ĐỀ-XUẤT**: đọc `harness-eval-return.md` (PIN) → action 4-lớp {nạp-lại · thăng-hạng · lưu-kho L1→L2 · chưng-cất} + mục "đã cân-nhắc→BÁC". Chỉ acts **AGENT-MEMORY corpus** (lead hot-feed/carry ⇒ NHƯỜNG `lead-omission-auditor`).
- 🧮 **harness-audit** (monitor **trio-memory**, INFORM-only, **+S141**) — con **KIỂM**: đọc **run-folder PIN đích-danh** → verdict ĐẠT/TRƯỢT per-claim + falsify-log + **re-chạy ≥2 số load-bearing**. 🔴 CẤM tự tìm "run mới nhất", CẤM ĐẠT-ảo.
- 🔴 **Bộ-ba trio-memory = trục CHÍNH-HỆ-MEMORY, KHÁC H1/H2/H24/reviewer** — chạy **TUẦN TỰ** eval→refine→audit, **consent-gated**; nghi-thức đầy-đủ ở **§2.1.9** (đầu phiên) / `session-end §L.b(k)` (cuối phiên).
- 🔴 **2 vai H24 = trục KHÁC H1/H2, KHÔNG gộp:** H1 = tooling-freshness · H2 = harvest-integrity · **H24 = soi chính LEAD**. Class-flag lấy từ **enum ĐÓNG** `lead_self_audit.flag_classes` (`.claude/agent-memory/memory-budget.json`) — **vai KHÔNG tự chế class**. Nhịp = `h24_cadence` (cùng file), **KHÔNG chạy mỗi phiên**.
- Task match delegate criteria (ACCEPT) → BẮT BUỘC delegate (xem `.claude/agents/README.md` decision tree)
- Con cũ rảnh TRONG-session → resume qua SendMessage (khả dụng lại — F2 S100) HOẶC fresh spawn re-inject MEMORY; cross-session luôn fresh spawn
@ -193,7 +197,11 @@ ngược lại → counter += 1 ; last_ticked_session = S<nn> ; last_ticked_head
🔴 **Label-convention (PIN THÀNH LUẬT — S135):** mỗi conversation MỚI = một **nhãn-phiên `S<nn>` MỚI**, **kể cả khi vào bằng `/tiep`** (nối qua phiên/đổi acc `tiep.md:130` "session: khác phiên hiện-tại BÌNH-THƯỜNG" = use-case chuẩn; thực-hành S134/S135). 🔴 **CẤM reuse nhãn cũ khi nối** thiếu luật này thì session-clause khớp nhãn OR-guard NO-OP nhầm ngay cửa `/tiep` tiep KHÔNG tick **phép-7 `+0`**.
> 🔸 **Đơn-vị đếm + khai thật giới-hạn (reconcile gốc "đếm phiên-có-làm-HEAD-đổi"):** counter đếm **nhãn-phiên `S<nn>`** — phiên thường (SE chưa adopt session-logic `9234a7aa`; khi adopt thì đọc lại = **phiên-LOGIC**, caveat B1 §7). OR-guard cho **mỗi nhãn-phiên +1** ở điểm tick ĐẦU. 🔸 **Ca hiếm giữ khai:** một nhãn-phiên MỚI mà **không commit gì** (Q&A thuần, không chạm WAL) ⇒ HEAD trùng `last_ticked_head` ⇒ head-clause NO-OP ⇒ **+0** (đúng gốc "phiên-có-làm-HEAD-đổi", giữ khai). Thực-tế hook chạm WAL gần như mọi phiên nên hiếm; **đừng đọc counter thành "số phiên tuyệt-đối"**.
**(b) FAIL-LOUD, CẤM tự chữa:** counter đến **THẤP HƠN** giá-trị đã lưu, HOẶC `last_ticked_head` trỏ commit **không reachable từ HEAD** 🔴 **BÁO ANH**, **KHÔNG silent-reset**. Counter lùi = file bị rollback/sửa tay; reset lặng sẽ **giấu mất khoảng nhịp đã trôi**.
**(b) 3-ĐIỀU-KIỆN FAIL-LOUD vs SQUASH-BENIGN (v2 @S141, khuôn a hub APPROVED; canonical wording = `.claude/governance/.session-counter.json → _contract.fail_loud_on_regress`, B1 bước này mô-tả nghi-thức, đừng chép ngược):** 🔴 **KHÔNG còn** luật "not-reachable báo ngay". **PHÂN-LOẠI TRƯỚC, rồi mới quyết:**
1. 🔴 **counter LÙI** (giá-trị đọc được **THẤP HƠN** giá-trị đã lưu) **FAIL-LOUD BÁO ANH**, **KHÔNG silent-reset**, **CẤM tự chữa**. Counter lùi = file bị rollback/sửa tay; reset lặng sẽ **giấu mất khoảng nhịp đã trôi**.
2. **`last_ticked_head` không reachable từ HEAD** (`git merge-base --is-ancestor <last_ticked_head> HEAD` exit 0) **NHƯNG** object **VẪN TỒN-TẠI** (`git cat-file -t <last_ticked_head>` in ra `commit`) **VÀ** counter **KHÔNG lùi** **`squash-benign`**: append **1 dòng vết** vào `history[]` với event-class `squash-benign` **ĐI TIẾP, KHÔNG báo anh**. *Vì sao hợp-lệ:* closeout squash **nhấc đầu-tick mỗi chu-kỳ** drift KỲ-VỌNG, không phải mất dữ-liệu; **nhãn-phiên cũ còn nguyên = corroborate** (2 nguồn khớp mới cho đi tiếp).
3. 🔴 **object MISSING** (`cat-file -t` fail sha không còn trong repo) **HOẶC** counter lùi **FAIL-LOUD như cũ** (báo anh, KHÔNG silent-reset).
🔴 **Ranh 2 tầng (đừng gộp):** contract runtime (b) này = **RĂNG THẬT**, chạy trong nghi-thức, **độc-lập detector**. Lưới `governance-detectors.ps1` **H24-5 `counter-ancestor-classify`** (co-land S141) soi CÙNG 3 nhánh trên nhưng **INFORM-only, KHÔNG vào TOTAL** **KHÔNG** được coi thay thế (b); detector chết vẫn KHÔNG làm mất FAIL-LOUD.
**(c) OVERDUE:**
- `OVERDUE(light)` khi `counter last_audit.light_at_counter >= h24_cadence.light_every`
@ -207,6 +215,22 @@ ngược lại → counter += 1 ; last_ticked_session = S<nn> ; last_ticked_head
🔴 **Số nhịp = quyền anh.** Bước này **ĐỌC** `h24_cadence`, **KHÔNG** ghi. **CẤM hardcode nhịp ở đây** copy số vào doc dẫn-xuất chính drift single-source sinh ra để chặn (detector `governance-detectors.ps1` H24-2 **fail-loud** nếu key thiếu, **không** giả-định default).
> 🟡 **Honest-caveat mang theo khi báo hub:** hub nói rõ *"số của các em = config của các em; ĐỪNG chép 3 số này"*. SE chọn **cùng 6/15/3** là **điểm khởi-đầu anh CỐ Ý chọn**, KHÔNG phải chép vô-thức. **Chỉnh lại sau chu-kỳ-2 CỦA SE** (deep-audit lần 2, xem .session-counter.json last_audit). Hub đã GỠ counter (bookend 07-15, sha 85bf89ca) → ví-dụ 6/15/3 "ở nguồn" = lịch-sử, KHÔNG còn mốc hub để so; delta hub hứa từ run-2 KHÔNG BAO GIỜ có (hub gỡ trước run-2) — **chưa ai được bán câu "đã chứng minh hiệu-quả"**. ✅ **Ratified 2026-07-17:** anh mark cổng reply `e50a4bd0` (2026-07-16-ai_infra-to-se-reply-adap); canonical = `memory-budget.json → h24_cadence._owner_ratified` (B1 — wording sống ở đó, đừng chép lại đây).
### 2.1.9 Bộ-ba đồng-kiểm memory — nhịp 2-đầu-phiên, CONSENT-GATED (adopt S141, khuôn hub 5-câu `58e28bae` khối B)
> Trục = **CHÍNH HỆ MEMORY** (độ-giữ · hành-động · đúng-spec) — **KHÁC** H1 tooling-freshness · H2 harvest-integrity · H24 soi-LEAD · reviewer chấm-diff. 3 vai read-only INFORM-only propose-only, chạy **TUẦN TỰ**: `harness-eval` (con ĐO) → `harness-refine` (con ĐỀ-XUẤT) → `harness-audit` (con KIỂM). Contract từng vai = canonical ở [`.claude/agents/harness-{eval,refine,audit}.md`](../agents/harness-eval.md) (B1 — **KHÔNG chép contract vai vào đây**).
- **(a) 🔴 CONSENT-GATED KHÔNG auto-run** (cùng khuôn sleep-check §2.1.2 + H24 §2.1.8(e)): em-main **IN đề-xuất 1 dòng** dạng `trio-memory: de-xuat chay eval->refine->audit @S<nn> (consent?)` **anh gật mới chạy**. Không gật KHÔNG chạy (KHÔNG hỏi vòng 2, KHÔNG "chạy thử cho nhanh").
- **(b) 🔴 TUẦN TỰ, CẤM song song:** **3 spawn RIÊNG** đúng thứ-tự eval refine audit. **KHÔNG dùng `parallel()` của `hmw.js` cho bộ-ba** refine đọc output eval, audit chấm output của cả 2; chạy song song chấm **bản cũ** verdict vô-nghĩa.
- **(c) Lead scribe NGAY (single-writer):** return từng con lead ghi `.claude/workflows/runs/<run-id>/harness-{eval,refine,audit}-return.md` **ngay khi con đó trả**, **KHÔNG đợi đủ 3**. Lý-do: 3 vai **không có Write/Edit** (chặn-bằng-thiếu-tool) nên tự-ghi-đĩa bất-khả; phiên chết giữa chừng mất return (bài-học vòng-1 S141).
- **(d) PIN đích-danh (fail-closed):** `harness-refine` nhận **path** `…/harness-eval-return.md`; `harness-audit` nhận **path run-folder** đang chấm. 🔴 Pin **missing/rỗng ⇒ vai TỪ-CHỐI / TRƯỢT** **CẤM** để vai tự đi tìm "run mới nhất" (vớ bản **ĐẠT-ảo**).
- **(e) Đóng-băng bề-mặt-đo:** cửa-sổ chạy bộ-ba nằm TRONG **Mirror C1** 2.1.2) KHÔNG ghi bề-mặt-đo giữa chừng; việc ghi phát sinh xếp hàng SAU verdict.
- **(f) Post-wave assertion:** chạy xong 3 con `git status --short` **kỳ vọng 0 tracked-change ngoài run-folder**. thay-đổi lạ vai đã ghi (residual-write) **báo anh + revert**. (G-015: propose-only **KHÔNG** code-enforced kênh Bash git-diff backstop THẬT.)
- **(g) KHAI ranh 2 cánh-tay (chống đọc nhầm thành "đo 2 lần"):** **script-arm** = §2.1.22.1.62.1.7 (các script deterministic **in SỐ**) **sub-arm** = bộ-ba (**ĐỌC** output script-arm rồi ĐO-lại/ĐỀ-XUẤT/CHẤM). Bộ-ba **KHÔNG thay** script-arm **KHÔNG re-implement máy đo**.
- **(h) Đơn-vị nhịp:** "**phiên-LOGIC**" của hub map **TẠM** = nhãn-phiên `S<nn>` của SE (SE chưa adopt session-logic cùng caveat đơn-vị với counter §2.1.8). 🔴 **KHÔNG thêm cadence-key** vào `memory-budget.json` **KHÔNG tick** counter cho bộ-ba (nhịp bộ-ba nhịp H24 trộn 2 đồng-hồ = hỏng cả hai).
- **(i) [M4] Vết 2 lớp chuỗi skip PHẢI nhìn thấy được:**
- **(1)** proposal-line (a) **IN CẢ khi Light/hỏi-đáp session**. Light skip **CHẠY** hợp-lệ, nhưng **CẤM skip IM-LẶNG**.
- **(2)** khi skip (anh không gật **HOẶC** Light) ghi **1 dòng vết** vào [`.claude/WAL.md`](../WAL.md): `trio: skipped S<nn> (<ly-do: light | khong-gat | ...>)`. Chuỗi skip dài **nhìn ra ngay** WAL thay biến mất.
### 2.2 Skill registry (6 skill)
- Liệt kê: `contract-workflow` · `form-engine` · `permission-matrix` · `dependency-audit-erp` · `ef-core-migration` · `iis-deploy-runbook`
- Dùng skill khi task khớp (KHÔNG tự suy luận lại). Phân bổ per agent: xem README skill matrix.