[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>
This commit is contained in:
pqhuy1987
2026-07-01 13:04:15 +07:00
parent 353f81a318
commit 881783c335
13 changed files with 154 additions and 20 deletions

View File

@ -10,7 +10,7 @@
3. Tự gen mã HĐ theo Quy định SOL-CCM-RG-001
4. Dashboard báo cáo HĐ theo NCC, dự án, trạng thái, giá trị
5. **Module Duyệt NCC (Phase 6-8)** — phiếu trình duyệt so sánh giá tiền-HĐ, 2 quy trình A/B versioned admin-config, kế thừa HĐ 1-click khi DaDuyet, Ý kiến 4 phòng ban sign-off
6. **Module Ngân sách (Phase 7-8)** — 4 bảng quản lý ngân sách dự án, workflow simple 3-step, integration link với Contract & PE + cột "So với ngân sách" PE matrix
6. ~~**Module Ngân sách (Phase 7-8)** — 4 bảng quản lý ngân sách dự án, workflow simple 3-step, integration link với Contract & PE + cột "So với ngân sách" PE matrix~~ ⚠️ **REMOVED Mig 50 (S61)** — module Budget cũ (4 bảng Budgets/BudgetDetails/BudgetApprovals/BudgetChangelogs) XÓA, thay bằng **ngân sách per-gói-thầu `PeWorkItemBudgets`** (1 record/cặp Dự án × Hạng mục, nhập theo role PRO/CCM); FE pages/types/menu `Bg_*` gỡ hết.
7. **Test gate (Phase 8)** — xUnit Domain policy + Infra code generator, CI fail-fast no deploy
## 2. Kiến trúc tổng thể
@ -120,8 +120,8 @@ SOLUTION_ERP/
| **5 Production** | CI/CD Gitea Actions + 3 IIS site + Let's Encrypt + Security headers + Users CRUD | ✅ Done |
| **Tier 3** | Versioned WF + 3-panel layout + 4-bảng + 4 catalogs + 16 demo users + Brand identity | ✅ Done |
| **6 Module Duyệt NCC** | PE iter 1 (skeleton) + iter 2 (UX polish) + Domain rebrand `.solutions.com.vn` | ✅ Done |
| **7 Budget BE + 14 Solutions users** | Migration 14 — 4 bảng Budget + workflow simple + 11 endpoint + 14 user thật | ✅ Done (Session 4) |
| **8 Budget FE + PE feature complete + Tests** | FE Budget 3-panel + PE/HD-Budget integration + PE Workflow Designer + Ý kiến 4 PB (mig 15) + Tests Phase 1-2 (71 test) + CI gate | ✅ Done (Session 5) |
| **7 Budget BE + 14 Solutions users** | Migration 14 — 4 bảng Budget + workflow simple + 11 endpoint + 14 user thật ⚠️ Budget bị **REMOVED Mig 50 (S61)**`PeWorkItemBudgets` | ✅ Done (Session 4) |
| **8 Budget FE + PE feature complete + Tests** | FE Budget 3-panel + PE/HD-Budget integration + PE Workflow Designer + Ý kiến 4 PB (mig 15) + Tests Phase 1-2 (71 test) + CI gate ⚠️ FE Budget (pages/types/menu `Bg_*`) **REMOVED S61** cùng Mig 50 | ✅ Done (Session 5) |
| **9 UAT + Ops + carry over** | UAT thật + SMTP + Rotate creds + SQL backup + Export PDF (pending) + Tests Phase 3-5 | 📝 Active (Session 6) |
| **10+ Post-launch** | E-signature, Bravo/SAP, Mobile, AI OCR | 📝 Future |

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,72 @@
# 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.