[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
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:
@ -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 là 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 cũ ⇒ 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 cũ "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 là 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 là drift mà 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 cũ ⇒ **ĐẠ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**. Có thay-đổi lạ ⇒ vai đã ghi (residual-write) ⇒ **báo anh + revert**. (G-015: propose-only **KHÔNG** code-enforced ở kênh Bash — git-diff là 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.2/§2.1.6/§2.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 và **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` và **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** là 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 vì 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.
|
||||
|
||||
Reference in New Issue
Block a user