[CLAUDE] Docs: S149-S150 closeout — bookend lượt đầu end-to-end (hình B) + 2 arc đóng + tally #53 chốt 45
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m48s
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m48s
- Arc-1 hội-tụ-bookend (rename 5 vai + 4 máy PS1 + C9-C12) + arc-2 adap-backlog 23/23 + probe Opus-5 khép (S149)
- Bookend @close S150: wave 6 vai (4 đo + 2 KIỂM) → 20 FLAG disposition từng-dòng; ring1 31/34-ĐẠT, ring2 10/10 + M-1 view-stale-role-desc
- Khoá _frozen_until_owner CẮM trước h24-signal-write (frozen-held in thật); 9 class FIRE; JUMP dải {5,4,4,3}+asym{1,4} chờ anh #21
- STATUS bump CURRENT S149-S150 + 2 khối Recently Done; HANDOFF segment mới + re-stamp đủ-slug + (17)(18)(19) lật + (14) viết lại + 6 slot #21-#26
- K2 posture-A @engine PHẦN K + K5 luật TÁCH vòng-đo-mới @session-end (O-2/O-3 OWNER-DELEGATED execute)
- sleep-doc derive-monitor-set (bỏ hardcode 4-tên); spawn-model-audit desc/comment fix; h24-signal-write param-default fix (first-live bug)
- M9 on-behalf ×3 (tooling + inv-cb F3 + reviewer F4); ring1/ring4 nhà seed; ring2 3 cite-dead vá
- Sổ garble #53 derive-from-body chốt 45 + sub-class ngược-#53/skeleton-ruột-rỗng (ghi-đĩa CẦN-KHÔNG-ĐỦ)
- Session-log S149-S150 (Sàn-5 đăng-ký 6 run=) + closeout-synthesis dạng-1
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@ -16,9 +16,9 @@ argument-hint: <vai ∈ roster> <đề-bài phán-quyết> — vd "reviewer rà
|
||||
- **Hiệu-lực CHỈ lượt đó** — **KHÔNG còn "về mặc-định"**, KHÔNG marker, KHÔNG persist (H19 mode thật/ảo đã retired H21). Lượt sau muốn ensemble = gõ lại lệnh.
|
||||
|
||||
## 🔴 Vai BẮT BUỘC ∈ roster (canonical → STATUS §Sub-agents; B1 — KHÔNG hardcode số) (H21 ②)
|
||||
`investigator-codebase` · `investigator-api` · `implementer-backend` · `implementer-frontend` · `frontend-designer` · `database-agent` · `office-document` · `test-specialist` · `reviewer` · `cicd-monitor` · `tooling-auditor` · `harvest-curator` · `lead-view-auditor` · `lead-omission-auditor` · **`harness-eval` · `harness-refine` · `harness-audit`** · **`tooling-harvest-audit` · `h24-audit` · `sleep-audit`** (round-KIỂM ×3 S145).
|
||||
`investigator-codebase` · `investigator-api` · `implementer-backend` · `implementer-frontend` · `frontend-designer` · `database-agent` · `office-document` · `test-specialist` · `reviewer` · `cicd-monitor` · `tooling-auditor` · `harvest-curator` · `lead-stale-auditor` · `lead-gap-auditor` · **`harness-eval` · `harness-refine` · `harness-audit`** · **`ring1-audit` · `ring2-audit` · `ring4-audit`** (round-KIỂM ×3 S145).
|
||||
- **Thiếu `<vai>` HOẶC vai ngoài roster** → em main **hỏi lại anh 1 dòng**, **KHÔNG tự chọn vai**.
|
||||
- ✅ **VALID_ROLES đủ roster** — canonical đếm ở [`docs/STATUS.md`](../../docs/STATUS.md) §Sub-agents (B1 derived-trỏ-canonical; **KHÔNG chép số ở đây khi roster đổi** — đó chính là class `view-stale-role-desc` mà `lead-view-auditor` soi). Lịch-sử: 10→12 (S110, +2 monitor `tooling-auditor`/`harvest-curator`) → 12→14 (S121 W2, +2 monitor H24 `lead-view-auditor`/`lead-omission-auditor`) → **14→17 (S141, +3 trio-memory `harness-eval`/`harness-refine`/`harness-audit` — read-only INFORM-only, TUẦN TỰ eval→refine→audit)** → **17→20 (S145, +3 round-KIỂM `tooling-harvest-audit`/`h24-audit`/`sleep-audit` — C4/C4b TÁCH mỗi-vòng-1-con, AUTO fire-after-measure)**. *(🧊 limitation cũ 10-vai + H6-design "monitor ngoài workflow" superseded; monitor vẫn INFORM-only, lane RETURN-only.)*
|
||||
- ✅ **VALID_ROLES đủ roster** — canonical đếm ở [`docs/STATUS.md`](../../docs/STATUS.md) §Sub-agents (B1 derived-trỏ-canonical; **KHÔNG chép số ở đây khi roster đổi** — đó chính là class `view-stale-role-desc` mà `lead-stale-auditor` soi). Lịch-sử: 10→12 (S110, +2 monitor `tooling-auditor`/`harvest-curator`) → 12→14 (S121 W2, +2 monitor H24 `lead-stale-auditor`/`lead-gap-auditor`) → **14→17 (S141, +3 trio-memory `harness-eval`/`harness-refine`/`harness-audit` — read-only INFORM-only, TUẦN TỰ eval→refine→audit)** → **17→20 (S145, +3 round-KIỂM `ring1-audit`/`ring2-audit`/`ring4-audit` — C4/C4b TÁCH mỗi-vòng-1-con, AUTO fire-after-measure)**. *(🧊 limitation cũ 10-vai + H6-design "monitor ngoài workflow" superseded; monitor vẫn INFORM-only, lane RETURN-only.)*
|
||||
- 🔒 **Honest-note (a/b):** bảo-đảm = **owner-gated tầng lệnh + kỷ-luật lead**, **KHÔNG code-enforced**; lệnh/alias = cách anh **gán vai nhanh**, hệ **KHÔNG tự chọn vai**.
|
||||
|
||||
## 🔴 Spec-file 3-mục BẮT BUỘC mỗi run (H21 ①)
|
||||
|
||||
@ -17,8 +17,8 @@ argument-hint: <vai ∈ roster> <đề-bài phán-quyết> — vd "reviewer rà-
|
||||
- **Hiệu-lực CHỈ lượt đó** — hết lượt là hết. KHÔNG marker, KHÔNG persist. Lượt sau muốn engine-đắt = gõ lại lệnh.
|
||||
|
||||
## 🔴 Vai BẮT BUỘC ∈ roster (canonical → STATUS §Sub-agents; B1 — KHÔNG hardcode số) (H21 ②)
|
||||
`investigator-codebase` · `investigator-api` · `implementer-backend` · `implementer-frontend` · `frontend-designer` · `database-agent` · `office-document` · `test-specialist` · `reviewer` · `cicd-monitor` · `tooling-auditor` · `harvest-curator` · `lead-view-auditor` · `lead-omission-auditor` · **`harness-eval` · `harness-refine` · `harness-audit`** · **`tooling-harvest-audit` · `h24-audit` · `sleep-audit`** (round-KIỂM ×3 S145).
|
||||
> Số vai canonical → [`docs/STATUS.md`](../../docs/STATUS.md) §Sub-agents (B1 derived-trỏ-canonical). +2 @S121 W2 = 2 monitor H24 lead-self-audit · **+3 @S141 = bộ-ba đồng-kiểm memory (trio-memory, read-only INFORM-only; TUẦN TỰ eval→refine→audit)** · **+3 @S145 = `tooling-harvest-audit`/`h24-audit`/`sleep-audit` (round-KIỂM ×3, C4/C4b TÁCH mỗi-vòng-1-con)**.
|
||||
`investigator-codebase` · `investigator-api` · `implementer-backend` · `implementer-frontend` · `frontend-designer` · `database-agent` · `office-document` · `test-specialist` · `reviewer` · `cicd-monitor` · `tooling-auditor` · `harvest-curator` · `lead-stale-auditor` · `lead-gap-auditor` · **`harness-eval` · `harness-refine` · `harness-audit`** · **`ring1-audit` · `ring2-audit` · `ring4-audit`** (round-KIỂM ×3 S145).
|
||||
> Số vai canonical → [`docs/STATUS.md`](../../docs/STATUS.md) §Sub-agents (B1 derived-trỏ-canonical). +2 @S121 W2 = 2 monitor H24 lead-self-audit · **+3 @S141 = bộ-ba đồng-kiểm memory (trio-memory, read-only INFORM-only; TUẦN TỰ eval→refine→audit)** · **+3 @S145 = `ring1-audit`/`ring2-audit`/`ring4-audit` (round-KIỂM ×3, C4/C4b TÁCH mỗi-vòng-1-con)**.
|
||||
- **Thiếu `<vai>` HOẶC vai ngoài roster** → em main **hỏi lại anh 1 dòng** ("engine-đắt cần vai đích-danh — vai nào?"), **KHÔNG tự chọn vai**.
|
||||
- 🔒 **Honest-note (a):** "không tự chọn vai" = tầng **KỶ-LUẬT owner-gated** (anh phải gõ vai) — **KHÔNG claim code-enforced**.
|
||||
- 🔒 **Honest-note (b):** lệnh/alias = cách anh **GÁN VAI NHANH**, vẫn phải anh gõ — hệ **KHÔNG tự chọn vai**.
|
||||
|
||||
@ -43,11 +43,11 @@ Em main PHẢI echo **TOÀN BỘ nội dung command body này** (đầy đủ Ph
|
||||
- 🟢 **cicd-monitor** — Run verdict + bundle hash rotate + Mig prod + corpus drift
|
||||
- 🟫 **tooling-auditor** (monitor H1) — CHỐT tooling/docs-freshness 4-mặt + new-alloc audit (chạy ở §L.b(g))
|
||||
- ⬜ **harvest-curator** (monitor H2) — GATE harvest-integrity 5-trục + close-gate run-trace `runs/<id>/` (**DUAL-ACCEPT** — xem §L.b(f)) (chạy ở §L.b(d)(f))
|
||||
- 🔷 **lead-view-auditor** (monitor **H24**) — view LỆCH source của cái LEAD surface (chạy theo NHỊP §L.b(j), KHÔNG mỗi phiên)
|
||||
- 🔶 **lead-omission-auditor** (monitor **H24**) — cái BỊ THIẾU trong cái LEAD surface (chạy theo NHỊP §L.b(j), KHÔNG mỗi phiên)
|
||||
- 🔬 **tooling-harvest-audit** (monitor **KIỂM-vòng**, C4 S145) — verify OUTPUT H1+H2 vòng tooling/harvest (AUTO sau đo §L.b(g-bis)) · vai #1/3 round-KIỂM
|
||||
- 🔬 **h24-audit** (monitor **KIỂM-vòng**, C4 S145) — verify OUTPUT lead-view+lead-omission vòng soi-lead (AUTO sau cặp H24 — @§L.b(j)(ii-bis) nếu cặp nổ ở close, @[`session-start`](session-start.md) §2.1.8 nếu cặp nổ ở open; *wherever it fires*) · vai #2/3
|
||||
- 🔬 **sleep-audit** (monitor **KIỂM-vòng**, C4 S145) — verify OUTPUT /sleep-recovery gist+Fidelity vòng nén-ngủ (AUTO sau **mỗi lượt nén** `/sleep-recovery-memory-l2` — post-step của skill, *wherever it fires*: consent @[`session-start`](session-start.md) §2.1.2 HOẶC @§L.b(c) dưới) · vai #3/3
|
||||
- 🔷 **lead-stale-auditor** (monitor **H24**) — view LỆCH source của cái LEAD surface (chạy theo NHỊP §L.b(j), KHÔNG mỗi phiên)
|
||||
- 🔶 **lead-gap-auditor** (monitor **H24**) — cái BỊ THIẾU trong cái LEAD surface (chạy theo NHỊP §L.b(j), KHÔNG mỗi phiên)
|
||||
- 🔬 **ring1-audit** (monitor **KIỂM-vòng**, C4 S145) — verify OUTPUT H1+H2 vòng tooling/harvest (AUTO sau đo §L.b(g-bis)) · vai #1/3 round-KIỂM
|
||||
- 🔬 **ring2-audit** (monitor **KIỂM-vòng**, C4 S145) — verify OUTPUT lead-stale+lead-gap vòng soi-lead (AUTO sau cặp H24 — @§L.b(j)(ii-bis) nếu cặp nổ ở close, @[`session-start`](session-start.md) §2.1.8 nếu cặp nổ ở open; *wherever it fires*) · vai #2/3
|
||||
- 🔬 **ring4-audit** (monitor **KIỂM-vòng**, C4 S145) — verify OUTPUT /sleep-recovery gist+Fidelity vòng nén-ngủ (AUTO sau **mỗi lượt nén** `/sleep-recovery-memory-l2` — post-step của skill, *wherever it fires*: consent @[`session-start`](session-start.md) §2.1.2 HOẶC @§L.b(c) dưới) · vai #3/3
|
||||
> 🧊 **Vá con-trỏ chết @S146:** bản trước trỏ *"Phase 4.5"* — heading đó **KHÔNG tồn-tại** trong file này (chỉ có Phase 1 · 1.5 · 2 · 3 · 4 · 5 · 6). Trigger THẬT = lượt nén, không phải một phase cố-định.
|
||||
|
||||
2. Synthesize cross-agent learnings → integrate vào:
|
||||
@ -111,11 +111,16 @@ Em main PHẢI echo **TOÀN BỘ nội dung command body này** (đầy đủ Ph
|
||||
|
||||
- **(j) 🔷🔶 H24 lead-self-audit — counter + spawn theo NHỊP (adopt S122; đối-xứng `session-start §2.1.8`):**
|
||||
- **(i) BÁO dòng-nợ 4-vế (nâng dòng H24 cũ — Item 2 S135):** gọi `powershell.exe -ExecutionPolicy Bypass -File scripts/nhip-no-probe.ps1` → in **1 dòng** `NHIP-NO: kiem light a/e deep b/f <ok|OVERDUE:…> | tran-bo-nho x over-cap | run-chua-gom y` (vế-1 nhịp-kiểm THAY dòng `counter=… light … deep … OVERDUE` cũ, đọc `.session-counter.json` + `h24_cadence`). 🔴 **probe KHÔNG chặn**: lỗi → in `probe-loi (khong chan)` → đi tiếp. 🔴 **Nhịp ĐỌC từ config, CẤM hardcode ở đây** (detector `governance-detectors.ps1` H24-2 **fail-loud** nếu key thiếu — **không** giả-định default).
|
||||
- **(ii) OVERDUE → 🔴 SPAWN AUTO, KHÔNG consent (owner chốt @S146: "3 → auto"; THAY luật consent-gate era-S122):** tới nhịp ⇒ spawn cặp H24 (`lead-view-auditor` + `lead-omission-auditor`) **NGAY**, KHÔNG in dòng xin phép, KHÔNG chờ gật. Chạy xong → cập-nhật `last_audit.{light,deep}_at_counter` = counter hiện-tại. **Lead = single-writer.**
|
||||
- 🔴 **PHẠM-VI CHÍNH-XÁC của "auto" (đọc kỹ — đừng nới):** gỡ **CỔNG NGƯỜI** (consent), **GIỮ NGUYÊN CỔNG NHỊP** (`h24_cadence` 6/15/3 vẫn đọc từ `memory-budget.json`). ⇒ H24 **KHÔNG** chạy mỗi phiên; nó chạy **tự-động KHI TỚI NHỊP**. Đây **KHÁC** bookend-của-hub (hub **gỡ hẳn counter**, rà đủ 2 đầu **mỗi** phiên) — SE **chưa** theo nhánh đó (lý-do giữ counter: `adap-reports/2026-07-15-…-bookend.md` §(2) — phiên ngắn-nhiều, cả 2 điều-kiện §4 của hub đều KHÔNG áp SE).
|
||||
- 🔸 **Nếu anh muốn ĐÚNG bookend hub** (bỏ counter, 2 đầu mỗi phiên) thì đó là **quyết-định KHÁC** với "auto" — nói 1 chữ, em gỡ `h24_cadence` khỏi đường quyết-định (KHÔNG xoá key, chuyển sang INFORM).
|
||||
- ⚖️ **Đánh-đổi khai thẳng:** auto-fire làm phiên tới-nhịp **nặng thêm** (2 sub) mà anh **không được hỏi trước** — đó chính là cái anh vừa đổi lấy tính **không-bỏ-sót**. Nợ nhịp từ nay **không thể trôi vì quên gật**.
|
||||
- **(ii-bis) 🔬 h24-audit AUTO sau cặp H24 (vai-KIỂM vòng soi-lead, C4/C4b vai #2/3, land S145):** cặp H24 (`lead-view-auditor` + `lead-omission-auditor`) CHẠY xong ⇒ spawn `h24-audit` NGAY — **AUTO, KHÔNG consent** (owner S145; 🧊 *vế tương-phản cũ "KHÁC (ii) consent-gate của chính H24" ĐÃ SỤP @S146 — (ii) nay cũng AUTO, xem `:106`*). Đọc FLAG-list + class 2 vai → verdict per-FLAG + tự tái-dựng ≥1 số (flag-count / `class_repeat`) + **thách-CLEAN** (H24 báo ít/0 FLAG ⇒ tự soi 1 surface tìm FLAG sót). 🔴 no-self-exempt ≠ lead-view/omission (m-3). 🔴 Fail-safe: H24 KHÔNG chạy phiên này (**chỉ còn: chưa tới nhịp** — nhánh "không consent" chết @S146) ⇒ h24-audit **NO-OP im-lặng**. Tuần-tự C4b (SAU cặp H24, mtime chứng). Propose-only → em main VERIFY→APPEND (git-diff backstop). Contract canonical `.claude/agents/h24-audit.md` (B1).
|
||||
- **(ii) 🔄 HÌNH B — cặp soi-lead BOOKEND VÔ-ĐIỀU-KIỆN @close (đảo @S149; spec `runs/2026-07-24-S149-hoi-tu-bookend/spec-…md` qua gate W2 GO-WITH-FIXES):** spawn cặp (`lead-stale-auditor` + `lead-gap-auditor`) **MỌI closeout, KHÔNG cổng nhịp light, KHÔNG consent**. Cặp trả FLAG-list (khuôn `## FLAG-N — \`class\` — SEV` bắt buộc — M4/C11 soi) → ghi số bằng **MÁY**: `powershell.exe -ExecutionPolicy Bypass -File scripts/h24-signal-write.ps1 -Session S<nn> -Flags '<class,class,…>' -AuditKind light` (procedural max-1/class/phiên · enum-đóng · atomic · 🔴 tôn trọng `_frozen_until_owner` — dải JUMP treo {4,3,3} KHÔNG bị máy reset, nợ của owner).
|
||||
- 🔴 **Đơn-vị tally = phiên-LOGIC (FIX-1 W2):** 2 lượt bookend (@open+@close) cùng phiên = **MỘT quyết định/class** — fire nếu fire ở ≥1 đầu; reset chỉ khi clean CẢ HAI đầu, ≤1 lần/phiên (script thi hành, không phải trí nhớ).
|
||||
- **Deep GIỮ CỔNG NHỊP** (`deep_every` đọc `memory-budget.json`, OVERDUE(deep) → deep-sweep như cũ). `light_every` **hạ thành stats-only** — GIỮ SỐ (owner-ratified `e50a4bd0`), đổi VAI TRÒ (cadence→stats, khuôn era-note VIPIX `:155`). ⚖️ **Anh veto ⇒ light quay lại counter-gate, 1 edit.**
|
||||
- 🧊 **LINEAGE (đảo có chủ đích, giữ vết — khuôn `auto-toan-vong:35`):** bản trước (S146→S149) = *"auto KHI TỚI NHỊP, KHÁC bookend-hub, SE chưa theo"* + câu mời *"anh muốn ĐÚNG bookend thì nói 1 chữ"*. **Chữ đó = direction @S149** (*"vá lỗi… để chạy đc VIPIX, AI_INFRA"*) → hình B (VIPIX hybrid) qua invest-Fable + gate reviewer-Fable; lý-do-giữ-counter cũ (adap-report 07-15 §(2)) superseded cho **light**, còn ĐÚNG cho **deep**.
|
||||
- ⚖️ **Đánh-đổi khai thẳng:** mỗi closeout nặng thêm 2 sub (~50-80K token/con) — đổi lấy **cả lớp bug đọc-số-cũ chết by-construction** (backfill S146 · tally-rơi S148 · JUMP-chìm — cả ba là ca THẬT phiên này).
|
||||
- **(ii-ter) 🩺 sentinel + eval-use + diary-seed (M5/M7/M9 @S149 — chạy SAU (ii), TRƯỚC commit chốt):**
|
||||
1. **M5 sentinel:** sau commit closeout → `powershell.exe -ExecutionPolicy Bypass -File scripts/closeout-sentinel.ps1 -Commit <sha-closeout> -AuditRan` — FLAG "audit đo rồi như chưa đo" nếu closeout thiếu delta role-dir/counter (positive-control 5/5 lịch sử @S149).
|
||||
2. **M7 eval-USE-side (đóng DEFER C14-2.4):** `powershell.exe -ExecutionPolicy Bypass -File scripts/applied-eval-nokey.ps1 -Selftest` → selftest 3/3 rồi đọc output nhãn `{APPLIED · DORMANT(≠MISS) · chờ-judge}`; **caveat "% = FLOOR không ceiling" nằm TRONG payload** — chép nguyên, cấm rút gọn. Ghost-wire 18-ngày (0 call-site) chết tại dòng này.
|
||||
3. **M9 diary-seed on-behalf (GAP-3 ×4):** vai INFORM-only nào CHẠY trong phiên (có sub-MD/return VERIFY được) ⇒ lead **APPEND diary vai đó TRONG CÙNG closeout** (B3; tiền lệ retro-harvest S132 + seed ring2-audit S149). Detector C11(b) soi sót.
|
||||
- **(ii-bis) 🔬 ring2-audit AUTO sau cặp H24 (vai-KIỂM vòng soi-lead, C4/C4b vai #2/3, land S145):** cặp H24 (`lead-stale-auditor` + `lead-gap-auditor`) CHẠY xong ⇒ spawn `ring2-audit` NGAY — **AUTO, KHÔNG consent** (owner S145; 🧊 *vế tương-phản cũ "KHÁC (ii) consent-gate của chính H24" ĐÃ SỤP @S146 — (ii) nay cũng AUTO, xem `:106`*). Đọc FLAG-list + class 2 vai → verdict per-FLAG + tự tái-dựng ≥1 số (flag-count / `class_repeat`) + **thách-CLEAN** (H24 báo ít/0 FLAG ⇒ tự soi 1 surface tìm FLAG sót). 🔴 no-self-exempt ≠ lead-stale/lead-gap (m-3). 🔴 Fail-safe: H24 KHÔNG chạy phiên này (**chỉ còn: chưa tới nhịp** — nhánh "không consent" chết @S146) ⇒ ring2-audit **NO-OP im-lặng**. Tuần-tự C4b (SAU cặp H24, mtime chứng). Propose-only → em main VERIFY→APPEND (git-diff backstop). Contract canonical `.claude/agents/ring2-audit.md` (B1).
|
||||
- **(iii) Flag → class:** mỗi FLAG của 2 vai **PHẢI** thuộc **enum ĐÓNG** `lead_self_audit.flag_classes`. Vai **KHÔNG tự chế class** — finding không phân-loại được ⇒ báo **verbatim** + **escalate anh** để mở rộng enum. Cập-nhật `class_repeat.counts`; class nào lặp **≥ `jump_on_class_repeat`** ⇒ **kéo audit tới sớm**.
|
||||
- **(iv) 🔴 Nghi-thức RE-STAMP carry (GAP THẬT, vá @S122):** khi ghi segment `HANDOFF` mới, **ĐÓNG DẤU LẠI `[carry:<slug>]` cho MỌI carry còn mở** — không chỉ lần đầu.
|
||||
**Vì sao bắt buộc:** carry-age detector đo **streak** = số segment LIÊN-TỤC mang cùng slug. Đo thật @S121: **45 logic-segment nhưng `carry-lines=1`** ⇒ streak **luôn ≡ 1** ⇒ **0 fire VĨNH VIỄN, kể cả sau W2**. Bằng-chứng: `tra-bui-relogin` chỉ đóng dấu **seg#0 (S119)**, trong khi **seg#2 (S118)** nhắc **đúng việc đó** mà **không có dấu** ⇒ **tuổi thật ≥2, máy đọc 1**. ⇒ detector **vacuous về CẤU-TRÚC**, không phải sai ngưỡng.
|
||||
@ -123,11 +128,11 @@ Em main PHẢI echo **TOÀN BỘ nội dung command body này** (đầy đủ Ph
|
||||
**Định-nghĩa "dòng-carry" (owner O3):** = **đoạn LOGIC** `NEXT anh` / `NEXT em` trong mega-line — KHÔNG phải dòng vật-lý. ⚠️ Bẫy đếm: `grep -c` đếm **DÒNG** (=1 trên mega-line), `grep -o | wc -l` đếm **occurrence** (=n). Dùng đúng cái thứ hai.
|
||||
🔢 **Luật đánh-số chờ-anh (điểm sàn #5 master-checklist `cadd24ae`, S138 — rename S139 tránh trùng token "Sàn-5" H22 ở trên, quyết anh + L3 nit-1):** khối **chờ-anh** trong `HANDOFF` LUÔN **đánh số** (anh trả lời bằng số) — khớp nhóm-3 MASTER-CHECKLIST + nghi-thức re-stamp carry ở trên; số cố-định giúp anh trả lời gọn.
|
||||
- **(v) 🔷 TICK-at-close (Item 1(d) S135 — idempotent):** tick `.claude/governance/.session-counter.json` **theo contract** — 🔴 **CON-TRỎ `session-start §2.1.8`, CẤM chép logic tick** (B1). Idempotent: cùng nhãn-phiên phiên này ⇒ **NO-OP** (nếu `/session-start` hoặc `/tiep` đã tick nhãn này). Có delta → **§5.1 add đích-danh counter-file** (file ngoài hook-4-path; bằng-chứng sống: tick S133 nằm uncommitted qua 2 closeout liên tiếp — M-7).
|
||||
- **(vi) 🔥 Force-fire bù khi closeout gộp sổ (Item 3 S135 — floor B1 §3.2):** đếm `P` = số `wal: pause` gộp vào closeout này: `P=$(git log --format=%s "<closeout-liền-trước>..HEAD" | grep -c '^wal: pause' || true)` — `<closeout-liền-trước>` = commit gần nhất match **regex closeout DÙNG CHUNG Item 4** `^\[CLAUDE\] Docs: S\d+.*(closeout|session-end)` (1 regex, đừng chép 2 bản). 🔴 **so-sánh SỐ, KHÔNG dùng exit-code** (`grep -c` trả exit 1 khi đếm 0 — §5.0 (a)): `[ "$P" -ge 1 ]`. Nếu **`P >= 1` HOẶC** nhãn đóng dạng `S<a>-S<b>` (closeout gộp nhiều phiên) ⇒ coi như **`OVERDUE(light)` bất-kể counter** → in dòng-nợ (qua (i)) + **INFORM-BẮT-BUỘC** anh + **đề-xuất spawn cặp H24 (`lead-view-auditor` + `lead-omission-auditor`) NGAY closeout này**. 🔴 **DP-3 consent-gate ĐÃ GỠ @S146 (owner "3 → auto")** — force-fire nay **CHẠY THẲNG**: in dòng-nợ (qua (i)) + **spawn cặp H24 NGAY trong closeout**, KHÔNG chờ gật. Đồng-bộ (ii) ở trên (B1 — luật sống ở (ii), mục này chỉ áp).
|
||||
- **(vi) 🔥 Force-fire bù khi closeout gộp sổ (Item 3 S135 — floor B1 §3.2):** đếm `P` = số `wal: pause` gộp vào closeout này: `P=$(git log --format=%s "<closeout-liền-trước>..HEAD" | grep -c '^wal: pause' || true)` — `<closeout-liền-trước>` = commit gần nhất match **regex closeout DÙNG CHUNG Item 4** `^\[CLAUDE\] Docs: S\d+.*(closeout|session-end)` (1 regex, đừng chép 2 bản). 🔴 **so-sánh SỐ, KHÔNG dùng exit-code** (`grep -c` trả exit 1 khi đếm 0 — §5.0 (a)): `[ "$P" -ge 1 ]`. Nếu **`P >= 1` HOẶC** nhãn đóng dạng `S<a>-S<b>` (closeout gộp nhiều phiên) ⇒ coi như **`OVERDUE(light)` bất-kể counter** → in dòng-nợ (qua (i)) + **INFORM-BẮT-BUỘC** anh + **đề-xuất spawn cặp H24 (`lead-stale-auditor` + `lead-gap-auditor`) NGAY closeout này**. 🔴 **DP-3 consent-gate ĐÃ GỠ @S146 (owner "3 → auto")** — force-fire nay **CHẠY THẲNG**: in dòng-nợ (qua (i)) + **spawn cặp H24 NGAY trong closeout**, KHÔNG chờ gật. Đồng-bộ (ii) ở trên (B1 — luật sống ở (ii), mục này chỉ áp).
|
||||
🧊 *(Luật cũ era-S122: "INFORM-bắt-buộc + đề-xuất, anh gật mới chạy" — **RETIRED**. Hệ-quả kèm theo: báo hub SELF-CHECK ô3 nay là **PASS trần**, KHÔNG còn carve-out "(consent)" — carve-out đó sinh ra CHỈ vì cổng người, gỡ cổng thì gỡ luôn carve-out.)*
|
||||
*baseline-ghi-bù (phép-8 annex `dede7ec5`, khai-1-lần): cơ-chế force-fire bù closeout-gộp tồn tại từ 2026-07-17 (`da349fc`, S135 — re-đo 19:12:41+07). Phép-8 CHỈ tính FAIL cho closeout SINH SAU mốc; closeout trước = baseline hợp-lệ ghi n/a, KHÔNG đếm FAIL. Không lặp mỗi lần chạy.*
|
||||
- **(g) 🔌 tooling-freshness CHỐT (🟫 tooling-auditor H1 — Harness 1):** spawn → chốt 4-mặt (skill·sub-role·plugin·docs) đổi gì session này + **new-alloc audit** (skill/plugin MỚI chưa phân-bổ → đề-xuất gán em main + sub phù-hợp vai) + flag doc-drift/roster-lệch/count-stale. Propose → em main APPEND/sửa doc (single-writer). 🔴 G-015: 2 monitor = propose-only, em main VERIFY trước APPEND (Bash residual → KHÔNG "read-only enforced").
|
||||
- **(g-bis) 🔬 tooling-harvest-audit — vai-KIỂM vòng tooling/harvest (C4/C4b adap dot-11 `harness-dong-du-vong:51`, owner-decision [2] TÁCH, land S145; đối-xứng (k) trio nhưng AUTO):** đóng lỗ "vòng tooling/harvest **0 con soi**" — vai-KIỂM độc-lập đọc OUTPUT H1 (g) + H2 (d)(f), KHÔNG re-chạy đo. Contract = canonical `.claude/agents/tooling-harvest-audit.md` (B1 — KHÔNG chép vào đây).
|
||||
- **(g-bis) 🔬 ring1-audit — vai-KIỂM vòng tooling/harvest (C4/C4b adap dot-11 `harness-dong-du-vong:51`, owner-decision [2] TÁCH, land S145; đối-xứng (k) trio nhưng AUTO):** đóng lỗ "vòng tooling/harvest **0 con soi**" — vai-KIỂM độc-lập đọc OUTPUT H1 (g) + H2 (d)(f), KHÔNG re-chạy đo. Contract = canonical `.claude/agents/ring1-audit.md` (B1 — KHÔNG chép vào đây).
|
||||
- **(i) 🔴 AUTO sau đo — KHÔNG consent-gate (owner-chốt S145, KHÁC (j) H24 + (k) trio):** H1 (g) + H2 (d)(f) chốt xong ⇒ spawn NGAY, KHÔNG in dòng đề-xuất, KHÔNG chờ gật.
|
||||
- **(ii) 🔴 Fail-safe NO-OP:** H1/H2 KHÔNG chạy phiên này ⇒ pin input missing ⇒ vai in `tooling/harvest round: no measure → NO-OP` + DỪNG. **Auto ≠ chạy-mù**, CẤM ĐẠT-ảo.
|
||||
- **(iii) 🔴 Tuần-tự (C4b):** spawn ở invocation **SAU** (g)/(f); bằng-chứng `mtime(return) > mtime(output H1/H2)`. KHÔNG song song.
|
||||
@ -140,8 +145,9 @@ Em main PHẢI echo **TOÀN BỘ nội dung command body này** (đầy đủ Ph
|
||||
2. Cột self-verify của V1/V2/V4 trong checklist 5-vòng canonical = **CLOSE-time**: thứ bị chấm (spawn-record 4-field · freshness-verdict 4-mặt · harvest 5-trục · gist+Fidelity) **chỉ SINH ra ở close**.
|
||||
3. @open output là **diff-report nhẹ**, đã em-main verify tại chỗ ⇒ **KHÔNG có artifact authoritative nào để audit**. Ép KIỂM chạy @open = chấm một bản **chưa tồn-tại** ⇒ đúng cái **ĐẠT-ảo** mà fail-safe NO-OP của cả 3 contract đang cấm.
|
||||
**Đánh-đổi khai thẳng:** sai-sót phát sinh @open chỉ bị soi ở close **cùng phiên** (trễ, KHÔNG mất). 🔁 **Điều-kiện huỷ-defer:** ngày nào @open sinh ra artifact **authoritative** (không còn chỉ diff-report) thì DEFER này **PHẢI** xét lại — defer **có điều-kiện huỷ**, không phải đóng vĩnh-viễn.
|
||||
🔗 **H24-coupling — ngoại-lệ CÓ CHỦ-ĐÍCH, khai rõ (KHÔNG mâu-thuẫn "end-only"):** `h24-audit` **bám cặp H24 *wherever it fires*** — cặp chạy @§L.b(j)(ii) ⇒ nó chạy ở **close**; cặp chạy @[`session-start`](session-start.md) §2.1.8 (OVERDUE ⇒ **AUTO**, KHÔNG còn cửa consent @S146) ⇒ nó chạy **NGAY tại open, ngay sau cặp**. Lý-do: pin của nó = **FLAG-list H24 tươi**, artifact đó **authoritative NGAY khi cặp trả**, không đợi close. `sleep-audit` cùng khuôn (bám **lượt nén** wherever it fires: consent @§2.1.2 hoặc @§L.b(c)). **Chỉ `tooling-harvest-audit` end-only TUYỆT-ĐỐI** (pin = H1-chốt + H2-5-trục, chỉ sinh ở close). ⇒ "end-only" nghĩa là **KHÔNG mở nhịp KIỂM RIÊNG @open**; vai vẫn **đi theo con-đo của nó** bất kể con-đo nổ ở đâu.
|
||||
- 🔸 **Trạng-thái adopt (owner S145 — đo lại đĩa @S146):** **cả 3 vai-KIỂM đã BUILT + WIRED S145** — `tooling-harvest-audit` (g-bis) · `h24-audit` (j)(ii-bis) · `sleep-audit` (post-step lượt nén). Mỗi vai **chạy audit-round khi vòng tương-ứng chạy**, độc-lập, KHÔNG chờ nhau. 🧊 Bản trước xếp `h24-audit` + `sleep-audit` vào diện **chờ-land về sau** (đợi vai #1 chạy-thử-1-phiên) = **STALE @S146**: mâu-thuẫn chính danh-sách roster Phase 1 (3 dòng 🔬 đã wire AUTO) **và** mâu-thuẫn đĩa (`.claude/agents/{tooling-harvest-audit,h24-audit,sleep-audit}.md` tồn-tại CẢ 3). Số vai roster canonical → [`docs/STATUS.md`](../../docs/STATUS.md) §Sub-agents (B1 — KHÔNG chép số).
|
||||
🔗 **H24-coupling — ngoại-lệ CÓ CHỦ-ĐÍCH, khai rõ (KHÔNG mâu-thuẫn "end-only"):** `ring2-audit` **bám cặp H24 *wherever it fires*** — cặp chạy @§L.b(j)(ii) ⇒ nó chạy ở **close**; cặp chạy @[`session-start`](session-start.md) §2.1.8 (OVERDUE ⇒ **AUTO**, KHÔNG còn cửa consent @S146) ⇒ nó chạy **NGAY tại open, ngay sau cặp**. Lý-do: pin của nó = **FLAG-list H24 tươi**, artifact đó **authoritative NGAY khi cặp trả**, không đợi close. `ring4-audit` cùng khuôn (bám **lượt nén** wherever it fires: consent @§2.1.2 hoặc @§L.b(c)). **Chỉ `ring1-audit` end-only TUYỆT-ĐỐI** (pin = H1-chốt + H2-5-trục, chỉ sinh ở close). ⇒ "end-only" nghĩa là **KHÔNG mở nhịp KIỂM RIÊNG @open**; vai vẫn **đi theo con-đo của nó** bất kể con-đo nổ ở đâu.
|
||||
- 🔸 **Luật vai-KIỂM cho vòng-đo MỚI (O-3 — OWNER-DELEGATED → lead-decided @S149; K5 land @S150; HOME DUY-NHẤT của luật này):** 【1】 **mặc-định TÁCH** — vòng-đo MỚI sinh ra thì vai-KIỂM riêng của nó land CÙNG đợt (KHÔNG gộp vào con KIỂM có sẵn); tập vòng-thiếu tại S149 = **RỖNG** (3 vòng đầu đã TÁCH @S145, owner-decision [2] — dòng dưới). Anh veto = 1 edit (HANDOFF #25).
|
||||
- 🔸 **Trạng-thái adopt (owner S145 — đo lại đĩa @S146):** **cả 3 vai-KIỂM đã BUILT + WIRED S145** — `ring1-audit` (g-bis) · `ring2-audit` (j)(ii-bis) · `ring4-audit` (post-step lượt nén). Mỗi vai **chạy audit-round khi vòng tương-ứng chạy**, độc-lập, KHÔNG chờ nhau. 🧊 Bản trước xếp `ring2-audit` + `ring4-audit` vào diện **chờ-land về sau** (đợi vai #1 chạy-thử-1-phiên) = **STALE @S146**: mâu-thuẫn chính danh-sách roster Phase 1 (3 dòng 🔬 đã wire AUTO) **và** mâu-thuẫn đĩa (`.claude/agents/{ring1-audit,ring2-audit,ring4-audit}.md` tồn-tại CẢ 3). Số vai roster canonical → [`docs/STATUS.md`](../../docs/STATUS.md) §Sub-agents (B1 — KHÔNG chép số).
|
||||
- **(h) 🔏 User-Mark CHỐT cuối phiên (H-12/13 canonical §P/P7, S79 — `harness-11-engine.md §E`):** đọc [`.claude/governance/ACTIVE-MARKS.md`](../governance/ACTIVE-MARKS.md) → (i) **hiển-thị** status-filtered (Active-High/Active hiện · Medium tóm-tắt · Disable ẩn) cho anh đọc lại (đối-xứng `session-start §2.1.4`); (ii) nếu session này có **quyết-định cấp-governance MỚI** (scope-check P6: đổi CANONICAL §-rule/authority) → chạy `/user-mark-<cấp>` DACI: adjust-gov → double-check → **report-trước-đóng-dấu 3-7 tiêu-chí khách-quan (P4)** → anh confirm → stamp `RC-pqhuy1987-dd-mm-yyyy-hh-mm-ss`; (iii) supersede/disable mark cũ (P5) → con-trỏ-xuôi + Active-High cần anh-confirm RIÊNG. 🔴 **KHÔNG tự đóng dấu / đổi cấp trước khi báo (P4/P8).** 0 quyết-định-mới → "n-a, chỉ hiển-thị".
|
||||
- **(i) 🎯 H18-D(a) outcome spot-check (S100 — [`harness-11-engine.md §J`](../../docs/governance/harness-11-engine.md)):** session governance/review-heavy → chọn **3–5 artifact đã tự-động-qua-cổng** trước đó (cicd GO verdict · detector verdict · monitor verdict · adap-report claim) → **kiểm-lại TƯƠI bằng ground-truth** (tính lại giá-trị đối-chứng · mở định-nghĩa gốc xem claim có thật-cover · đối-chiếu nguyên-văn nguồn). Gấp vào review sẵn có (chi-phí ~0). Sàn-vai trượt-THẬT khỏi nhật-ký → reinject-on-real-miss qua [`reinject-ledger.md`](../governance/reinject-ledger.md) CG-1 (≤1 lần/N=3 phiên, vẫn trượt → escalate anh — REUSE H17 §I B2, KHÔNG sổ mới). Light/hỏi-đáp → skip. (Nấc honest: dogfood n=1 S100 = mẫu hiệu-chỉnh, CHƯA "proven" — caveat 1 broadcast H18.)
|
||||
- **(k) 🧪🧭🧮 Bộ-ba đồng-kiểm memory @ĐÓNG-PHIÊN (adopt S141 — đối-xứng `session-start §2.1.9`; khuôn hub 5-câu `58e28bae` khối B):** đầu-thứ-2 của nhịp 2-đầu-phiên. Trục = **CHÍNH-HỆ-MEMORY**, KHÁC (g) H1 tooling / (d)(f) H2 harvest / (j) H24 lead / reviewer chấm-diff. Contract từng vai = canonical ở `.claude/agents/harness-{eval,refine,audit}.md` (B1 — KHÔNG chép contract vai vào đây).
|
||||
@ -169,10 +175,10 @@ Em main PHẢI echo **TOÀN BỘ nội dung command body này** (đầy đủ Ph
|
||||
|
||||
| Vòng | Con-ĐO (chạy ở) | Con-KIỂM độc-lập | Bằng-chứng tối-thiểu phải dán |
|
||||
|---|---|---|---|
|
||||
| V1 tooling + harvest | H1 `tooling-auditor` (g) · H2 `harvest-curator` (d)(f) | `tooling-harvest-audit` (g-bis) | path sổ/return H1+H2 phiên này |
|
||||
| V2 soi-lead | cặp H24 (j)(ii) *hoặc* [`session-start`](session-start.md) §2.1.8 | `h24-audit` (j)(ii-bis) | FLAG-list + class (enum ĐÓNG) |
|
||||
| V1 tooling + harvest | H1 `tooling-auditor` (g) · H2 `harvest-curator` (d)(f) | `ring1-audit` (g-bis) | path sổ/return H1+H2 phiên này |
|
||||
| V2 soi-lead | cặp H24 (j)(ii) *hoặc* [`session-start`](session-start.md) §2.1.8 | `ring2-audit` (j)(ii-bis) | FLAG-list + class (enum ĐÓNG) |
|
||||
| V3 bộ-ba memory | `harness-eval` → `harness-refine` (k) | `harness-audit` (k) | 3 path `runs/<id>/harness-*-return.md` |
|
||||
| V4 nén-ngủ | `/sleep-recovery-memory-l2` (INFORM @(c) hoặc @§2.1.2) | `sleep-audit` (post-step lượt nén) | path `.gist.md` mới + Fidelity verdict |
|
||||
| V4 nén-ngủ | `/sleep-recovery-memory-l2` (INFORM @(c) hoặc @§2.1.2) | `ring4-audit` (post-step lượt nén) | path `.gist.md` mới + Fidelity verdict |
|
||||
| V5 sàn-sự-thật "đã-đo" | measured-label-gate (**floor** — không vai riêng) | — (floor tự-soi ở MỌI verdict) | 1 nhãn `đã-đo` bị chặn / được cho qua trong phiên |
|
||||
|
||||
🔴 Vòng **không chạy** phiên này ⇒ ghi **`không-nhịp`** + lý-do (chưa tới cadence · anh không consent · không có input). **KHÔNG** ghi ✓, **KHÔNG** tính TRƯỢT — nhưng cũng **KHÔNG** được im-lặng bỏ khỏi bảng.
|
||||
@ -208,9 +214,9 @@ Dán vào gate: **bảng 3 dòng × 4 cột, mỗi ô = path thật** matched.
|
||||
2. Với **TỪNG** vai trong list: dán path `.claude/agent-memory/<role>/MEMORY.md` + **byte > 0** + mtime phiên này (`ls -la`). Vai chạy mà **thiếu sổ** hoặc **sổ 0-byte** ⇒ **TRƯỢT** (AS-8 — 0-byte memory là ca đã xảy ra thật, S45).
|
||||
3. 🔴 **Vai WIRED nhưng KHÔNG chạy phiên này ⇒ `not-yet-run (vacuous)` + DÁN folder-state**, **KHÔNG TRƯỢT** và **KHÔNG ĐẠT**:
|
||||
```bash
|
||||
ls -la .claude/agent-memory/tooling-harvest-audit/ .claude/agent-memory/h24-audit/ .claude/agent-memory/sleep-audit/ 2>&1
|
||||
ls -la .claude/agent-memory/ring1-audit/ .claude/agent-memory/ring2-audit/ .claude/agent-memory/ring4-audit/ 2>&1
|
||||
```
|
||||
📌 **Baseline đo tại lúc land gate (@S146 — mốc 1 lần, KHÔNG lặp mỗi phiên):** `tooling-harvest-audit/` **tồn-tại nhưng RỖNG** (0 `MEMORY.md`) · `h24-audit/` + `sleep-audit/` **MISSING** ⇒ cả 3 = **WIRED nhưng CHƯA chạy audit-round THẬT** ⇒ đúng ca `vacuous` (`tooling-harvest-audit` @S145 chỉ spawn-PROBE, cố-ý 0-ghi).
|
||||
📌 **Baseline đo tại lúc land gate (@S146 — mốc 1 lần, KHÔNG lặp mỗi phiên):** `ring1-audit/` **tồn-tại nhưng RỖNG** (0 `MEMORY.md`) · `ring2-audit/` + `ring4-audit/` **MISSING** ⇒ cả 3 = **WIRED nhưng CHƯA chạy audit-round THẬT** ⇒ đúng ca `vacuous` (`ring1-audit` @S145 chỉ spawn-PROBE, cố-ý 0-ghi).
|
||||
🔴 **Vacuous KHÔNG phải giấy phép vĩnh-viễn:** một khi vòng tương-ứng CHẠY (H1/H2 chốt · cặp H24 chạy · lượt nén chạy) mà vai-KIỂM vẫn **không có sổ** ⇒ **TRƯỢT thật**, hết cửa vacuous. Đây là chỗ dễ **ĐẠT-ảo** nhất của cả gate: *"folder trống"* đọc giống *"chưa tới lượt"* y hệt *"chạy rồi mà nuốt sổ"* ⇒ **phải kèm bằng-chứng vòng đó có/không chạy**, không chỉ kèm `ls`.
|
||||
|
||||
**(3) Dòng báo gate** (1 dòng, ghi cạnh khối `memory-triple` trong session-log):
|
||||
@ -246,7 +252,7 @@ completeness-gate S<nn>: vong <x>/5 chuc-nang (khong-nhip: <ds>) | phep DAT a /
|
||||
- Phase 9 UAT mode: feature test-after (có thể skip per chunk), vẫn `npm run build` × 2 app. Nếu chỉ docs/infra → ghi "N/A".
|
||||
|
||||
### 3.2 Sub-agent state
|
||||
- Kiểm tra trạng thái spawn sub-agent (**10 product/quality + monitor INFORM-only (H1 · H2 · 2×H24 · 3×trio-memory · 3×round-KIỂM `tooling-harvest-audit`/`h24-audit`/`sleep-audit` S145)**; số vai canonical → [`docs/STATUS.md`](../../docs/STATUS.md) §Sub-agents, B1 KHÔNG chép số ở đây)
|
||||
- Kiểm tra trạng thái spawn sub-agent (**10 product/quality + monitor INFORM-only (H1 · H2 · 2×H24 · 3×trio-memory · 3×round-KIỂM `ring1-audit`/`ring2-audit`/`ring4-audit` S145)**; số vai canonical → [`docs/STATUS.md`](../../docs/STATUS.md) §Sub-agents, B1 KHÔNG chép số ở đây)
|
||||
- Task bất kỳ phải phân việc đầy đủ đúng vai trò split boundary (BE→backend, FE→frontend, test→test-specialist)
|
||||
|
||||
### 3.3 RAG + MCP state
|
||||
|
||||
@ -38,9 +38,10 @@ Em main đọc `.claude/hmw-mode.on` → **BÁO ngay đầu response** (anh kh
|
||||
|
||||
## 📋 BƯỚC 0.6 — Model-availability check (H5 — adopt S63 · MTv3 reword S110)
|
||||
|
||||
Em main xác nhận **lead model resolve được** đầu session. **Lead = frontier-class do ANH CHỌN per-session** {**Fable 5 (1M) Max** | **Opus 4.8 (1M) Max**} — **owner-choice hợp-lệ CHÍNH THỨC** (đổi giữa phiên OK, ghi 1 dòng session-record); **CẤM lớp model thấp (Sonnet/Haiku-class) ngồi ghế lead** (§A1 floor).
|
||||
🔄 **VALUE-update @S149 2026-07-25 (broadcast `model-default-opus-5-max` sha `59ce1d0f`, hub-owner "làm gấp" + anh cùng ngày "đám Opus 5 MAX"):** **Default = Opus 5 MAX ở MỌI vị trí, KỂ CẢ ghế lead** (Khoản 5 — lối "owner-choice per-session cho lead" THÔI DÙNG). Model cao hơn default = **gọi bằng LỆNH từng phát**: `/fable-real <vai> <đề-bài>` HOẶC anh gõ `/model` trực tiếp (**quyền tuyệt đối, không bị rào** — ghi 1 dòng "chủ dự án đổi", 0 caveat). **CẤM lớp thấp (Sonnet/Haiku) ngồi lead** (§A1 giữ). **Báo đầu phiên RÚT GỌN:** lead đúng default ⇒ **im, không nêu**; chỉ nêu khi anh chủ động đổi hoặc model không resolve.
|
||||
🧊 *Lineage: MTv3 owner-choice {Fable 5 | Opus 4.8} per-session (S110→S149) = superseded-VALUE bởi broadcast trên; CẤU TRÚC (floor §A1 · outage-reflex · per-invocation engine-đắt) GIỮ NGUYÊN.*
|
||||
|
||||
**Outage-path (H5, GIỮ):** lead-model DOWN = lỗi `"Model isn't available — claude-fable-5[1m]"` → fallback **`/model claude-opus-4-8[1m]`** (Opus 4.8 · 1M · Max — top-tier, KHÔNG hạ §A1; **KHÔNG sửa frontmatter agent** — sub nay pin cứng `opus`+`effort:max` (worker-tier-pin S124) nên outage lead KHÔNG chạm sub; chỉ lead đổi Fable→Opus, **revert-FREE**). Phản-xạ THỦ-CÔNG (không hook tự-switch).
|
||||
**Outage-path (H5, GIỮ — value-update):** Opus 5 KHÔNG resolve (lỗi `"Model isn't available"`) → **GIỮ `/model claude-opus-4-8[1m]` + BÁO HUB NGAY** (caveat Khoản 3 broadcast — đừng đổi mù để agent chết im; blameless per-env). **KHÔNG sửa frontmatter agent** — sub pin ALIAS `opus`+`effort:max` (worker-tier-pin S124) ⇒ alias family tự resolve, outage lead KHÔNG chạm sub. Phản-xạ THỦ-CÔNG (không hook tự-switch).
|
||||
|
||||
**Outage đóng:** phiên **ĐẦU TIÊN** sau đó em main hỏi anh **ĐÚNG 1 DÒNG** ("model hạng-nhất resolve lại — giữ hạng-hai hay đổi?"), **hỏi 1 lần, không lặp** (thay auto-revert cũ). **Flip-record từ nay gắn nhãn {owner-choice | outage}** khi ghi: **owner-chọn-hạng-hai ≠ outage → 0 caveat / 0 nghĩa-vụ revert**; chỉ outage-fallback mới mang caveat tạm-thời.
|
||||
|
||||
@ -86,6 +87,7 @@ Em main đọc `.claude/WAL.md` (sổ mạch-việc-dở H22 — ghi-đè ≤40
|
||||
- Thư-mục: `.claude/sessions/session-<N>/` · **regex `^session-\d+$`** (KHÔNG `L<mm>`, KHÔNG hậu-tố mô-tả — máy phải quét được).
|
||||
- `<N>` = **ID phiên-LOGIC, nguyên tăng** (`max(<N> hiện có) + 1`). 🔴 **Nhãn 2 tầng (VC-1):** `S<nn>` = **cửa-sổ vật-lý** (mọi cơ-chế tick/counter/H24 GIỮ NGUYÊN đơn-vị này) · `L<N>` = **phiên-logic**, dùng **CÙNG con số** với `session-<N>` — hai cách viết của **một ID**, **KHÔNG phải hai bộ đếm**.
|
||||
- **Ai tạo thư-mục — 🔴 SCAFFOLD IDEMPOTENT (owner chốt @S146 "giống hub"; floor manifest `101e69d6` §1 "Cộng ba miếng nền"):** *"thư-mục phiên **tự tạo ở đầu phiên**; **chạy lại nhiều lần vô hại** (không đè cái đã có)"*. ⇒ **BẤT-KỲ điểm-vào nào** (`/session-start` · `/pause` · `/tiep`) gặp `session-<N>/` chưa tồn-tại thì **TẠO**; đã có thì **DÙNG LẠI, CẤM đè**.
|
||||
- 🔄 **@S149 CHẠY BẰNG MÁY (M1 — gốc "cứ sai mã" chết tại đây):** `/session-start` gọi `powershell.exe -ExecutionPolicy Bypass -File scripts/session-scaffold.ps1 -New` (cấp `<N>=max+1`; collision → exit 4 không ghi) · `/pause`+`/tiep` gọi `… -Ensure` (idempotent exit-0 no-op; khuôn hub `:144-151`). ts-mốc = git-committer TỰ ĐỘNG. Template = `.claude/templates/session-context-template.md`. **Prose khối này = luật để hiểu; máy = đường thi hành** (fault-inject 4/4+6/6 @S149 — chính phiên mà lead ĐÃ ĐỌC luật này rồi VẪN quên tạo session-3, anh phải bắt: *"đấy là lý do mà nghi thức này bắt buộc"*).
|
||||
- 🔴 **Ai cấp `<N>` (khác "ai tạo thư-mục" — đừng lẫn):** **CHỈ `/session-start`** mới **MỞ SỐ MỚI** (`max(<N> hiện có) + 1`). `/pause` · `/tiep` **KHÔNG BAO GIỜ tự tăng `<N>`** — chúng chỉ **tạo thư-mục cho `<N>` ĐANG MỞ** nếu nó chưa có trên đĩa (ca "cửa đầu chưa kịp scaffold"). Không có `<N>` nào đang mở ⇒ dùng `<N> = max+1` **và ghi 1 dòng khai** trong khối đó là số được cấp ngoài `/session-start`.
|
||||
- 🧊 **Vá mâu-thuẫn @S146:** bản trước ghi *"Ai mở `<N>` mới: **CHỈ** `/session-start`"* trong khi [`pause.md §2.6`](pause.md) ghi *"chưa có thì đây là cửa đầu ⇒ **tạo** `session-<N>/`"* ⇒ **hai file nói ngược nhau về quyền tạo**. Gốc lỗi = **gộp hai khái niệm khác nhau** (*cấp SỐ* ⟂ *tạo THƯ-MỤC*) vào một câu. Nay tách đôi: **cấp số = độc-quyền `/session-start`** · **tạo thư-mục = idempotent, ai gặp trước thì tạo**. Hub chỉ ràng vế thứ hai.
|
||||
|
||||
@ -141,7 +143,7 @@ git check-ignore -q .claude/sessions/session-1 ; echo "exit=$?" # → exit=1
|
||||
|
||||
## Phase 2 — AUDIT (state check)
|
||||
|
||||
### 2.1 Sub-agent state (topology — **10 product/quality + monitor INFORM-only (H1 · H2 · 2×H24 · 3×trio-memory · 3×round-KIỂM `tooling-harvest-audit`/`h24-audit`/`sleep-audit` S145)**; 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 · 3×round-KIỂM `ring1-audit`/`ring2-audit`/`ring4-audit` S145)**; 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
|
||||
@ -155,10 +157,10 @@ git check-ignore -q .claude/sessions/session-1 ; echo "exit=$?" # → exit=1
|
||||
- 🟩 **cicd-monitor** — post-deploy Gitea + bundle hash + smoke
|
||||
- 🟫 **tooling-auditor** (monitor H1, INFORM-only) — tooling/docs-freshness 4-mặt (skill·sub-role·plugin·docs)
|
||||
- ⬜ **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)
|
||||
- 🔷 **lead-stale-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-gap-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-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-gap-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**.
|
||||
@ -235,9 +237,9 @@ git check-ignore -q .claude/sessions/session-1 ; echo "exit=$?" # → exit=1
|
||||
|
||||
### 2.1.8 H24 lead-self-audit — TICK counter + OVERDUE check (adopt S122 W3; file+shape = W2)
|
||||
|
||||
> Floor H24: 2 vai `lead-view-auditor` + `lead-omission-auditor` soi **chính LEAD**, chạy **theo NHỊP** chứ KHÔNG mỗi phiên. Nhịp đọc từ `h24_cadence`; trạng-thái đếm ở `.claude/governance/.session-counter.json`. 🔴 **Lead = single-writer** của counter. **W2 sở-hữu file + hình-dạng; W3 (đây) sở-hữu NGHI-THỨC tick.**
|
||||
> Floor H24: 2 vai `lead-stale-auditor` + `lead-gap-auditor` soi **chính LEAD**, chạy **theo NHỊP** chứ KHÔNG mỗi phiên. Nhịp đọc từ `h24_cadence`; trạng-thái đếm ở `.claude/governance/.session-counter.json`. 🔴 **Lead = single-writer** của counter. **W2 sở-hữu file + hình-dạng; W3 (đây) sở-hữu NGHI-THỨC tick.**
|
||||
|
||||
**(a) TICK — content-addressed, KHÔNG blind-increment:**
|
||||
**(a) TICK — content-addressed, KHÔNG blind-increment — 🔄 @S149 CHẠY BẰNG MÁY:** `powershell.exe -ExecutionPolicy Bypass -File scripts/session-counter-tick.ps1 -Session S<nn>` (M2 — thi hành ĐÚNG `_contract` trong counter-file: OR-guard idempotent · 3-nhánh classify · atomic temp+move · fail-loud exit≠0; fault-inject 5/5 @S149). **Prose dưới = MÔ TẢ contract để người đọc hiểu, KHÔNG phải quy trình tay nữa** — tay chỉ khi script exit≠0 (fail-loud → báo anh):
|
||||
```
|
||||
head = git rev-parse HEAD
|
||||
nếu head == last_ticked_head HOẶC session == last_ticked_session → NO-OP (idempotent per HEAD + per nhãn-phiên)
|
||||
@ -260,7 +262,7 @@ ngược lại → counter += 1 ; last_ticked_session = S<nn> ; last_ticked_head
|
||||
|
||||
**(d) JUMP:** một class trong `lead_self_audit.flag_classes` lặp **≥ `jump_on_class_repeat`** lần → **kéo audit tới sớm**, bất-kể counter.
|
||||
|
||||
**(e) BÁO dòng-nợ 4-vế (nâng dòng H24 cũ — Item 2 S135):** gọi `powershell.exe -ExecutionPolicy Bypass -File scripts/nhip-no-probe.ps1` → in **1 dòng** `NHIP-NO: kiem light a/e deep b/f <ok|OVERDUE:…> | tran-bo-nho x over-cap | run-chua-gom y` (vế-1 nhịp-kiểm = `counter/light/deep/OVERDUE` thay dòng H24 cũ). 🔴 **probe KHÔNG chặn**: lỗi → in `probe-loi (khong chan)` → đi tiếp. OVERDUE(light|deep) → 🔴 **SPAWN AUTO cặp H24 NGAY, KHÔNG consent (owner chốt @S146 "3 → auto"; THAY luật era-S122 "anh gật mới chạy")**. Luật sống canonical ở [`session-end`](session-end.md) §L.b(j)(ii) — **B1, mục này chỉ ÁP, không chép phạm-vi**.
|
||||
**(e) BÁO dòng-nợ 4-vế (nâng dòng H24 cũ — Item 2 S135):** gọi `powershell.exe -ExecutionPolicy Bypass -File scripts/nhip-no-probe.ps1` → in **1 dòng** `NHIP-NO: kiem light a/e deep b/f <ok|OVERDUE:…> | tran-bo-nho x over-cap | run-chua-gom y` (vế-1 nhịp-kiểm = `counter/light/deep/OVERDUE` thay dòng H24 cũ). 🔴 **probe KHÔNG chặn**: lỗi → in `probe-loi (khong chan)` → đi tiếp. 🔄 **HÌNH B @S149 (bookend-hoá light — spec qua gate W2):** cặp soi-lead (`lead-stale-auditor` + `lead-gap-auditor`) spawn **VÔ-ĐIỀU-KIỆN mỗi đầu phiên** — KHÔNG còn cổng OVERDUE(light); **OVERDUE(deep) GIỮ** (deep-sweep theo `deep_every`). Cặp trả → ghi số bằng máy `scripts/h24-signal-write.ps1` (đơn-vị tally = phiên-LOGIC: @open+@close gộp 1 quyết-định/class — FIX-1). `ring2-audit` AUTO sau cặp, **PIN đích-danh run-folder tươi** (cấm glob-latest — carve-out §A1). Luật sống canonical ở [`session-end`](session-end.md) §L.b(j)(ii) — **B1, mục này chỉ ÁP, không chép phạm-vi**. 🧊 *Bản S146→S149 = "auto khi tới nhịp"; đảo @S149 theo direction anh "chạy đc VIPIX, AI_INFRA" (lineage đầy đủ ở §L.b(j)(ii)).*
|
||||
🔸 **Phạm-vi 1 dòng (chống đọc nới):** gỡ **cổng NGƯỜI**, **giữ cổng NHỊP** (`h24_cadence`) ⇒ auto **khi tới nhịp**, KHÔNG phải mỗi phiên. Khác bookend-hub (hub bỏ counter) — SE chưa theo nhánh đó.
|
||||
⚠️ **KHÁC sleep-check §2.1.2** (vẫn CONSENT) và **KHÁC trio §2.1.9** (vẫn CONSENT) — 3 cổng nay **không còn cùng khuôn**, đừng suy một ra ba.
|
||||
|
||||
|
||||
@ -34,12 +34,15 @@ Nén **verbatim L2 cũ** thành **gist súc-tích** mà KHÔNG mất signal-quan
|
||||
🔴 **`all` = MỌI sub product/quality có-ký-ức — DẪN-XUẤT TỪ ĐĨA, KHÔNG hardcode danh-sách** (B1; roster canonical → [`docs/STATUS.md`](../../docs/STATUS.md) §Sub-agents):
|
||||
|
||||
```bash
|
||||
ls -1d .claude/agent-memory/*/ | xargs -n1 basename | grep -vE '^(tooling-auditor|harvest-curator|lead-view-auditor|lead-omission-auditor)$'
|
||||
# monitor-set DERIVE TỪ NGUỒN (vá H1-FLAG-1 @S150 — bản hardcode 4 tên đã stale khi roster monitor lên 10):
|
||||
# vai INFORM-only = mô-tả agent chứa 'INFORM-only'; loại README (bẫy glob .claude/agents/*.md — luật ring1 @S150, không ngoại-lệ).
|
||||
MON=$(grep -il 'INFORM-only' .claude/agents/*.md | xargs -n1 basename | sed 's/\.md$//' | grep -v '^README$' | paste -sd'|' -)
|
||||
ls -1d .claude/agent-memory/*/ | xargs -n1 basename | grep -vE "^($MON)$"
|
||||
```
|
||||
|
||||
Hiện-hành = `investigator-codebase · investigator-api · implementer-backend · implementer-frontend · test-specialist · reviewer · cicd-monitor · frontend-designer · database-agent · office-document`.
|
||||
Hiện-hành (báo-cáo RUNTIME đo 2026-07-25 — KHÔNG chép thành hằng-số) = `investigator-codebase · investigator-api · implementer-backend · implementer-frontend · test-specialist · reviewer · cicd-monitor · frontend-designer · database-agent · office-document`.
|
||||
|
||||
> 🟡 **4 monitor INFORM-only KHÔNG vào `all` mặc-định** — `tooling-auditor` (H1) · `harvest-curator` (H2) · `lead-view-auditor` (H24) · `lead-omission-auditor` (H24). CHỈ xử-lý nếu chúng **thật-sự có** `archive/<period>.md` verbatim (Phase 0.2 phát-hiện) — **gọi tay đích-danh tên**.
|
||||
> 🟡 **MỌI vai monitor INFORM-only KHÔNG vào `all` mặc-định** — tập = **derive từ lệnh trên**, KHÔNG liệt-kê cứng (hiện gồm nhóm H1 · H2 · 2×H24 · 3×trio-memory · 3×round-KIỂM; số & tên = runtime-scan. Vá @S150: bản cũ "4 monitor" sót 6 vai mới — tái-phát ĐÚNG class mà ghi-chú S122 ngay dưới đã cảnh-báo ⇒ lần này vá bằng BỎ hardcode, không thêm tên). CHỈ xử-lý nếu chúng **thật-sự có** `archive/<period>.md` verbatim (Phase 0.2 phát-hiện) — **gọi tay đích-danh tên**.
|
||||
> ⚠️ **Vá @S122 — danh-sách này TỪNG STALE:** nó cứng-hoá "9 sub" và **rớt `office-document`** (vai thêm **S107**, có ký-ức thật, là product/quality **chứ không phải monitor**) suốt từ đó. Trớ-trêu: chính doc này đã ghi *"luôn quét đĩa thật"* cho con-số `4/9` ngay dưới, nhưng lại **hardcode danh-sách roster** phía trên ⇒ nay **quét cả hai**.
|
||||
> ℹ️ **Số sub CÓ archive-content = báo-cáo RUNTIME, luôn quét đĩa** (đo S71: 4 — `cicd-monitor · implementer-backend · investigator-codebase · reviewer`; số còn-lại archive rỗng/chưa-có → `all` tự skip qua Phase 0.2 guard-rỗng). **KHÔNG chép con-số này thành hằng-số.**
|
||||
> 🧹 **Ghi-chú S122:** trước đó `agent-memory/` còn **2 dir RỖNG** `_crlf-probe` + `_lf-probe` (tàn-dư probe W0.6) ⇒ lệnh quét trên **đếm 16 thay vì 14**. Đã `rmdir`. Bài học: **git MÙ với thư-mục rỗng** ⇒ `git status` sạch **KHÔNG** chứng-minh đĩa sạch. Con-số này = báo-cáo runtime, KHÔNG hardcode: luôn quét đĩa thật.
|
||||
@ -103,9 +106,9 @@ Lead distill proposal thành gist theo 4 bước:
|
||||
3. **G-009 post-scan (BẮT BUỘC sau ghi):** Grep mojibake (`§` · `â†` · `ðŸ` · `KHÃ` — seq cụ-thể, né bare-`Ã`) + dollar-expansion (`/usr/bin/bash`) trên file vừa ghi → **phải sạch**. Bẩn → de-corrupt qua Write tool.
|
||||
4. Cập-nhật `.claude/agent-memory/memory-budget.json` field `last_sleep_at = <today>` (root-key; **thêm mới nếu chưa có**). B3 single-writer, Write/Edit. 🔴 KHÔNG hand-edit `measured_bytes` (chỉ script `scripts/measure-agent-memory.ps1` được sửa số đo) — chỉ chạm `last_sleep_at`.
|
||||
|
||||
## Phase 4.5 — 🔬 sleep-audit AUTO (KIỂM vòng nén-ngủ, C4/C4b vai #3/3, land S145)
|
||||
## Phase 4.5 — 🔬 ring4-audit AUTO (KIỂM vòng nén-ngủ, C4/C4b vai #3/3, land S145)
|
||||
|
||||
Gist + Fidelity-gate xong (Phase 3+4) ⇒ spawn `sleep-audit` NGAY — **AUTO, KHÔNG consent** (owner S145). Đọc `.gist.md` mới + Fidelity verdict + claim giảm-byte → verdict per-claim + **tự đo lại byte** archive gốc vs gist (đối-chứng claim) + **thách-CLEAN** (Fidelity 5P/0F ⇒ mở 1 gist đối-chứng `<period>.md` gốc xem trung-thực, không mất 4-field load-bearing). 🔴 no-self-exempt độc-lập lượt nén (m-3). 🔴 Fail-safe: 0 `.gist.md` tươi phiên này ⇒ **NO-OP im-lặng**. Verdict gộp vào Phase 5 report. Propose-only → em main VERIFY→APPEND (git-diff backstop). Contract canonical `.claude/agents/sleep-audit.md` (B1).
|
||||
Gist + Fidelity-gate xong (Phase 3+4) ⇒ spawn `ring4-audit` NGAY — **AUTO, KHÔNG consent** (owner S145). Đọc `.gist.md` mới + Fidelity verdict + claim giảm-byte → verdict per-claim + **tự đo lại byte** archive gốc vs gist (đối-chứng claim) + **thách-CLEAN** (Fidelity 5P/0F ⇒ mở 1 gist đối-chứng `<period>.md` gốc xem trung-thực, không mất 4-field load-bearing). 🔴 no-self-exempt độc-lập lượt nén (m-3). 🔴 Fail-safe: 0 `.gist.md` tươi phiên này ⇒ **NO-OP im-lặng**. Verdict gộp vào Phase 5 report. Propose-only → em main VERIFY→APPEND (git-diff backstop). Contract canonical `.claude/agents/ring4-audit.md` (B1).
|
||||
|
||||
## Phase 5 — REPORT + COMMIT
|
||||
|
||||
|
||||
@ -110,7 +110,7 @@ done
|
||||
- ✅ **Chốt-kết `_end` ĐÃ WIRE** (owner chốt @S146 *"giống hub"*, đổi tên `closed.md`→`_end` @S148 cho khớp form hub — manifest `101e69d6`): nghi-thức ghi ở [`session-end.md`](session-end.md) **§6.3-bis** (FROZEN · idempotent NO-OP · NO-OP im-lặng nếu 0 thư-mục). ⇒ **cân-sổ đủ CẢ HAI vế**: `pause` đối-ứng bằng `_tiep-<i>` (`/tiep §2.6`) **hoặc** `_end` (đóng-L) ⇒ ca *"pause rồi đóng thẳng không qua `/tiep`"* **hết kêu oan**.
|
||||
🔴 **@S148 mạnh thêm một nấc:** `_end` nay **ĐÓNG TRỌN thư-mục** (detector `continue` hẳn), không còn là "+1". Fault-inject bắt: phiên đã đóng mà dư ≥2 pause thì bản cũ **vẫn KÊU OAN** — lệch đúng câu *"MỌI pause coi như đã đối-ứng"* mà `session-end §6.3-bis` vẫn luôn nói. Doc đúng, máy sai, sống từ S146.
|
||||
🧊 *Nấc cũ (tới S145): "`closed.md` CHƯA wire — VC-2 còn chờ anh duyệt", kèm hệ-quả "chỉ ca pause-rồi-đóng-thẳng mới thiếu đối-ứng". **Cả hai nay SAI** — giữ 1 dòng làm vết.*
|
||||
🔴 **Bài học lấy từ chính chỗ này (H24 `lead-view-auditor` bắt @S146):** MÁY ở ngay trên (`:89` `:94` `:95`) **đã đọc `closed.md` thật** từ lúc block này ra đời, mà **PROSE vẫn khai "chưa wire"** ⇒ đây là **lật-ngược của ghost-wire**: **wired-but-declared-unwired** — và nó nằm đúng dưới nhãn *"chống ghost-wire H18"*. ⇒ **Ghost-wire soi được 2 CHIỀU**: khai-có-mà-không-chạy **và** chạy-thật-mà-khai-chưa.
|
||||
🔴 **Bài học lấy từ chính chỗ này (H24 `lead-stale-auditor` bắt @S146):** MÁY ở ngay trên (`:89` `:94` `:95`) **đã đọc `closed.md` thật** từ lúc block này ra đời, mà **PROSE vẫn khai "chưa wire"** ⇒ đây là **lật-ngược của ghost-wire**: **wired-but-declared-unwired** — và nó nằm đúng dưới nhãn *"chống ghost-wire H18"*. ⇒ **Ghost-wire soi được 2 CHIỀU**: khai-có-mà-không-chạy **và** chạy-thật-mà-khai-chưa.
|
||||
- 🟢 **Hướng hỏng = AN-TOÀN:** quên ghi `_tiep-<i>.md` ⇒ sổ lệch ⇒ **KÊU ⇒ HỎI LẠI ANH**. Sai về phía *hỏi thừa*, không về phía *im lặng bỏ việc* — đúng thiên-hướng của Sàn-3.
|
||||
|
||||
### 🟡 BẬC TRUNG-BÌNH — nhiều file bẩn **NGOÀI** 4 path hook persist
|
||||
|
||||
@ -22,7 +22,7 @@ argument-hint: (trống = bật mode · hoặc kèm task lớn đầu tiên)
|
||||
- **Thường (nhỏ):** <30min · 1–2 file · hỏi-đáp → Agent-tool spawn lẻ / solo theo `.claude/agents/README.md` decision-tree, KHÔNG HMW.
|
||||
|
||||
## VALID_ROLES (roster SOLUTION_ERP — số vai canonical → [`docs/STATUS.md`](../../docs/STATUS.md) §Sub-agents, B1 KHÔNG chép số ở đây)
|
||||
`investigator-codebase` · `investigator-api` · `implementer-backend` · `implementer-frontend` · `test-specialist` · `reviewer` · `cicd-monitor` · `frontend-designer` · `database-agent` · `office-document` (+S107) · `tooling-auditor` · `harvest-curator` (+S110 anh-directed — monitor vẫn INFORM-only, lane RETURN-only) · `lead-view-auditor` · `lead-omission-auditor` (**+S121 W2** — 2 monitor H24 lead-self-audit, INFORM-only propose-only; class-flag = enum ĐÓNG `lead_self_audit.flag_classes` ở `.claude/agent-memory/memory-budget.json`, nhịp = `h24_cadence` cùng file)
|
||||
`investigator-codebase` · `investigator-api` · `implementer-backend` · `implementer-frontend` · `test-specialist` · `reviewer` · `cicd-monitor` · `frontend-designer` · `database-agent` · `office-document` (+S107) · `tooling-auditor` · `harvest-curator` (+S110 anh-directed — monitor vẫn INFORM-only, lane RETURN-only) · `lead-stale-auditor` · `lead-gap-auditor` (**+S121 W2** — 2 monitor H24 lead-self-audit, INFORM-only propose-only; class-flag = enum ĐÓNG `lead_self_audit.flag_classes` ở `.claude/agent-memory/memory-budget.json`, nhịp = `h24_cadence` cùng file)
|
||||
> Role lạ ∉ VALID_ROLES → `hmw.js` **THROW (STOP-HARD)** + báo owner thêm vai (REC-3 2026-07-13; fail-soft cũ "đứt âm-thầm" đã bỏ); role-less null → inherit lead. Windows MAX_PATH (Dropbox nested) → KHÔNG `isolation:worktree`.
|
||||
|
||||
## Quy trình HMW — vai trò từng phase
|
||||
|
||||
Reference in New Issue
Block a user