- engine-doc canonical docs/governance/harness-11-engine.md (PHẦN A/B/C/D + 3-tier D5/D6/D7 + one-direction-lock D8 + CAVEAT honest) - scripts/governance-detectors.ps1 (C1 broken-pointer + C2/B3 staleness + C3 vocab-fork + C4 self-exclusion + C5 resolve, NO-API DÒ+FLAG-only, runtime-proven, FP-refined 59→27) - scripts/memory-archive-gate.ps1 (PHẦN A: hysteresis 0.85 + keep-floor 5 + 2-strike + A7 NO-API L1-eval) + budget.json archive_gate - B1 ×11 count→canonical-pointer (root CLAUDE.md, ef-core/dep-audit SKILL, skills/README, docs/CLAUDE.md) — drift mig53→55/test306→339/gotcha68→69 RESOLVED + ef-core +Mig 54/55 rows - cadence-wire D1 session-start §2.1.3 + D2 session-end §L.b(c) + agents/README Upgrade S75 - run-trace TRACKED: audit wf_7fdc3bd5-930 / implement wf_c5e5844e-7c1 / review wf_d7ca1ff8-942 (REVIEW PASS, completeness-gate ĐẠT) - check-email AI_INFRA harness-11 (verify whole-file 318ff9f6 + body b2a2fc1c) + adap-report + outbox report (body 7fa1b53a) - 0 production code; state THẬT giữ nguyên (Mig 55 · 88 bảng · 339 test · gotcha 69 · menu 54 · bundle BYF5vIMJ/CB-tiRxd) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
9.2 KiB
Harness-11 — Engine bộ-nhớ-và-governance TỰ-BẢO-TRÌ (SE canonical)
Adopt S75 (2026-06-18) — AI_INFRA broadcast
2026-06-18-Governance-harness-11+ checklist (inboxbroadcasts/inbox/ai_infra/). Áp qua 2 workflow (IMPLEMENTwf_c5e5844e-7c1+ REVIEW) per mandate ⑤. adap-report →docs/governance/adap-reports/2026-06-18-Governance-harness-11.md.🔑 Đây là CANONICAL cho engine governance của SE. Doc khác (
agents/README,session-start/end) TRỎ về đây, KHÔNG copy luật (B1 dogfood — một-chỗ-đổi).🔑 Nguyên-lý lõi: "tự-bảo-trì" = luôn-TỰ-BIẾT khi có drift (detector tự-động, NÊU-CỜ ngay) CHỨ KHÔNG tự-viết-lại nội-dung/luật. DÒ tự-động; SỬA do người-chủ-trì (em-main) làm trên cờ. BAR-KHÔNG-HẠ = một-người-ghi (single-writer) — "tự-bảo-trì" TUYỆT-ĐỐI KHÔNG miễn-trừ chốt này.
Bản-đồ artifact (engine SE)
| Cấu phần | Artifact | Nấc |
|---|---|---|
| PHẦN A — hot-mem auto-archive | scripts/memory-archive-gate.ps1 + .claude/agent-memory/memory-budget.json (archive_gate params) + session-end.md §L.b |
mechanized DRY-RUN planner + convention trigger (no-OS-hook) |
| PHẦN B — derived→canonical + freshness | luật B1 (dưới) + scripts/governance-detectors.ps1 (C2 staleness) |
detector mechanized + fix gated qua người |
| PHẦN C — 3 grep detector | scripts/governance-detectors.ps1 (C1/C2/C3 + C4 self-exclusion + C5 resolve-condition) |
mechanized NO-API, DÒ+FLAG-only |
| PHẦN D — orchestration | doc này (3-tier + 1-direction) + session-start.md/session-end.md/ultra-on.md cadence + hmw.js checkpoint |
mix mechanized + convention |
| Canonical state (nguồn-chuẩn) | docs/STATUS.md CURRENT STATE table |
— |
PHẦN A — Hot-mem auto-archive by budget (🟡 TAILORED)
SE-present từ Harness-9 (L2 archive byte-exact + _INDEX substring-pointer + gist). Harness-11 thêm 3 tham-số chống-thrash + standing-gate:
- A1 byte-gate @session-end —
memory-archive-gate.ps1đo byte mỗiagent-memory/<sub>/MEMORY.mdvs cap. (Trigger =session-end.md §L.bconvention người-kích — engine no-OS-hook.) - A2 additive MOVE — bản-cũ-nhất →
archive/<YYYY-MM>.md, NEVER overwrite (runtime-provenh910-curate: +N -0 byte-exact). - A3
_INDEXpointer-only — 1 dòng/bản-ghi, con-trỏ substring sha-keyed (memory-budget.json:19). - A4 hysteresis — dồn tới DƯỚI
low_watermark = 0.85 × cap(không dừng ở vạch). [paramarchive_gate.low_watermark_ratio] - A5 keep-floor — luôn giữ ≥
keep_floor_entries(5) bản-ghi gần nhất, không vét sạch. - A6 2-strike — chỉ ĐỀ-XUẤT dồn khi over-cap ở 2 lần kiểm liên-tiếp (
strike_threshold), chống alert-fatigue. - A7 NO-API L1-eval — sau dồn: (i) resolve-con-trỏ (mọi pointer
_INDEXgrep-định-vị được trong archive) + (ii) byte-0-loss (tổng trước = sau). grep + measure only, KHÔNG API.
🟡 Con-số (cap 25600, 0.85, 5, 2) = TAILOR. SE chọn DRY-RUN planner (in kế-hoạch + người duyệt) thay auto-move — vì move = đụng memory canonical (D6/D9, không tự-ghi).
PHẦN B — Derived-doc TRỎ canonical, KHÔNG copy (🔴 FUNCTION-FLOOR)
- B1 — derived TRỎ canonical: tài-liệu-dẫn-xuất (
CLAUDE.mdroot/docs,skills/*/SKILL.md,agents/README) KHÔNG copy volatile-token (mig#·test#·gotcha#·table#·bundle-hash·model) — TRỎdocs/STATUS.md(canonical). Lý-do: một-chỗ-đổi-N-chỗ-drift = nguồn drift #1 (chứng-minh sống: root CLAUDE.md kẹt mig 53 qua S70-S74). - B2 — giữ readability: dữ-kiện-ổn-định (tech-stack, module-table, convention) GIỮ inline đọc-được; CHỈ pointer cái HAY-đổi (tránh pointer-soup). Exemplar sẵn:
docs/PROJECT-MAP.md(0 count-token, 241 dòng). - B3 — freshness-DETECT:
governance-detectors.ps1(detector C2) grep volatile-token derived vs canonical → FLAG lệch (KHÔNG tự sửa). - B4 — fix GATED qua người: FLAG → em-main xem diff → ghi (single-writer). KHÔNG đường tự-ghi-thẳng. (Mechanized backstop: git-diff commit-gate + run-folder TRACKED.)
PHẦN C — 3 bộ dò grep tất-định (🔴 FUNCTION-FLOOR MANDATE)
Tất cả ở scripts/governance-detectors.ps1 — NO-API (grep/measure only), DÒ+NÊU-CỜ-only (không tự sửa). Chạy @session-start (D1) báo cờ.
- C1 broken-pointer — grep ref nội-bộ (gotcha #N > max ·
[[wikilink]]target thiếu) → FLAG dangling. - C2 derived-staleness (= B3) — count-token derived vs STATUS canonical (+ cross-check disk: mig =
ls Migrations/*.csexcl Designer/Snapshot; gotcha = max### N.trong gotchas.md) → FLAG mismatch + 'canonical-itself-stale' nếu STATUS lệch disk. - C3 vocab-fork — alias-set (seed:
wave-folder↔run-trace,Dự trù PRO↔Ngân sách PRO,two-tier↔all-inherit) → FLAG khi ≥2 biến-thể cùng sống. - C4 self-line exclusion 🔴 — detector loại path tự-mô-tả (
governance-detectors.ps1,harness-11-engine.md,broadcasts/**,runs/**) TRƯỚC khi FLAG → 0 self-match. - C5 resolve-condition 🔴 — mỗi FLAG kèm
resolve: <điều-kiện-gỡ-cờ>. 2-strike anti-repeat = convention em-main áp (detector stateless per-run; KHÔNG over-claim mechanized-2-strike cho detector).
PHẦN D — Engine điều-phối (🔴 FUNCTION-FLOOR)
D.1 — Bảng-nhịp 4-lớp (SE-present, cadence-file)
- D1 session-start = DÒ+BÁO —
session-start.md §2.1.1monitor RE-REPORT + §2.1.2 budget-audit + chạygovernance-detectors.ps1báo cờ (KHÔNG sửa). INFORM-only. - D2 session-end = BẢO-TRÌ+archive —
session-end.md §L(byte-gate A + harvest-GATE 5-trục + gác-cờ chưa xử-lý). - D3 per-turn = chắt-lọc-APPEND — harvest-LIỀN sau mỗi fan-out (
ultra-on.mdP3, C4 primary), qua em-main. - D4 threshold = workflow-gate — chạm hệ-trọng → bắt qua Workflow (
hmw.js:76checkpoint THROW = mechanized tripwire). run-id = bằng-chứng.
D.2 — Tách-an-toàn 3-tầng (🔴 NHÃN-HOÁ EXPLICIT — đây là chuẩn-hoá H11)
🧪 Phép-thử-ranh-giới tất-định: hỏi "thao-tác này có git-diff vô-hại-ngữ-nghĩa không?" → CÓ = tầng AUTO; chạm prose/luật/con-trỏ/thẩm-quyền/copy = tầng DÒ+FLAG. KHÔNG tin nhãn "máy-móc thôi mà" — xét git-diff THẬT.
| Tầng | Cái gì | Đường-đi |
|---|---|---|
| D5 — AUTO (semantic-null) | dồn-archive ADDITIVE (byte-0-loss) · dựng-lại _INDEX · APPEND-chắt-lọc gist · đo-byte |
tự-động OK (có A7 NO-API gate bảo-chứng) |
| D6 — DÒ + NÊU-CỜ | mọi thứ chạm prose/luật/con-trỏ-mục/thẩm-quyền/copy-chéo (3 detector C + monitor H1/H2) | chỉ FLAG → em-main soạn bản sửa (KHÔNG nhánh tự-ghi) |
| D7 — OWNER-APPROVE | đổi-luật · đổi-thẩm-quyền · ghi-lan derived · đổi-tên-khái-niệm · nâng-guard chính-thức | anh (project-owner) duyệt trước hiệu-lực |
D.3 — Bốn chốt chống-tự-hỏng
- D8 khoá-chiều 1-CHIỀU 🔴 (codify mới H11) — DÒ chỉ đi canonical → derived (bắt derived cũ). TUYỆT-ĐỐI KHÔNG lấy giá-trị từ derived ghi ngược canonical. (Vd: detector đọc STATUS so root CLAUDE.md; KHÔNG bao giờ đọc root CLAUDE.md ghi vào STATUS.)
- D9 chỉ-APPEND single-writer 🔑 BAR-KHÔNG-HẠ — mọi ghi-bộ-nhớ = APPEND qua em-main; KHÔNG sub tự ghi đè memory-chính/luật. Mechanized:
store_memorystrip mọi sub (runtime S48 0/8) + hmw.js SCHEMA return-delta-only. - D10 ghi qua file-tool only — Write/Edit, KHÔNG shell-append (tránh mojibake/$-expansion = gotcha #61). hmw.js:111 cấm Bash-write MD. (convention — Bash residual chưa block cứng.)
- D11 archive = MOVE-không-XOÁ — byte 0-loss (md5sum/grep-Fxf artifact
_ledger.md:14).
CAVEAT (trung-thực — đọc trước khi tự nhận "đã tự-bảo-trì")
- No-OS-hook: detector + gate chạy TRONG thân session-start/end body do em-main kích — KHÔNG fully-autonomous. Đúng mức: DÒ tự-động + toàn-diện; SỬA + GÁC dựa người-chủ-trì.
- Auto-WRITE luật/copy = MỐI-NGUY #1, CỐ Ý CHƯA LÀM — defer tới ≥2 sự-cố thật mà thủ-công thất-bại (hiện 0). Chọn nhánh chỉ-DÒ-NÊU-CỜ cho mọi thứ chạm luật/copy (1-sửa-sai → N-chỗ-sai + phá hash broadcast đóng-băng).
- Single-writer bar-không-hạ — cám-dỗ "để nó tự sửa cho nhanh" phải dừng trước chốt D9.
- Detector = LƯỚI giảm-sót, KHÔNG khoá-cứng — bắt @đầu/đóng-phiên (theo nhịp); giữa 2 nhịp có khoảng-mù. Phòng-thủ-nhiều-lớp, không bảo-đảm tuyệt-đối.
- Nấc dogfood: A2/A3/D4/D9/D11 = SE runtime-mechanized SẴN (H11 = chuẩn-hoá). C1-C3 + B3 + memory-archive-gate = MỚI build S75. D5-D8 + B1 = nhãn-hoá/codify cái ngầm-có. Phân-định 'detector viết-thành-lệnh' (executed-file) ≠ 'đã chạy-quan-sát' (runtime).