FILE 4 fable-clone.md -- GAP#6: lane ensemble PHAI mang tier:'opus'.
Thieu => inherit lead => lead=Fable thanh N x Fable = dot quota gap N lan VA pha dung
ly-do lenh ton tai (ensemble RE de THAY 1 luot Fable dat). lead=Opus thi tier:'opus'
≡ inherit => loi VO HINH, chi lo khi Fable UP (dung loi reviewer bat @S108).
+ khai CHUA VERIFY precedence spawn-param vs frontmatter (H23 §2(2)) => DEFER phien lead=Fable.
+ grep tier:'opus' = DIEU-KIEN CAN, KHONG DU (do CHU trong file, Goodhart-able 100%).
FILE 5 agents/README.md -- bo SO khoi 8 cho (khong doi so: doi thi roster ke lai stale).
File nay chinh la VI-DU minh-hoa cho class view-stale-role-desc trong lead-view-auditor.md:47.
+ canh-bao bay glob: `ls .claude/agents/*.md` bat LUON README.md => thua 1 (R2-C1).
+ khai: doi roster = doi 2 BE-MAT DOC-LAP (agents/*.md -> registry | VALID_ROLES -> agentType).
FILE 6 fable-real-runbook.md -- 14 hit (lead bao 8 = SAI, xem duoi). + hmw.js:22-30 -> :22-36 (stale line-ref).
FILE 7 sleep-recovery-memory-l2.md -- `all` tu hardcode 9 -> DAN-XUAT TU DIA (do ra 10).
Danh-sach cung 9 da ROT office-document (them S107) suot tu do. Tro-treu: chinh doc do
da ghi "luon quet dia that" cho con-so 4/9 ngay duoi, nhung hardcode roster phia tren.
FILE 8 workflows/README.md -- TRI-ACCEPT vao ORPHAN-AUTHORITY (:19-20) + B1 pointer.
FILE 9 ACTIVE-MARKS.md -- chu-thich cho mark RC-...20-42-01 (anh CHOT: giu ban ky nguyen ven,
them chu-thich; P4/P8). "roster 12" trong than mark = anh chup luc ky, KHONG phai gioi-han.
+ STATUS.md:25 -- STALE THAT trong chinh file CANONICAL: row ghi | Sub-agents | 14 | nhung
narrative CUNG DONG ghi "ca 12 sub model: inherit" (W2 sua row, bo sot narrative).
Bay mega-line TAI HIEN: grep -c = 1 vs grep -o|wc -l = 2.
+ spec v3-PATCH -- SUA ACCEPTANCE FIX#6 (ban goc BAT-KHA-THI, tien-le WAL:29):
"0 hit song" do CA phan CO Y khop => implementation DUNG van truot. Lan thu BA cung ho
R2-C1 (ls=14) + R3-M3 (TOTAL>=46). Acceptance moi = disposition TUNG DONG theo 6 nhom.
Sweep that sau W3: 14 hit song, 0 cai la stale-can-va (vi-du co chu-dich / trich lich-su /
ban da ky / so tam / W5 chua toi luot / canonical history-delta).
LEAD TU BAT 2 LOI DEM (deu o truc dem-ve-viec-minh, -> adap-report):
(a) bao "fable-real-runbook 8 hit" -- that la 14; lay output `head -40` DA BI CAT lam so tong.
(b) bao "do lai tai-hien CHINH XAC du-bao FIX#4" roi lay trung-khop lam cho dua, trong khi
CA FIX#4 LAN LEAD deu dang do TEN FILE. Con-so dung, huong do sai.
=> khop feedback_meta_count_selfcoverage_blindspot: lead DO tot, lead DEM VE MINH thi sai.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
14 KiB
description, argument-hint
| description | argument-hint |
|---|---|
| Nén verbatim L2 cũ (agent-memory archive/<period>.md) thành gist ADDITIVE (.gist.md file MỚI, KHÔNG đè). CHỈ P1 gist-compress — KHÔNG build index. SCOPE = repo SOLUTION_ERP-only. | <agent | all> (vd — implementer-backend · reviewer · all) |
/sleep-recovery-memory-l2 — Giấc ngủ L2 (sleep-compress, P1-only) · SE
Trigger nén L2 dark-matter. CHỈ xử lý
.claude/agent-memory/<name>/archive/<period>.md(verbatim cũ) → sinh<period>.gist.md(FILE MỚI, additive). KHÔNG đụng L1 (MEMORY.md) · KHÔNG đụng RAG/L3 · KHÔNG build_INDEX.md(đó = P2 archival-event, không nằm trong command này). 🔴 Scope: CHỈ repo SOLUTION_ERP (self=se). KHÔNG đụng repo khác / corpus federated. 🔴 Phân-vai (Cách-B): lead = em-main single-writer (B3) ·harvest-curatorPROPOSE-ONLY (charter cấm-ghi → substring:"KHÔNG ghi/sửa BẤT KỲ file") ·reviewergate Fidelity (lead KHÔNG tự chấm, G-001).📌 NOTE — provenance: Command này port từ AI_INFRA
/sleep-recovery-memory-l2(D:/Dropbox/CONG_VIEC/AI_INFRA/.claude/commands/sleep-recovery-memory-l2.md) + design (AI_INFRA repo — KHÔNG có bản SE-local)D:/Dropbox/CONG_VIEC/AI_INFRA/docs/architecture/MEMORY-SLEEP-RECOVERY-L2-DESIGN-v3.md§4 + §10-P1. Bản gốc gate §J2 = AI_INFRA-only (no-sister); ở đây anh yêu-cầu port để parity → scope tailor thành SE-repo-only (KHÔNG đụng sister/corpus khác). KHUNG federated giữ nguyên (function-floor), CHỈ tailor form theo SE (roster · path · 4-field tiếng Việt · pointer-style · gotcha#).
Tham số: $ARGUMENTS — 1 agent (vd implementer-backend) HOẶC all. Trống → hỏi anh chọn, KHÔNG mặc-định all.
📋 BƯỚC 0 — Show command body (visibility, no wait)
Em main PHẢI echo TOÀN BỘ nội dung command body này (đầy đủ Phase 0-5 + tất cả guard rule) trong response đầu tiên ĐỂ ANH USER ĐỌC LẠI.
Quy trình (KHÔNG wait confirm):
- Em echo full content command (raw markdown, KHÔNG tóm tắt, KHÔNG cắt)
- Em proceed execute Phase 0 → 5 sequential ngay
- Anh user điều chỉnh cuối nếu cần (KHÔNG mid-flow interrupt)
🎯 Mục đích (function-floor)
Nén verbatim L2 cũ thành gist súc-tích mà KHÔNG mất signal-quan-trọng:
- ADDITIVE (B3/§F1/G-009): gist = ghi ra file MỚI
archive/<period>.gist.md. KHÔNG đè<period>.md(verbatim) → verbatim ở-lại-đĩa (git history giữ nguyên). Đây là cách giải B3-data-loss: nén KHÔNG phá nguồn. - Kết quả: 1 verbatim file dài + 1 gist file ngắn cùng kỳ. Lookup sâu vẫn Read verbatim; đọc nhanh đọc gist.
- 🔴 KHÔNG ép L1 nhỏ hơn 30KB (design BỎ — rotation L1→L2 là function per-project; L1-cap-audit của SE đã sống ở
/session-start §2.1.2+memory-budget.json, KHÔNG phải việc của command này).
👥 SE roster — target hợp-lệ
🔴 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 §Sub-agents):
ls -1d .claude/agent-memory/*/ | xargs -n1 basename | grep -vE '^(tooling-auditor|harvest-curator|lead-view-auditor|lead-omission-auditor)$'
Hiện-hành = 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
allmặ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>.mdverbatim (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ớtoffice-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/9ngay 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ó →alltự 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 statussạ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.
Trigger (2 đường)
| Đường | Cơ chế |
|---|---|
| Tay | Anh gõ /sleep-recovery-memory-l2 <agent|all> bất kỳ lúc nào |
| Auto-check (INFORM-only) | /session-start + /session-end đọc last_sleep_at trong .claude/agent-memory/memory-budget.json → nếu today − last_sleep_at ≥ 7 (ngày) → gợi-ý chạy command (INFORM anh, KHÔNG tự-chạy autonomous). Anh consent → chạy. |
🔴 State-file
last_sleep_atcó 1 home DUY NHẤT:.claude/agent-memory/memory-budget.json(root-keylast_sleep_at, cạnhtiers/measured). KHÔNG ghi ở_INDEX.md/ nơi khác. (SE đặt budget-file trongagent-memory/, KHÁC AI_INFRA gốc đặt.claude/memory-budget.json— đây là tailor path SE.) Fieldlast_sleep_atđã thêm (null baseline, S72) vào budget-file SE — auto-check đã wired ở/session-start §2.1.2+/session-end §L.b(c)(đọc field → INFORM gợi-ý nếu null/≥7d). Lần sleep đầu lead set= today(Phase 4.4). Lead = single-writer field này (B3).
Phase 0 — Prep (em main / lead)
- Parse
$ARGUMENTS→ list agent target.all→ 9 sub có-ký-ức SE (xem roster ở trên). Agent lạ (không có dir.claude/agent-memory/<name>/) → cảnh-báo + skip.harvest-curator/tooling-auditorchỉ chạy nếu gọi tay đích-danh và có archive thật. - Mỗi agent: liệt-kê
archive/<period>.md(verbatim) đủ cũ (per-project aging, size-driven — KHÔNG federated-time). Guard-rỗng: agent KHÔNG cóarchive/hoặc 0 file<period>.md→ skip (0 token). Bỏ qua file nào ĐÃ có<period>.gist.mdtương-ứng (tránh nén lại). - 🛡️ double-distill guard (đọc header TRƯỚC khi làm): nếu gist nguồn/đối-tượng đã chứa counter
distill-gen: NvớiN ≥ 1→ đã là sản-phẩm distill → REFUSE pass-2 tự-động (skip, log lý-do). Chỉ nén nguồn verbatim gen-0 (file<period>.mdchưa-từng-distill). (SE thực-tế: có gist đã ởdistill-gen: 2— investigator-codebase 2026-06 — guard PHẢI bắt; KHÔNG nén.gist.md, chỉ nén.mdverbatim.) - Đọc
.claude/agent-memory/memory-budget.jsonlấylast_sleep_at(xác-nhận đủ 7-ngày nếu đường auto). Field vắng → coi như "chưa từng sleep" (đường tay vẫn chạy bình-thường).
Phase 1 — GATHER + DEDUP (harvest-curator PROPOSE-ONLY)
harvest-curatorcharter cấm-ghi-file → output = proposal MD (text trả-về), KHÔNG Write.
Spawn harvest-curator đọc từng verbatim file target → đề-xuất bản nén nháp:
- Gom entry trùng/liên-quan (dedup spawn-record cùng-chủ-đề across nhiều ngày/session).
- Đánh importance-tag mỗi cụm:
{cao · vừa · thấp}(khớp nhãn giá-trị-tái-dùng SE đang dùng trong gist hiện-có). - Trả proposal (KHÔNG ghi đĩa). Lead nhận → Phase 2 distill + verify.
Phase 2 — DISTILL (method)
Lead distill proposal thành gist theo 4 bước:
- 4-field giữ-khung (SE): mỗi entry gốc = spawn-record
VIỆC · KẾT-LUẬN(+commit/file:line) · BÀI-HỌC · BẤT-NGỜ. Nén = rút-gọn câu-chữ, KHÔNG bỏ field. (Đây là form SE — tương-đươngtask · verdict · learned · surprisebản gốc.) - GỘP: cụm entry cùng-chủ-đề → 1 entry tổng-hợp (cite ngày/session gốc + pointer back-resolve vào verbatim).
- reflection-synthesis: rút 3 tới 5 entry mỗi file (meta-insight cấp cao hơn liệt-kê thô), KHÔNG vượt 5.
- importance-tag drop: drop
thấpTRƯỚC khi cần cắt độ-dài.cao/vừagiữ. ratio nén = báo-cáo KHÔNG phải target (KHÔNG cắt để đạt con-số).
🔴 Pointer-style SE (khớp gist hiện-có): mỗi dòng kết bằng back-resolve → substring:"<unique>" grep-UNIQUE vào verbatim file đã-tên — git-SHA / Mig-name / Run#NNN / unique-phrase keyed (ngày bị collide). NO line-hint (additive append làm xê dòng).
🔴 Header gist file BẮT BUỘC có counter distill-gen: 1 (sản-phẩm distill thế-hệ-1 → chặn pass-2 sau này per Phase 0.3) + ghi rõ source-verbatim (tên file + #record) + pointer-style: substring. (Nếu hiếm-hoi distill từ gist gen-1 — chỉ khi anh ép tay đè guard — stamp distill-gen: 2.)
Phase 3 — GATE (coverage-diff DETERMINISTIC + Fidelity)
Gate = chốt-chặn mất-signal. 2 lớp.
(a) coverage-diff DETERMINISTIC (lead scan, rẻ, LUÔN chạy):
- Mọi
{surprise · guard · file:line · root-cause · gotcha#}xuất-hiện trong verbatim PHẢI xuất-hiện (hoặc đánhN/Acó-chủ-đích) trong gist. (SE thêmgotcha#so với 4-token gốc — khớp rulememory-budget.jsonl2_gist: "every surprise/guard/file:line/root-cause/gotcha# in verbatim must survive".) - Cơ-chế: grep các loại token trên ↔ đối-chiếu gist (Grep tool). Thiếu bất-kỳ → FAIL → bổ vào gist TRƯỚC khi tiếp.
- ratio nén = báo-cáo (đo để biết), KHÔNG phải target/floor — KHÔNG ép gist nhỏ-đi để đạt ratio đẹp.
(b) Fidelity gate (reviewer escalate):
harvest-curatorFidelity-FLAG → escalatereviewerchấm keep-vs-drop (entry nào nén/drop có đúng không, gist có bịa / lệch nghĩa không).- Lead KHÔNG tự chấm Fidelity (G-001). reviewer PASS → ghi. FAIL → re-distill đúng sự-thật. (reviewer no-StructuredOutput / chết ×2 → self-gate-fallback bằng evidence-checklist hợp-lệ, ghi rõ trong report — feedback agent-kill-recovery.)
Phase 4 — WRITE (lead single-writer, B3)
- Tool-ghi:
Write(file mới) /Edit— 🔴 G-009: KHÔNG PowerShellAdd-Content/ bash here-string. UTF-8 no-BOM. - Ghi
archive/<period>.gist.md(file MỚI). KHÔNG chạm<period>.mdverbatim (additive). - 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. - Cập-nhật
.claude/agent-memory/memory-budget.jsonfieldlast_sleep_at = <today>(root-key; thêm mới nếu chưa có). B3 single-writer, Write/Edit. 🔴 KHÔNG hand-editmeasured_bytes(chỉ scriptscripts/measure-agent-memory.ps1được sửa số đo) — chỉ chạmlast_sleep_at.
Phase 5 — REPORT + COMMIT
- Report: mỗi agent xử-lý →
{verbatim-file · gist-file MỚI · #entry trước→sau · ratio (báo-cáo) · importance-drop thấp=N · coverage-diff PASS/FAIL · Fidelity PASS/self-gate}. - Commit (anh OK):
[CLAUDE] Memory: sleep-compress L2 <agent> — <period>.gist.md additive- Scope =
Memory. 🔴git addfile cụ-thể (KHÔNG-A/.— secret-leak risk; feedback rag-mcp). - verbatim KHÔNG đổi → KHÔNG trong diff (chỉ
.gist.mdmới +memory-budget.jsonlast_sleep_at). - 🔴 docs-only path → CI skip (
paths-ignore, gotcha #41) — commit này 0s.
- Scope =
⚠️ Guards (đọc kỹ)
- 🔴 Additive-only: gist = file MỚI. TUYỆT-ĐỐI KHÔNG đè/sửa/xóa verbatim
<period>.md(B3 · §F1 · G-009 data-loss). - 🔴 CHỈ P1 gist-compress: command này KHÔNG build
_INDEX.md(= P2 archival-event riêng, sub tự-ghi lúc rời L1→L2) · KHÔNG inject read-side · KHÔNG đụng L1/RAG/L3. - 🔴 double-distill refuse:
distill-gen ≥ 1ở đối-tượng → skip (Phase 0.3). Gist mới luôn stampdistill-gen: 1. Chỉ nén verbatim<period>.mdgen-0 (KHÔNG nén.gist.md). - 🔴 coverage-diff = deterministic gate: surprise/guard/file:line/root-cause/gotcha# thiếu → FAIL, KHÔNG ship. ratio = metric KHÔNG target.
- 🔴 Phân-vai cứng (Cách-B): lead Write+commit (B3 single-writer) · harvest-curator PROPOSE-ONLY (charter cấm-ghi) · reviewer gate Fidelity (G-001 lead-không-tự-chấm).
- 🔴 KHÔNG ép L1 < 30KB (design BỎ — không phải scope command này; L1-cap-audit sống ở
/session-start §2.1.2). - 🔴 Scope SE-repo-only: CHỈ agent-memory
.claude/agent-memory/**của SOLUTION_ERP. KHÔNG đụng repo/corpus khác (port-từ §J2-AI_INFRA, tailor parity — xem NOTE đầu file). - 🔴 G-009 tool-ghi: Write/Edit only + post-scan mojibake/dollar-exp.
- 🔴 last_sleep_at single home: chỉ
.claude/agent-memory/memory-budget.jsonroot-key — KHÔNG nơi khác.