Files
solution-erp/docs/governance/vocab-alias-map.md
pqhuy1987 881783c335 [CLAUDE] Docs: S96 monthly drift audit + FD memory distill + mega-line re-tier
Monthly drift audit (2026-07-01, cron ngày 1) — workflow-prepared (wf_2d687d27-175, 4 clusters draft→adversarial-verify), em-main single-writer applied:
- ef-core-migration/SKILL.md: latest-mig 56→59 + append table rows 57/58/59 + Mig 14 + Phase-7 Budget annotate DROPPED Mig 50 (S61)
- skills/README.md: ef-core row Mig 55→59/S87 + gotcha cite #69→#76 (5 latest, authoritative gotchas.md headings)
- docs/CLAUDE.md: Budget module marked REMOVED Mig 50 — §1 item 6 + roadmap Phase 7/8 rows (strike-through, non-destructive)
- docs/governance/vocab-alias-map.md (NEW): 3 vocab-forks documented (run-trace / Ngân sách PRO / all-inherit canonical) + governance-detectors.ps1 $ExcludeExact entry (anti self-match)
- re-tier STATUS/HANDOFF mega-line 5→3 blurbs (S92/S91 → archive verbatim, conservation delta=0, BOM preserved) + hoist 3 UAT-carry items to blockers

FD memory distill (H17 loop strike-1 → CLEARED, GAPS: none):
- frontend-designer L1 26129B→21492B: 5 old Activity war-stories → archive/2026-06.md + _INDEX + gist; Lessons value-protect distilled to L1
- budget.json measured.frontend-designer refreshed

Detector 27→25 (2 real drift cleared; remaining = documented false-positives module-local/never-built-defer). AS-10 residual reviewer sub-write reverted (git-diff backstop, E-006 recurrence — guard HELD).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 13:04:15 +07:00

7.3 KiB

Vocab Alias-Map — Bản đồ Thuật ngữ Tương đương

Mục đích: Đây là nguồn duy nhất (single source) ghi lại các cặp thuật ngữ ĐỒNG NGHĨA trong SOLUTION_ERP — một khái niệm nhưng đang tồn tại dưới hai cái tên (canonical hiện hành ↔ alias lịch sử đã bị thay thế). Tài liệu phục vụ đợt kiểm tra trôi-nghĩa (drift audit) hằng tháng: khi detector scripts/governance-detectors.ps1 (kiểm tra C3 — vocab-fork) phát cờ báo "hai biến thể cùng sống side-by-side", người rà soát mở file này để tra ngay đâu là từ chuẩn, đâu là từ cũ, và lý do đổi tên.

Chủ sở hữu ghi (single-writer): em-main. Tài liệu append-only — chỉ thêm dòng mới khi phát sinh cặp thuật ngữ mới, KHÔNG viết lại các mục cũ. Sub-agent chỉ đọc, không được sửa (tuân thủ nguyên tắc D9 single-writer).

Phạm vi: Chỉ ghi các cặp thật sự là MỘT khái niệm hai tên (fork-để-hợp-nhất). KHÔNG ghi các từ trùng-mặt-chữ nhưng khác nghĩa (ví dụ "memory-fidelity", "coverage", "audit") — những từ đó đã được phân biệt bằng ngữ cảnh trong harness-11-engine.md PHẦN H/I và cố ý KHÔNG seed vào detector.


⚠️ Lưu ý nền tảng — vì sao alias vẫn còn xuất hiện đầy trong repo

Phần lớn số lần alias xuất hiện là hợp lệ theo lịch sử — KHÔNG phải drift cần sửa. Các file dưới đây ĐÓNG BĂNG (frozen), tuyệt đối không viết lại:

  • docs/changelog/sessions/** — nhật ký từng session (ghi lại đúng từ ngữ tại thời điểm đó).
  • docs/_archive/** — snapshot STATUS/HANDOFF đã archive verbatim.
  • docs/governance/adap-reports/** — báo cáo adoption đã chốt.
  • .claude/workflows/runs/** — vết chạy workflow (run-trace), git-tracked bất biến.
  • broadcasts/inbox|outbox/** — thư liên-team đã gửi.

Một session-log viết "two-tier" hồi S60 là đúng sự thật lịch sử — nó phản ánh mô hình còn hiệu lực khi đó. Không được sửa ngược quá khứ. Do vậy alias sẽ mãi mãi còn tồn tại trong các file đóng băng, và detector C3 (quét TOÀN BỘ docs/** + .claude/** *.md, KHÔNG loại trừ file frozen) sẽ vẫn tiếp tục báo cờ MED cho mỗi cặp — đây là trạng thái documented-known, không phải lỗi tồn đọng. Việc "làm sạch" chỉ áp dụng cho các file đang-sống (live-editable): docs/STATUS.md, docs/HANDOFF.md, các SKILL.md, agent-memory/**/MEMORY.md (bản HOT, không phải archive), và các doc governance đang bảo trì.


Bảng thuật ngữ tương đương

1. run-trace (chuẩn) ↔ wave-folder (alias cũ)

Thuộc tính Giá trị
Canonical (hiện hành) run-trace — thư mục cô lập bộ nhớ mỗi lần chạy workflow tại .claude/workflows/runs/<id>/
Alias (đã thay thế) wave-folder / wave-* — tên cũ của cùng thư mục cô lập đó
Đổi tên bởi Harness-10 (Session 72, 2026-06-18) — đổi cấu trúc wave-* sang mô hình run-trace phẳng (sub-*.md + *-synthesis.md) git-tracked
Ghi chú frozen Session-log/adap-report/runs cũ giữ nguyên "wave-folder" — đúng lịch sử, không sửa

2. Ngân sách PRO (chuẩn) ↔ Dự trù PRO (alias cũ)

Thuộc tính Giá trị
Canonical (hiện hành) Ngân sách PRO — nhãn cột/badge PRO trong ma trận ngân sách PE (module PurchaseEvaluation)
Alias (đã thay thế) Dự trù PRO — nhãn cũ trước khi anh Kiệt (FDC) yêu cầu đổi
Đổi tên bởi Session 65 (2026-06-16) — anh Kiệt Zalo: "Dự trù PRO → Ngân sách PRO"; áp dụng row + badge trên cả 2 app (fe-admin + fe-user), SHA256-mirror
Ghi chú kỹ thuật Field BE gốc PeWorkItemBudget.ProInitialAmount ("Ban hành lần đầu") + ProAdjustmentAmount; nhánh ProEstimateAmount cũ đánh dấu LEGACY (Mig 56 migrate → ProInitialAmount). Còn 1 comment mã nguồn stale ở PurchaseEvaluationDtos.cs:324 ("badge dự trù PRO") — chỉ là comment, KHÔNG phải nhãn FE đang render; có thể dọn khi tiện, không bắt buộc
Ghi chú frozen Session-log S65 và bản archive giữ "Dự trù PRO" — đúng lịch sử
Lưu ý mở rộng PeWorkItemBudget là tên ENTITY (khái niệm khác — bảng ngân-sách-per-gói-thầu), KHÔNG phải alias của nhãn PRO. "PRO" = Procurement (phòng Mua hàng), không phải viết tắt khác

3. all-inherit (chuẩn) ↔ two-tier (alias cũ)

Thuộc tính Giá trị
Canonical (hiện hành) all-inherit — mọi sub-agent kế thừa model lead (chất-lượng > chi-phí), cấu hình qua frontmatter + hmw.js resolveModel
Alias (đã thay thế) two-tier — mô hình cũ 2 tầng (lead promote-inherit vài agent / demote-pin số còn lại về Opus)
Đổi tên bởi Harness-8 (Session 66, 2026-06-16) — thay mô hình two-tier model-promotion bằng all-inherit
Ghi chú frozen Các adap-report Harness-4/5 và session-log ≤ S66 giữ "two-tier" — đúng lịch sử tại thời điểm đó

Quy trình cập nhật (khi thêm cặp mới)

  1. Chỉ append 1 mục ### N. mới bên dưới, KHÔNG sửa mục cũ.
  2. Ghi đủ 4 trường: canonical · alias · đổi-tên-bởi (Harness/Session) · ghi-chú-frozen.
  3. Nếu muốn detector nhận-biết cặp mới, seed vào $aliasSets trong scripts/governance-detectors.ps1 (C3). Lưu ý: detector CHỈ grep, KHÔNG đọc file này — xem mục dưới.

Về việc detector có "im" sau khi tạo file này không

KHÔNG. Detector C3 (scripts/governance-detectors.ps1) là pure-grep: $aliasSets được hard-code trong script (dòng ~350-354), và C3 báo cờ mỗi khi ≥2 biến thể của một set còn sống trong corpus. Nó KHÔNG đọc bất kỳ alias-map file nào. Vì các file frozen (mãi mãi chứa alias) nằm trong phạm vi quét, cờ MED cho cả 3 cặp sẽ vẫn còn — nay chuyển trạng thái thành documented-known (đã có tài liệu giải thích tại đây), không còn là drift lạ.

Câu "resolve: … or record an alias-map in docs/governance" trong output detector là gợi ý cho con người, KHÔNG phải hook tự-động. Muốn detector THẬT-SỰ ngừng báo cặp nào, phải sửa $aliasSets (bỏ set đó) — nhưng làm vậy sẽ mất khả năng phát hiện fork tương lai, nên không khuyến nghị.

Cảnh báo self-match: File vocab-alias-map.md này tự thân chứa cả 6 thuật ngữ ở dạng live → nếu KHÔNG loại trừ, nó sẽ tự-đóng-góp thêm 1 file live cho MỖI biến thể và khiến detector đếm sai. Cần thêm đường dẫn docs/governance/vocab-alias-map.md vào $ExcludeExact trong governance-detectors.ps1 (đặt cạnh harness-11-engine.md đã được loại trừ sẵn) để tài liệu này không tự-match. Đây là bước bắt buộc khi commit file.