Files
solution-erp/docs/governance/harness-11-engine.md
pqhuy1987 e70c0462d7 [CLAUDE] Docs: adopt Harness-11 engine tự-bảo-trì (3-workflow audit→implement→review)
- 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>
2026-06-18 20:44:26 +07:00

9.2 KiB
Raw Blame History

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 (inbox broadcasts/inbox/ai_infra/). Áp qua 2 workflow (IMPLEMENT wf_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-endmemory-archive-gate.ps1 đo byte mỗi agent-memory/<sub>/MEMORY.md vs cap. (Trigger = session-end.md §L.b convention người-kích — engine no-OS-hook.)
  • A2 additive MOVE — bản-cũ-nhất → archive/<YYYY-MM>.md, NEVER overwrite (runtime-proven h910-curate: +N -0 byte-exact).
  • A3 _INDEX pointer-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). [param archive_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 _INDEX grep-đị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.md root/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/*.cs excl 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ÁOsession-start.md §2.1.1 monitor RE-REPORT + §2.1.2 budget-audit + chạy governance-detectors.ps1 báo cờ (KHÔNG sửa). INFORM-only.
  • D2 session-end = BẢO-TRÌ+archivesession-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.md P3, C4 primary), qua em-main.
  • D4 threshold = workflow-gate — chạm hệ-trọng → bắt qua Workflow (hmw.js:76 checkpoint 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_memory strip 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).