From 33d519eda0cf3541c66920280d7d5838697fdd97 Mon Sep 17 00:00:00 2001 From: pqhuy1987 Date: Sat, 20 Jun 2026 10:53:23 +0700 Subject: [PATCH] =?UTF-8?q?[CLAUDE]=20Docs:=20adopt=20User-Mark=20(H-12/13?= =?UTF-8?q?=20canonical=20=C2=A7P)=20+=20Harness-14=20+=20RC-signature=20(?= =?UTF-8?q?S79)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Áp canonical §P đầy-đủ (P1-P10) khi anh gõ /user-mark-active-high "áp đầy-đủ chính-xác nhất theo AI_INFRA". 0 production code. - 4 lệnh /user-mark-{active-high,active,medium,disable} (DACI report-before-stamp) - ledger .claude/governance/ACTIVE-MARKS.md (4 cấp Active-High/Active/Medium/Disable + display-filter) + 3 mark Active-High stamped anh-confirm (RC-pqhuy1987-20-06-2026-10-29-09/10/11 = objective-criteria/User-Mark/time-age) - harness-11-engine.md §E (P1-P10) + §F (Harness-14 3-mức maturity honest) - rules.md §6.6 objective-criteria (KHÔNG quy-mô-đội / KHÔNG thời-gian-tuổi) - session-start §2.1.4 + session-end §L.b(h) mark-display - 4 Workflow: invest wf_82337f7f-95c + review wf_a7cbe93e-912 + align-re-review wf_9d3beebb-a95 (§P 10/10) + H14-review wf_4d4eba6f-8a0 (§F 6/6) - completeness-gate H-6→H-13 ĐẠT (H-8 11/11 inherit no-[1m]) - 3 adap-report + email ai_infra (7b8615b3) + check-email STAGE 2 State THẬT GIỮ NGUYÊN: Mig 57 · 88 bảng · 354 test · gotcha 71 · bundle CsJetgZH/BVS0ApIm. Restart CLI để activate 4 lệnh + session-cmd (no hot-reload). Co-Authored-By: Claude Opus 4.8 --- .../investigator-codebase/MEMORY.md | 4 + .claude/agents/README.md | 1 + .claude/commands/session-end.md | 3 +- .claude/commands/session-start.md | 8 ++ .claude/commands/user-mark-active-high.md | 21 +++++ .claude/commands/user-mark-active.md | 21 +++++ .claude/commands/user-mark-disable.md | 20 +++++ .claude/commands/user-mark-medium.md | 21 +++++ .claude/governance/ACTIVE-MARKS.md | 26 ++++++ broadcasts/_index.md | 3 + ...06-19-ai_infra-to-se-harness-all-notify.md | 27 ++++++ ...-ai_infra-to-se-harness-14-adopt-notify.md | 28 +++++++ ...-ai_infra-harness-12-13-14-adopt-report.md | 51 +++++++++++ docs/HANDOFF.md | 2 +- docs/STATUS.md | 7 +- ...26-06-20-S79-user-mark-harness-14-adopt.md | 45 ++++++++++ ...cture-decision-rationality-rc-signature.md | 38 +++++++++ ...026-06-19-Governance-harness-all-update.md | 47 +++++++++++ .../2026-06-20-Governance-harness-14.md | 45 ++++++++++ docs/governance/harness-11-engine.md | 84 ++++++++++++++++++- docs/rules.md | 23 +++++ 21 files changed, 519 insertions(+), 6 deletions(-) create mode 100644 .claude/commands/user-mark-active-high.md create mode 100644 .claude/commands/user-mark-active.md create mode 100644 .claude/commands/user-mark-disable.md create mode 100644 .claude/commands/user-mark-medium.md create mode 100644 .claude/governance/ACTIVE-MARKS.md create mode 100644 broadcasts/inbox/ai_infra/2026-06-19-ai_infra-to-se-harness-all-notify.md create mode 100644 broadcasts/inbox/ai_infra/2026-06-20-ai_infra-to-se-harness-14-adopt-notify.md create mode 100644 broadcasts/outbox/ai_infra/2026-06-20-se-to-ai_infra-harness-12-13-14-adopt-report.md create mode 100644 docs/changelog/sessions/2026-06-20-S79-user-mark-harness-14-adopt.md create mode 100644 docs/governance/adap-reports/2026-06-19-Governance-architecture-decision-rationality-rc-signature.md create mode 100644 docs/governance/adap-reports/2026-06-19-Governance-harness-all-update.md create mode 100644 docs/governance/adap-reports/2026-06-20-Governance-harness-14.md diff --git a/.claude/agent-memory/investigator-codebase/MEMORY.md b/.claude/agent-memory/investigator-codebase/MEMORY.md index 82d9b36..ff87cd9 100644 --- a/.claude/agent-memory/investigator-codebase/MEMORY.md +++ b/.claude/agent-memory/investigator-codebase/MEMORY.md @@ -70,10 +70,14 @@ Bearer từ `POST api.solutions.com.vn/api/auth/login` → status matrix expecte ## 📅 Recent activity (FIFO — older → archive/git) +- **2026-06-20 (governance-landing map for RC-sig + User-Mark H12/13 + objective-criteria, on-disk):** ⭐ **WHERE-to-land 3 AI_INFRA gov broadcasts.** Key files: `docs/governance/harness-11-engine.md` = CANONICAL engine (PHẦN A/B/C/D + CAVEAT; line5 "doc khác TRỎ về đây KHÔNG copy luật"; D5/D6/D7/D8 safety-tier line62-72; D7 OWNER-APPROVE line69; D9 single-writer line73; D10 "Bash residual chưa block cứng" line74; CAVEAT no-OS-hook line80). `error-ledger.md` = §L.a action-sig table AS-1..AS-13 + §L.b 7-step + Active-Guards 2-strike; **3-ledger triad** README.md:6 (error/comms/summary by FUNCTION). adap-report FORMAT = `adap-reports/YYYY-MM-DD-.md` frontmatter(id/from/applied_by/nac/project_fit/source_content_sha256)+VERDICT/Nấc-table/Tailoring/Honest-caveats/Reverse-findings/Evidence(run-id) — richest template = `2026-06-18-Governance-harness-11.md`. rules.md §6=Docs/gov-discipline (§6.4 audit-cadence/§6.5 consolidate-KEEP-vs-CUT) → objective-criteria → NEW §6.6. session-start §2.1.3 (line83-88 H11-detector) = EXACT precedent for per-session gov-surface → mark-list-display START = NEW §2.1.4. session-end §L.b(c) (line48 archive-gate+sleep) → mark-list END. **RECs:** RC-sig+4-tier → NEW section in engine.md (REUSE file, after PHẦN D); decision-mark ledger → **NEW `docs/governance/decision-marks.md`** sibling error-ledger (forward-registry ≠ reactive-RCA). **CONFLICT: report-before-stamp ⊂ D7 already** (owner-approve exists) — extend D7 not duplicate (else C3 vocab-fork). 2-channel enforce already empirical: E-006/AS-10 + CAVEAT "hook fails-open, permission-config strip = real gate". Tag `[gov-landing-map, rc-sig, user-mark-h12-13, decision-marks-new-file, report-before-stamp-subset-d7, objective-criteria-rules-6-6]`. + - **2026-06-19 (S76 P2+P3 — budget-edit-role BADGE insert-point map, designer+fe-user-flow, on-disk):** ⭐ **Display-only "✎ NS PRO/CCM" badge per approver — BE change = SMALL both DTOs.** **(A) Designer fe-admin `ApprovalWorkflowsV2Page.tsx`:** read-only render `DefinitionCard:446-454` (level group → approver `{approverUserName}` + `({approverEmail})`); DTO `LevelDto:37-54` (approverUserId/userName/email + 7 Allow* flag, **NO role/dept field**). Feed = `GetAwAdminOverview` (`/approval-workflows-v2`). **Insert badge → `:447-452`** cạnh `approverUserName`. **(B) fe-user `PeDetailTabs.tsx`:** approvalFlow render `LevelOpinionsSectionV2:588` (signed-only) — но live flow tree = `currentApproval.approvers` :131 + Panel3 separate. `PeApprovalFlow` DTO `purchaseEvaluation.ts` + BE `PurchaseEvaluationApprovalLevelApproverDto` (`PurchaseEvaluationDtos.cs:129-132` = UserId/FullName/Email, **NO role**). **(C) Role-resolve for LIST userId:** codebase uses `userManager.GetRolesAsync(u)` (per-user, N+1 risk) OR `GetUsersInRoleAsync(role)` (reverse, `PeUrgentFeatures.cs:74`). `IApplicationDbContext` exposes `DbSet Roles` :29 but **NO UserRoles join-table DbSet** → efficient batch = either (a) `userManager.GetUsersInRoleAsync(Procurement/CostControl)`→2 HashSet, mark approver if id∈set (NO N+1, 2 queries total); or (b) add `DbSet>` to interface for join. **BE build site `PurchaseEvaluationFeatures.cs:964-972`** already batches `approverInfos` via `userManager.Users.Where(Contains(allApproverIds))` — extend SELECT or post-join 2 role-sets here; handler has both `db`+`userManager` :750-751. **(D) Change size = SMALL:** +2 bool field (canEditProBudget/canEditCcmBudget) per approver DTO + 2 GetUsersInRoleAsync calls. Designer side: `GetAwAdminOverview` query needs same 2-set lookup (admin-only, cheap). Gate semantics ALREADY proven `:800-801` (canEditPro=Admin||Procurement, canEditCcm=Admin||CostControl). **(E) REC:** minimal = compute 2 HashSet once (proFans/ccmFans via GetUsersInRoleAsync), pass into approver-DTO map both sites; badge = pure display `id∈proFans→"✎ NS PRO"` `id∈ccmFans→"✎ NS CCM"`. RISK low (display-only, no authz touch) — only watch: a user can hold BOTH roles → show both badges; Admin holds neither role explicitly unless seeded → may need OR Admin note. Tag `[s76, budget-role-badge, designer+pe-flow, getusersinrole-batch-no-n1, approver-dto-add-2bool, display-only]`. - **2026-06-19 (PE Block-A budget editable-gate audit — submission-count lock NEXISTS, on-disk):** ⭐ **Gate = PURE ROLE, KHÔNG phase, KHÔNG số-lần-trình.** BE `PurchaseEvaluationFeatures.cs:800-801` `canEditPro=isAdmin||Procurement` · `canEditCcm=isAdmin||CostControl` (DTO arg :856). Handler `PeWorkItemBudgetFeatures.cs`: PRO `:86-91` CCM `:152-157` fail-closed ForbiddenException role-only TRƯỚC side-effect; comment `:18-20` ghi RÕ "KHÔNG ràng Phase (bảng NS = tài-liệu-sống chỉnh bất-kỳ-lúc-nào như Excel)". Validator chỉ `>=0` (Initial :136, Adjustment cho-ÂM :138), absolute-set null=clear. **FE `PeDetailTabs.tsx:1060 PeBudgetSummaryTable`:** ô "Ban hành lần đầu" :1173 + ô "hiệu chỉnh V0" :1188 dùng **CÙNG biến `bs.canEditCcm`** — ZERO phân-biệt 2 ô, ZERO lock-after-first. `drafterEditable:1066`=`!readOnly&&isEditablePhase` chỉ áp row3/row8 (drafter NS-kỳ-này), KHÔNG áp Block-A. **(b) submission-count lock = KHÔNG TỒN TẠI:** grep `submitCount|lanTrinh|firstSubmit|lockInitial|hasSubmitted|soLanTrinh` toàn `src/Backend`=0 + FE=0. Entity `PeWorkItemBudget.cs` 6 field plain, KHÔNG cờ `IsInitialLocked`/`SubmitCount`; record per-cặp(Project×WorkItem) share mọi phiếu KHÔNG track lần-trình. **Kết luận: yêu-cầu chị Trà/anh Kiệt (khóa Initial sau lần-trình-đầu, mở Adjustment) = FEATURE MỚI — cần field track first-submit-done + TÁCH gate 2 ô (Initial vs Adjustment), HIỆN cùng `canEditCcm` không tách được.** Tag `[pe-block-a-gate, role-only-no-phase, submission-count-lock-NEXISTS, initial-vs-adjustment-same-gate, fdc-feature-new]`. +- **2026-06-20 (Harness-14 Eval/Budget/Outcome adoption-readiness audit, on-disk):** ⭐ H-14 rule = time/age/recency-decay KHÔNG được làm căn-cứ cắt feature (cùng họ lỗi team-size). **(1) BUDGET ALIGNED:** `memory-budget.json` grep decay|recency|retention|age|TTL|expire=**0 hit**. Params = `autoinject_cap 25600`/`soft_cap 30720` (L1) · `archive_gate{low_watermark_ratio 0.85, keep_floor_entries 5, strike_threshold 2}`. `keep_floor=5` = **newest-entry-protection** (gate-script `:144` `entryCount - keepFloor` drains OLDEST keeps newest N — KHÔNG age-window). Cap = **seed-by-MEASURE** (`_note:2` "SEEDED BY MEASUREMENT NOT imagined headroom" + `scripts/measure-agent-memory.ps1` real-bytes), bump-not-cut khi curate drops markers. Hysteresis drain-to-BELOW-low-water (`gate:33`). ✅ fully H-14-aligned, zero forbidden knob. **(2) BASELINE-DRIFT ALIGNED:** `governance-detectors.ps1` staleness = **CANONICAL-ANCHOR vs docs/STATUS.md** (`Get-StatusValue:133` parse `| label | **N** |`) + **disk cross-check** (`:164-194` mig=count .cs · gotcha=max `### N.` anchor; flag if canonical-itself-stale) — ZERO age-window. `memory-archive-gate.ps1` over-cap = byte-MEASURE+2-strike-hysteresis (`:106 bytes>cap`), A7 = substring-pointer-resolve. Neither uses time. **(3) EVAL = GENUINE (not a gap!):** SE HAS RAG golden-set harness — `eval/golden-set-solution_erp.jsonl` (14 q: 11 pos + 3 neg) + `eval/evaluator.md` (Spec-A strict recall@5 gate 0.7, rerank≥0.7) + `eval/trial-state-lock.json` (baseline recall@5=1.0, chunk-drift 5% threshold) + `eval/runs/*.json`. BUT: weekly-Friday manual (`evaluator.md:88`), no scripts/ automation, RAG re-index AI_INFRA-owned. Honest nuance: harness EXISTS (richer than expected) but NOT auto-run. **(4) OUTCOME PARTIAL:** anti-downgrade rule EXISTS as Harness-8 "all-inherit, chất-lượng-trên-chi-phí, 'nhanh'=parallelism KHÔNG hạ-model" (`agents/README.md:12` + adap-report `2026-06-16-...harness-8:18,42,65`). BUT phrased as model-tier policy, NOT a generic "downgrade-to-save-tokens=forbidden" rule; `docs/rules.md` has NO such rule (grep 0). em-main must author H-14-specific knobs only if wanting explicit "age≠cut-basis" doctrine — mechanisms already structurally compliant. Tag `[harness-14, budget-no-decay-knob, canonical-anchor-not-age, eval-genuine-richer, anti-downgrade-h8-partial]`. + - **2026-06-18 (PE price-model recon FDC "Giá chào thầu" PRO-Min/Max + CCM-proposed, on-disk):** ⭐ **"Giá chào thầu" mục c = DERIVED, KHÔNG stored column** = `WinnerQuoteTotal` = SUM(Quote.ThanhTien WHERE supplierRows==SelectedSupplierId). Computed 3 nơi đồng-predicate: submit-guard `PurchaseEvaluationWorkflowService.cs:188-192` · detail-GET `PurchaseEvaluationFeatures.cs:818-826`(→`CurrentProposalTotal`) · CEO-threshold `:833`. DTO `WinnerQuoteTotal` `PurchaseEvaluationDtos.cs:244`. **ALL money fields:** Quote(NCC) `BgVat/ChuaVat/ThanhTien` decimal non-null `PurchaseEvaluationQuote.cs:12-14` · PE-header `BudgetPeriodAmount`(row3 drafter)/`ExpectedRemainingAmount`(row8) decimal? `PurchaseEvaluation.cs:40-41` · PeWorkItemBudget(per cặp Project×WorkItem) PRO `ProEstimateAmount:27` + CCM `InitialAmount`/`AdjustmentAmount`(ÂM-OK) `:29-30` decimal? · Detail dự-toán `KhoiLuong/DonGia/ThanhTienNganSach` `PurchaseEvaluationDetail.cs:15-18`. **PRO-min/max + CCM-proposed = KHÔNG tồn-tại** (grep Min|Max|Proposed|Suggest|BidPrice|GiaChaoThau PE-entities=0) → field MỚI. **Role-gate mirror-được (`PeWorkItemBudgetFeatures.cs`):** 2 cmd tách `UpdatePeBudgetProCommand:61`+`UpdatePeBudgetCcmCommand:126`; handler fail-closed `ForbiddenException` TRƯỚC side-effect — PRO `:86-91`(`Admin||Procurement`) CCM `:150-155`(`Admin||CostControl`); capability-flag BE-computed `canEditPro/canEditCcm` `PurchaseEvaluationFeatures.cs:783-784`→DTO `PeBudgetSummaryDto:290-291`; auto-create race-safe `PeWorkItemBudgetEnsurer.EnsureTrackedAsync:34`; KHÔNG ràng Phase. NO AutoMapper (DTO project tay). **FE (fe-user `src/`; fe-admin PeDetailTabs.tsx = SHA-identical `diff -q`):** mục-c `components/pe/PeDetailTabs.tsx:1406-1417`(helper `computeGiaChaoThau` def:71 call:1393) · budget-table `PeBudgetSummaryTable:1062-`(rows:1110-1128, host `ChonNccSection:1383`) · giá-gói+CEO-threshold `:311-313` · create `PeWorkspaceCreateView.tsx` · header `PeHeaderForm.tsx`. FE type `types/purchaseEvaluation.ts` `PeBudgetSummary:292-307`+`winnerQuoteTotal:445`. ⚠️ fe-admin types DIFFER (sync cả 2). **Surprise:** PRO-Min/Max-chốt + CCM-proposed = semantic MỚI (giá-người-duyệt ≠ giá-NCC-báo); gắn PeWorkItemBudget(per-cặp role-gate-sẵn) vs column-PE(per-phiếu) = em-main quyết. Mig 53 CeoApprovalThreshold+cờ-gấp đã có khung CEO-duyệt-theo-ngưỡng. Tag `[pe-price-model, gia-chao-thau-derived, pro-minmax-ccm-proposed-NEW, role-gate-mirror, fdc]`. - **2026-06-18 (S71 PART-C audit — run-trace vs checklist-v2 FLAT + detector-refine, on-disk):** ⭐ **2 GAP THẬT (trung-thực, không inflate):** (1) **C1/C2/C8 = SUBFOLDER, canonical-v2 = FLAT → migration NEEDED, chưa làm.** `find runs/` cho thấy MỖI run-folder có `sub-md/`+`harvest/` SUBDIR (5 run: h10-{invest,implement,review}+h910-{finalize,curate}) — đúng cấu-trúc CŨ broadcast-delta phát-bỏ. ZERO flat-awareness: grep `phẳng|flat|cùng cấp` trong `.claude/workflows/`+`.claude/commands/`=0 hit. SE-adoption-commit `8c47bd0`(06-18) TRƯỚC broadcast-flat cùng-ngày → SE chưa biết. README/hmw.js/session-end đều mô-tả subfolder. C8 dual-form-acceptance close-gate cũng chưa. (2) **REFINE(b) detector = MISSING HOÀN-TOÀN.** `find .claude -name *.js/*.ps1`=CHỈ `hmw.js`(=engine ≠ detector). `.claude/hooks`+`.claude/scripts` KHÔNG tồn-tại. Repo-wide grep `bypass|scan.*runs` script=0. SE KHÔNG có bộ-dò chống-lách-engine → 3-function (whitelist/path-variants/launch-key-anchor)+relation-acceptance = n-a. **MET (đừng nhạ oan):** C3 committed THẬT — `git check-ignore runs`=exit1(NOT-ignored)+`git ls-files runs`=22 file (cả hai nấc). C4 per-turn real (`invest-synthesis.md` 43-dòng). C5 3-layer wired: L1 README:51(convention em-main) · L2 `session-start.md:71` orphan-scan `runs/*/` closed=⏳+harvest-rỗng · L3 `session-end.md:51` close-gate idempotent 5-trục. C6 ledger 2-beat (`_ledger.md:7`, 5 run đều CLOSE-beat+wf_). C7 caveat present (README §69-73 no-overclaim/fragile/G-015 TRACKED≠enforced). ⚠️ sub-md/ chỉ `.gitkeep` (read-only sub→em-main scribe, design KHÔNG phải miss). Tag `[s71, part-c-audit, subfolder-not-flat, detector-MISSING, c3-committed-real]`. diff --git a/.claude/agents/README.md b/.claude/agents/README.md index a26c47b..8693a6f 100644 --- a/.claude/agents/README.md +++ b/.claude/agents/README.md @@ -13,6 +13,7 @@ > **Upgrade S70 (2026-06-17 — Harness-9 L2-recovery + adap 2-workflow adopt):** **(1) PROCESS-mandate 🔴 BẮT BUỘC (PART 2/3, áp MỌI adap từ nay):** mỗi adap 1 Harness = **2 workflow tách biệt** (IMPLEMENT + REVIEW double-check RIÊNG) + REPORT về AI_INFRA kèm **run-id** bằng chứng; task ngắn-nhưng-cần-confirm VẪN phải review-workflow. Codify `.claude/commands/adap-apply.md`. **(2) L2 dark-matter recovery (PART 1, tailored):** archive `agent-memory//archive/*.md` KHÔNG vào RAG → build `archive/_INDEX.md` (mục-lục 1-dòng/bản-ghi + con-trỏ **substring** sha-keyed, fallback Ctrl-F, KHÔNG line-hint) + `.gist.md` (nén 4-field ADDITIVE, `distill-gen` counter, verbatim FROZEN) + `memory-budget.json` (seed-by-measure qua `scripts/measure-agent-memory.ps1`) + budget-audit @session-start (§2.1.2) + `.ragignore` guard. Rollout S70 (đầy-đủ-nhất, stage investigate→implement→audit qua 3 Workflow run-id): 4 over-cap sub (cicd-monitor · investigator-codebase · reviewer · implementer-backend). adap-report `2026-06-17-Governance-harness-9-l2-recovery-and-adap-workflow.md`. > **Upgrade S72 (2026-06-18 — Harness-10 flat-refine + checklist-v2 adopt):** run-trace SUBFOLDER→**FLAT** (file phẳng cùng cấp: `sub--.md` raw + `-synthesis.md` verified, KHÔNG `sub-md/`/`harvest/` subdir) — `hmw.js` (`:103` subMd path) + `workflows/README` + `runs/README` + session-start/end + decision-tree (dòng dưới) repoint. **C8 migration:** 5 run cũ S71 GIỮ subfolder (đừng rewrite history); close-gate dual-accept cả hai dạng. **+`/sleep-recovery-memory-l2`** (đóng A8 — port §J2-tailored SE-only: sleep-compress L2 gist additive, INFORM-only ≥7d). **Anti-bypass detector (refine b): TAILORED-OUT** — SE dùng Anthropic Workflow tool (no CLI-launcher bypass-surface), containment = git-diff + run-folder TRACKED + ledger orphan-scan (G-015). 3 run-id bằng-chứng: audit `wf_13868efb-ea7` · implement `wf_ac43b5ff-7d1` · review (pending). adap-report `2026-06-18-Governance-harness-10-flat-refine-checklist-v2.md` (pending). > **Upgrade S75 (2026-06-18 — Harness-11 engine bộ-nhớ-và-governance TỰ-BẢO-TRÌ adopt):** engine tự-DÒ toàn-diện (luôn tươi báo cờ) + AUTO chỉ semantic-null git-diff + **single-writer bar-KHÔNG-hạ (D9)** + đổi-luật owner-approve (D7). 🔑 Canonical → [`docs/governance/harness-11-engine.md`](../../docs/governance/harness-11-engine.md) (**KHÔNG copy luật ở đây — B1 dogfood**). Artifact MỚI: `scripts/governance-detectors.ps1` (C1 broken-pointer + C2/B3 staleness + C3 vocab-fork + C4 self-exclusion, NO-API DÒ+FLAG-only, **runtime-proven** bắt drift root CLAUDE.md mig53→55 + 0 self-match; số flag động → run-trace) + `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`. 3-tier D5(AUTO)/D6(DÒ+FLAG)/D7(owner-approve) + one-direction-lock D8 (canonical→derived) codify ở engine-doc. Cadence wired: D1 session-start §2.1.3 (chạy detector) · D2 session-end §L.b(c) (archive-gate). Áp qua workflow: audit `wf_7fdc3bd5-930` + implement `wf_c5e5844e-7c1` + review `wf_d7ca1ff8-942` + double-check `wf_a0b68d2f-30e`. adap-report `docs/governance/adap-reports/2026-06-18-Governance-harness-11.md`. +> **Upgrade S79 (2026-06-20 — User-Mark H-12/13 canonical §P + Harness-14 Eval/Budget/Outcome adopt):** áp **canonical §P đầy-đủ** (P1-P10) khi anh gõ `/user-mark-active-high` "áp đầy-đủ chính-xác nhất theo AI_INFRA". Artifact: **4 lệnh** `.claude/commands/user-mark-{active-high,active,medium,disable}.md` (DACI report-before-stamp) + ledger `.claude/governance/ACTIVE-MARKS.md` (4 cấp Active-High/Active/Medium/Disable + display-filter) + `harness-11-engine.md §E` (cơ-chế P1-P10) **+§F** (Harness-14 3-mức maturity) + `rules.md §6.6` (objective-criteria: KHÔNG quy-mô-đội / KHÔNG thời-gian-tuổi) + session-start §2.1.4 / session-end §L.b(h) mark-display. **3 mark Active-High stamped** anh-confirm S79 (`RC-pqhuy1987-20-06-2026-10-29-09/10/11`). completeness-gate H-6→H-13 ĐẠT (H-8 11/11 inherit no-`[1m]`). 4 workflow: invest `wf_82337f7f-95c` + review `wf_a7cbe93e-912` + align-re-review `wf_9d3beebb-a95` + H14-review `wf_4d4eba6f-8a0`. ⚠️ restart CLI (lệnh/session no hot-reload). adap-report 3× (`…rc-signature` + `…harness-all-update` + `2026-06-20-Governance-harness-14`). --- diff --git a/.claude/commands/session-end.md b/.claude/commands/session-end.md index 553fbe8..d120aea 100644 --- a/.claude/commands/session-end.md +++ b/.claude/commands/session-end.md @@ -42,7 +42,7 @@ Em main PHẢI echo **TOÀN BỘ nội dung command body này** (đầy đủ Ph **§L.a — Deterministic detect (scan action-signature, KHÔNG để AI tự-phán):** quét session theo bảng **AS-1..AS-9** trong error-ledger. Mỗi hit → 1 RCA entry blameless (5-why + fix + guard). **Bug-production = lỗi KÉP → 2 fix** (vá code **VÀ** vá guard/eval-case). List AS mở — gặp class mới thì thêm. -**§L.b — 7-step auto-maintain (đủ 7, KHÔNG skip — thiếu = ledger thối). (d)(f) = H2 harvest-curator · (g) = H1 tooling-auditor (2026-06-07 Harness 1):** +**§L.b — 8-step auto-maintain (đủ 8, KHÔNG skip — thiếu = ledger thối). (d)(f) = H2 harvest-curator · (g) = H1 tooling-auditor (2026-06-07 Harness 1) · (h) = User-Mark H-12/13 (S79):** - **(a) summary-index** += 1 dòng/session vào `STATUS.md` Recently Done (pointer, KHÔNG full-log). - **(b) Active-Guards** (error-ledger): promote guard **2-strike** (episodic→procedural) · mark `verified` nếu held qua session · retire theo **net-effect** (hại>lợi → gỡ). - **(c) chore-flag:** agent L1 >~30KB → archive L2 · error-ledger open-entry quá ngưỡng · **0-byte memory check (AS-8)** · **🌙 sleep-check (Harness-10b, S72):** `last_sleep_at` null hoặc ≥7d (`memory-budget.json`) → INFORM gợi-ý `/sleep-recovery-memory-l2` (KHÔNG auto-run) · **🗜️ Harness-11 A/D2 (S75):** chạy `powershell.exe -ExecutionPolicy Bypass -File scripts/memory-archive-gate.ps1` (DRY-RUN) → đề-xuất dồn-archive sub over-cap (A4 hysteresis 0.85 + A5 keep-floor 5 + A6 2-strike) + A7 NO-API L1-eval (pointer-resolve + byte-0-loss). Engine → [`docs/governance/harness-11-engine.md`](../../docs/governance/harness-11-engine.md). DRY-RUN báo kế-hoạch; MOVE thật do em-main (D5 AUTO semantic-null sau khi xem). @@ -50,6 +50,7 @@ Em main PHẢI echo **TOÀN BỘ nội dung command body này** (đầy đủ Ph - **(e) pending-request audit:** request anh CHƯA-thực-thi đã log SPECIFICS chưa (KHÔNG placeholder). - **(f) 🌾 harvest-integrity GATE (⬜ harvest-curator H2 — 5-trục, Harness 1+2):** verify spawn-record (d) đủ+đúng mọi sub TRƯỚC khi đóng — **Coverage** (0 silent-miss) · **Completeness** (đủ 4-field) · **Placement** (delta đúng `agent-memory/X`) · **Corruption** (moved-not-cut, no-mojibake/shell-baked) · **Fidelity-FLAG** (nghi bịa/on-behalf → escalate 🟥 reviewer, KHÔNG tự phán). + **🌊 close-gate C5 Layer3 (Harness-10, thay B5 wave-gom):** với MỌI `runs//` của session → **VERIFY per-turn harvest đã xong** (em-main đã viết `runs//-synthesis.md` phẳng h10-refine — run cũ S71: `harvest/*.md` — NGAY sau mỗi fan-out turn = C4 Layer1) + `_ledger.md` mọi run đã CLOSE-beat (closed≠⏳). 🔴 **IDEMPOTENT — close-gate chỉ VERIFY, KHÔNG re-APPEND** (per-turn đã APPEND rồi → re-APPEND = DUPLICATE-HARVEST). 5-trục GATE giữ làm **backstop**. GATE = run còn `*-synthesis.md` vắng (run cũ S71: `harvest/` rỗng — C8 dual-accept) HOẶC chưa đủ 5-trục thì CHƯA đóng. - **(g) 🔌 tooling-freshness CHỐT (🟫 tooling-auditor H1 — Harness 1):** spawn → chốt 4-mặt (skill·sub-role·plugin·docs) đổi gì session này + **new-alloc audit** (skill/plugin MỚI chưa phân-bổ → đề-xuất gán em main + sub phù-hợp vai) + flag doc-drift/roster-lệch/count-stale. Propose → em main APPEND/sửa doc (single-writer). 🔴 G-015: 2 monitor = propose-only, em main VERIFY trước APPEND (Bash residual → KHÔNG "read-only enforced"). +- **(h) 🔏 User-Mark CHỐT cuối phiên (H-12/13 canonical §P/P7, S79 — `harness-11-engine.md §E`):** đọc [`.claude/governance/ACTIVE-MARKS.md`](../governance/ACTIVE-MARKS.md) → (i) **hiển-thị** status-filtered (Active-High/Active hiện · Medium tóm-tắt · Disable ẩn) cho anh đọc lại (đối-xứng `session-start §2.1.4`); (ii) nếu session này có **quyết-định cấp-governance MỚI** (scope-check P6: đổi CANONICAL §-rule/authority) → chạy `/user-mark-` DACI: adjust-gov → double-check → **report-trước-đóng-dấu 3-7 tiêu-chí khách-quan (P4)** → anh confirm → stamp `RC-pqhuy1987-dd-mm-yyyy-hh-mm-ss`; (iii) supersede/disable mark cũ (P5) → con-trỏ-xuôi + Active-High cần anh-confirm RIÊNG. 🔴 **KHÔNG tự đóng dấu / đổi cấp trước khi báo (P4/P8).** 0 quyết-định-mới → "n-a, chỉ hiển-thị". ## Phase 2 — WRITE (update MD/RAG) diff --git a/.claude/commands/session-start.md b/.claude/commands/session-start.md index 8bf0f20..7194c93 100644 --- a/.claude/commands/session-start.md +++ b/.claude/commands/session-start.md @@ -87,6 +87,14 @@ Em main xác nhận **lead model resolve được** đầu session. Lead SE = ** - Chạy `powershell.exe -ExecutionPolicy Bypass -File scripts/governance-detectors.ps1` → báo cờ: **C1** con-trỏ-gãy (gotcha#/wikilink) · **C2/B3** derived-doc stale vs `docs/STATUS.md` canonical (mig#/test#/gotcha#/table#) · **C3** vocab-fork (1-khái-niệm-nhiều-tên). NO-API, **DÒ+NÊU-CỜ-only KHÔNG tự sửa** (D6 tầng). Cờ → em-main soạn bản sửa (gated B4). - Nấc: detector = LƯỚI giảm-sót (khoảng-mù giữa 2 nhịp), count-token soft-net có false-pos (sev LOW khi |lệch|<10) → đọc cờ bằng phán-đoán, KHÔNG auto-fix. **Light/hỏi-đáp session → có thể skip; governance/doc-heavy session → nên chạy.** +### 2.1.4 User-Mark display — hiển-thị sổ-cái mark ĐẦU phiên (H-12/13 canonical §P/P7, S79) + +> Floor User-Mark (🔴 P7 `harness-11-engine.md §E.4`): danh-sách quyết-định-mark hiển-thị đầu + cuối mỗi phiên cho anh đọc lại. Canonical sổ-cái → [`.claude/governance/ACTIVE-MARKS.md`](../governance/ACTIVE-MARKS.md). INFORM-only. + +- Đọc `.claude/governance/ACTIVE-MARKS.md` → **báo status-filtered (P7):** 🔴 **Active-High** + 🟢 **Active** HIỆN rõ (ID + what gọn) · 🟡 **Medium** tóm-tắt (1 dòng đếm) · 📦 **Disable/superseded** ẨN. Mục-đích: anh thấy lại các LỆNH governance đã ký ("vì quan-trọng"). +- Mark cấp Active-High = LỆNH (P3 binding); vi-phạm → `error-ledger.md §L.a` RCA (P9). KHÔNG tự đóng dấu / đổi cấp (P4/P8 — chờ anh confirm). +- **Light/hỏi-đáp session → có thể skip; governance session → nên chạy.** + ### 2.2 Skill registry (6 skill) - Liệt kê: `contract-workflow` · `form-engine` · `permission-matrix` · `dependency-audit-erp` · `ef-core-migration` · `iis-deploy-runbook` - Dùng skill khi task khớp (KHÔNG tự suy luận lại). Phân bổ per agent: xem README skill matrix. diff --git a/.claude/commands/user-mark-active-high.md b/.claude/commands/user-mark-active-high.md new file mode 100644 index 0000000..d3b6750 --- /dev/null +++ b/.claude/commands/user-mark-active-high.md @@ -0,0 +1,21 @@ +--- +description: User-Mark cấp Active-High (bắt-buộc phải làm; vi-phạm → error-ledger §L.a RCA) — DACI report-before-stamp (canonical §P/H-12). Adopt S79. +argument-hint: +--- + +# /user-mark-active-high — neo quyết-định governance cấp CAO NHẤT + +> Chữ-ký quyết-định **GOVERNANCE** cấp **Active-High** (canonical §P, cơ-chế → [`docs/governance/harness-11-engine.md §E`](../../docs/governance/harness-11-engine.md)). Cặp: `/user-mark-active` · `/user-mark-medium` · `/user-mark-disable`. Ledger = `.claude/governance/ACTIVE-MARKS.md`. + +**Quyết-định anh nêu:** $ARGUMENTS + +## Quy trình (§P/H-12 DACI — report-before-stamp, P4) — em-main thực-thi: + +1. **Scope-check (P6):** quyết-định trên có đổi CANONICAL §-rule (rules.md / harness-11-engine / authority-routing) không? **KHÔNG** → đây là work-flow/task, **KHÔNG mark** → dừng + báo anh. +2. **Adjust-Gov (P4):** soạn thay-đổi governance tương-ứng — **em-main single-writer (engine D9)**, KHÔNG fan-out memory/governance. +3. **Double-check (P4):** quét `harness-11-engine.md §A-§E` + `error-ledger.md` Active-Guards + `ACTIVE-MARKS.md` tìm mâu-thuẫn (cross-harness contradiction · vocab-fork C3). +4. **🔴 BÁO-CÁO anh TRƯỚC khi stamp (P4):** trình brief gồm `{thay-đổi · 3–7 tiêu-chí KHÁCH-QUAN (điểm-đau/khối-lượng/chất-lượng — rules §6.6, KHÔNG cảm-tính/quy-mô-đội/thời-gian-tuổi) · §-target · supersedes? · mâu-thuẫn-nếu-có}`. **CHỜ anh confirm. KHÔNG stamp trước báo-cáo.** +5. **Stamp (anh confirm):** tạo `RC-pqhuy1987-dd-mm-yyyy-hh-mm-ss` (timestamp lúc anh sign-off, lấy `date +'%d-%m-%Y-%H-%M-%S'`) → ghi `ACTIVE-MARKS.md` mục 🔴 Active-High + áp §-change vào canonical (rules.md/engine). +6. **Lifecycle (P5):** supersede mark cũ → `supersedes:` con-trỏ-xuôi 1-chiều + cập-nhật status mark-cũ. 🔴 supersede mark **Active-High** cũ = anh-confirm RIÊNG (KHÔNG auto-downgrade). + +**Nghĩa cấp (H-13 deterministic):** Active-High = **bắt-buộc phải làm; vi-phạm → error-ledger §L.a RCA** (behavioral→MD+RCA · tool-action→`.claude/settings*.json` permission-deny, KHÔNG hook vì hook fails-open — E-006/AS-10). Binding (P3): stamp = LỆNH. diff --git a/.claude/commands/user-mark-active.md b/.claude/commands/user-mark-active.md new file mode 100644 index 0000000..221acc9 --- /dev/null +++ b/.claude/commands/user-mark-active.md @@ -0,0 +1,21 @@ +--- +description: User-Mark cấp Active (follow + nhắc-lại xuyên-suốt) — DACI report-before-stamp (canonical §P/H-12). Adopt S79. +argument-hint: +--- + +# /user-mark-active — neo quyết-định governance cấp Active + +> Chữ-ký quyết-định **GOVERNANCE** cấp **Active** (canonical §P, cơ-chế → [`docs/governance/harness-11-engine.md §E`](../../docs/governance/harness-11-engine.md)). Cặp: `/user-mark-active-high` · `/user-mark-medium` · `/user-mark-disable`. Ledger = `.claude/governance/ACTIVE-MARKS.md`. + +**Quyết-định anh nêu:** $ARGUMENTS + +## Quy trình (§P/H-12 DACI — report-before-stamp, P4) — em-main thực-thi: + +1. **Scope-check (P6):** có đổi CANONICAL §-rule / authority-routing không? KHÔNG → work-flow, KHÔNG mark → dừng + báo anh. +2. **Adjust-Gov (P4):** soạn thay-đổi governance — em-main single-writer (engine D9). +3. **Double-check (P4):** quét `harness-11-engine.md §A-§E` + `error-ledger.md` + `ACTIVE-MARKS.md` tìm mâu-thuẫn. +4. **🔴 BÁO-CÁO anh TRƯỚC khi stamp (P4):** brief `{thay-đổi · 3–7 tiêu-chí KHÁCH-QUAN (rules §6.6) · §-target · supersedes?}`. CHỜ anh confirm. KHÔNG stamp trước. +5. **Stamp (anh confirm):** `RC-pqhuy1987-dd-mm-yyyy-hh-mm-ss` → ghi `ACTIVE-MARKS.md` mục 🟢 Active + áp §-change. +6. **Lifecycle (P5):** supersede mark cũ → `supersedes:` + cập-nhật status mark-cũ. + +**Nghĩa cấp (H-13 deterministic):** Active = **follow + nhắc-lại xuyên-suốt** (HIỆN @session-start §2.1.4 / session-end §L.b(h)). Nhẹ hơn Active-High (KHÔNG mandate RCA-tự-động), nhưng vẫn deterministic-follow. Binding (P3): stamp = LỆNH. diff --git a/.claude/commands/user-mark-disable.md b/.claude/commands/user-mark-disable.md new file mode 100644 index 0000000..998c5ae --- /dev/null +++ b/.claude/commands/user-mark-disable.md @@ -0,0 +1,20 @@ +--- +description: User-Mark-Disable — tắt/thu-hồi một mark đang active (reversible; canonical §P/H-12 P5 lifecycle). Adopt S79. +argument-hint: +--- + +# /user-mark-disable — tắt một User-Mark (reversible) + +> Thu-hồi/tắt một mark đang active trong `.claude/governance/ACTIVE-MARKS.md` (canonical §P/H-12 P5). **Reversible** (KHÔNG xóa audit-trail — chuyển status, giữ lịch-sử). Cơ-chế → [`docs/governance/harness-11-engine.md §E`](../../docs/governance/harness-11-engine.md). Cặp: `/user-mark-active-high` · `/user-mark-active` · `/user-mark-medium`. + +**Mark cần tắt:** $ARGUMENTS + +## Quy trình (§P/H-12 P5 lifecycle) — em-main thực-thi: + +1. **Locate:** tìm mark trong `ACTIVE-MARKS.md` khớp `$ARGUMENTS` (RC-id hoặc mô-tả). KHÔNG khớp / mơ-hồ → hỏi anh rõ mark nào. +2. **🔴 BÁO-CÁO anh TRƯỚC khi tắt:** trình `{mark · cấp hiện-tại · §-target · lý-do tắt · hệ-quả nếu §-rule đang dựa vào nó}`. CHỜ anh confirm. + - 🔴 Nếu mark là **Active-High** → BẮT BUỘC anh-confirm RIÊNG (cấp cao nhất, KHÔNG auto-disable — P5). +3. **Disable (anh confirm):** chuyển mark → mục 📦 SUPERSEDED/DISABLED (status `Disable`, giữ RC-id + nội-dung). Nếu mark đã codify §-rule → cân-nhắc revert/giữ §-rule (báo anh tách-bạch "tắt-mark ≠ revert-rule"). +4. **Reversible:** mark Disable có thể re-stamp lại sau (re-activate) — giữ nguyên audit-trail con-trỏ. + +**Nguyên-tắc (P5):** KHÔNG freeze-immutable — anh được đổi-ý/tắt qua re-stamp; git-history = audit-trail thật. Disable ≠ xóa (giữ để debate/trace sau). diff --git a/.claude/commands/user-mark-medium.md b/.claude/commands/user-mark-medium.md new file mode 100644 index 0000000..c0d5f3d --- /dev/null +++ b/.claude/commands/user-mark-medium.md @@ -0,0 +1,21 @@ +--- +description: User-Mark cấp Medium (neo quyết-định chưa-rõ; follow nhưng skippable) — DACI report-before-stamp (canonical §P/H-12). Adopt S79. +argument-hint: +--- + +# /user-mark-medium — neo quyết-định governance cấp Medium (chưa-rõ) + +> Chữ-ký quyết-định **GOVERNANCE** cấp **Medium** (canonical §P) — dùng khi anh muốn NEO MỐC một hướng chưa-chốt-hẳn (follow nhưng skippable). Cơ-chế → [`docs/governance/harness-11-engine.md §E`](../../docs/governance/harness-11-engine.md). Cặp: `/user-mark-active-high` · `/user-mark-active` · `/user-mark-disable`. Ledger = `.claude/governance/ACTIVE-MARKS.md`. + +**Quyết-định anh nêu:** $ARGUMENTS + +## Quy trình (§P/H-12 DACI — report-before-stamp, P4) — em-main thực-thi: + +1. **Scope-check (P6):** có đổi CANONICAL §-rule / authority-routing không? KHÔNG → work-flow, KHÔNG mark → dừng + báo anh. +2. **Adjust-Gov (P4):** soạn thay-đổi (nếu có) HOẶC chỉ neo-mốc-không-codify (Medium thường chưa-đổi-rule cứng) — em-main single-writer (engine D9). +3. **Double-check (P4):** quét `harness-11-engine.md §A-§E` + `error-ledger.md` + `ACTIVE-MARKS.md` tìm mâu-thuẫn. +4. **🔴 BÁO-CÁO anh TRƯỚC khi stamp (P4):** brief `{hướng-neo · 3–7 tiêu-chí KHÁCH-QUAN (rules §6.6) · §-target nếu có · cái-gì-chưa-rõ}`. CHỜ anh confirm. KHÔNG stamp trước. +5. **Stamp (anh confirm):** `RC-pqhuy1987-dd-mm-yyyy-hh-mm-ss` → ghi `ACTIVE-MARKS.md` mục 🟡 Medium + ghi rõ "chưa-rõ phần X". +6. **Lifecycle (P5):** khi anh chốt-rõ → re-stamp lên Active/Active-High (con-trỏ-xuôi `supersedes:`). + +**Nghĩa cấp (H-13 deterministic):** Medium = **neo quyết-định chưa-rõ; follow nhưng SKIPPABLE** (tóm-tắt @session display). KHÔNG mandate. Binding (P3): stamp = đã-neo (chưa phải lệnh-cứng như Active-High). diff --git a/.claude/governance/ACTIVE-MARKS.md b/.claude/governance/ACTIVE-MARKS.md new file mode 100644 index 0000000..b889056 --- /dev/null +++ b/.claude/governance/ACTIVE-MARKS.md @@ -0,0 +1,26 @@ +# ACTIVE-MARKS — User-Mark ledger (Harness-12/13 · canonical §P) — SOLUTION_ERP + +> **Chữ-ký quyết-định cấp GOVERNANCE** (rule/policy/architecture/harness — KHÔNG work-flow/task). Single-writer em-main (B3 VERIFY→APPEND). Cơ-chế đầy-đủ (§P P1-P10) → [`docs/governance/harness-11-engine.md §E`](../../docs/governance/harness-11-engine.md). Lệnh: `/user-mark-active-high` · `/user-mark-active` · `/user-mark-medium` · `/user-mark-disable`. +> 🔴 **SHOW @/session-start (§2.1.4) + @/session-end (§L.b(h))** status-filtered: 🔴 Active-High + 🟢 Active **HIỆN rõ** · 🟡 Medium **tóm-tắt** · 📦 Disable/superseded **ẨN** — anh đọc-lại 1 lần/đầu+cuối session ("vì quan-trọng"). +> **Binding (P3):** có stamp = **LỆNH** · không stamp = đang **BÀN**. **No-retrofit:** từ 2026-06-20 forward (KHÔNG truy-ngược quyết-định pre-S79). +> **Adopt S79 (2026-06-20)** — AI_INFRA broadcast User-Mark H-12/13 (`2026-06-19-Governance-harness-all-update` + `…rc-signature`) + canonical §P, áp `/user-mark-active-high` (anh-confirm). adap-report → `adap-reports/2026-06-19-Governance-harness-all-update.md`. + +## Schema (1 mark) +`{ id: RC-pqhuy1987-dd-mm-yyyy-hh-mm-ss · cấp · §-target SE (≙ AI_INFRA) · what · objective-criteria(3–7, rules §6.6) · supersedes? · status }` + +## 🔴 ACTIVE-HIGH (bắt-buộc phải làm; vi-phạm → error-ledger §L.a RCA — HIỆN @session) + +| ID (RC-signature) | §-target SE (≙ AI_INFRA) | What | objective-criteria (pain · volume · quality) | supersedes | Status | +|---|---|---|---|---|---| +| `RC-pqhuy1987-20-06-2026-10-29-09` | `rules.md §6.6` + `engine §E.4` (≙ §F4.2) | Quyết-định kiến-trúc/chức-năng = tiêu-chí KHÁCH-QUAN (điểm-đau · khối-lượng · chất-lượng) **KHÔNG quy-mô-đội**; "overkill/quá-mức-solo-dev/cảm-tính" = **BÁC**; thẩm-quyền cần-vs-thừa = AI_INFRA cross-project; AI = neo lý-tính | **pain:** lập-luận "quá mức solo-dev" đã khiến 1 dự-án từ-chối chức-năng chống-lách-engine (sự-cố thật) — SE = solo-dev, đúng đối-tượng · **volume:** 6 dự-án federated + SE 11-agent cần neo nhất-quán · **quality:** quyết-định-cảm-tính trôi chất-lượng âm-thầm; neo-lý-tính giữ rigor | null | 🔖 **Active-High** (anh-confirm S79 · P4 DACI report-before-stamp) | +| `RC-pqhuy1987-20-06-2026-10-29-10` | `engine §E` (≙ §P) | Codify **User-Mark + chữ-ký RC** (Harness-12/13) — chữ-ký quyết-định governance + 4 cấp + no-cảm-tính deterministic + report-before-stamp | **pain:** quyết-định governance bị quên / giảm-bằng-cảm-tính (không chữ-ký+tier) · **volume:** SE tích-lũy Harness 1-14 cần audit-trail nhất-quán · **quality:** RC-sig = minh-oan + tranh-luận-bằng-bằng-chứng + trách-nhiệm-2-chiều | null | 🔖 **Active-High** (anh-confirm S79 · P4 dogfood: invest-wf→review-wf→báo-cáo→confirm→stamp) | +| `RC-pqhuy1987-20-06-2026-10-29-11` | `rules.md §6.6 DM-time/age` (≙ §F4.2-ext / H-14) | **Mở-rộng mark-1** — time/age/recency-decay = **false-proxy** (cùng-họ team-size); kiến-trúc KHÔNG dựa cũ / lâu-chưa-dùng / auto-decay; trần budget=(dung-lượng÷tốc-độ-thay-mới) KHÔNG núm-decay-tuổi, drift=đường-nền-cuộn KHÔNG cửa-sổ-tuổi; **additive** (mark-1 GIỮ) | **pain:** cap∝chunk_count = Goodhart-vanity + age-window drift = alarm-spam (sự-cố thật H-14); SE memory-budget từng dễ mắc "giảm-theo-độ-cũ" · **volume:** 6 dự-án áp budget/drift/eval + SE L1/L2/L3 + archive-gate · **quality:** age-decay cắt memory-tốt = false-economy (DM-004 Goodhart §6.6) | null (additive) | 🔖 **Active-High** (anh-confirm S79 via `/user-mark-active-high` · P4 DACI · supersedes:null) | + +## 🟢 ACTIVE (follow + nhắc-lại xuyên-suốt — HIỆN @session) +_(trống)_ + +## 🟡 MEDIUM (neo chưa-rõ; follow nhưng skippable — tóm-tắt @session) +_(trống)_ + +## 📦 SUPERSEDED / DISABLED (ẨN khỏi session display — giữ audit-trail, KHÔNG xóa) +_(trống)_ diff --git a/broadcasts/_index.md b/broadcasts/_index.md index 137ce62..08e2b56 100644 --- a/broadcasts/_index.md +++ b/broadcasts/_index.md @@ -15,6 +15,8 @@ | 2026-06-09 | 2026-06-09-namgroup-to-se-ui-design-conventions | namgroup → se | processed | namgroup | 0140b81fb8a6 | ✓ | | 2026-06-11 | 2026-06-11-ai_infra-to-se-ui-ux-design-guide | ai_infra → se | processed | ai_infra | d353ee460dba | ✓ | | 2026-06-18 | 2026-06-18-ai_infra-to-se-harness-11-available | ai_infra → se | processed | ai_infra | b2a2fc1cf399 | ✓ | +| 2026-06-20 | 2026-06-19-ai_infra-to-se-harness-all-notify | ai_infra → se | processed | ai_infra | 50ec0b925157 | ✓ | +| 2026-06-20 | 2026-06-20-ai_infra-to-se-harness-14-adopt-notify | ai_infra → se | processed | ai_infra | 37ae1b19595a | ✓ | ## 📤 OUTBOUND (gửi — qua `/send-email `) | sent (ISO) | id | from → to | folder | sha256(12) | @@ -29,3 +31,4 @@ | 2026-06-18 | 2026-06-18-se-to-ai_infra-harness-9-10-checklist-adopted | se → ai_infra | outbox/ai_infra | e5f09d57c22e | | 2026-06-18 | 2026-06-18-se-to-ai_infra-harness-10-flat-refine-adopt-report | se → ai_infra | outbox/ai_infra | 5f511fe5c0f2 | | 2026-06-18 | 2026-06-18-se-to-ai_infra-harness-11-adopt-report | se → ai_infra | outbox/ai_infra | 2316773229f2 | +| 2026-06-20 | 2026-06-20-se-to-ai_infra-harness-12-13-14-adopt-report | se → ai_infra | outbox/ai_infra | 7b8615b3291e | diff --git a/broadcasts/inbox/ai_infra/2026-06-19-ai_infra-to-se-harness-all-notify.md b/broadcasts/inbox/ai_infra/2026-06-19-ai_infra-to-se-harness-all-notify.md new file mode 100644 index 0000000..ced6f52 --- /dev/null +++ b/broadcasts/inbox/ai_infra/2026-06-19-ai_infra-to-se-harness-all-notify.md @@ -0,0 +1,27 @@ +--- +id: 2026-06-19-ai_infra-to-se-harness-all-notify +from: ai_infra +to: se +category: Governance +type: notify +date: 2026-06-19 +content_sha256: 50ec0b9251575b1841a86948241a1541c7b60eca0c1091bb6b4a5d37168e54d8 +nac: sent +--- + +# [AI_INFRA → đội nhận] Thông-báo: broadcast Harness-all-update + checklist đã sẵn-sàng + +Kính gửi đội nhận, + +AI_INFRA vừa công-bố một broadcast hợp-nhất trong kênh chung (thư-mục `outbox/all`): **Harness-all-update**. Bản này làm hai việc. Một, công-bố một harness MỚI — **User-Mark (H-12/13)**: cách neo và cưỡng-chế quyết-định cấp governance bằng chữ-ký kèm thời-điểm ký-duyệt, bốn cấp hành-vi xác-định, quy-trình báo-cáo trước khi đóng dấu, và nguyên-tắc quyết-định theo tiêu-chí khách-quan (điểm-đau, khối-lượng, chất-lượng) thay vì cảm-tính. Hai, hợp-nhất toàn-bộ chuỗi Harness từ H-6 đến H-13 thành một kiến-trúc mạch-lạc. + +Đi kèm là một **checklist tự-verify** phủ cả tám harness, đặc-biệt nhấn hai harness trước-đây chưa từng có checklist riêng là H-7 (chất-lượng viết hướng-ngoại) và H-8 (toàn-đội ăn model cao-nhất) — trong đó H-8 dễ bị bỏ sót nhất. + +Đề-nghị bạn pull và áp qua kênh adap của mình, theo đúng quy-trình hai-workflow (làm → rà-soát tách-biệt → báo-cáo chuẩn). Hai tệp trong kênh chung: +- `2026-06-19-Governance-harness-all-update.md` (bản công-bố nền) +- `2026-06-19-Governance-checklist-harness-all.md` (checklist đi-kèm) + +Đây là thông-báo nhẹ trỏ tới hai broadcast đã qua cổng review; chi-tiết nằm trong hai tệp trên. + +Trân-trọng, +AI_INFRA diff --git a/broadcasts/inbox/ai_infra/2026-06-20-ai_infra-to-se-harness-14-adopt-notify.md b/broadcasts/inbox/ai_infra/2026-06-20-ai_infra-to-se-harness-14-adopt-notify.md new file mode 100644 index 0000000..2ee35b4 --- /dev/null +++ b/broadcasts/inbox/ai_infra/2026-06-20-ai_infra-to-se-harness-14-adopt-notify.md @@ -0,0 +1,28 @@ +--- +id: 2026-06-20-ai_infra-to-se-harness-14-adopt-notify +from: ai_infra +to: se +category: Governance +type: coord +date: 2026-06-20 +content_sha256: 37ae1b19595a6c4541a08f6f2c1d361b79d4eb3e03a0e7bf57de815eea28c381 +nac: sent +--- + +# Thông-báo: Harness-14 chuyển sang ÁP-DỤNG (adopt) + +Chào nhóm, + +Harness-14 (cơ-chế Eval / Budget / Outcome theo hướng "khối-lượng × chất-lượng") nay đã **xây-dựng xong** và chuyển từ trạng-thái kế-hoạch sang **áp-dụng**. Bản broadcast adopt đầy-đủ cùng checklist tự-rà-soát đã được công-bố ở kênh chung (`outbox/all/`): + +- `2026-06-20-Governance-harness-14-adopt.md` — bản adopt (giải-thích Harness-14 + trạng-thái độ-chín ba mức trung-thực + quy-tắc bắt-buộc + phương-pháp tùy-chỉnh). +- `2026-06-20-Governance-checklist-harness-14.md` — checklist tự-rà-soát đúng-nấc. + +**Phần BẮT BUỘC (🔴):** một quy-tắc governance mở-rộng — **thời-gian / tuổi-dự-án / suy-giảm-theo-độ-cũ (recency-decay) KHÔNG phải là căn-cứ hợp-lệ** để quyết-định hoặc cắt-giảm một chức-năng (sai cùng họ với "quy-mô-đội"). Căn-cứ hợp-lệ chỉ gồm ba trục khách-quan: điểm-đau + khối-lượng + chất-lượng. Quy-tắc cũ về quy-mô-đội vẫn giữ nguyên — đây là phần bổ-sung. + +Nhóm vui lòng **pull bản adopt qua quy-trình áp-dụng (`/adap-apply`)** và thực-hiện **theo quy-trình hai-bước (xây-dựng + rà-soát)**, sau đó **tự ký-duyệt** quy-tắc trong hệ governance của nhóm. Phần phương-pháp (eval-precision · định-cỡ budget · outcome) là tùy-chỉnh — hiểu nguyên-lý, áp tinh-thần, hình-thức tùy nhóm. + +Lưu-ý trung-thực: hiện chỉ phần eval-precision dùng được ngay; phần định-cỡ budget theo hit-rate và phần tương-quan outcome mới có công-cụ đo, **chưa đủ dữ-liệu để ra số** (cần tích-lũy nhiều tuần). Đừng trình các phần đó như đã hoàn-tất. + +Trân-trọng, +Bên phát (hạ-tầng AI dùng chung). diff --git a/broadcasts/outbox/ai_infra/2026-06-20-se-to-ai_infra-harness-12-13-14-adopt-report.md b/broadcasts/outbox/ai_infra/2026-06-20-se-to-ai_infra-harness-12-13-14-adopt-report.md new file mode 100644 index 0000000..d348426 --- /dev/null +++ b/broadcasts/outbox/ai_infra/2026-06-20-se-to-ai_infra-harness-12-13-14-adopt-report.md @@ -0,0 +1,51 @@ +--- +id: 2026-06-20-se-to-ai_infra-harness-12-13-14-adopt-report +from: se +to: ai_infra +category: Governance +type: adopt-report +date: 2026-06-20 +content_sha256: 7b8615b3291ea72fbc52b2f86d920709362d1954cdcab9e9acf8bb719fc938b2 +nac: sent +--- + +# [SOLUTION_ERP → AI_INFRA] Báo cáo áp dụng: User-Mark (H-12/13) + Harness-14 + chữ-ký RC + +Kính gửi AI_INFRA, + +SOLUTION_ERP (self = `se`) đã hoàn tất việc áp dụng ba broadcast governance mới trong phiên S79 (2026-06-20), theo đúng quy trình hai-workflow (thực thi + rà soát tách biệt) mà Harness-9 yêu cầu. Anh chủ dự án đã trực tiếp gõ lệnh `/user-mark-active-high` và chỉ thị "áp dụng đầy đủ và chính xác nhất theo hướng dẫn AI_INFRA"; vì vậy chúng tôi đã kéo nguyên bản canonical (`.claude/commands/user-mark-*.md` + `ACTIVE-MARKS.md` + `CANONICAL-RULES.md §P`) để áp đúng spec thật, thay cho bản phỏng theo ban đầu. + +## Ba broadcast đã áp dụng + +1. **`2026-06-19-Governance-architecture-decision-rationality-rc-signature`** — codify nguyên tắc quyết định bằng tiêu chí khách quan (điểm-đau + khối-lượng + chất-lượng, không quy-mô-đội) vào `rules.md §6.6`, cùng định dạng chữ ký `RC-pqhuy1987-dd-mm-yyyy-hh-mm-ss`. +2. **`2026-06-19-Governance-harness-all-update`** (User-Mark H-12/13) — áp đầy đủ §P (P1-P10) vào `harness-11-engine.md §E`, lập ledger `.claude/governance/ACTIVE-MARKS.md`, cài bốn lệnh `/user-mark-*`, và nối hiển thị mark vào đầu + cuối phiên. Đồng thời chạy completeness-gate H-6→H-13: **đạt**, cả tám harness sạch (H-8 soi kỹ: 11/11 sub `model: inherit`, không hề có hậu tố `[1m]` trong frontmatter). +3. **`2026-06-20-Governance-harness-14`** (Eval / Budget / Outcome) — codify quy tắc time/age = proxy sai vào `rules.md §6.6` + mark Active-High, và ghi `harness-11-engine.md §F` với trạng thái độ chín ba mức trung thực. + +Bản plan-announce `2026-06-19-…harness-all-update-v-2-0` chúng tôi ghi nhận là n-a (visibility-only, đã được bản adopt thay thế). + +## Bằng chứng (run-id) + +- INVESTIGATE `wf_82337f7f-95c` (bản đồ governance + completeness-gate H-6→H-13 đạt + audit budget). +- REVIEW Step-1 `wf_a7cbe93e-912` (floor 10/10 MET). +- RE-REVIEW sau canonical-align `wf_9d3beebb-a95` (§P P1-P10 fidelity PASS 10/10 + drift PASS). +- REVIEW Step-2 `wf_4d4eba6f-8a0` (§F floor 6/6 MET + maturity HONEST + SE-state ACCURATE). + +## Ba mark Active-High đã đóng dấu (anh xác nhận S79, report-before-stamp) + +`RC-pqhuy1987-20-06-2026-10-29-09` (objective-criteria) · `…-10-29-10` (User-Mark codify) · `…-10-29-11` (time/age extension). Cả ba neo theo nội dung của ba mark Active-High bên AI_INFRA, nhưng dùng dấu thời gian riêng của SOLUTION_ERP đúng nguyên tắc P1 forward-only (mỗi dự án ký tại thời điểm sign-off của mình, không mượn dấu bên phát). + +## Trạng thái trung thực + +- §E User-Mark phần lớn là **convention** (report-before-stamp, cưỡng chế hành vi, neo lý tính); chỉ phần hiển thị phiên và chặn tool ở permission-config là mechanized. Bốn lệnh và phần nối phiên ở mức **executed-file, verified-pending-restart** (file lệnh không nạp nóng giữa phiên — danh sách skill đã hot-register tên lệnh, nhưng cần khởi động lại CLI để chạy đầy đủ). +- Harness-14: chỉ eval-precision ở Mức 1 dùng được ngay (nhưng đang là thủ công hằng tuần, chưa thành CI); budget-theo-hit-rate và tương quan outcome ở Mức 2 (có công cụ đo nhưng chưa đủ dữ liệu — không trình như đã xong); trần nhiễu ngữ cảnh ở Mức 3 tạm gác. + +## Phát hiện riêng (đề xuất ngược) + +1. **Broadcast cô đọng so với canonical là spec thật.** Broadcast User-Mark mô tả bốn cấp theo chức năng, không đặt tên; spec dùng được nằm ở lệnh `/user-mark-*` + `ACTIVE-MARKS.md` + §P. Sister nào adopt chỉ từ broadcast sẽ ra hình thức khác (chính SOLUTION_ERP bản đầu đặt tên MUST/TRACK/ANCHOR/OFF rồi phải align lại). Đề xuất broadcast User-Mark trỏ thẳng tới command-files và §P để các dự án thống nhất tên cấp ngay từ đầu — vốn chính là giá trị nhất quán xuyên dự án mà nguyên tắc tiêu chí khách quan đề cao. +2. **SOLUTION_ERP đã tuân 2/3 cơ chế Harness-14 trước khi adopt** (budget không có núm giảm theo tuổi + phát hiện trôi neo đường-nền-cuộn), nhờ Harness-9 seed-by-measure và Harness-11 canonical-anchor đã ép đúng hướng. Nói cách khác, H-9 và H-11 là tiền đề cấu trúc của H-14; dự án nào đã chắc hai harness đó thì phần budget của H-14 gần như có sẵn. +3. **report-before-stamp (P4) là tập con của owner-approve sẵn có ở SOLUTION_ERP** (D7 trong engine). Chúng tôi map P4 thành phần vận hành hóa D7, không tạo luồng song song, nhờ vậy tránh được vocab-fork mà chính bộ dò C3 của SOLUTION_ERP sẽ gắn cờ. + +Không có thay đổi mã sản phẩm; trạng thái thật giữ nguyên (Mig 57 · 88 bảng · 354 test · 71 gotcha · bundle `CsJetgZH`/`BVS0ApIm`). + +Trân trọng, +SOLUTION_ERP (se) diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index 8a0f888..7d241c4 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -2,7 +2,7 @@ > **Tiering rule (S40):** giữ **2-3 session gần nhất**. Cũ hơn → `docs/changelog/sessions/`. Full brief history pre-S40 → `docs/_archive/HANDOFF-preS40-fullhistory.md`. -**Last updated:** 2026-06-19 (S78 — **PE: đính kèm file khi DUYỆT (UAT Tra Sol / 5 tester)** — người duyệt tải file lên ngay lúc Duyệt thay vì Trả lại phiếu. Reuse hệ attachment + enum `ApprovalAttachment=5` **MIGRATION-FREE** (int-stored, endpoint+authz có sẵn → approver upload được). FE 2 app SHA-identical: `PeWorkflowPanel` picker multi-file + upload-trước-chuyển-phase (file lỗi=không duyệt) + mục "📎 File đính kèm khi duyệt" + 2 filter fix loại purpose=5 khỏi "Bảng so sánh" (gotcha **#71** proxy-predicate pollution). commit `7886fd0` → **Run #330 PASS** (test 354, bundle admin `CsJetgZH`/user `BVS0ApIm`, NO migration, smoke 4×200). 3 lỗi em tự bắt review-trước-deploy (authz-verify · filter-pollution #71 · Dialog mirror-truncate fe-admin). em-main-led + self-gate (grep no-leak) + cicd-monitor verify. **🔴 NEXT (em):** curate L1 over-cap (carry 6 session) reviewer **45.2KB** + cicd 38.8KB + inv 35.7KB keep-floor-hit manual-condense (archive-gate A7 GATE PASS 186/186). **NEXT UAT:** mở phiếu chờ duyệt → Duyệt → "+ Chọn file đính kèm" → Xác nhận → file ở mục "📎 File đính kèm khi duyệt". Chi tiết → `2026-06-19-S78-pe-attach-file-on-approve.md`. · **Prev S77** — **PE UX batch: 10 deploy prod-verified #320→#329 (anh Kiệt FDC + Tra Sol + Bích Phượng UAT realtime, HMW-mode ON)** — cờ GẤP pill mọi danh sách+inbox · focus→revert list bám-trái · **Mig 57** ô ghi chú giá đề xuất PRO/CCM + số phân cách VND + chính tả "Bảng so sánh giá" + guard #70 · số âm đỏ-ngoặc · mục con thụt+gạch-đầu-dòng · cờ gấp **BẤT ĐỐI XỨNG** GẮN=NV/GỠ=Trưởng phòng(DeptManager) · tách chọn-phiếu(inline) khỏi mở-rộng(overlay)+nút "Xem mở rộng" · chuông báo người duyệt vào cấp họ · banner phiếu Trả-lại. Mig 56→**57** · test 344→**354** (+10) · bundle cuối admin `BqKD3Y23`/user `Cn-i349D` (Run #329). **3 lỗi em tự bắt review-TRƯỚC-deploy** (guard#70 stale-echo · luật asymmetric Tra Sol clarify giữa-chừng · double-mount Task H). FD process-death Task H → recover-disk. **🔴 NEXT (em):** curate L1 over-cap reviewer **45KB** + cicd 37.6KB + inv 35.6KB keep-floor-hit manual-condense (archive-gate A7 GATE PASS 186/186 integrity OK). **NEXT UAT:** cờ gấp (GỠ chỉ TP) · chuông báo người duyệt · banner Trả-lại · Xem mở rộng · ô ghi chú PRO/CCM. Chi tiết → `2026-06-19-S77-pe-ux-batch-10-deploy.md`. · **Prev S76** — **PE ngân sách MA TRẬN 3 cột (Dự án|PRO|CCM) + bảng lưới `` viền-ô + badge quyền-NS theo role** — anh Kiệt FDC + chị Trà Sol go-live. anh giao `/ultra-on` "step-by-step + workflow-review-per-step, hoàn chỉnh rồi deploy". **3 commit prod-verified:** `e33481e` (feature Run #318 — Mig 56 + ma-trận-3-cột + badge designer/flow `BhFDF9IJ`/`BAkuRl3C`) → `21d1f4e` (bảng lưới `
` theo phản hồi anh "chưa chia cột giống Excel", Run #319 **`jOqxW4-p`**/**`DbsznVvR`** smoke 3×200). Mig 56 +ProInitial/ProAdjust cột PRO (additive + data-migrate ProEstimate→ProInitial 4 rows prod). Part 1 mỗi phòng sửa cột mình (PRO canEditPro / CCM canEditCcm / Dự án FE-only). Part 2+3 badge "✎ NS PRO/CCM" cạnh approver (display-only suy-role) ở Designer + flow Duyệt NCC. Test 339→**344**. reviewer bắt **race mất-dữ-liệu** Part 1 → vá `useIsFetching` 2 app (gotcha #70). **🔴 NEXT (em):** curate L1 over-cap reviewer **45KB** + inv-codebase 35KB (keep-floor-hit → manual condense) + cicd 29KB + test-spec 28KB. **NEXT (anh/anh Kiệt):** UAT bảng lưới bằng PRO/CCM (Ctrl+F5). Chi tiết → `2026-06-19-S76-pe-budget-matrix-table-grid.md`. · **Prev S75 (2026-06-18)** — **Harness-11 adopt: engine bộ-nhớ-và-governance tự-bảo-trì + 2 double-check** — anh giao `/check-email AI_INFRA` + `/adap-apply` (mỗi stage workflow-review) + double-check ×2 + finalize report + push + session-end. em main + **5 Workflow** (audit `wf_7fdc3bd5-930` → implement `wf_c5e5844e-7c1` → review `wf_d7ca1ff8-942` → double-check `wf_a0b68d2f-30e` → checklist-verify `wf_39cd4cbe-f07`). **0 production code.** Built 2 NO-API detector-script (`governance-detectors.ps1` C1-C5+B3 runtime **26 flag** bắt drift thật, C4 0-self-match · `memory-archive-gate.ps1` PHẦN A hysteresis/keep-floor/2-strike/A7 186/186) + `docs/governance/harness-11-engine.md` canonical (3-tier D5/D6/D7 + one-direction-lock D8) + **B1 ×11 count→pointer** (drift mig53→55/test306→339/gotcha68→69/table93→88 RESOLVED) + cadence-wire D1/D2 + agents/README. **completeness-gate FORMAL ĐẠT** (B 4/4 + C 5/5 + D 11/11; D5/D6/D7 explicit + D8 codify=YES). gotcha #30 reinforced (box-glyph ├└─ KHÔNG vào .ps1, kể cả qua Edit). 3 commit `e70c046`+`ae957c4`+`aa09e99` pushed + adap-report + email ai_infra (`2316773229f2`). State GIỮ NGUYÊN Mig 55·88 bảng·339 test·gotcha 69·bundle `BYF5vIMJ`/`CB-tiRxd`. **🔴 NEXT (anh):** restart CLI (cadence §2.1.3/§L.b + ef-core skill); curate reviewer 38.8KB+inv 31.5KB+cicd 26.8KB over-cap. Chi tiết → `2026-06-18-S75-harness-11-adopt.md`. · **Prev S74** — **PE ô "Ghi chú từ CCM" ngân sách gói thầu (Mig 55)** — anh forward 2 luồng Zalo (Trà Sol + Kiệt FDC) "CCM giống PRO cho nhập + ghi chú, hiện 0 hết" → em-main BE+Mig55 ∥ implementer-frontend FE 2 app SHA-mirror ∥ test-specialist (chết rate-limit → recover-disk). 2 fork anh chốt: **thêm CcmNote (Mig 55)** + **GIỮ phân vai CCM** (CostControl/Admin). Entity +CcmNote mirror ProNote · UpdatePeBudgetCcmCommand +CcmNote absolute-set role-gate · DTO+controller+mapping · FE dòng "Ghi chú từ CCM" gate canEditCcm. Test 334→**339** (+5). commit `8655ebf` (cicd **Run #315 PASS** — bundle admin `BYF5vIMJ`/user `CB-tiRxd`, Mig 55 applied prod). **"0 hết không nhập" = tài khoản thiếu role CostControl (KHÔNG bug)** → UAT bằng CCM/Admin. **🔴 NEXT (anh/anh Kiệt):** UAT ô CCM bằng tài khoản CCM/Admin + carry "Ngưỡng giá CEO" Mig 54. Chi tiết → session log `2026-06-18-S74-pe-ccm-note.md`. · **Prev S73** — **Mig 54 PE giá đề xuất PRO/CCM + CEO chọn giá chốt + CCM duyệt-done ô-tích (anh Kiệt FDC, go-live thứ Hai 22/06)** — em main + 6 sub + 2 review-workflow, 2 commit prod-verified (`1d86abc` feature Run #313 + `6aa4dcb` FE empty-candidates fix). Mig 54 5-cột additive-nullable + 2 setter role-gate + ApproveV2 ③ AUTO→OPT-IN + ① bind giá chốt; FE 2 app SHA-mirror; test 306→334. **Workflow review:** R1 schema-force 1/4 lane → R2 free-text 2/3 PASS (rủi ro FE empty-candidates UNREACHABLE per submit-guard `:194`). Bài học: review fan-out free-text/hmw KHÔNG ép-schema. **Governance:** em lệch mandate auto-Workflow → cam kết báo-TRƯỚC-khi-lệch. **🔴 NEXT (anh/anh Kiệt):** cấu hình "Ngưỡng giá CEO" Designer + test 3 luồng + xác nhận CCM-trước-CEO. Chi tiết → session log `2026-06-18-S73-pe-gia-de-xuat-ccm-done.md`. · **Prev S72** — **Harness-10 flat-refine + checklist-v2 adopt (re-audit 3-workflow) + sleep NO-OP** — audit `wf_13868efb-ea7` → implement `wf_ac43b5ff-7d1` → review `wf_d482e10d-5dd` (Harness-9 B1+B2). SE BEHIND flat → migrate run-trace SUBFOLDER→FLAT (hmw.js:103 + 5 doc; 5 run cũ giữ subfolder C8) + 2 broadcast 06-18 adopt + `/sleep-recovery-memory-l2` port (A8) + detector TAILORED-OUT + hmw.js H4.5→H8 doc-drift. **REVIEW (B2) bắt 2 lỗi IMPLEMENT-self-assess sót** (hmw.js:52 schema-stale + auto-check overclaim) → fixed (auto-check WIRED thật). em-main containment-check tự bắt reviewer residual-write (raw-Workflow no-writeGuard) → revert. B3 self-correct (runs path/count 14→22). Sleep `all`=NO-OP. **0 prod code, state GIỮ NGUYÊN.** adap-report + email ai_infra (`5f511fe5c0f2`). **🔴 NEXT (anh):** restart CLI (FLAT-runtime hmw.js + wired sleep-check + sleep-recovery skill). **🔴 NEXT (em):** curate investigator-codebase L1 28973 OVER + watch FD/test-spec. Chi tiết → session log `2026-06-18-S72-harness-10-flat-refine.md`. **Prev S71 — Harness-10 adopt: tracked run-trace folder + checklist 9-10** — em main + 3 Workflow (invest `wf_9c2cd2cd-2e7` → implement `wf_e4e46725-231` → review `wf_636bc95b-939`) per mandate Harness-9 PART 2. **0 production code**. Migrate `.claude/workflows/wave-*/` gitignored → `runs//` **git-TRACKED** (run.md+sub-md/+harvest/) + `_ledger.md` 2-nhịp + 3-layer anti-miss (L1 em-main@P1 / L2 session-start orphan-scan / L3 session-end close-gate idempotent) + **containment shift** (Harness-2 B6 "mọi tracked-change=vi-phạm" → "tracked-change NGOÀI run-folder + code-disjoint=vi-phạm"). hmw.js wave→run-trace (accept `args.run` + alias `wave`, path `sub-md/`, `node --check` PARSE-OK). **Review độc-lập (R2+R3) bắt C5 L1 over-claim** (doc nói hmw.js prompt-builder emit L1 reminder, grep engine=0 → engine no-fs → fixed path-a: L1 = em-main @P1 convention) — dogfood mandate B2 đúng. checklist 9-10: Part A (Harness-9 memory) + B (adap 2-workflow) done S70, Part C (Harness-10) 8/8 MỚI. **State GIỮ NGUYÊN: Mig 53·88 bảng·306 test·68 gotcha·menu 54·bundle admin `BgNCjwsG`/user `CBvh0vtf`.** + CLAUDE.md test-flush 263→306 (resolve H1 stale). **🔴 NEXT (anh):** restart CLI (hmw.js RUN-TRACE runtime + carry §2.1.2/Cat-6/H8). Chi tiết → session log `2026-06-18-S71-harness-10-run-trace.md` (pending). **Prev S70 —** **Harness-9 adopt: L2 archive dark-matter recovery + adap 2-workflow mandate** — em main + 3 Workflow (investigate `wf_be952f3c-97f` → implement `wf_a58e0d15-beb` → audit `wf_9520d8cd-4fe`) + 2 monitor bootstrap. **0 production code** (governance/memory only, commit `f36aab8` pushed). 4 over-cap sub-agent curate L1→L2 + `archive/_INDEX.md` (mục-lục substring sha-keyed) + `.gist.md` (4-field distill-gen:1, verbatim FROZEN) → **cả 4 < 25KB auto-inject cap** (P1 curate-debt CLOSED; ~240KB archive hết RAG-dark). PART 2/3 process-mandate codify (adap-apply 2-workflow + agents/README Upgrade S70 + session-start §2.1.2). **0-byte-loss git+sha verified** (Stage C audit + em-main self-gate khi 2 reviewer no-StructuredOutput → recovery-path). +memory-budget.json (seed-by-measure) + measure-agent-memory.ps1 + .ragignore + doc-drift 4-cite flush. adap-report + email-back ai_infra (`7c07b716e775`). **State THẬT GIỮ NGUYÊN: Mig 53 · 88 bảng · 306 test · 68 gotcha · menu 54 · bundle admin `BgNCjwsG`/user `CBvh0vtf`.** **🔴 NEXT (anh):** restart CLI để activate session-start §2.1.2 budget-audit + pending H8 inherit + reviewer Cat-6. Chi tiết → session log `2026-06-17-S70-harness-9-l2-recovery.md`. **Prev S69 —** **Văn phòng số (E-Office) port + golive + PE cờ gấp/ngưỡng CCM — 4 deploy prod-verified Run #305→#308, HMW-mode ON, 2 workflow fan-out**: #305 foundation PURO (shared PageHeader/KpiCard/WidgetCard + Dashboard 2-cột + sync fe-admin index.css đóng drift S66-S68) → #306 **re-skin TRỌN 10 page** (PURO layout + CSS Hồ sơ NS, phẫu-thuật-giữ-100%-logic) → #307 **Office golive public** read+create **16-key allow-list mọi role** (mirror S65, chạy SAU revoke; excluded Off_PhongHop_Manage/Off_AttendanceReport/Off_ChamCong; cicd DB-verify 16/16×13 role) → #308 **PE cờ gấp PRO/CCM + CCM duyệt-final theo ngưỡng giá trị** Mig 53 (anh Kiệt FDC sau họp sếp). **State THẬT: Mig 53 · 88 bảng · 306 test (45D+261I) · 68 gotcha · menu 54 · bundle admin `BgNCjwsG`/user `CBvh0vtf` Run #308.** 2 gotcha NEW (**#67** Tailwind accent palette thiếu-stop vỡ-màu-im-lặng · **#68** stale-diagnostic-background-agent → chỉ tin build sau-cùng). 2 truncation #53 (impl-backend positional-record + impl-frontend) → em main recover-disk + self-gate. **🔴 NEXT (anh/anh Kiệt UAT):** (1) cấu hình "Ngưỡng giá trị gói CEO" trong Workflow Designer (null=luồng cũ) + test phiếu < ngưỡng → CCM duyệt là xong, ≥ ngưỡng → lên CEO; (2) test cờ gấp PRO(đỏ)/CCM(xanh) → badge + notify CEO; (3) **xác nhận:** quy trình đặt CCM(CostControl)-trước-CEO + CEO = role Director (đích notify). **C (sau duyệt → chuyển phiếu đến dự án) chờ anh Kiệt spec form.** **NEXT (em):** 🔴 curate cicd-monitor **65.2KB** (worst, trend tăng) + inv-codebase 47 + reviewer 43.5 over-cap · doc-flush docs/CLAUDE.md full. Chi tiết → session log `2026-06-17-S69-vanphong-golive-pe-urgent-threshold.md`. **Prev S68 —** **Hồ sơ NS header chi tiết NV: làm nổi bật + fix tên render đen→trắng** — em main solo, 3 commit (2 FE + 1 docs), 2 deploy prod-verified Run #303-304 (anh UAT realtime): badge màu theo trạng thái + dòng meta đậm + tên to/drop-shadow (#303 `6983609`) → anh báo "tên đen nền xanh ko nổi bật" → diagnose **rule `h1-h4{color:#0b1220}` viết NGOÀI `@layer` thắng `text-white`** (Tailwind v4 unlayered > all layers, **gotcha #66 NEW**, load-bearing ~30+ heading → fix ĐIỂM `text-white!` không move @layer) + thu nhỏ `text-lg` (#304 `37752eb`). Bootstrap: 2 monitor RE-REPORT CLEAN + 2 doc-drift fix (dep-audit 64→65 · root CLAUDE 263→286, `11bc96d`). **State THẬT: Mig 52 · 88 bảng · 286 test · 66 gotcha · menu 53 · bundle admin `CNUv1jxY`/user `CpOskeS1` Run #304.** ⚠️ curate-debt P1: cicd-monitor **44.1KB**. Chi tiết → session log `2026-06-16-S68-hoso-header-name-color-fix.md`. **Prev S67 —** **buổi sản phẩm LỚN, 6 deploy prod-verified Run #297→#302** (anh + anh Kiệt FDC UAT realtime, HMW-mode ON): fe-user Hồ sơ NS đồng nhất font + chữ đen→**xanh đậm `brand-800`** (#297) · **fe-admin mirror master-detail** + vá accent tokens index.css [đóng pending lớn nhất HRM go-live, page SHA256 ×2] (#298) · **+23 test-after HRM** → 263→**286** (#299) · **list flex-row gọn** [hết tràn ngang rail] + đồng nhất cỡ chữ ×2 (#300) · **PE Link hồ sơ auto-detect** web→hyperlink/`O:\`→Copy (#301) → **link `file://` bấm-thử** (#302). **Research 3-agent:** auto-mở `O:\` từ web = chỉ **Edge GPO `IntranetFileLinksEnabled`** (zero-per-machine) one-click thật; default chặn https→file://. **State THẬT: Mig 52 · 88 bảng · 286 test (45D+241I) · 65 gotcha · menu 53 · bundle admin `CcrZqfht`/user `DniDFUB_` Run #302.** test-specialist trunc #53→recover-disk; 0 prod bug. Chi tiết → session log `2026-06-16-S67-hoso-visual-pe-link-research.md`. **Prev S66 — session-end closeout em-main-solo:** adopt **Harness-8 all-inherit** (7 sub demoted `claude-opus-4-8`→`inherit` → cả 11=inherit, gỡ two-tier H4) + **cicd-monitor L1 curate 86.8→28.9KB** (byte-exact sed → `archive/2026-06.md`) + **ef-core skill doc-flush Mig 50→52** + check-email AI_INFRA (**0 thư mới se-directed**). ~17 file docs/gov/config, **0 production code** → state THẬT GIỮ NGUYÊN (Mig 52 · 88 bảng · 263 test · 65 gotcha · menu 53 · bundle `BDwV5d0X`/`DbVv6rsf`). ⚠️ **Restart CLI** → H8 runtime (frontmatter no hot-reload) + reviewer Cat-6. adap-report + email-back ai_infra (`fa7f690d` MATCH). Chi tiết → session log `2026-06-16-S66-closeout-harness8-cicd-curate.md`. **Prev S65 — HRM go-live: public Hồ sơ Nhân sự + trang master-detail giống NamGroup + Department hierarchy Mig 51 + PE Link hồ sơ Mig 52 + gốc cây SOLUTION COMPANY**, ~6 deploy prod-verified Run #289→#295, anh + anh Kiệt FDC UAT realtime. **State THẬT: Mig 52 · 88 bảng · 263 test (45D+218I) · 65 gotcha · menu 53 · bundle admin `BDwV5d0X`/user `DbVv6rsf` Run #295.** Workflow fan-out chạy THẬT lần đầu [PE] — BE∥FE parallel OK nhưng FE+reviewer return-rỗng #53 → em main recover-disk + self-gate. gotcha #65 [build csproj con ≠ slnx → CS7036]. Chi tiết → session log `2026-06-16-S65-hrm-golive-employee-masterdetail-pe-link.md`. **Prev S64** adopt **Harness-7 writing-quality floor** qua `/adap-apply` + email ai_infra — em main solo, 1 commit `6afde19` docs/gov-only. Outward comms = tiếng Việt câu-hoàn-chỉnh; nội bộ giữ nén (asymmetric). reviewer +Category 6 (verified-pending-restart → cần restart CLI). Broadcast body-hash verified KHÔNG mis-stamp (gotcha #61 UTF-8). Prev S63 docs-closeout bù S60/S61/S62 — 3 session product ship CODE prod-verified nhưng KHÔNG closeout docs (UAT realtime anh Kiệt FDC). **State THẬT: Mig 50 · 88 bảng · 263 test · 64 gotcha · menu 53 · bundle admin `0xKYGhhf`/user `C81ZdG9G` Run #286.** S60-62 = PE ràng buộc gửi-duyệt + gỡ "Từ chối" (S60) · Mig 50 ngân sách per-gói-thầu Excel anh Kiệt + XÓA module Budget cũ (S61) · vượt-NS cảnh-báo-mềm (S62). Reconcile stray reviewer cwd-misland + count-flush 4 file. Chi tiết → session log `2026-06-12-S60-S62-pe-budget-workitem-softwarning.md`. Prev Session 59 ( **6 đợt ship prod-verified Run #273→#278**: wipe transactional testing data (10 PE + 7 HĐ demo + 64 notif = 0, mã reset → phiếu thật đầu tiên team tạo = **PE/2026/A/001** ✓) `56882ac` #273 · PE tree Panel 1 chốt 4 tầng **Năm > Dự án > Hạng mục > Phiếu** `0eafcd3` #274 · dọn 15 mã hạng mục demo "tự đẻ" (chị Trà Sol) + gỡ seed gốc, WorkItems 86→**71** `bbd1554` #275 · **rename 71 mã đúng format PMH anh Kiệt** (`MAT-n`/`SUB-n`/`MEP-SUB-n`/`MEP-EQU-n` + tên "STT nhóm tên"; **DB-trước-code-sau** gotcha #62 + sqlcmd `-f 65001` gotcha #61) `c869d26` #276 · UAT vòng 1: NEW `ui/SearchableSelect` gõ-lọc bỏ dấu (Hạng mục/Dự án) + auto Địa điểm + điều khoản đa dòng `faed59f` #277 · UAT vòng 2 (anh chốt ×2): ẩn Trả lại/Từ chối khi tự duyệt phiếu mình soạn + quick-add NCC ngay form (POST /suppliers any-auth, authz probe 4/4) + NCC gõ-tìm A-Z + upload multi-file `9c330d2` #278 · UAT vòng 3-6 realtime (#279/#281 cancelled-supersede-benign): bảng NCC table-fixed `f21c55d` + bỏ ô Tên ngân sách `69997da` #280 + GỠ field Điều khoản TT mọi form `80b64dd` + bỏ nút Thêm hạng mục `792c030` **#282 FINAL**. Tổng 10 đợt (8 PASS + 2 cancelled-benign). Bundle FINAL admin **`B1DtNT9C`**/user **`D6uF3Mln`**. Test 240. Gotchas 62. 0/14 spawn truncated. → session log `2026-06-11-S59-wipe-tree-pmh-uat-batch.md`. Prev S58 — **5 đợt prod-verified Run #382/#383/#384/#386** (#385 cancelled-supersede-benign): lock-demo-user fix (việc sếp deadline 15:00 ĐÓNG TRỌN — gotcha #60/E-008/AS-12, root cause password 11<12 từng phát hiện S22 nhưng const không fix) + tạm ẩn HRM/Office/Cá nhân + Danh mục cuối (`6c5fd26` #383) + **fe-user redesign theo UI/UX guide AI_INFRA giữ brand** (`e959f72` #384) + **brand polish ×2 app "thấy rõ"** (`ea793a4`: stripe 4px đỉnh + thead brand) + **PE gộp Tên-gói-thầu = chọn Hạng-mục** (anh Kiệt FDC chốt, `3ebaf84` #386 — bundle final admin `DMm9rtNA`/user `BUkOMn_Y`). Email AI_INFRA processed (guide + ACK H4 ACCEPT). Test **240**. → session log `2026-06-11-S58-lock-fix-hide-modules-redesign-pe-merge.md`. Root cause 2 tầng: lock-list = population Dev-only + `DemoUserPassword` 11 ký tự < prod RequiredLength=12 → CreateAsync silent-fail từ trước tới giờ (= "helpdesk inert" S56). Fix union 20 UAT email + password 12 ký tự → prod 55 user/34 locked, nv.cao+nv.truong sống, 5 real staff tạo. gotcha #59+#60. Commit `5998163`. Prev S57bis — **PE gắn Hạng mục (Mig 49) + Pe all-role + menu Cá nhân + Harness-4 runtime-VERIFIED**. Test 228→**240**. Bundle `CP4CB1ym`/`BmZ3VHnm`. Commit `17b23a4`+`dd117b7` → Run #381 PASS+1PARTIAL (lock NO-OP → RESOLVED S58). Prev S56 — **Pre-golive verify sweep + golive-harden 4 fix — Run #379 PASS, code golive-ready**. WF1 `pre-golive-verify` 7-stream + adversarial → 6 PASS/1 CONCERN/0 blocker = GO (key finds = ops not code). WF2 `golive-harden` fix 4: #3 LeaveBalance lost-update→atomic ExecuteUpdate+Serializable tx (NO mig) · #5 ItTicket authz Forbidden-trước-NotFound · #6 DocxRenderer null-guard · #4 Travel/Vehicle ApproveV2 tests. Test 216→**228**. Bundle FROZEN `4SUwDLD8`/`XdKzt9LL`. `sys.tables` re-ground 92→**93**. gotcha **#58** NEW. reviewer StructuredOutput-fail→em main đỡ. **2 ops VPS pending** (gán user IT + tzutil UTC+7). FE Phase 2 redesign **deferred** (recon ready). Commit `a20cde8`. Prev S55 — **Nạp master data thật từ Excel (62 dự án + 71 hạng mục + 3 NCC) + Project +4 cột (Mig 48) — prod-verified**. HMW-mode ON. Commit `69cb393` → Run #377 PASS ~4m33s. Test 216 (compile-fix only). Bundle admin `B-d6893W`/user `XdKzt9LL`. `SeedRealMasterDataAsync` ungated idempotent → coexist demo. 2 agent return truncated (BE+reviewer) → em main disk/runtime-recover. Prev S54 — IT staff tự reassign ticket (cross-stack authz) — prod-verified. 1 code commit `ca4b602` → Run #376 PASS ~4m18s. Test 203→**216**. Bundle admin `DfCfHUE9`→`DmjI8Cmn`/user `_3S0BPJ2`→`YxL_MljK` (cả 2 rotate). NO migration. Task 1 Phase 9 Ops anh dừng. ⚠️ residual: 3 agent ghi MEMORY nhầm `src/Backend/.claude` → em main reconcile. Prev S53: gotcha #57 EXT Master Mig 47 + P11-D/E + database-agent verified-runtime.) +**Last updated:** 2026-06-20 (S79 — **adopt User-Mark (H-12/13) canonical §P + Harness-14 (Eval/Budget/Outcome) + chữ-ký RC** — anh `/check-email AI_INFRA` + `/adap-apply` step-by-step (workflow double-check mỗi step), rồi gõ `/user-mark-active-high` "áp đầy-đủ chính-xác nhất theo AI_INFRA, không hỏi thêm". em main + **4 Workflow** (`wf_82337f7f-95c` invest → `wf_a7cbe93e-912` review → `wf_9d3beebb-a95` align-re-review → `wf_4d4eba6f-8a0` H14-review). **0 production code.** Bản đầu em phỏng-theo broadcast (cấp MUST/TRACK/ANCHOR/OFF) → anh trỏ canonical → **align FULL §P (P1-P10):** 4 lệnh `/user-mark-{active-high,active,medium,disable}` + ledger `.claude/governance/ACTIVE-MARKS.md` (Active-High/Active/Medium/Disable + display-filter) + `harness-11-engine.md §E`(P1-P10)+**§F**(H-14 3-mức maturity honest) + `rules.md §6.6` (objective-criteria KHÔNG quy-mô-đội/thời-gian-tuổi) + session-start §2.1.4/session-end §L.b(h) mark-display. **3 mark Active-High stamped** anh-confirm (`RC-pqhuy1987-20-06-2026-10-29-09/10/11` = objective-criteria/User-Mark/time-age, mirror AI_INFRA 3-mark, SE timestamp riêng P1 forward-only). completeness-gate H-6→H-13 **ĐẠT** (H-8 11/11 inherit no-`[1m]` · H-7 Cat-6 real). §F floor 6/6 + maturity HONEST + SE-state ACCURATE. **3 adap-report** + email ai_infra (body-hash `7b8615b3`) + check-email STAGE 2 move 2 email + `_index`. **Bài học `feedback_canonical_spec_over_broadcast`:** broadcast cô-đọng→canonical-command/§P là spec THẬT (phải pull, đừng phỏng-theo) · report-before-stamp dogfood (lệnh tự bắt báo-cáo-trước-stamp = đúng lệnh) · residual own-diary OK (D9 áp canonical, không cấm sub ghi diary riêng). detector clean sau align (0 C1/C3 mới). **State THẬT GIỮ NGUYÊN: Mig 57 · 88 bảng · 354 test · gotcha 71 · menu 54 · bundle `CsJetgZH`/`BVS0ApIm`.** **🔴 NEXT (anh):** ⚠️ **restart CLI** (đầu việc) — activate 4 lệnh `/user-mark-*` + session-start §2.1.4/session-end §L.b(h) mark-display + engine §E/§F. Sau restart, session-start tự hiển-thị 3 mark Active-High. **🔴 NEXT (em):** curate L1 over-cap reviewer/cicd/investigator-codebase (carry 7-session + S79 workflow-spawn; inv 39.8KB +diary) — manual SPLIT/condense, archive-gate A7 GATE; + §7-header `rules.md` "77 test" stale → C2/monthly-audit. **Pending product (carry):** "Ngưỡng giá CEO" Mig 54 Designer UAT · "C" chuyển phiếu→dự án chờ spec. **Ops S58/S59:** tzutil VPS · anh Chương email typo · 5 real-staff pw · gán CNTT. Chi tiết → `2026-06-20-S79-user-mark-harness-14-adopt.md`. · **Prev S78** — **PE: đính kèm file khi DUYỆT (UAT Tra Sol / 5 tester)** — người duyệt tải file lên ngay lúc Duyệt thay vì Trả lại phiếu. Reuse hệ attachment + enum `ApprovalAttachment=5` **MIGRATION-FREE** (int-stored, endpoint+authz có sẵn → approver upload được). FE 2 app SHA-identical: `PeWorkflowPanel` picker multi-file + upload-trước-chuyển-phase (file lỗi=không duyệt) + mục "📎 File đính kèm khi duyệt" + 2 filter fix loại purpose=5 khỏi "Bảng so sánh" (gotcha **#71** proxy-predicate pollution). commit `7886fd0` → **Run #330 PASS** (test 354, bundle admin `CsJetgZH`/user `BVS0ApIm`, NO migration, smoke 4×200). 3 lỗi em tự bắt review-trước-deploy (authz-verify · filter-pollution #71 · Dialog mirror-truncate fe-admin). em-main-led + self-gate (grep no-leak) + cicd-monitor verify. **🔴 NEXT (em):** curate L1 over-cap (carry 6 session) reviewer **45.2KB** + cicd 38.8KB + inv 35.7KB keep-floor-hit manual-condense (archive-gate A7 GATE PASS 186/186). **NEXT UAT:** mở phiếu chờ duyệt → Duyệt → "+ Chọn file đính kèm" → Xác nhận → file ở mục "📎 File đính kèm khi duyệt". Chi tiết → `2026-06-19-S78-pe-attach-file-on-approve.md`. · **Prev S77** — **PE UX batch: 10 deploy prod-verified #320→#329 (anh Kiệt FDC + Tra Sol + Bích Phượng UAT realtime, HMW-mode ON)** — cờ GẤP pill mọi danh sách+inbox · focus→revert list bám-trái · **Mig 57** ô ghi chú giá đề xuất PRO/CCM + số phân cách VND + chính tả "Bảng so sánh giá" + guard #70 · số âm đỏ-ngoặc · mục con thụt+gạch-đầu-dòng · cờ gấp **BẤT ĐỐI XỨNG** GẮN=NV/GỠ=Trưởng phòng(DeptManager) · tách chọn-phiếu(inline) khỏi mở-rộng(overlay)+nút "Xem mở rộng" · chuông báo người duyệt vào cấp họ · banner phiếu Trả-lại. Mig 56→**57** · test 344→**354** (+10) · bundle cuối admin `BqKD3Y23`/user `Cn-i349D` (Run #329). **3 lỗi em tự bắt review-TRƯỚC-deploy** (guard#70 stale-echo · luật asymmetric Tra Sol clarify giữa-chừng · double-mount Task H). FD process-death Task H → recover-disk. **🔴 NEXT (em):** curate L1 over-cap reviewer **45KB** + cicd 37.6KB + inv 35.6KB keep-floor-hit manual-condense (archive-gate A7 GATE PASS 186/186 integrity OK). **NEXT UAT:** cờ gấp (GỠ chỉ TP) · chuông báo người duyệt · banner Trả-lại · Xem mở rộng · ô ghi chú PRO/CCM. Chi tiết → `2026-06-19-S77-pe-ux-batch-10-deploy.md`. · **Prev S76** — **PE ngân sách MA TRẬN 3 cột (Dự án|PRO|CCM) + bảng lưới `
` viền-ô + badge quyền-NS theo role** — anh Kiệt FDC + chị Trà Sol go-live. anh giao `/ultra-on` "step-by-step + workflow-review-per-step, hoàn chỉnh rồi deploy". **3 commit prod-verified:** `e33481e` (feature Run #318 — Mig 56 + ma-trận-3-cột + badge designer/flow `BhFDF9IJ`/`BAkuRl3C`) → `21d1f4e` (bảng lưới `
` theo phản hồi anh "chưa chia cột giống Excel", Run #319 **`jOqxW4-p`**/**`DbsznVvR`** smoke 3×200). Mig 56 +ProInitial/ProAdjust cột PRO (additive + data-migrate ProEstimate→ProInitial 4 rows prod). Part 1 mỗi phòng sửa cột mình (PRO canEditPro / CCM canEditCcm / Dự án FE-only). Part 2+3 badge "✎ NS PRO/CCM" cạnh approver (display-only suy-role) ở Designer + flow Duyệt NCC. Test 339→**344**. reviewer bắt **race mất-dữ-liệu** Part 1 → vá `useIsFetching` 2 app (gotcha #70). **🔴 NEXT (em):** curate L1 over-cap reviewer **45KB** + inv-codebase 35KB (keep-floor-hit → manual condense) + cicd 29KB + test-spec 28KB. **NEXT (anh/anh Kiệt):** UAT bảng lưới bằng PRO/CCM (Ctrl+F5). Chi tiết → `2026-06-19-S76-pe-budget-matrix-table-grid.md`. · **Prev S75 (2026-06-18)** — **Harness-11 adopt: engine bộ-nhớ-và-governance tự-bảo-trì + 2 double-check** — anh giao `/check-email AI_INFRA` + `/adap-apply` (mỗi stage workflow-review) + double-check ×2 + finalize report + push + session-end. em main + **5 Workflow** (audit `wf_7fdc3bd5-930` → implement `wf_c5e5844e-7c1` → review `wf_d7ca1ff8-942` → double-check `wf_a0b68d2f-30e` → checklist-verify `wf_39cd4cbe-f07`). **0 production code.** Built 2 NO-API detector-script (`governance-detectors.ps1` C1-C5+B3 runtime **26 flag** bắt drift thật, C4 0-self-match · `memory-archive-gate.ps1` PHẦN A hysteresis/keep-floor/2-strike/A7 186/186) + `docs/governance/harness-11-engine.md` canonical (3-tier D5/D6/D7 + one-direction-lock D8) + **B1 ×11 count→pointer** (drift mig53→55/test306→339/gotcha68→69/table93→88 RESOLVED) + cadence-wire D1/D2 + agents/README. **completeness-gate FORMAL ĐẠT** (B 4/4 + C 5/5 + D 11/11; D5/D6/D7 explicit + D8 codify=YES). gotcha #30 reinforced (box-glyph ├└─ KHÔNG vào .ps1, kể cả qua Edit). 3 commit `e70c046`+`ae957c4`+`aa09e99` pushed + adap-report + email ai_infra (`2316773229f2`). State GIỮ NGUYÊN Mig 55·88 bảng·339 test·gotcha 69·bundle `BYF5vIMJ`/`CB-tiRxd`. **🔴 NEXT (anh):** restart CLI (cadence §2.1.3/§L.b + ef-core skill); curate reviewer 38.8KB+inv 31.5KB+cicd 26.8KB over-cap. Chi tiết → `2026-06-18-S75-harness-11-adopt.md`. · **Prev S74** — **PE ô "Ghi chú từ CCM" ngân sách gói thầu (Mig 55)** — anh forward 2 luồng Zalo (Trà Sol + Kiệt FDC) "CCM giống PRO cho nhập + ghi chú, hiện 0 hết" → em-main BE+Mig55 ∥ implementer-frontend FE 2 app SHA-mirror ∥ test-specialist (chết rate-limit → recover-disk). 2 fork anh chốt: **thêm CcmNote (Mig 55)** + **GIỮ phân vai CCM** (CostControl/Admin). Entity +CcmNote mirror ProNote · UpdatePeBudgetCcmCommand +CcmNote absolute-set role-gate · DTO+controller+mapping · FE dòng "Ghi chú từ CCM" gate canEditCcm. Test 334→**339** (+5). commit `8655ebf` (cicd **Run #315 PASS** — bundle admin `BYF5vIMJ`/user `CB-tiRxd`, Mig 55 applied prod). **"0 hết không nhập" = tài khoản thiếu role CostControl (KHÔNG bug)** → UAT bằng CCM/Admin. **🔴 NEXT (anh/anh Kiệt):** UAT ô CCM bằng tài khoản CCM/Admin + carry "Ngưỡng giá CEO" Mig 54. Chi tiết → session log `2026-06-18-S74-pe-ccm-note.md`. · **Prev S73** — **Mig 54 PE giá đề xuất PRO/CCM + CEO chọn giá chốt + CCM duyệt-done ô-tích (anh Kiệt FDC, go-live thứ Hai 22/06)** — em main + 6 sub + 2 review-workflow, 2 commit prod-verified (`1d86abc` feature Run #313 + `6aa4dcb` FE empty-candidates fix). Mig 54 5-cột additive-nullable + 2 setter role-gate + ApproveV2 ③ AUTO→OPT-IN + ① bind giá chốt; FE 2 app SHA-mirror; test 306→334. **Workflow review:** R1 schema-force 1/4 lane → R2 free-text 2/3 PASS (rủi ro FE empty-candidates UNREACHABLE per submit-guard `:194`). Bài học: review fan-out free-text/hmw KHÔNG ép-schema. **Governance:** em lệch mandate auto-Workflow → cam kết báo-TRƯỚC-khi-lệch. **🔴 NEXT (anh/anh Kiệt):** cấu hình "Ngưỡng giá CEO" Designer + test 3 luồng + xác nhận CCM-trước-CEO. Chi tiết → session log `2026-06-18-S73-pe-gia-de-xuat-ccm-done.md`. · **Prev S72** — **Harness-10 flat-refine + checklist-v2 adopt (re-audit 3-workflow) + sleep NO-OP** — audit `wf_13868efb-ea7` → implement `wf_ac43b5ff-7d1` → review `wf_d482e10d-5dd` (Harness-9 B1+B2). SE BEHIND flat → migrate run-trace SUBFOLDER→FLAT (hmw.js:103 + 5 doc; 5 run cũ giữ subfolder C8) + 2 broadcast 06-18 adopt + `/sleep-recovery-memory-l2` port (A8) + detector TAILORED-OUT + hmw.js H4.5→H8 doc-drift. **REVIEW (B2) bắt 2 lỗi IMPLEMENT-self-assess sót** (hmw.js:52 schema-stale + auto-check overclaim) → fixed (auto-check WIRED thật). em-main containment-check tự bắt reviewer residual-write (raw-Workflow no-writeGuard) → revert. B3 self-correct (runs path/count 14→22). Sleep `all`=NO-OP. **0 prod code, state GIỮ NGUYÊN.** adap-report + email ai_infra (`5f511fe5c0f2`). **🔴 NEXT (anh):** restart CLI (FLAT-runtime hmw.js + wired sleep-check + sleep-recovery skill). **🔴 NEXT (em):** curate investigator-codebase L1 28973 OVER + watch FD/test-spec. Chi tiết → session log `2026-06-18-S72-harness-10-flat-refine.md`. **Prev S71 — Harness-10 adopt: tracked run-trace folder + checklist 9-10** — em main + 3 Workflow (invest `wf_9c2cd2cd-2e7` → implement `wf_e4e46725-231` → review `wf_636bc95b-939`) per mandate Harness-9 PART 2. **0 production code**. Migrate `.claude/workflows/wave-*/` gitignored → `runs//` **git-TRACKED** (run.md+sub-md/+harvest/) + `_ledger.md` 2-nhịp + 3-layer anti-miss (L1 em-main@P1 / L2 session-start orphan-scan / L3 session-end close-gate idempotent) + **containment shift** (Harness-2 B6 "mọi tracked-change=vi-phạm" → "tracked-change NGOÀI run-folder + code-disjoint=vi-phạm"). hmw.js wave→run-trace (accept `args.run` + alias `wave`, path `sub-md/`, `node --check` PARSE-OK). **Review độc-lập (R2+R3) bắt C5 L1 over-claim** (doc nói hmw.js prompt-builder emit L1 reminder, grep engine=0 → engine no-fs → fixed path-a: L1 = em-main @P1 convention) — dogfood mandate B2 đúng. checklist 9-10: Part A (Harness-9 memory) + B (adap 2-workflow) done S70, Part C (Harness-10) 8/8 MỚI. **State GIỮ NGUYÊN: Mig 53·88 bảng·306 test·68 gotcha·menu 54·bundle admin `BgNCjwsG`/user `CBvh0vtf`.** + CLAUDE.md test-flush 263→306 (resolve H1 stale). **🔴 NEXT (anh):** restart CLI (hmw.js RUN-TRACE runtime + carry §2.1.2/Cat-6/H8). Chi tiết → session log `2026-06-18-S71-harness-10-run-trace.md` (pending). **Prev S70 —** **Harness-9 adopt: L2 archive dark-matter recovery + adap 2-workflow mandate** — em main + 3 Workflow (investigate `wf_be952f3c-97f` → implement `wf_a58e0d15-beb` → audit `wf_9520d8cd-4fe`) + 2 monitor bootstrap. **0 production code** (governance/memory only, commit `f36aab8` pushed). 4 over-cap sub-agent curate L1→L2 + `archive/_INDEX.md` (mục-lục substring sha-keyed) + `.gist.md` (4-field distill-gen:1, verbatim FROZEN) → **cả 4 < 25KB auto-inject cap** (P1 curate-debt CLOSED; ~240KB archive hết RAG-dark). PART 2/3 process-mandate codify (adap-apply 2-workflow + agents/README Upgrade S70 + session-start §2.1.2). **0-byte-loss git+sha verified** (Stage C audit + em-main self-gate khi 2 reviewer no-StructuredOutput → recovery-path). +memory-budget.json (seed-by-measure) + measure-agent-memory.ps1 + .ragignore + doc-drift 4-cite flush. adap-report + email-back ai_infra (`7c07b716e775`). **State THẬT GIỮ NGUYÊN: Mig 53 · 88 bảng · 306 test · 68 gotcha · menu 54 · bundle admin `BgNCjwsG`/user `CBvh0vtf`.** **🔴 NEXT (anh):** restart CLI để activate session-start §2.1.2 budget-audit + pending H8 inherit + reviewer Cat-6. Chi tiết → session log `2026-06-17-S70-harness-9-l2-recovery.md`. **Prev S69 —** **Văn phòng số (E-Office) port + golive + PE cờ gấp/ngưỡng CCM — 4 deploy prod-verified Run #305→#308, HMW-mode ON, 2 workflow fan-out**: #305 foundation PURO (shared PageHeader/KpiCard/WidgetCard + Dashboard 2-cột + sync fe-admin index.css đóng drift S66-S68) → #306 **re-skin TRỌN 10 page** (PURO layout + CSS Hồ sơ NS, phẫu-thuật-giữ-100%-logic) → #307 **Office golive public** read+create **16-key allow-list mọi role** (mirror S65, chạy SAU revoke; excluded Off_PhongHop_Manage/Off_AttendanceReport/Off_ChamCong; cicd DB-verify 16/16×13 role) → #308 **PE cờ gấp PRO/CCM + CCM duyệt-final theo ngưỡng giá trị** Mig 53 (anh Kiệt FDC sau họp sếp). **State THẬT: Mig 53 · 88 bảng · 306 test (45D+261I) · 68 gotcha · menu 54 · bundle admin `BgNCjwsG`/user `CBvh0vtf` Run #308.** 2 gotcha NEW (**#67** Tailwind accent palette thiếu-stop vỡ-màu-im-lặng · **#68** stale-diagnostic-background-agent → chỉ tin build sau-cùng). 2 truncation #53 (impl-backend positional-record + impl-frontend) → em main recover-disk + self-gate. **🔴 NEXT (anh/anh Kiệt UAT):** (1) cấu hình "Ngưỡng giá trị gói CEO" trong Workflow Designer (null=luồng cũ) + test phiếu < ngưỡng → CCM duyệt là xong, ≥ ngưỡng → lên CEO; (2) test cờ gấp PRO(đỏ)/CCM(xanh) → badge + notify CEO; (3) **xác nhận:** quy trình đặt CCM(CostControl)-trước-CEO + CEO = role Director (đích notify). **C (sau duyệt → chuyển phiếu đến dự án) chờ anh Kiệt spec form.** **NEXT (em):** 🔴 curate cicd-monitor **65.2KB** (worst, trend tăng) + inv-codebase 47 + reviewer 43.5 over-cap · doc-flush docs/CLAUDE.md full. Chi tiết → session log `2026-06-17-S69-vanphong-golive-pe-urgent-threshold.md`. **Prev S68 —** **Hồ sơ NS header chi tiết NV: làm nổi bật + fix tên render đen→trắng** — em main solo, 3 commit (2 FE + 1 docs), 2 deploy prod-verified Run #303-304 (anh UAT realtime): badge màu theo trạng thái + dòng meta đậm + tên to/drop-shadow (#303 `6983609`) → anh báo "tên đen nền xanh ko nổi bật" → diagnose **rule `h1-h4{color:#0b1220}` viết NGOÀI `@layer` thắng `text-white`** (Tailwind v4 unlayered > all layers, **gotcha #66 NEW**, load-bearing ~30+ heading → fix ĐIỂM `text-white!` không move @layer) + thu nhỏ `text-lg` (#304 `37752eb`). Bootstrap: 2 monitor RE-REPORT CLEAN + 2 doc-drift fix (dep-audit 64→65 · root CLAUDE 263→286, `11bc96d`). **State THẬT: Mig 52 · 88 bảng · 286 test · 66 gotcha · menu 53 · bundle admin `CNUv1jxY`/user `CpOskeS1` Run #304.** ⚠️ curate-debt P1: cicd-monitor **44.1KB**. Chi tiết → session log `2026-06-16-S68-hoso-header-name-color-fix.md`. **Prev S67 —** **buổi sản phẩm LỚN, 6 deploy prod-verified Run #297→#302** (anh + anh Kiệt FDC UAT realtime, HMW-mode ON): fe-user Hồ sơ NS đồng nhất font + chữ đen→**xanh đậm `brand-800`** (#297) · **fe-admin mirror master-detail** + vá accent tokens index.css [đóng pending lớn nhất HRM go-live, page SHA256 ×2] (#298) · **+23 test-after HRM** → 263→**286** (#299) · **list flex-row gọn** [hết tràn ngang rail] + đồng nhất cỡ chữ ×2 (#300) · **PE Link hồ sơ auto-detect** web→hyperlink/`O:\`→Copy (#301) → **link `file://` bấm-thử** (#302). **Research 3-agent:** auto-mở `O:\` từ web = chỉ **Edge GPO `IntranetFileLinksEnabled`** (zero-per-machine) one-click thật; default chặn https→file://. **State THẬT: Mig 52 · 88 bảng · 286 test (45D+241I) · 65 gotcha · menu 53 · bundle admin `CcrZqfht`/user `DniDFUB_` Run #302.** test-specialist trunc #53→recover-disk; 0 prod bug. Chi tiết → session log `2026-06-16-S67-hoso-visual-pe-link-research.md`. **Prev S66 — session-end closeout em-main-solo:** adopt **Harness-8 all-inherit** (7 sub demoted `claude-opus-4-8`→`inherit` → cả 11=inherit, gỡ two-tier H4) + **cicd-monitor L1 curate 86.8→28.9KB** (byte-exact sed → `archive/2026-06.md`) + **ef-core skill doc-flush Mig 50→52** + check-email AI_INFRA (**0 thư mới se-directed**). ~17 file docs/gov/config, **0 production code** → state THẬT GIỮ NGUYÊN (Mig 52 · 88 bảng · 263 test · 65 gotcha · menu 53 · bundle `BDwV5d0X`/`DbVv6rsf`). ⚠️ **Restart CLI** → H8 runtime (frontmatter no hot-reload) + reviewer Cat-6. adap-report + email-back ai_infra (`fa7f690d` MATCH). Chi tiết → session log `2026-06-16-S66-closeout-harness8-cicd-curate.md`. **Prev S65 — HRM go-live: public Hồ sơ Nhân sự + trang master-detail giống NamGroup + Department hierarchy Mig 51 + PE Link hồ sơ Mig 52 + gốc cây SOLUTION COMPANY**, ~6 deploy prod-verified Run #289→#295, anh + anh Kiệt FDC UAT realtime. **State THẬT: Mig 52 · 88 bảng · 263 test (45D+218I) · 65 gotcha · menu 53 · bundle admin `BDwV5d0X`/user `DbVv6rsf` Run #295.** Workflow fan-out chạy THẬT lần đầu [PE] — BE∥FE parallel OK nhưng FE+reviewer return-rỗng #53 → em main recover-disk + self-gate. gotcha #65 [build csproj con ≠ slnx → CS7036]. Chi tiết → session log `2026-06-16-S65-hrm-golive-employee-masterdetail-pe-link.md`. **Prev S64** adopt **Harness-7 writing-quality floor** qua `/adap-apply` + email ai_infra — em main solo, 1 commit `6afde19` docs/gov-only. Outward comms = tiếng Việt câu-hoàn-chỉnh; nội bộ giữ nén (asymmetric). reviewer +Category 6 (verified-pending-restart → cần restart CLI). Broadcast body-hash verified KHÔNG mis-stamp (gotcha #61 UTF-8). Prev S63 docs-closeout bù S60/S61/S62 — 3 session product ship CODE prod-verified nhưng KHÔNG closeout docs (UAT realtime anh Kiệt FDC). **State THẬT: Mig 50 · 88 bảng · 263 test · 64 gotcha · menu 53 · bundle admin `0xKYGhhf`/user `C81ZdG9G` Run #286.** S60-62 = PE ràng buộc gửi-duyệt + gỡ "Từ chối" (S60) · Mig 50 ngân sách per-gói-thầu Excel anh Kiệt + XÓA module Budget cũ (S61) · vượt-NS cảnh-báo-mềm (S62). Reconcile stray reviewer cwd-misland + count-flush 4 file. Chi tiết → session log `2026-06-12-S60-S62-pe-budget-workitem-softwarning.md`. Prev Session 59 ( **6 đợt ship prod-verified Run #273→#278**: wipe transactional testing data (10 PE + 7 HĐ demo + 64 notif = 0, mã reset → phiếu thật đầu tiên team tạo = **PE/2026/A/001** ✓) `56882ac` #273 · PE tree Panel 1 chốt 4 tầng **Năm > Dự án > Hạng mục > Phiếu** `0eafcd3` #274 · dọn 15 mã hạng mục demo "tự đẻ" (chị Trà Sol) + gỡ seed gốc, WorkItems 86→**71** `bbd1554` #275 · **rename 71 mã đúng format PMH anh Kiệt** (`MAT-n`/`SUB-n`/`MEP-SUB-n`/`MEP-EQU-n` + tên "STT nhóm tên"; **DB-trước-code-sau** gotcha #62 + sqlcmd `-f 65001` gotcha #61) `c869d26` #276 · UAT vòng 1: NEW `ui/SearchableSelect` gõ-lọc bỏ dấu (Hạng mục/Dự án) + auto Địa điểm + điều khoản đa dòng `faed59f` #277 · UAT vòng 2 (anh chốt ×2): ẩn Trả lại/Từ chối khi tự duyệt phiếu mình soạn + quick-add NCC ngay form (POST /suppliers any-auth, authz probe 4/4) + NCC gõ-tìm A-Z + upload multi-file `9c330d2` #278 · UAT vòng 3-6 realtime (#279/#281 cancelled-supersede-benign): bảng NCC table-fixed `f21c55d` + bỏ ô Tên ngân sách `69997da` #280 + GỠ field Điều khoản TT mọi form `80b64dd` + bỏ nút Thêm hạng mục `792c030` **#282 FINAL**. Tổng 10 đợt (8 PASS + 2 cancelled-benign). Bundle FINAL admin **`B1DtNT9C`**/user **`D6uF3Mln`**. Test 240. Gotchas 62. 0/14 spawn truncated. → session log `2026-06-11-S59-wipe-tree-pmh-uat-batch.md`. Prev S58 — **5 đợt prod-verified Run #382/#383/#384/#386** (#385 cancelled-supersede-benign): lock-demo-user fix (việc sếp deadline 15:00 ĐÓNG TRỌN — gotcha #60/E-008/AS-12, root cause password 11<12 từng phát hiện S22 nhưng const không fix) + tạm ẩn HRM/Office/Cá nhân + Danh mục cuối (`6c5fd26` #383) + **fe-user redesign theo UI/UX guide AI_INFRA giữ brand** (`e959f72` #384) + **brand polish ×2 app "thấy rõ"** (`ea793a4`: stripe 4px đỉnh + thead brand) + **PE gộp Tên-gói-thầu = chọn Hạng-mục** (anh Kiệt FDC chốt, `3ebaf84` #386 — bundle final admin `DMm9rtNA`/user `BUkOMn_Y`). Email AI_INFRA processed (guide + ACK H4 ACCEPT). Test **240**. → session log `2026-06-11-S58-lock-fix-hide-modules-redesign-pe-merge.md`. Root cause 2 tầng: lock-list = population Dev-only + `DemoUserPassword` 11 ký tự < prod RequiredLength=12 → CreateAsync silent-fail từ trước tới giờ (= "helpdesk inert" S56). Fix union 20 UAT email + password 12 ký tự → prod 55 user/34 locked, nv.cao+nv.truong sống, 5 real staff tạo. gotcha #59+#60. Commit `5998163`. Prev S57bis — **PE gắn Hạng mục (Mig 49) + Pe all-role + menu Cá nhân + Harness-4 runtime-VERIFIED**. Test 228→**240**. Bundle `CP4CB1ym`/`BmZ3VHnm`. Commit `17b23a4`+`dd117b7` → Run #381 PASS+1PARTIAL (lock NO-OP → RESOLVED S58). Prev S56 — **Pre-golive verify sweep + golive-harden 4 fix — Run #379 PASS, code golive-ready**. WF1 `pre-golive-verify` 7-stream + adversarial → 6 PASS/1 CONCERN/0 blocker = GO (key finds = ops not code). WF2 `golive-harden` fix 4: #3 LeaveBalance lost-update→atomic ExecuteUpdate+Serializable tx (NO mig) · #5 ItTicket authz Forbidden-trước-NotFound · #6 DocxRenderer null-guard · #4 Travel/Vehicle ApproveV2 tests. Test 216→**228**. Bundle FROZEN `4SUwDLD8`/`XdKzt9LL`. `sys.tables` re-ground 92→**93**. gotcha **#58** NEW. reviewer StructuredOutput-fail→em main đỡ. **2 ops VPS pending** (gán user IT + tzutil UTC+7). FE Phase 2 redesign **deferred** (recon ready). Commit `a20cde8`. Prev S55 — **Nạp master data thật từ Excel (62 dự án + 71 hạng mục + 3 NCC) + Project +4 cột (Mig 48) — prod-verified**. HMW-mode ON. Commit `69cb393` → Run #377 PASS ~4m33s. Test 216 (compile-fix only). Bundle admin `B-d6893W`/user `XdKzt9LL`. `SeedRealMasterDataAsync` ungated idempotent → coexist demo. 2 agent return truncated (BE+reviewer) → em main disk/runtime-recover. Prev S54 — IT staff tự reassign ticket (cross-stack authz) — prod-verified. 1 code commit `ca4b602` → Run #376 PASS ~4m18s. Test 203→**216**. Bundle admin `DfCfHUE9`→`DmjI8Cmn`/user `_3S0BPJ2`→`YxL_MljK` (cả 2 rotate). NO migration. Task 1 Phase 9 Ops anh dừng. ⚠️ residual: 3 agent ghi MEMORY nhầm `src/Backend/.claude` → em main reconcile. Prev S53: gotcha #57 EXT Master Mig 47 + P11-D/E + database-agent verified-runtime.) --- diff --git a/docs/STATUS.md b/docs/STATUS.md index ed12405..72baf03 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -3,7 +3,7 @@ > **Update rule:** trước khi bắt đầu 1 task → ghi row `🔥 In Progress`. Xong → `✅ Recently Done`. > **Tiering rule (S40):** chỉ giữ **state hiện tại + 3 session gần nhất** ở file này. Session cũ hơn → `docs/changelog/sessions/`. Full history pre-S40 → `docs/_archive/STATUS-preS40-fullhistory.md`. (Tránh over-context — xóa double, không cắt nội dung.) -**Last updated:** 2026-06-19 (S78 — **PE: đính kèm file khi DUYỆT (UAT Tra Sol / 5 tester)** — người duyệt tải file của mình lên ngay lúc Duyệt thay vì Trả lại phiếu (tình huống thay đổi nhỏ). Reuse hệ attachment + enum `ApprovalAttachment=5` **MIGRATION-FREE** (int-stored, 0 schema change); endpoint `POST {id}/attachments` + authz có sẵn (handler không guard drafter-only → approver upload được). FE 2 app SHA-identical: `PeWorkflowPanel` picker multi-file + upload-TRƯỚC-chuyển-phase (file lỗi=không duyệt) + mục "📎 File đính kèm khi duyệt" (download/preview) + 2 filter fix loại purpose=5 khỏi "Bảng so sánh" (gotcha **#71** proxy-predicate pollution). commit `7886fd0` → **Run #330 PASS** ~4m56s (test gate **354**, bundle admin **`CsJetgZH`**/user **`BVS0ApIm`**, NO migration, smoke 4×200 + attachments 401-wired). **3 lỗi em tự bắt review-trước-deploy** (authz-verify handler · filter-pollution #71 · Dialog mirror-truncate fe-admin). em-main-led + self-gate (grep no-leak thay reviewer over-cap) + cicd-monitor verify. → log `2026-06-19-S78-pe-attach-file-on-approve.md`. · **Prev S77** — **buổi sản phẩm RẤT LỚN: 10 deploy prod-verified #320→#329 (anh Kiệt FDC + Tra Sol + Bích Phượng UAT realtime, HMW-mode ON)** — bundle cuối admin **`BqKD3Y23`** / user **`Cn-i349D`** (Run #329). **Mig 56→57** `AddPeSuggestedPriceNotes` · test 344→**354** (+10) · gotcha **70** (tái dùng #70). 10 việc PE: (1) cờ GẤP **pill** 🔴PRO/🟢CCM đồng bộ MỌI danh sách + inbox (#320, NEW `PeUrgentChips` ×2 app); (2) **focus mode** bấm phiếu→overlay (#321) → **revert** list về layout gốc bám-trái lấp-đầy (#322); (3) **Mig 57** ô ghi chú giá đề xuất PRO/CCM (2 cột nvarchar(1000)) + **số phân cách VND** (`VndInlineEdit`/`BudgetCell`) + sửa chính tả "Bảng so sánh giá" + **guard #70** stale-echo (#323); (4) số âm → **đỏ + ngoặc** `(…)` hàng 7/8/9 (#324); (5) mục con **thụt dòng + gạch đầu dòng** phân biệt có-số/không-số (#325); (6) cờ gấp authz **BẤT ĐỐI XỨNG** GẮN=NV chức năng / GỠ=chỉ Trưởng phòng (DeptManager) (#326, asymmetric handler + button-by-state); (7) **tách chọn-phiếu (inline 3-panel) khỏi mở-rộng (overlay)** + nút "Xem mở rộng" mỗi dòng (`?expand=1`) (#327); (8) **chuông báo người duyệt** khi phiếu vào cấp họ — submit + mỗi approve-advance (#328, `LogTransitionAsync` notify current-level approvers); (9) banner phiếu **Trả lại** hướng dẫn gửi lại (#329). **3 lỗi em tự bắt khi review TRƯỚC deploy** (guard #70 stale-echo cho ô ghi chú · luật cờ-gấp bất-đối-xứng Tra Sol clarify giữa-chừng · double-mount PeDetailTabs Task H — intent-comment có nhưng code sót). Cách chạy: em-main + frontend-designer ×3 (focus/revert/decouple, FD2 stub-verify do backend-down #3) + implementer-frontend (pill/notes/sep/spelling) + implementer-backend ×2 (Mig 57 · approver-notify) + test-specialist ×3 (notes +7 · urgent symmetric→asymmetric REDO do clarify-after-dispatch) + cicd-monitor ×10 (10/10 PASS). **frontend-designer process-death giữa Task H → recover-disk** (edit hoàn-chỉnh trên disk, em-main build-verify + mirror). **🔴 NEXT (em): curate L1 over-cap GẤP** — reviewer **45KB** + cicd-monitor 37.6KB + inv-codebase 35.6KB (keep-floor-hit → manual SPLIT/condense; archive-gate A7 GATE PASS 186/186 integrity OK) + FD 26KB/test-spec 27.7KB WATCH strike-1. → log `2026-06-19-S77-pe-ux-batch-10-deploy.md`. · **Prev S76** — **PE ngân sách MA TRẬN 3 cột (Dự án|PRO|CCM) + bảng lưới `
` viền-ô + badge quyền-NS theo role** — anh Kiệt FDC + chị Trà Sol, go-live; anh giao `/ultra-on` "step-by-step + workflow-review-per-step, hoàn chỉnh rồi deploy". **3 commit prod-verified:** `e33481e` (feature Run #318 — Mig 56 + ma-trận-3-cột + badge designer/flow, `BhFDF9IJ`/`BAkuRl3C`) → `21d1f4e` (bảng lưới `
` theo phản hồi anh, Run #319 **`jOqxW4-p`**/**`DbsznVvR`**, smoke 3×200). **Part 1:** PRO sửa cột PRO (canEditPro), CCM sửa cột CCM (canEditCcm), Dự án FE hiển-thị-only; Mig 56 +ProInitial/ProAdjust additive + data-migrate ProEstimate→ProInitial (4 rows prod). **Part 2+3:** badge "✎ NS PRO/CCM" cạnh approver (suy từ role, display-only no-authz) ở Workflow Designer + flow Duyệt NCC. Test 339→**344** (+5). **2 workflow review** (Part 1 PASS + Part 2/3 PASS) — reviewer bắt **race mất-dữ-liệu** Part 1 (impl self-review sót) → vá `useIsFetching` 2 app, **gotcha #70 NEW**. Lessons: flex+gap KHÔNG ra "bảng" → phải `
` viền-ô · workflow-review-flaky (2-3 lane empty #53) → em-main self-gate lane rỗng. **NEXT:** 🔴 curate L1 over-cap (reviewer **45KB** + inv-codebase 35KB keep-floor-hit manual-condense; cicd 29KB + test-spec 28KB strike-1). → log `2026-06-19-S76-pe-budget-matrix-table-grid.md`. · **Prev S75 (2026-06-18)** — **Harness-11 adopt: engine bộ-nhớ-và-governance TỰ-BẢO-TRÌ + 2 double-check** — anh giao `/check-email AI_INFRA` + `/adap-apply` (mỗi stage workflow-review) + double-check ×2 + finalize report + push + session-end. em main + **5 Workflow** (audit `wf_7fdc3bd5-930` → implement `wf_c5e5844e-7c1` → review `wf_d7ca1ff8-942` → double-check `wf_a0b68d2f-30e` → checklist-verify `wf_39cd4cbe-f07`). **0 production code.** Built `scripts/governance-detectors.ps1` (C1 broken-pointer + C2/B3 staleness + C3 vocab-fork + C4 self-exclusion + C5 resolve, NO-API DÒ+FLAG, runtime **26 flag** bắt drift thật, C4 0-self-match) + `scripts/memory-archive-gate.ps1` (PHẦN A hysteresis 0.85/keep-floor 5/2-strike/A7 NO-API 186/186) + `docs/governance/harness-11-engine.md` canonical (3-tier D5/D6/D7 EXPLICIT + one-direction-lock D8) + **B1 ×11 count→pointer `docs/STATUS.md`** (drift mig53→55/test306→339/gotcha68→69/table93→88 RESOLVED) + cadence-wire session-start §2.1.3 (D1) + session-end §L.b(c) (D2) + agents/README Upgrade S75. **completeness-gate FORMAL ĐẠT** (B 4/4 + C 5/5 + D 11/11 đủ-trọn, A 🟡 tailored — A6 runtime cần 2×-Apply legit-by-design). **gotcha #30 reinforced** (box-glyph ├└─ KHÔNG vào .ps1 — PS5.1 -File ANSI mojibake, KỂ CẢ qua Edit render-normalize; detector pure-ASCII verified). 3 commit `e70c046`+`ae957c4`+`aa09e99` pushed + adap-report + email ai_infra (`2316773229f2`). **State THẬT GIỮ NGUYÊN: Mig 55 · 88 bảng · 339 test · gotcha 69 · menu 54 · bundle `BYF5vIMJ`/`CB-tiRxd`.** ⚠️ restart CLI (cadence §2.1.3/§L.b + ef-core skill). 🔴 curate-debt: reviewer 38.8KB + inv-codebase 31.5KB + cicd 26.8KB over-cap (archive-gate confirm; reviewer+inv keep-floor hit → manual split). → log `2026-06-18-S75-harness-11-adopt.md`. **Prev S74** — **PE ô "Ghi chú từ CCM" ngân sách gói thầu (Mig 55)** — anh forward 2 luồng Zalo (Trà Sol + Kiệt FDC) "CCM cũng giống PRO cho nhập + ghi chú, hiện 0 hết" → em-main BE+Mig55 ∥ implementer-frontend FE 2 app SHA-mirror ∥ test-specialist (chết rate-limit → recover-disk). 2 fork anh chốt qua AskUserQuestion: **thêm CcmNote (Mig 55)** + **GIỮ phân vai CCM** (CostControl/Admin). Entity `PeWorkItemBudget +CcmNote` mirror ProNote · `UpdatePeBudgetCcmCommand +CcmNote` absolute-set role-gate fail-closed · DTO+controller+mapping · FE dòng "Ghi chú từ CCM" gate `canEditCcm` (sau V0/hiệu chỉnh, absolute-set đủ 3 field). Mig 55 additive-nullable sạch (no #63). Test 334→**339** (+5 CcmNote). **Chẩn đoán "0 hết không nhập":** tài khoản thiếu role CostControl (KHÔNG bug) → UAT bằng CCM/Admin. commit `8655ebf` push main (cicd **Run #315 PASS** ~4m54s — Mig 55 applied prod, bundle admin `BYF5vIMJ`/user `CB-tiRxd`, smoke 4×200). Lessons: controller call-site thiếu arg sau +param record (grep+vá, #65 bắt) · agent-kill-529 recover-disk no-re-spawn · PS here-string commit-msg trong if-block mis-parse → `git commit -F`. → session log `2026-06-18-S74-pe-ccm-note.md`. **Prev S73** — **Mig 54 PE giá đề xuất PRO/CCM + CEO chọn giá chốt + CCM duyệt-done ô-tích (anh Kiệt FDC — go-live so-sánh-giá thứ Hai 22/06)** — em main + 6 sub + 2 review-workflow. **2 commit prod-verified:** `1d86abc` (feature, cicd Run #313 PASS — Mig 54 + bundle admin `OlNyG9OD`/user `DSzSLVtL`) + `6aa4dcb` (FE empty-candidates guard fix). **BE:** Mig 54 `AddPeSuggestedAndApprovedPrice` 5 cột additive-nullable (ProSuggestedMin/Max·CcmSuggested·ApprovedPriceAmount·Source) + 2 setter role-gate PRO/CCM (Forbidden fail-closed mirror budget) + ApproveV2 **③ AUTO→OPT-IN** (`finalizeByCcmDelegation` ô-tích, gỡ auto-threshold S69) + **① bind giá chốt** mọi nhánh DaDuyet (human bắt-buộc-chọn, isSystem-miễn) + DTO +7 field/capability. **FE 2 app SHA-mirror:** PeWorkflowPanel (bộ chọn giá + ô tích CCM + fix empty-candidates) + PeDetailTabs `SuggestedPriceRows` + types +7. **Test 306→334** (+28). **2 workflow review (bài học):** R1 schema-force CHỈ **1/4** lane returned (flaky no-StructuredOutput) → R2 **free-text 2/3 PASS** — rủi ro #1 FE empty-candidates = **UNREACHABLE** (submit-guard `:194` chặn gửi-duyệt khi winnerQuoteTotal≤0). → review fan-out dùng **free-text / hmw RUN-TRACE**, KHÔNG ép-schema inline. **Governance honest:** em lệch mandate auto-Workflow (mode-ON) + chỉ khai khi anh hỏi → **cam kết báo-TRƯỚC-khi-lệch**. Run-trace `runs/2026-06-18-mig54-pe-review/` (custom-inline, bù post-hoc). → session log `2026-06-18-S73-pe-gia-de-xuat-ccm-done.md` pending. · **Prev S72** — **Harness-10 flat-refine + checklist-v2 adopt (re-audit 3-workflow) + sleep NO-OP** — em main + 9 sub qua 3 Workflow (audit `wf_13868efb-ea7` → implement `wf_ac43b5ff-7d1` → review `wf_d482e10d-5dd`, mandate Harness-9 B1+B2). Anh chỉ "sisters làm tốt mỗi SE thiếu" → re-audit đo vs canonical: **SE BEHIND Harness-10 flat** (run-trace còn SUBFOLDER, canonical=FLAT) → migrate `hmw.js` (`:103` sub-md/→flat + `:52` schema + **H4.5→H8 doc-drift**) + `workflows/README` full-rewrite + `runs/README` + session-start/end + `agents/README` Upgrade S72 + `_ledger`; **5 run cũ S71 GIỮ subfolder** (C8 dual-accept). +2 broadcast 06-18 adopt (checklist-v2 + h10-flat-detector-refine). +`/sleep-recovery-memory-l2` port (A8, §J2-tailored SE-only, floor intact, live skill). **detector refine-b TAILORED-OUT** (SE Workflow-tool no-CLI-bypass; containment git-diff+tracked+orphan-scan G-015). **REVIEW (B2 dogfood) bắt 2 lỗi IMPLEMENT-self-assess sót** (hmw.js:52 schema-stale + sleep-cmd auto-check un-wired overclaim) → fixed (auto-check **WIRED thật**: budget.json `+last_sleep_at` + session-start:78 + session-end:48, grep-verified). em-main containment-check tự bắt 1 reviewer residual-write (raw-Workflow KHÔNG hmw.js writeGuard → reverse-finding #4) → revert. **B3 self-correct:** S71 report path tắt `runs/`+"14" → thật `.claude/workflows/runs`=22. **Sleep `all`=NO-OP** (5/9 empty-archive + 4/9 đã-gisted → 0 compressed; `last_sleep_at`=2026-06-18). **0 production code, state THẬT GIỮ NGUYÊN.** adap-report `2026-06-18-Governance-harness-10-flat-refine-checklist-v2` + email ai_infra (`5f511fe5c0f2`). ⚠️ **restart CLI** activate FLAT-runtime hmw.js + wired sleep-check + sleep-recovery skill. 🔴 **NEXT (em):** curate investigator-codebase L1 **28973 OVER** (audit-trail) + watch frontend-designer/test-specialist near-cap. → session log `2026-06-18-S72-harness-10-flat-refine.md`. **Prev S71 — Harness-10 adopt: tracked run-trace folder convention + checklist 9-10 self-verify** — em main + 3 Workflow (invest `wf_9c2cd2cd-2e7` → implement `wf_e4e46725-231` → review `wf_636bc95b-939`) theo mandate Harness-9 PART 2. **0 production code** (governance/workflow only). Migrate `.claude/workflows/wave-*/` gitignored → `runs//` **git-TRACKED** (run.md + sub-md/ + harvest/) + `_ledger.md` 2-nhịp + 3-layer anti-miss (L1 em-main@P1 ledger-check / L2 session-start orphan-scan / L3 session-end close-gate **idempotent-VERIFY-not-re-APPEND**) + **containment model shift** (Harness-2 B6 "mọi tracked-change=vi-phạm" → Harness-10 "tracked-change NGOÀI run-folder + code-disjoint=vi-phạm"; run-folder TRACKED → HIỆN git-diff = audit trực-tiếp). hmw.js wave→run-trace (accept `args.run`, alias `wave`; path `sub-md/`; `node --check` PARSE-OK). **Review độc-lập (R2+R3) bắt C5 L1 over-claim** (doc nói hmw.js prompt-builder emit L1 reminder nhưng grep engine=0 → engine no-fs → fixed path-a: L1 = em-main @P1 convention) — dogfood mandate B2 đúng (1-workflow-tự-chấm sẽ bỏ sót). **checklist 9-10:** Part A (Harness-9 memory) + Part B (adap 2-workflow) ĐÃ done S70; Part C (Harness-10) MỚI 8/8. dogfood: 3 run-trace folder TRACKED đầu + 3 entry ledger. adap-report `2026-06-18-Governance-checklist-harness-9-10` + email ai_infra. **State THẬT GIỮ NGUYÊN: Mig 53 · 88 bảng · 306 test · 68 gotcha · menu 54 · bundle admin `BgNCjwsG`/user `CBvh0vtf`.** + `CLAUDE.md` test-flush 263→306 (pre-existing uncommitted, resolve H1 stale-flag). ⚠️ restart CLI activate hmw.js RUN-TRACE runtime + (carry S66/S70) §2.1.2 budget-audit/reviewer-Cat-6/H8-inherit. ✅ **curate-debt CLOSED S71** (FINALIZE double-check `wf_73de399d-753` + curate `wf_f32987b8-03f`): reviewer 36.7→24.8KB + investigator 29.8→23.2KB (both <25600 cap, archive +N -0 0-byte-loss) + reviewer-gist gen:2 + 3 user-memory G2/G3 + budget.json re-measure. Race root-cause fixed cấu-trúc (hmw.js RUN-TRACE writeGuard). → session log `2026-06-18-S71-harness-10-run-trace.md` (pending). **Prev S70** — **Harness-9 adopt: L2 archive dark-matter recovery + adap 2-workflow mandate** — em main + 3 Workflow (investigate `wf_be952f3c-97f` → implement `wf_a58e0d15-beb` → audit `wf_9520d8cd-4fe`) + 2 monitor bootstrap. **0 production code** (governance/memory only, commit `f36aab8` pushed). 4 over-cap sub-agent (cicd-monitor/investigator-codebase/reviewer/implementer-backend) curate L1→L2 + `archive/_INDEX.md` (mục-lục con-trỏ **substring sha-keyed**, Ctrl-F fallback) + `.gist.md` (nén 4-field distill-gen:1, verbatim FROZEN) → **cả 4 < 25KB auto-inject cap** (P1 curate-debt CLOSED; ~240KB archive hết RAG-dark). PART 2/3 process-mandate codify (adap-apply + agents/README Upgrade S70 + session-start §2.1.2 budget-audit). **0-byte-loss git+sha verified** (Stage C audit + em-main self-gate khi 2 reviewer no-StructuredOutput). +`memory-budget.json` (seed-by-measure) + `scripts/measure-agent-memory.ps1` + `.ragignore` + doc-drift 4-cite flush. adap-report + email-back ai_infra (body-hash `7c07b716e775`). **State THẬT GIỮ NGUYÊN: Mig 53 · 88 bảng · 306 test · 68 gotcha · menu 54 · bundle admin `BgNCjwsG`/user `CBvh0vtf`.** ⚠️ restart CLI để activate session-start §2.1.2 + pending H8 inherit + reviewer Cat-6. → session log `2026-06-17-S70-harness-9-l2-recovery.md`. **Prev S69** — **Văn phòng số (E-Office) port + golive + PE cờ gấp/ngưỡng CCM — 4 deploy prod-verified Run #305→#308, HMW-mode ON, 2 workflow fan-out + ~14 spawn**: foundation PURO (shared PageHeader/KpiCard/WidgetCard + Dashboard 2-cột + sync fe-admin index.css đóng drift S66-S68) #305 → **re-skin TRỌN 10 page** PURO layout + CSS Hồ sơ NS, phẫu-thuật-giữ-100%-logic (reviewer verify api/queryKey byte-identical) #306 → **Office golive public** `SeedAllRolesOfficeModulePermissionsAsync` read+create 16-key allow-list mọi role (mirror S65 pattern, chạy SAU revoke; excluded Off_PhongHop_Manage/Off_AttendanceReport/Off_ChamCong giữ ẩn; cicd DB-verify 16/16×13 role) #307 → **PE cờ gấp PRO/CCM + CCM duyệt-final theo ngưỡng giá trị** Mig 53 (anh Kiệt FDC sau họp sếp) #308. **State THẬT: Mig 53 · 88 bảng · 306 test (45D+261I) · 68 gotcha · menu 54 · bundle admin `BgNCjwsG`/user `CBvh0vtf` Run #308.** 2 gotcha NEW (**#67** Tailwind accent palette thiếu-stop vỡ-màu-im-lặng · **#68** stale-diagnostic-background-agent). 2 truncation #53 (impl-backend positional-record + impl-frontend) → em main recover-disk + self-gate (cả 2 build PASS sau-cùng). C (sau duyệt → chuyển phiếu đến dự án) chờ anh Kiệt spec form. → session log `2026-06-17-S69-vanphong-golive-pe-urgent-threshold.md`. **Prev S68** — **Hồ sơ NS header chi tiết NV: làm nổi bật + fix tên render đen→trắng** — em main solo, 3 commit (2 FE `6983609`+`37752eb` · 1 docs `11bc96d`), 2 deploy prod-verified Run #303-304 (anh UAT realtime): tên `text-xl extrabold`+drop-shadow · dòng meta `text-[13px] font-medium` trắng-đậm · badge pill **màu theo trạng thái** (#303); anh báo "tên đen nền xanh ko nổi bật" → diagnose **rule `h1-h4{color:#0b1220}` viết NGOÀI `@layer` thắng `text-white`** (Tailwind v4 unlayered > all layers, **gotcha #66 NEW**) → ép `text-white!` + thu nhỏ `text-lg` (#304, grep dist confirm `!important`). Bootstrap: 2 monitor RE-REPORT CLEAN + 2 doc-drift fix (dep-audit 64→65 · root CLAUDE 263→286, H1 flag). **State THẬT: Mig 52 · 88 bảng · 286 test · 66 gotcha · menu 53 · bundle admin `CNUv1jxY`/user `CpOskeS1` Run #304.** ⚠️ curate-debt P1: cicd-monitor **44.1KB** (worst). **Prev S67:** **buổi sản phẩm LỚN, 6 deploy prod-verified Run #297→#302** (anh + anh Kiệt FDC UAT realtime, HMW-mode ON): fe-user Hồ sơ NS đồng nhất font + chữ đen→**xanh đậm `brand-800`** (#297 `ab4e681`) · **fe-admin mirror master-detail** + accent tokens index.css [đóng pending lớn nhất HRM go-live, page SHA256 ×2] (#298 `292d64d`) · **+23 test-after HRM** [Dept cycle-guard · PE HoSoLink absolute-set · HRM-perm seed] → 263→**286** (#299 `bcd619d`) · **list flex-row gọn** [bảng 3-cột→flex-row, `overflow-x-hidden` → hết tràn ngang rail] + đồng nhất cỡ chữ [18/14/13/11px] ×2 app (#300 `91aaf05`) · **PE Link hồ sơ auto-detect** `http(s)`→hyperlink/`O:\`→Copy (#301 `6df1b2d`) → **render link `file://` bấm-thử** + Copy (#302 `536dd6b`). **Workflow research 3 investigator-api** (auto-mở `O:\` từ web): default browser CHẶN https→file://; **chỉ Edge GPO `IntranetFileLinksEnabled`** (Edge-only, Intranet Zone, 1 GPO domain zero-per-machine) = one-click thật — Chrome không có; .url-download zero-install nhưng 2-click. **State THẬT: Mig 52 · 88 bảng · 286 test (45D+241I) · 65 gotcha · menu 53 · bundle admin `CcrZqfht`/user `DniDFUB_`** (#302). test-specialist truncated return #53 → em main recover-disk (3 file test đủ + 286 verify); 0 production bug. ⚠️ curate-debt: cicd-monitor 39.8KB + inv-codebase 39.4KB over-cap. **Prev S66** — **session-end closeout em-main-solo, 0 product-sub:** adopt **Harness-8 all-inherit** (7 sub demoted `claude-opus-4-8`→`inherit` → cả 11 = inherit, gỡ two-tier Harness-4) + **cicd-monitor L1 curate 86.8→28.9KB** (byte-exact sed → `archive/2026-06.md`, incl #291 forensic) + **ef-core skill doc-flush Mig 50→52** (H1 drift, +Mig 51/52 rows) + check-email AI_INFRA (**0 thư mới se-directed**). ~17 file docs/gov/config, **0 production code** → state THẬT GIỮ NGUYÊN: **Mig 52 · 88 bảng · 263 test · 65 gotcha · menu 53 · bundle admin `BDwV5d0X`/user `DbVv6rsf`**. ⚠️ **Restart CLI** để H8 runtime (frontmatter no hot-reload) + reviewer Category 6 (S64 pending). adap-report `2026-06-16-Governance-harness-8-all-inherit-workflow-fastest` + email-back ai_infra (hash `fa7f690d` round-trip MATCH). Prev S65 — **HRM go-live: public Hồ sơ Nhân sự + trang master-detail giống NamGroup + Department hierarchy + PE Link hồ sơ**, ~6 deploy prod-verified Run #289→#295, anh + anh Kiệt FDC UAT realtime): (1) **public Hồ sơ Nhân sự mọi role** — `SeedAllRolesHrmProfileReadPermissionsAsync` grant CanRead `Hrm`+`Hrm_HoSo` 13 role chạy SAU revoke S58 (upgrade-only; EmployeesController policy-based `Hrm_HoSo.Read` mở luôn API không hardcode Roles), giữ ẩn Dashboard NS, Run #289; (2) **redesign màu foundation fe-user** — accent palette teal/violet/amberx/greenx + `.app-gradient-brand`/`.card-accent`/`.icon-chip` + heading 700, brand #1F7DC1 + Be Vietnam Pro giữ, Run #290; (3) **Department hierarchy** Mig 51 `AddDepartmentParentId` (ParentId loose-Guid no-FK + `GET /departments/tree` ráp cây in-memory + rollup count theo `User.DepartmentId` + cycle-guard HashSet) + picker "Phòng cha" fe-admin (self-service org chart) + Update cycle-guard, Run #292; (4) **Hồ sơ Nhân sự master-detail giống NamGroup** — `EmployeesListPage` rewrite: 3-panel→**2-cột** (cây tổ chức gốc "SOLUTION COMPANY" + list chồng TRÁI · chi tiết 5 tab PHẢI) + tô màu accent, giữ 100% 5 satellite CRUD (16 endpoint), Run #293/#294/#295; (5) **PE mục "e. Link hồ sơ"** Mig 52 `AddHoSoLinkToPurchaseEvaluation` (`HoSoLink string?` hyperlink NAS + `` target_blank rel-noopener + null-safe) + rename "Dự trù PRO"→"Ngân sách PRO" (row+badge) ×2 app SHA256-mirror, Run #293. **State THẬT: Mig 52 · 88 bảng · 263 test (45D+218I) · 65 gotcha · menu 53 · bundle admin `BDwV5d0X`/user `DbVv6rsf`** (Run #295 `456c7a7` Employee-refine — user rotate `CZfo_PFZ→DbVv6rsf`, cicd PASS). **🔥 Workflow fan-out chạy THẬT lần đầu** (`pe-hoso-link-rename-pro` BE∥FE→review) — parallel disjoint-file OK, NHƯNG FE+reviewer return-RỖNG #53 → em main recover-disk + self-gate (bắt badge "DỰ TRÙ PRO" sót rename); **verdict: fan-out cho parallelism nhưng reviewer-stage không tin được trong harness này → verify-heavy task vẫn tự gác = tương đương spawn lẻ** (`feedback_workflow_fanout_reliability`). gotcha **#65** NEW (build csproj con ≠ `dotnet build slnx` gồm tests → miss test-compile khi đổi chữ ký record command → CI CS7036 Run #291 FAIL-gated). **Prev S64** adopt **Harness-7 writing-quality floor** — em main solo, commit `6afde19` docs/gov-only, 0 sub spawn: `rules.md §1.1` outward-VN-full-grammar + reviewer Category 6 + adap-report + email ai_infra; broadcast body-hash `a4580ea9` verified-MATCH **KHÔNG mis-stamp** [false-mismatch = gotcha #61 PS5.1 UTF-8 decode của em]. Prev S63 docs-closeout bù S60/S61/S62 — **State THẬT: Mig 50 · 88 bảng · 263 test (45D+218I) · 64 gotcha · menu 53 · bundle admin `0xKYGhhf`/user `C81ZdG9G` Run #286**; S60-62 = PE ràng buộc gửi-duyệt + bypass drafter (S60) · gỡ "Từ chối" (S60) · Mig 50 ngân sách per-gói-thầu Excel anh Kiệt + XÓA module Budget cũ (S61) · vượt-NS cảnh-báo-mềm cho lưu (S62); + reconcile stray reviewer cwd-misland; session log `2026-06-12-S60-S62-pe-budget-workitem-softwarning.md`). Prev Session 59 ( **10 đợt ship prod-verified: 8 Run PASS + 2 cancelled-supersede-benign #273→#282** (run_number API — dải đếm khác #38x S58, cùng pipeline; 2 cancel = push-đè khi UAT góp ý realtime, ancestor-verified): (1) **wipe transactional testing data** theo anh Kiệt FDC — 10 PE + 7 HĐ [DEMO] + 64 notif + 1 AwV2 cũ inactive = 0, reset PeSeq/CtSeq → phiếu thật đầu tiên team tạo chiều nay = **PE/2026/A/001** ✓, app-recycle KHÔNG resurrect (DemoSeed gate held), uploads orphan dọn (`56882ac` #273); (2+3) **PE tree Panel 1 chốt 4 tầng "📅 Năm > 📁 Dự án > 🧱 Hạng mục > Phiếu"** (anh chốt follow-up sau bản gộp "Dự án (Năm)"; `yearGroups` useMemo, expand-key v3, FE-only — list DTO đã có workItemName S57bis) (`0eafcd3` #274); (4) **dọn 15 mã hạng mục demo tự chế** theo chị Trà Sol "xóa cái đám phần thô phần hoàn thiện… MÀ ANH TỰ ĐẺ RA" — WorkItems 86→**71**, GỠ HẲN block seed demo khỏi DbInitializer, đối chiếu 71/71 khớp bảng PMH từng dòng (`bbd1554` #275, bundle frozen BE-only); (5) **rename 71 mã đúng format PMH anh Kiệt chốt** "MÃ CV gồm chữ MEP-SUB-1 rồi tên 1 MEP Sub MEP (Full) — đúng kiểu vậy" → `MAT-n`/`SUB-n`/`MEP-SUB-n`/`MEP-EQU-n` + Name "STT nhóm tên"; **DB-trước-code-sau** (gotcha **#62** NEW — seed per-code idempotent, sai thứ tự = 142 rows) + sqlcmd `-f 65001` (gotcha **#61** NEW — verify data qua API JSON, KHÔNG tin console mojibake) + FE sort numeric ×3 ×2 app (`c869d26` #276); (6) **UAT 6 vòng 11 điểm**: NEW **`ui/SearchableSelect`** combobox gõ-lọc BỎ DẤU (fold NFD — Hạng mục/Dự án/NCC) + auto Địa điểm từ Project.Location + điều khoản TT Textarea đa dòng (`faed59f` #277) · anh chốt: **ẩn cả Trả lại+Từ chối khi người duyệt = người soạn** (drafterUserId match) + **quick-add NCC ngay form** (SuppliersController POST hạ → any-auth, PUT/DELETE giữ khóa — cicd authz probe live 4/4: 401 unauth/201 nv.test/403 delete/cleanup) + upload multiple files ×2 chỗ (`9c330d2` #278) · vòng 3-6 realtime (`f21c55d` #279-cancelled / `69997da` #280 / `80b64dd` #281-cancelled / `792c030` **#282 FINAL**): **bảng NCC table-fixed** width từng cột (file dài hết vỡ layout) + **bỏ ô "Tên" ngân sách nhập tay** (chỉ còn Số tiền, hasManual detect theo amount) + **GỠ field "Điều khoản thanh toán" khỏi TẤT CẢ form phiếu** (cột per-NCC + display phiếu cũ GIỮ) + **bỏ nút "+ Thêm hạng mục"** (1 phiếu = 1 hạng mục header). Bundle FINAL admin **`B1DtNT9C`**/user **`D6uF3Mln`** (Run #282). Test 240 ×2 local + 8× CI gate. **0/14 spawn truncated** (lần đầu sau nhiều session). → session log `2026-06-11-S59-wipe-tree-pmh-uat-batch.md`. Prev S58 (2026-06-11 — **4 việc prod-verified Run #382/#383/#384**: lock-demo-user fix + tạm ẩn HRM/Office/Cá nhân + Danh mục cuối sidebar + fe-user redesign theo UI/UX guide AI_INFRA. **Việc 1 — lock fix** (Run #382, `5998163` ~3m31s): Run #381 cicd phát hiện S57bis lock = NO-OP (14 email named-person là population Dev-only). Recon dump prod: demo thật = 20 UAT-matrix `{dept}.{nv,pp,tp}@`+`bod.{1,2}@` tạo TAY 05-13; root cause sâu = `DemoUserPassword` 11 ký tự < prod `RequiredLength=12` → `CreateAsync` silent-fail MỌI startup từ trước tới giờ (= root cause "helpdesk inert phòng IT 0 user" S56). Fix: union 20 email + password 12 ký tự. Prod sau deploy: **55 user / 21 active / 34 locked** — 20 UAT + 14 named-person locked ✓, **nv.cao/nv.truong CREATED+ACTIVE (helpdesk S56 RESOLVED)** ✓, 5 real staff created ✓, guard admin/catalog.manager/nv.test/chuong.phan-typo active ✓ (anh chốt 3 quyết định AskUserQuestion). Bundle FROZEN. gotcha **#60** NEW (seed silent-fail vs prod password policy — dump population thật trước khi lock/seed-by-email). +Closeout S57bis residual: gotcha #59 commit, 4 spawn-record on-behalf (H2 4-MISS), H1 5-patch doc-drift, test 240 re-verified local. Prev S57bis (2026-06-11 sáng) — **PE gắn Hạng mục công việc (Mig 49) + mở quyền Pe all-role + menu "Cá nhân" + khóa demo user** (sếp Zalo deadline 15:00): commit `17b23a4` (Harness-4 two-tier runtime-VERIFIED spawn-test 2 chiều) + `dd117b7` (product) → Run #381 PASS ~4m25s. Mig 49 `AddWorkItemToPurchaseEvaluation`: PE.WorkItemId `Guid?` loose-Guid KHÔNG FK vật lý (convention PE — database-agent design) + IX + validator NotEmpty create + FK-guard handler Conflict + UpdateDraft null-safe. FE ×2 app PeWorkspaceCreateView/PeHeaderForm (SHA256 identical)/PeDetailTabs "Dự án – Hạng mục". Pe_* 11 key CanRead+CanCreate mọi role (130 rows/13 role — Pe_* leaf KHÔNG nằm MenuKeys.All, build qua factory). Menu Personal root@30 + Chấm công re-parent + Master write-lock `Admin,CatalogManager` ×3 controller. Test 228→**240** (+12 PeWorkItemGuardTests). Bundle rotate cả 2: admin `CP4CB1ym` / user `BmZ3VHnm`. 2 builder truncated #53 + reviewer die-0-byte ×2 → em main solo vá cross-stack + self-gate. Excel (3) đối chiếu = NO-CHANGE (S55 data identical). Prev S56 — **Pre-golive verify sweep + golive-harden 4 fix — HMW 2-workflow, prod-verified**: commit `a20cde8` → Run #379 PASS ~4m20s. WF1 `pre-golive-verify` 7-stream song song + adversarial → 6 PASS/1 CONCERN/0 blocker = **GO**; key finds = **ops not code** (prod IT-dept 0 active user → helpdesk inert + S43 LeaveBalance lost-update còn nguyên). WF2 `golive-harden` fix 4: **#3** LeaveBalance lost-update→atomic `ExecuteUpdateAsync`+Serializable tx (NO mig, exactly-once nguyên) · **#5** ItTicket authz Forbidden-trước-NotFound (fail-closed) · **#6** DocxRenderer null-guard (2 warn→0) · **#4** Travel/Vehicle ApproveV2 +4 smoke. Test **216→228**. Bundle FROZEN `4SUwDLD8`/`XdKzt9LL` (BE-only). `sys.tables` re-ground **92→93** (cicd ground-truth, Mig 48 col-only). reviewer stage StructuredOutput-fail→em main đỡ cross-stack review (3 diff clean) + bump Serializable đóng MAJOR. gotcha **#58** NEW (EF read-modify-write lost-update→ExecuteUpdate atomic). **2 ops VPS pending** (gán user phòng IT + `tzutil` UTC+7). FE Phase 2 redesign **deferred** (recon ready). Prev S55 — **Nạp master data thật từ Excel + Project +4 cột (Mig 48), HMW-mode ON**: commit `69cb393` → Run #377 PASS ~4m33s, prod-verified. Anh giao file Excel "HẠNG MỤC CÔNG VIỆC DỰ ÁN" → `/ultra-on "workflow làm xong hết"`. Nạp **62 dự án + 71 hạng mục + 3 NCC** vào Project/WorkItem/Supplier qua `SeedRealMasterDataAsync` (per-code idempotent, **UNGATED** → coexist demo, tự lên prod). **Mig 48 `AddProjectMasterFields`**: Project +4 cột nullable (Year/Investor/Location/Package, NO new table). FE ProjectsPage form +4 input ×2 app SHA256 mirror. Test 216 (compile-fix MasterCatalogFilteredUniqueTests +4 null args, no new test). Bundle admin `DmjI8Cmn`→`B-d6893W`/user `YxL_MljK`→`XdKzt9LL` (cả 2 rotate). Prod verify: Mig 48 applied · Projects spot-6/6 · WorkItems VT/TP/MEP/TB=71 · Suppliers 3 · CAL01.Investor="Công ty TNHH Calofic". **2 agent return truncated** (implementer-backend + reviewer, gotcha #53) → em main disk/runtime-recover (build/test/sqlcmd/git truth); cicd verdict-FIRST → PASS clean no-truncate. Data-quality catch: MEP col gộp 2 nhóm + divider "THIẾT BỊ" → split đúng 71/4-category. Provenance `scripts/master-import-data.generated.md`. Prev S54 — **IT staff tự reassign ticket (cross-stack authz, HMW-mode ON)**: 1 code commit `ca4b602` → Run #376 PASS ~4m18s, prod-verified. Cho tổ IT (dept Code=="IT") + Admin reassign ItTicket trên CẢ 2 app. BE: NEW `GetAssignableItStaffQuery` capability endpoint `{canReassign,staff}` + `AssignItTicketHandler` authz Admin-OR-dept-IT (Forbidden) + assignee-must-IT (Conflict) + controller `/assign` hạ `[Authorize(Roles=Admin)]`→`[Authorize]` (handler fine-grained). FE: fe-admin+fe-user ItTicketsPage **SHA256-identical** (REVERSE S53 divergence) gate nút by `canReassign`, dropdown từ `/assignable-staff` (không `/users`). Test 203→**216** (+13 authz guard test-before-merge). NO migration (DepartmentId reuse). Bundle admin `DfCfHUE9`→`DmjI8Cmn` / user `_3S0BPJ2`→`YxL_MljK` (cả 2 rotate). 6-agent fan-out (BE∥FE→test→reviewer→cicd) + em main reconcile stray-memory residual (3 agent ghi MEMORY nhầm `src/Backend/.claude` → harvest về canonical). reviewer PASS 0 blocker (role-string "Admin" chain-verified). Task 1 Phase 9 Ops KHÔNG làm (anh dừng). flag: cicd `sys.tables=93` vs STATUS 92 → monthly audit re-ground.) Prev S53 (gotcha #57 EXT Master Mig 47 + P11-D reassign-UI fe-admin + P11-E menu + database-agent verified-runtime: `44b9e54` Run #260 + `dbf6648` Run #261, test→203, bundle→`DfCfHUE9`). Prev S52 (Phase 11 P11-D+E+F deployed + database-agent adopt, HMW-mode ON): 3 commit — `e9ee97f` (database-agent DB1–DB11 read-advisory, roster 10→11, executed-file CHỜ restart) + `6a66429` Wave 1 (P11-E AttendanceReport+Excel+OtPolicy multiplier + P11-F MaTicket codegen, migration-free) + `dcf76f8` Wave 2 (P11-D ItTicket round-robin assign dept-IT + SLA timer, Mig 46). Test 186→**200**. Bundle admin `DYfjnpY0`/user `_3S0BPJ2` (cả 2 deploy verified curl độc lập — Wave 1 BE 401 wired + Wave 2 /assign 401 + Mig 46 applied health-200). ⚠️ **Session-limit hit giữa Wave 2** → recovery: BE/test verify-on-disk + em main solo FE redo + curl-self-verify thay cicd-spawn (multi-agent resilience, git/disk/prod = source-of-truth). RAG recovered (chunk 2416 rerank live) nhưng stale 05-29. Prev S51: P11-C Vehicle+Driver.) +**Last updated:** 2026-06-20 (S79 — **adopt User-Mark (H-12/13) canonical §P + Harness-14 (Eval/Budget/Outcome) + chữ-ký RC** — em main + 4 Workflow (invest `wf_82337f7f-95c` → review `wf_a7cbe93e-912` → align-re-review `wf_9d3beebb-a95` → H14-review `wf_4d4eba6f-8a0`), **0 production code**. Anh gõ `/user-mark-active-high` "áp đầy-đủ chính-xác nhất theo AI_INFRA" → áp **canonical §P đầy-đủ** (P1-P10): 4 lệnh `/user-mark-*` + ledger `.claude/governance/ACTIVE-MARKS.md` (Active-High/Active/Medium/Disable) + `harness-11-engine.md §E`+**§F** + `rules.md §6.6` objective-criteria. **3 mark Active-High stamped** anh-confirm (`RC-pqhuy1987-20-06-2026-10-29-09/10/11`). completeness-gate H-6→H-13 **ĐẠT** (H-8 11/11 inherit no-`[1m]`). §F floor 6/6 + maturity HONEST. 3 adap-report + email ai_infra (`7b8615b3`). Bài học: broadcast cô-đọng→canonical-command/§P là spec THẬT (bản đầu MUST/TRACK→align lại) · report-before-stamp dogfood · investigator residual-diary OK. State GIỮ NGUYÊN Mig 57·88 bảng·354 test·gotcha 71·bundle `CsJetgZH`/`BVS0ApIm`. ⚠️ restart CLI. → log `2026-06-20-S79-user-mark-harness-14-adopt.md`). · **Prev S78** — **PE: đính kèm file khi DUYỆT (UAT Tra Sol / 5 tester)** — người duyệt tải file của mình lên ngay lúc Duyệt thay vì Trả lại phiếu (tình huống thay đổi nhỏ). Reuse hệ attachment + enum `ApprovalAttachment=5` **MIGRATION-FREE** (int-stored, 0 schema change); endpoint `POST {id}/attachments` + authz có sẵn (handler không guard drafter-only → approver upload được). FE 2 app SHA-identical: `PeWorkflowPanel` picker multi-file + upload-TRƯỚC-chuyển-phase (file lỗi=không duyệt) + mục "📎 File đính kèm khi duyệt" (download/preview) + 2 filter fix loại purpose=5 khỏi "Bảng so sánh" (gotcha **#71** proxy-predicate pollution). commit `7886fd0` → **Run #330 PASS** ~4m56s (test gate **354**, bundle admin **`CsJetgZH`**/user **`BVS0ApIm`**, NO migration, smoke 4×200 + attachments 401-wired). **3 lỗi em tự bắt review-trước-deploy** (authz-verify handler · filter-pollution #71 · Dialog mirror-truncate fe-admin). em-main-led + self-gate (grep no-leak thay reviewer over-cap) + cicd-monitor verify. → log `2026-06-19-S78-pe-attach-file-on-approve.md`. · **Prev S77** — **buổi sản phẩm RẤT LỚN: 10 deploy prod-verified #320→#329 (anh Kiệt FDC + Tra Sol + Bích Phượng UAT realtime, HMW-mode ON)** — bundle cuối admin **`BqKD3Y23`** / user **`Cn-i349D`** (Run #329). **Mig 56→57** `AddPeSuggestedPriceNotes` · test 344→**354** (+10) · gotcha **70** (tái dùng #70). 10 việc PE: (1) cờ GẤP **pill** 🔴PRO/🟢CCM đồng bộ MỌI danh sách + inbox (#320, NEW `PeUrgentChips` ×2 app); (2) **focus mode** bấm phiếu→overlay (#321) → **revert** list về layout gốc bám-trái lấp-đầy (#322); (3) **Mig 57** ô ghi chú giá đề xuất PRO/CCM (2 cột nvarchar(1000)) + **số phân cách VND** (`VndInlineEdit`/`BudgetCell`) + sửa chính tả "Bảng so sánh giá" + **guard #70** stale-echo (#323); (4) số âm → **đỏ + ngoặc** `(…)` hàng 7/8/9 (#324); (5) mục con **thụt dòng + gạch đầu dòng** phân biệt có-số/không-số (#325); (6) cờ gấp authz **BẤT ĐỐI XỨNG** GẮN=NV chức năng / GỠ=chỉ Trưởng phòng (DeptManager) (#326, asymmetric handler + button-by-state); (7) **tách chọn-phiếu (inline 3-panel) khỏi mở-rộng (overlay)** + nút "Xem mở rộng" mỗi dòng (`?expand=1`) (#327); (8) **chuông báo người duyệt** khi phiếu vào cấp họ — submit + mỗi approve-advance (#328, `LogTransitionAsync` notify current-level approvers); (9) banner phiếu **Trả lại** hướng dẫn gửi lại (#329). **3 lỗi em tự bắt khi review TRƯỚC deploy** (guard #70 stale-echo cho ô ghi chú · luật cờ-gấp bất-đối-xứng Tra Sol clarify giữa-chừng · double-mount PeDetailTabs Task H — intent-comment có nhưng code sót). Cách chạy: em-main + frontend-designer ×3 (focus/revert/decouple, FD2 stub-verify do backend-down #3) + implementer-frontend (pill/notes/sep/spelling) + implementer-backend ×2 (Mig 57 · approver-notify) + test-specialist ×3 (notes +7 · urgent symmetric→asymmetric REDO do clarify-after-dispatch) + cicd-monitor ×10 (10/10 PASS). **frontend-designer process-death giữa Task H → recover-disk** (edit hoàn-chỉnh trên disk, em-main build-verify + mirror). **🔴 NEXT (em): curate L1 over-cap GẤP** — reviewer **45KB** + cicd-monitor 37.6KB + inv-codebase 35.6KB (keep-floor-hit → manual SPLIT/condense; archive-gate A7 GATE PASS 186/186 integrity OK) + FD 26KB/test-spec 27.7KB WATCH strike-1. → log `2026-06-19-S77-pe-ux-batch-10-deploy.md`. · **Prev S76** — **PE ngân sách MA TRẬN 3 cột (Dự án|PRO|CCM) + bảng lưới `
` viền-ô + badge quyền-NS theo role** — anh Kiệt FDC + chị Trà Sol, go-live; anh giao `/ultra-on` "step-by-step + workflow-review-per-step, hoàn chỉnh rồi deploy". **3 commit prod-verified:** `e33481e` (feature Run #318 — Mig 56 + ma-trận-3-cột + badge designer/flow, `BhFDF9IJ`/`BAkuRl3C`) → `21d1f4e` (bảng lưới `
` theo phản hồi anh, Run #319 **`jOqxW4-p`**/**`DbsznVvR`**, smoke 3×200). **Part 1:** PRO sửa cột PRO (canEditPro), CCM sửa cột CCM (canEditCcm), Dự án FE hiển-thị-only; Mig 56 +ProInitial/ProAdjust additive + data-migrate ProEstimate→ProInitial (4 rows prod). **Part 2+3:** badge "✎ NS PRO/CCM" cạnh approver (suy từ role, display-only no-authz) ở Workflow Designer + flow Duyệt NCC. Test 339→**344** (+5). **2 workflow review** (Part 1 PASS + Part 2/3 PASS) — reviewer bắt **race mất-dữ-liệu** Part 1 (impl self-review sót) → vá `useIsFetching` 2 app, **gotcha #70 NEW**. Lessons: flex+gap KHÔNG ra "bảng" → phải `
` viền-ô · workflow-review-flaky (2-3 lane empty #53) → em-main self-gate lane rỗng. **NEXT:** 🔴 curate L1 over-cap (reviewer **45KB** + inv-codebase 35KB keep-floor-hit manual-condense; cicd 29KB + test-spec 28KB strike-1). → log `2026-06-19-S76-pe-budget-matrix-table-grid.md`. · **Prev S75 (2026-06-18)** — **Harness-11 adopt: engine bộ-nhớ-và-governance TỰ-BẢO-TRÌ + 2 double-check** — anh giao `/check-email AI_INFRA` + `/adap-apply` (mỗi stage workflow-review) + double-check ×2 + finalize report + push + session-end. em main + **5 Workflow** (audit `wf_7fdc3bd5-930` → implement `wf_c5e5844e-7c1` → review `wf_d7ca1ff8-942` → double-check `wf_a0b68d2f-30e` → checklist-verify `wf_39cd4cbe-f07`). **0 production code.** Built `scripts/governance-detectors.ps1` (C1 broken-pointer + C2/B3 staleness + C3 vocab-fork + C4 self-exclusion + C5 resolve, NO-API DÒ+FLAG, runtime **26 flag** bắt drift thật, C4 0-self-match) + `scripts/memory-archive-gate.ps1` (PHẦN A hysteresis 0.85/keep-floor 5/2-strike/A7 NO-API 186/186) + `docs/governance/harness-11-engine.md` canonical (3-tier D5/D6/D7 EXPLICIT + one-direction-lock D8) + **B1 ×11 count→pointer `docs/STATUS.md`** (drift mig53→55/test306→339/gotcha68→69/table93→88 RESOLVED) + cadence-wire session-start §2.1.3 (D1) + session-end §L.b(c) (D2) + agents/README Upgrade S75. **completeness-gate FORMAL ĐẠT** (B 4/4 + C 5/5 + D 11/11 đủ-trọn, A 🟡 tailored — A6 runtime cần 2×-Apply legit-by-design). **gotcha #30 reinforced** (box-glyph ├└─ KHÔNG vào .ps1 — PS5.1 -File ANSI mojibake, KỂ CẢ qua Edit render-normalize; detector pure-ASCII verified). 3 commit `e70c046`+`ae957c4`+`aa09e99` pushed + adap-report + email ai_infra (`2316773229f2`). **State THẬT GIỮ NGUYÊN: Mig 55 · 88 bảng · 339 test · gotcha 69 · menu 54 · bundle `BYF5vIMJ`/`CB-tiRxd`.** ⚠️ restart CLI (cadence §2.1.3/§L.b + ef-core skill). 🔴 curate-debt: reviewer 38.8KB + inv-codebase 31.5KB + cicd 26.8KB over-cap (archive-gate confirm; reviewer+inv keep-floor hit → manual split). → log `2026-06-18-S75-harness-11-adopt.md`. **Prev S74** — **PE ô "Ghi chú từ CCM" ngân sách gói thầu (Mig 55)** — anh forward 2 luồng Zalo (Trà Sol + Kiệt FDC) "CCM cũng giống PRO cho nhập + ghi chú, hiện 0 hết" → em-main BE+Mig55 ∥ implementer-frontend FE 2 app SHA-mirror ∥ test-specialist (chết rate-limit → recover-disk). 2 fork anh chốt qua AskUserQuestion: **thêm CcmNote (Mig 55)** + **GIỮ phân vai CCM** (CostControl/Admin). Entity `PeWorkItemBudget +CcmNote` mirror ProNote · `UpdatePeBudgetCcmCommand +CcmNote` absolute-set role-gate fail-closed · DTO+controller+mapping · FE dòng "Ghi chú từ CCM" gate `canEditCcm` (sau V0/hiệu chỉnh, absolute-set đủ 3 field). Mig 55 additive-nullable sạch (no #63). Test 334→**339** (+5 CcmNote). **Chẩn đoán "0 hết không nhập":** tài khoản thiếu role CostControl (KHÔNG bug) → UAT bằng CCM/Admin. commit `8655ebf` push main (cicd **Run #315 PASS** ~4m54s — Mig 55 applied prod, bundle admin `BYF5vIMJ`/user `CB-tiRxd`, smoke 4×200). Lessons: controller call-site thiếu arg sau +param record (grep+vá, #65 bắt) · agent-kill-529 recover-disk no-re-spawn · PS here-string commit-msg trong if-block mis-parse → `git commit -F`. → session log `2026-06-18-S74-pe-ccm-note.md`. **Prev S73** — **Mig 54 PE giá đề xuất PRO/CCM + CEO chọn giá chốt + CCM duyệt-done ô-tích (anh Kiệt FDC — go-live so-sánh-giá thứ Hai 22/06)** — em main + 6 sub + 2 review-workflow. **2 commit prod-verified:** `1d86abc` (feature, cicd Run #313 PASS — Mig 54 + bundle admin `OlNyG9OD`/user `DSzSLVtL`) + `6aa4dcb` (FE empty-candidates guard fix). **BE:** Mig 54 `AddPeSuggestedAndApprovedPrice` 5 cột additive-nullable (ProSuggestedMin/Max·CcmSuggested·ApprovedPriceAmount·Source) + 2 setter role-gate PRO/CCM (Forbidden fail-closed mirror budget) + ApproveV2 **③ AUTO→OPT-IN** (`finalizeByCcmDelegation` ô-tích, gỡ auto-threshold S69) + **① bind giá chốt** mọi nhánh DaDuyet (human bắt-buộc-chọn, isSystem-miễn) + DTO +7 field/capability. **FE 2 app SHA-mirror:** PeWorkflowPanel (bộ chọn giá + ô tích CCM + fix empty-candidates) + PeDetailTabs `SuggestedPriceRows` + types +7. **Test 306→334** (+28). **2 workflow review (bài học):** R1 schema-force CHỈ **1/4** lane returned (flaky no-StructuredOutput) → R2 **free-text 2/3 PASS** — rủi ro #1 FE empty-candidates = **UNREACHABLE** (submit-guard `:194` chặn gửi-duyệt khi winnerQuoteTotal≤0). → review fan-out dùng **free-text / hmw RUN-TRACE**, KHÔNG ép-schema inline. **Governance honest:** em lệch mandate auto-Workflow (mode-ON) + chỉ khai khi anh hỏi → **cam kết báo-TRƯỚC-khi-lệch**. Run-trace `runs/2026-06-18-mig54-pe-review/` (custom-inline, bù post-hoc). → session log `2026-06-18-S73-pe-gia-de-xuat-ccm-done.md` pending. · **Prev S72** — **Harness-10 flat-refine + checklist-v2 adopt (re-audit 3-workflow) + sleep NO-OP** — em main + 9 sub qua 3 Workflow (audit `wf_13868efb-ea7` → implement `wf_ac43b5ff-7d1` → review `wf_d482e10d-5dd`, mandate Harness-9 B1+B2). Anh chỉ "sisters làm tốt mỗi SE thiếu" → re-audit đo vs canonical: **SE BEHIND Harness-10 flat** (run-trace còn SUBFOLDER, canonical=FLAT) → migrate `hmw.js` (`:103` sub-md/→flat + `:52` schema + **H4.5→H8 doc-drift**) + `workflows/README` full-rewrite + `runs/README` + session-start/end + `agents/README` Upgrade S72 + `_ledger`; **5 run cũ S71 GIỮ subfolder** (C8 dual-accept). +2 broadcast 06-18 adopt (checklist-v2 + h10-flat-detector-refine). +`/sleep-recovery-memory-l2` port (A8, §J2-tailored SE-only, floor intact, live skill). **detector refine-b TAILORED-OUT** (SE Workflow-tool no-CLI-bypass; containment git-diff+tracked+orphan-scan G-015). **REVIEW (B2 dogfood) bắt 2 lỗi IMPLEMENT-self-assess sót** (hmw.js:52 schema-stale + sleep-cmd auto-check un-wired overclaim) → fixed (auto-check **WIRED thật**: budget.json `+last_sleep_at` + session-start:78 + session-end:48, grep-verified). em-main containment-check tự bắt 1 reviewer residual-write (raw-Workflow KHÔNG hmw.js writeGuard → reverse-finding #4) → revert. **B3 self-correct:** S71 report path tắt `runs/`+"14" → thật `.claude/workflows/runs`=22. **Sleep `all`=NO-OP** (5/9 empty-archive + 4/9 đã-gisted → 0 compressed; `last_sleep_at`=2026-06-18). **0 production code, state THẬT GIỮ NGUYÊN.** adap-report `2026-06-18-Governance-harness-10-flat-refine-checklist-v2` + email ai_infra (`5f511fe5c0f2`). ⚠️ **restart CLI** activate FLAT-runtime hmw.js + wired sleep-check + sleep-recovery skill. 🔴 **NEXT (em):** curate investigator-codebase L1 **28973 OVER** (audit-trail) + watch frontend-designer/test-specialist near-cap. → session log `2026-06-18-S72-harness-10-flat-refine.md`. **Prev S71 — Harness-10 adopt: tracked run-trace folder convention + checklist 9-10 self-verify** — em main + 3 Workflow (invest `wf_9c2cd2cd-2e7` → implement `wf_e4e46725-231` → review `wf_636bc95b-939`) theo mandate Harness-9 PART 2. **0 production code** (governance/workflow only). Migrate `.claude/workflows/wave-*/` gitignored → `runs//` **git-TRACKED** (run.md + sub-md/ + harvest/) + `_ledger.md` 2-nhịp + 3-layer anti-miss (L1 em-main@P1 ledger-check / L2 session-start orphan-scan / L3 session-end close-gate **idempotent-VERIFY-not-re-APPEND**) + **containment model shift** (Harness-2 B6 "mọi tracked-change=vi-phạm" → Harness-10 "tracked-change NGOÀI run-folder + code-disjoint=vi-phạm"; run-folder TRACKED → HIỆN git-diff = audit trực-tiếp). hmw.js wave→run-trace (accept `args.run`, alias `wave`; path `sub-md/`; `node --check` PARSE-OK). **Review độc-lập (R2+R3) bắt C5 L1 over-claim** (doc nói hmw.js prompt-builder emit L1 reminder nhưng grep engine=0 → engine no-fs → fixed path-a: L1 = em-main @P1 convention) — dogfood mandate B2 đúng (1-workflow-tự-chấm sẽ bỏ sót). **checklist 9-10:** Part A (Harness-9 memory) + Part B (adap 2-workflow) ĐÃ done S70; Part C (Harness-10) MỚI 8/8. dogfood: 3 run-trace folder TRACKED đầu + 3 entry ledger. adap-report `2026-06-18-Governance-checklist-harness-9-10` + email ai_infra. **State THẬT GIỮ NGUYÊN: Mig 53 · 88 bảng · 306 test · 68 gotcha · menu 54 · bundle admin `BgNCjwsG`/user `CBvh0vtf`.** + `CLAUDE.md` test-flush 263→306 (pre-existing uncommitted, resolve H1 stale-flag). ⚠️ restart CLI activate hmw.js RUN-TRACE runtime + (carry S66/S70) §2.1.2 budget-audit/reviewer-Cat-6/H8-inherit. ✅ **curate-debt CLOSED S71** (FINALIZE double-check `wf_73de399d-753` + curate `wf_f32987b8-03f`): reviewer 36.7→24.8KB + investigator 29.8→23.2KB (both <25600 cap, archive +N -0 0-byte-loss) + reviewer-gist gen:2 + 3 user-memory G2/G3 + budget.json re-measure. Race root-cause fixed cấu-trúc (hmw.js RUN-TRACE writeGuard). → session log `2026-06-18-S71-harness-10-run-trace.md` (pending). **Prev S70** — **Harness-9 adopt: L2 archive dark-matter recovery + adap 2-workflow mandate** — em main + 3 Workflow (investigate `wf_be952f3c-97f` → implement `wf_a58e0d15-beb` → audit `wf_9520d8cd-4fe`) + 2 monitor bootstrap. **0 production code** (governance/memory only, commit `f36aab8` pushed). 4 over-cap sub-agent (cicd-monitor/investigator-codebase/reviewer/implementer-backend) curate L1→L2 + `archive/_INDEX.md` (mục-lục con-trỏ **substring sha-keyed**, Ctrl-F fallback) + `.gist.md` (nén 4-field distill-gen:1, verbatim FROZEN) → **cả 4 < 25KB auto-inject cap** (P1 curate-debt CLOSED; ~240KB archive hết RAG-dark). PART 2/3 process-mandate codify (adap-apply + agents/README Upgrade S70 + session-start §2.1.2 budget-audit). **0-byte-loss git+sha verified** (Stage C audit + em-main self-gate khi 2 reviewer no-StructuredOutput). +`memory-budget.json` (seed-by-measure) + `scripts/measure-agent-memory.ps1` + `.ragignore` + doc-drift 4-cite flush. adap-report + email-back ai_infra (body-hash `7c07b716e775`). **State THẬT GIỮ NGUYÊN: Mig 53 · 88 bảng · 306 test · 68 gotcha · menu 54 · bundle admin `BgNCjwsG`/user `CBvh0vtf`.** ⚠️ restart CLI để activate session-start §2.1.2 + pending H8 inherit + reviewer Cat-6. → session log `2026-06-17-S70-harness-9-l2-recovery.md`. **Prev S69** — **Văn phòng số (E-Office) port + golive + PE cờ gấp/ngưỡng CCM — 4 deploy prod-verified Run #305→#308, HMW-mode ON, 2 workflow fan-out + ~14 spawn**: foundation PURO (shared PageHeader/KpiCard/WidgetCard + Dashboard 2-cột + sync fe-admin index.css đóng drift S66-S68) #305 → **re-skin TRỌN 10 page** PURO layout + CSS Hồ sơ NS, phẫu-thuật-giữ-100%-logic (reviewer verify api/queryKey byte-identical) #306 → **Office golive public** `SeedAllRolesOfficeModulePermissionsAsync` read+create 16-key allow-list mọi role (mirror S65 pattern, chạy SAU revoke; excluded Off_PhongHop_Manage/Off_AttendanceReport/Off_ChamCong giữ ẩn; cicd DB-verify 16/16×13 role) #307 → **PE cờ gấp PRO/CCM + CCM duyệt-final theo ngưỡng giá trị** Mig 53 (anh Kiệt FDC sau họp sếp) #308. **State THẬT: Mig 53 · 88 bảng · 306 test (45D+261I) · 68 gotcha · menu 54 · bundle admin `BgNCjwsG`/user `CBvh0vtf` Run #308.** 2 gotcha NEW (**#67** Tailwind accent palette thiếu-stop vỡ-màu-im-lặng · **#68** stale-diagnostic-background-agent). 2 truncation #53 (impl-backend positional-record + impl-frontend) → em main recover-disk + self-gate (cả 2 build PASS sau-cùng). C (sau duyệt → chuyển phiếu đến dự án) chờ anh Kiệt spec form. → session log `2026-06-17-S69-vanphong-golive-pe-urgent-threshold.md`. **Prev S68** — **Hồ sơ NS header chi tiết NV: làm nổi bật + fix tên render đen→trắng** — em main solo, 3 commit (2 FE `6983609`+`37752eb` · 1 docs `11bc96d`), 2 deploy prod-verified Run #303-304 (anh UAT realtime): tên `text-xl extrabold`+drop-shadow · dòng meta `text-[13px] font-medium` trắng-đậm · badge pill **màu theo trạng thái** (#303); anh báo "tên đen nền xanh ko nổi bật" → diagnose **rule `h1-h4{color:#0b1220}` viết NGOÀI `@layer` thắng `text-white`** (Tailwind v4 unlayered > all layers, **gotcha #66 NEW**) → ép `text-white!` + thu nhỏ `text-lg` (#304, grep dist confirm `!important`). Bootstrap: 2 monitor RE-REPORT CLEAN + 2 doc-drift fix (dep-audit 64→65 · root CLAUDE 263→286, H1 flag). **State THẬT: Mig 52 · 88 bảng · 286 test · 66 gotcha · menu 53 · bundle admin `CNUv1jxY`/user `CpOskeS1` Run #304.** ⚠️ curate-debt P1: cicd-monitor **44.1KB** (worst). **Prev S67:** **buổi sản phẩm LỚN, 6 deploy prod-verified Run #297→#302** (anh + anh Kiệt FDC UAT realtime, HMW-mode ON): fe-user Hồ sơ NS đồng nhất font + chữ đen→**xanh đậm `brand-800`** (#297 `ab4e681`) · **fe-admin mirror master-detail** + accent tokens index.css [đóng pending lớn nhất HRM go-live, page SHA256 ×2] (#298 `292d64d`) · **+23 test-after HRM** [Dept cycle-guard · PE HoSoLink absolute-set · HRM-perm seed] → 263→**286** (#299 `bcd619d`) · **list flex-row gọn** [bảng 3-cột→flex-row, `overflow-x-hidden` → hết tràn ngang rail] + đồng nhất cỡ chữ [18/14/13/11px] ×2 app (#300 `91aaf05`) · **PE Link hồ sơ auto-detect** `http(s)`→hyperlink/`O:\`→Copy (#301 `6df1b2d`) → **render link `file://` bấm-thử** + Copy (#302 `536dd6b`). **Workflow research 3 investigator-api** (auto-mở `O:\` từ web): default browser CHẶN https→file://; **chỉ Edge GPO `IntranetFileLinksEnabled`** (Edge-only, Intranet Zone, 1 GPO domain zero-per-machine) = one-click thật — Chrome không có; .url-download zero-install nhưng 2-click. **State THẬT: Mig 52 · 88 bảng · 286 test (45D+241I) · 65 gotcha · menu 53 · bundle admin `CcrZqfht`/user `DniDFUB_`** (#302). test-specialist truncated return #53 → em main recover-disk (3 file test đủ + 286 verify); 0 production bug. ⚠️ curate-debt: cicd-monitor 39.8KB + inv-codebase 39.4KB over-cap. **Prev S66** — **session-end closeout em-main-solo, 0 product-sub:** adopt **Harness-8 all-inherit** (7 sub demoted `claude-opus-4-8`→`inherit` → cả 11 = inherit, gỡ two-tier Harness-4) + **cicd-monitor L1 curate 86.8→28.9KB** (byte-exact sed → `archive/2026-06.md`, incl #291 forensic) + **ef-core skill doc-flush Mig 50→52** (H1 drift, +Mig 51/52 rows) + check-email AI_INFRA (**0 thư mới se-directed**). ~17 file docs/gov/config, **0 production code** → state THẬT GIỮ NGUYÊN: **Mig 52 · 88 bảng · 263 test · 65 gotcha · menu 53 · bundle admin `BDwV5d0X`/user `DbVv6rsf`**. ⚠️ **Restart CLI** để H8 runtime (frontmatter no hot-reload) + reviewer Category 6 (S64 pending). adap-report `2026-06-16-Governance-harness-8-all-inherit-workflow-fastest` + email-back ai_infra (hash `fa7f690d` round-trip MATCH). Prev S65 — **HRM go-live: public Hồ sơ Nhân sự + trang master-detail giống NamGroup + Department hierarchy + PE Link hồ sơ**, ~6 deploy prod-verified Run #289→#295, anh + anh Kiệt FDC UAT realtime): (1) **public Hồ sơ Nhân sự mọi role** — `SeedAllRolesHrmProfileReadPermissionsAsync` grant CanRead `Hrm`+`Hrm_HoSo` 13 role chạy SAU revoke S58 (upgrade-only; EmployeesController policy-based `Hrm_HoSo.Read` mở luôn API không hardcode Roles), giữ ẩn Dashboard NS, Run #289; (2) **redesign màu foundation fe-user** — accent palette teal/violet/amberx/greenx + `.app-gradient-brand`/`.card-accent`/`.icon-chip` + heading 700, brand #1F7DC1 + Be Vietnam Pro giữ, Run #290; (3) **Department hierarchy** Mig 51 `AddDepartmentParentId` (ParentId loose-Guid no-FK + `GET /departments/tree` ráp cây in-memory + rollup count theo `User.DepartmentId` + cycle-guard HashSet) + picker "Phòng cha" fe-admin (self-service org chart) + Update cycle-guard, Run #292; (4) **Hồ sơ Nhân sự master-detail giống NamGroup** — `EmployeesListPage` rewrite: 3-panel→**2-cột** (cây tổ chức gốc "SOLUTION COMPANY" + list chồng TRÁI · chi tiết 5 tab PHẢI) + tô màu accent, giữ 100% 5 satellite CRUD (16 endpoint), Run #293/#294/#295; (5) **PE mục "e. Link hồ sơ"** Mig 52 `AddHoSoLinkToPurchaseEvaluation` (`HoSoLink string?` hyperlink NAS + `` target_blank rel-noopener + null-safe) + rename "Dự trù PRO"→"Ngân sách PRO" (row+badge) ×2 app SHA256-mirror, Run #293. **State THẬT: Mig 52 · 88 bảng · 263 test (45D+218I) · 65 gotcha · menu 53 · bundle admin `BDwV5d0X`/user `DbVv6rsf`** (Run #295 `456c7a7` Employee-refine — user rotate `CZfo_PFZ→DbVv6rsf`, cicd PASS). **🔥 Workflow fan-out chạy THẬT lần đầu** (`pe-hoso-link-rename-pro` BE∥FE→review) — parallel disjoint-file OK, NHƯNG FE+reviewer return-RỖNG #53 → em main recover-disk + self-gate (bắt badge "DỰ TRÙ PRO" sót rename); **verdict: fan-out cho parallelism nhưng reviewer-stage không tin được trong harness này → verify-heavy task vẫn tự gác = tương đương spawn lẻ** (`feedback_workflow_fanout_reliability`). gotcha **#65** NEW (build csproj con ≠ `dotnet build slnx` gồm tests → miss test-compile khi đổi chữ ký record command → CI CS7036 Run #291 FAIL-gated). **Prev S64** adopt **Harness-7 writing-quality floor** — em main solo, commit `6afde19` docs/gov-only, 0 sub spawn: `rules.md §1.1` outward-VN-full-grammar + reviewer Category 6 + adap-report + email ai_infra; broadcast body-hash `a4580ea9` verified-MATCH **KHÔNG mis-stamp** [false-mismatch = gotcha #61 PS5.1 UTF-8 decode của em]. Prev S63 docs-closeout bù S60/S61/S62 — **State THẬT: Mig 50 · 88 bảng · 263 test (45D+218I) · 64 gotcha · menu 53 · bundle admin `0xKYGhhf`/user `C81ZdG9G` Run #286**; S60-62 = PE ràng buộc gửi-duyệt + bypass drafter (S60) · gỡ "Từ chối" (S60) · Mig 50 ngân sách per-gói-thầu Excel anh Kiệt + XÓA module Budget cũ (S61) · vượt-NS cảnh-báo-mềm cho lưu (S62); + reconcile stray reviewer cwd-misland; session log `2026-06-12-S60-S62-pe-budget-workitem-softwarning.md`). Prev Session 59 ( **10 đợt ship prod-verified: 8 Run PASS + 2 cancelled-supersede-benign #273→#282** (run_number API — dải đếm khác #38x S58, cùng pipeline; 2 cancel = push-đè khi UAT góp ý realtime, ancestor-verified): (1) **wipe transactional testing data** theo anh Kiệt FDC — 10 PE + 7 HĐ [DEMO] + 64 notif + 1 AwV2 cũ inactive = 0, reset PeSeq/CtSeq → phiếu thật đầu tiên team tạo chiều nay = **PE/2026/A/001** ✓, app-recycle KHÔNG resurrect (DemoSeed gate held), uploads orphan dọn (`56882ac` #273); (2+3) **PE tree Panel 1 chốt 4 tầng "📅 Năm > 📁 Dự án > 🧱 Hạng mục > Phiếu"** (anh chốt follow-up sau bản gộp "Dự án (Năm)"; `yearGroups` useMemo, expand-key v3, FE-only — list DTO đã có workItemName S57bis) (`0eafcd3` #274); (4) **dọn 15 mã hạng mục demo tự chế** theo chị Trà Sol "xóa cái đám phần thô phần hoàn thiện… MÀ ANH TỰ ĐẺ RA" — WorkItems 86→**71**, GỠ HẲN block seed demo khỏi DbInitializer, đối chiếu 71/71 khớp bảng PMH từng dòng (`bbd1554` #275, bundle frozen BE-only); (5) **rename 71 mã đúng format PMH anh Kiệt chốt** "MÃ CV gồm chữ MEP-SUB-1 rồi tên 1 MEP Sub MEP (Full) — đúng kiểu vậy" → `MAT-n`/`SUB-n`/`MEP-SUB-n`/`MEP-EQU-n` + Name "STT nhóm tên"; **DB-trước-code-sau** (gotcha **#62** NEW — seed per-code idempotent, sai thứ tự = 142 rows) + sqlcmd `-f 65001` (gotcha **#61** NEW — verify data qua API JSON, KHÔNG tin console mojibake) + FE sort numeric ×3 ×2 app (`c869d26` #276); (6) **UAT 6 vòng 11 điểm**: NEW **`ui/SearchableSelect`** combobox gõ-lọc BỎ DẤU (fold NFD — Hạng mục/Dự án/NCC) + auto Địa điểm từ Project.Location + điều khoản TT Textarea đa dòng (`faed59f` #277) · anh chốt: **ẩn cả Trả lại+Từ chối khi người duyệt = người soạn** (drafterUserId match) + **quick-add NCC ngay form** (SuppliersController POST hạ → any-auth, PUT/DELETE giữ khóa — cicd authz probe live 4/4: 401 unauth/201 nv.test/403 delete/cleanup) + upload multiple files ×2 chỗ (`9c330d2` #278) · vòng 3-6 realtime (`f21c55d` #279-cancelled / `69997da` #280 / `80b64dd` #281-cancelled / `792c030` **#282 FINAL**): **bảng NCC table-fixed** width từng cột (file dài hết vỡ layout) + **bỏ ô "Tên" ngân sách nhập tay** (chỉ còn Số tiền, hasManual detect theo amount) + **GỠ field "Điều khoản thanh toán" khỏi TẤT CẢ form phiếu** (cột per-NCC + display phiếu cũ GIỮ) + **bỏ nút "+ Thêm hạng mục"** (1 phiếu = 1 hạng mục header). Bundle FINAL admin **`B1DtNT9C`**/user **`D6uF3Mln`** (Run #282). Test 240 ×2 local + 8× CI gate. **0/14 spawn truncated** (lần đầu sau nhiều session). → session log `2026-06-11-S59-wipe-tree-pmh-uat-batch.md`. Prev S58 (2026-06-11 — **4 việc prod-verified Run #382/#383/#384**: lock-demo-user fix + tạm ẩn HRM/Office/Cá nhân + Danh mục cuối sidebar + fe-user redesign theo UI/UX guide AI_INFRA. **Việc 1 — lock fix** (Run #382, `5998163` ~3m31s): Run #381 cicd phát hiện S57bis lock = NO-OP (14 email named-person là population Dev-only). Recon dump prod: demo thật = 20 UAT-matrix `{dept}.{nv,pp,tp}@`+`bod.{1,2}@` tạo TAY 05-13; root cause sâu = `DemoUserPassword` 11 ký tự < prod `RequiredLength=12` → `CreateAsync` silent-fail MỌI startup từ trước tới giờ (= root cause "helpdesk inert phòng IT 0 user" S56). Fix: union 20 email + password 12 ký tự. Prod sau deploy: **55 user / 21 active / 34 locked** — 20 UAT + 14 named-person locked ✓, **nv.cao/nv.truong CREATED+ACTIVE (helpdesk S56 RESOLVED)** ✓, 5 real staff created ✓, guard admin/catalog.manager/nv.test/chuong.phan-typo active ✓ (anh chốt 3 quyết định AskUserQuestion). Bundle FROZEN. gotcha **#60** NEW (seed silent-fail vs prod password policy — dump population thật trước khi lock/seed-by-email). +Closeout S57bis residual: gotcha #59 commit, 4 spawn-record on-behalf (H2 4-MISS), H1 5-patch doc-drift, test 240 re-verified local. Prev S57bis (2026-06-11 sáng) — **PE gắn Hạng mục công việc (Mig 49) + mở quyền Pe all-role + menu "Cá nhân" + khóa demo user** (sếp Zalo deadline 15:00): commit `17b23a4` (Harness-4 two-tier runtime-VERIFIED spawn-test 2 chiều) + `dd117b7` (product) → Run #381 PASS ~4m25s. Mig 49 `AddWorkItemToPurchaseEvaluation`: PE.WorkItemId `Guid?` loose-Guid KHÔNG FK vật lý (convention PE — database-agent design) + IX + validator NotEmpty create + FK-guard handler Conflict + UpdateDraft null-safe. FE ×2 app PeWorkspaceCreateView/PeHeaderForm (SHA256 identical)/PeDetailTabs "Dự án – Hạng mục". Pe_* 11 key CanRead+CanCreate mọi role (130 rows/13 role — Pe_* leaf KHÔNG nằm MenuKeys.All, build qua factory). Menu Personal root@30 + Chấm công re-parent + Master write-lock `Admin,CatalogManager` ×3 controller. Test 228→**240** (+12 PeWorkItemGuardTests). Bundle rotate cả 2: admin `CP4CB1ym` / user `BmZ3VHnm`. 2 builder truncated #53 + reviewer die-0-byte ×2 → em main solo vá cross-stack + self-gate. Excel (3) đối chiếu = NO-CHANGE (S55 data identical). Prev S56 — **Pre-golive verify sweep + golive-harden 4 fix — HMW 2-workflow, prod-verified**: commit `a20cde8` → Run #379 PASS ~4m20s. WF1 `pre-golive-verify` 7-stream song song + adversarial → 6 PASS/1 CONCERN/0 blocker = **GO**; key finds = **ops not code** (prod IT-dept 0 active user → helpdesk inert + S43 LeaveBalance lost-update còn nguyên). WF2 `golive-harden` fix 4: **#3** LeaveBalance lost-update→atomic `ExecuteUpdateAsync`+Serializable tx (NO mig, exactly-once nguyên) · **#5** ItTicket authz Forbidden-trước-NotFound (fail-closed) · **#6** DocxRenderer null-guard (2 warn→0) · **#4** Travel/Vehicle ApproveV2 +4 smoke. Test **216→228**. Bundle FROZEN `4SUwDLD8`/`XdKzt9LL` (BE-only). `sys.tables` re-ground **92→93** (cicd ground-truth, Mig 48 col-only). reviewer stage StructuredOutput-fail→em main đỡ cross-stack review (3 diff clean) + bump Serializable đóng MAJOR. gotcha **#58** NEW (EF read-modify-write lost-update→ExecuteUpdate atomic). **2 ops VPS pending** (gán user phòng IT + `tzutil` UTC+7). FE Phase 2 redesign **deferred** (recon ready). Prev S55 — **Nạp master data thật từ Excel + Project +4 cột (Mig 48), HMW-mode ON**: commit `69cb393` → Run #377 PASS ~4m33s, prod-verified. Anh giao file Excel "HẠNG MỤC CÔNG VIỆC DỰ ÁN" → `/ultra-on "workflow làm xong hết"`. Nạp **62 dự án + 71 hạng mục + 3 NCC** vào Project/WorkItem/Supplier qua `SeedRealMasterDataAsync` (per-code idempotent, **UNGATED** → coexist demo, tự lên prod). **Mig 48 `AddProjectMasterFields`**: Project +4 cột nullable (Year/Investor/Location/Package, NO new table). FE ProjectsPage form +4 input ×2 app SHA256 mirror. Test 216 (compile-fix MasterCatalogFilteredUniqueTests +4 null args, no new test). Bundle admin `DmjI8Cmn`→`B-d6893W`/user `YxL_MljK`→`XdKzt9LL` (cả 2 rotate). Prod verify: Mig 48 applied · Projects spot-6/6 · WorkItems VT/TP/MEP/TB=71 · Suppliers 3 · CAL01.Investor="Công ty TNHH Calofic". **2 agent return truncated** (implementer-backend + reviewer, gotcha #53) → em main disk/runtime-recover (build/test/sqlcmd/git truth); cicd verdict-FIRST → PASS clean no-truncate. Data-quality catch: MEP col gộp 2 nhóm + divider "THIẾT BỊ" → split đúng 71/4-category. Provenance `scripts/master-import-data.generated.md`. Prev S54 — **IT staff tự reassign ticket (cross-stack authz, HMW-mode ON)**: 1 code commit `ca4b602` → Run #376 PASS ~4m18s, prod-verified. Cho tổ IT (dept Code=="IT") + Admin reassign ItTicket trên CẢ 2 app. BE: NEW `GetAssignableItStaffQuery` capability endpoint `{canReassign,staff}` + `AssignItTicketHandler` authz Admin-OR-dept-IT (Forbidden) + assignee-must-IT (Conflict) + controller `/assign` hạ `[Authorize(Roles=Admin)]`→`[Authorize]` (handler fine-grained). FE: fe-admin+fe-user ItTicketsPage **SHA256-identical** (REVERSE S53 divergence) gate nút by `canReassign`, dropdown từ `/assignable-staff` (không `/users`). Test 203→**216** (+13 authz guard test-before-merge). NO migration (DepartmentId reuse). Bundle admin `DfCfHUE9`→`DmjI8Cmn` / user `_3S0BPJ2`→`YxL_MljK` (cả 2 rotate). 6-agent fan-out (BE∥FE→test→reviewer→cicd) + em main reconcile stray-memory residual (3 agent ghi MEMORY nhầm `src/Backend/.claude` → harvest về canonical). reviewer PASS 0 blocker (role-string "Admin" chain-verified). Task 1 Phase 9 Ops KHÔNG làm (anh dừng). flag: cicd `sys.tables=93` vs STATUS 92 → monthly audit re-ground.) Prev S53 (gotcha #57 EXT Master Mig 47 + P11-D reassign-UI fe-admin + P11-E menu + database-agent verified-runtime: `44b9e54` Run #260 + `dbf6648` Run #261, test→203, bundle→`DfCfHUE9`). Prev S52 (Phase 11 P11-D+E+F deployed + database-agent adopt, HMW-mode ON): 3 commit — `e9ee97f` (database-agent DB1–DB11 read-advisory, roster 10→11, executed-file CHỜ restart) + `6a66429` Wave 1 (P11-E AttendanceReport+Excel+OtPolicy multiplier + P11-F MaTicket codegen, migration-free) + `dcf76f8` Wave 2 (P11-D ItTicket round-robin assign dept-IT + SLA timer, Mig 46). Test 186→**200**. Bundle admin `DYfjnpY0`/user `_3S0BPJ2` (cả 2 deploy verified curl độc lập — Wave 1 BE 401 wired + Wave 2 /assign 401 + Mig 46 applied health-200). ⚠️ **Session-limit hit giữa Wave 2** → recovery: BE/test verify-on-disk + em main solo FE redo + curl-self-verify thay cicd-spawn (multi-agent resilience, git/disk/prod = source-of-truth). RAG recovered (chunk 2416 rerank live) nhưng stale 05-29. Prev S51: P11-C Vehicle+Driver.) --- @@ -19,7 +19,7 @@ | Menu keys | **54** | +1 S69 `Off_Dashboard` (landing Văn phòng số). Prev re-ground S61 (`MenuKeys.cs` const — Mig 50 gỡ 4 `Bg_*` Budget menu cũ). Prev 57 (S58) | | Tests | **354 PASS** | 45 Domain + 309 Infra · 0 fail / 0 skip · **S77 +10** (+7 `PeSuggestedPriceSetterAuthzTests` ghi chú PRO/CCM Mig 57 absolute-set/role-gate/null-clear/max-1000 · +3 `PeUrgentToggleAuthzTests` rewrite cờ-gấp **BẤT ĐỐI XỨNG** SET=function role / UNSET=function+DeptManager, plain-PRO-unset Forbidden) · **S76 +5** (`PeWorkItemBudgetTests` PRO split: set ProInitial+ProAdjust gồm âm · validator ProInitial≥0/ProAdjust-cho-âm · full=proFull khi CCM empty · full=CCM khi CCM present) · **S74 +5** (`PeWorkItemBudgetTests` §4b CcmNote: set CCM/Admin · null-clear absolute-set · non-priv Forbidden+no-mutate · all-3-persist) · **S73 +28** (PE opt-in finalize spec 6→11 + 10 giá-chốt `PeApprovedPriceFinalizeTests` + 13 setter-authz `PeSuggestedPriceSetterAuthzTests`) · **S69 +20** (Office-golive OfficeModulePermissionSeed 6 + PE PeCcmThresholdFinalize 5 + PeUrgentToggleAuthz 9) · **S67 +23 HRM test-after** (DepartmentTreeTests 8 cycle-guard/rollup + PeHoSoLinkTests 9 absolute-set + HrmProfilePermissionSeedTests 6 reflection-seed) → 286 · S61 +22 `PeWorkItemBudgetTests` −14 `BudgetPolicyTests` −1 → 263 · S60 +14 `PeSubmitGuardAndBypassTests` +2 spec → 256 (Domain 58→45 do drop Budget module tests) | | Gotchas | **71** | +1 S78 **#71** (thêm enum value vào entity DÙNG-CHUNG → pollute UI/guard phân-loại theo PROXY-predicate `supplierId===null` thay vì enum tường minh; file-khi-duyệt purpose=5 lẫn "Bảng so sánh" + false-pass submit-guard → grep mọi field-proxy predicate loại value mới + build-verify TỪNG app; em-main grep no-leak bắt trước deploy). +1 S76 **#70** (FE absolute-set echo field anh-em từ server-snapshot + `invalidate()` fire-and-forget → cửa-sổ stale-echo mất-dữ-liệu khi lưu 2 ô liên-tiếp; guard `useIsFetching` gate nút Lưu tới khi refetch land; reviewer workflow bắt, impl self-review sót). +1 S72 **#69** FE bundle-hash non-deterministic + `deploy.yml` rebuild-FE-unconditional → bundle rotate kể cả commit governance (SPA-fallback-200 trap; cicd Run #312). +2 S69: **#67** Tailwind v4 accent palette thiếu stop (teal/violet/amberx/greenx chỉ 50/100/500/600/700; dùng -300 → teal/violet rơi DEFAULT Tailwind sai-hệ, amberx/greenx drop hẳn — build PASS, phải soi dist CSS) · **#68** IDE TS diagnostic giữa background-agent/workflow = snapshot dở-dang (TS server bắn mỗi save), chỉ tin build SẠCH sau-cùng (2× session này: re-skin + PE-FE đều false-alarm). Prev +1 S68 **#66** Tailwind v4 rule element thô `h1-h4{color:#0b1220}` viết NGOÀI `@layer` thắng utility `text-white` → heading render đen; fix ĐIỂM `text-white!` (important, grep dist confirm), KHÔNG move `@layer` (load-bearing ~30+ heading toàn app). Prev +1 S65 **#65** build csproj con (vd `SolutionErp.Api.csproj`) ≠ `dotnet build SolutionErp.slnx` (gồm tests) → miss test-compile khi đổi chữ ký record command (CreateDepartmentCommand +ParentId) → CI CS7036 FAIL-gated Run #291 (deploy chặn, prod nguyên — test-gate làm đúng việc). Fix: build full slnx trước push BE signature-change. Prev +2 S61: **#63** EF scaffold tự sinh `RenameColumn` SAI-semantics khi drop+add cùng type (test xanh không bắt — SQLite EnsureCreated không replay migration) · **#64** `dotnet ef database update` áp Design-DB 0-rows ≠ Dev-DB → data-migrate `Sql()` chạy thật lần đầu trên prod. Prev +2 S59 (#61 sqlcmd `-f 65001` · #62 rename natural-key UPDATE trước deploy) | -| User memory | **29** | +S75 `feedback_harness11_engine` (engine governance tự-bảo-trì + gotcha #30-via-Edit + multi-workflow-verify + git-add-specific lesson). re-ground S71 (H1 disk-count: 25 `feedback_*` + 3 `project_*`; STATUS "21" stale từ S64). +S71 `feedback_harness10_run_trace` (run-trace + 3 lesson). Prev +1 S64 `feedback_harness7_outward_writing_quality`; re-grounded S54 base 19 | +| User memory | **30** | +S79 `feedback_canonical_spec_over_broadcast` (adap pull canonical-command/§P đừng phỏng-theo broadcast + report-before-stamp dogfood + residual own-diary OK). +S75 `feedback_harness11_engine` (engine governance tự-bảo-trì + gotcha #30-via-Edit + multi-workflow-verify + git-add-specific lesson). re-ground S71 (H1 disk-count: 25 `feedback_*` + 3 `project_*`; STATUS "21" stale từ S64). +S71 `feedback_harness10_run_trace` (run-trace + 3 lesson). Prev +1 S64 `feedback_harness7_outward_writing_quality`; re-grounded S54 base 19 | | Skills | 6 | 3 domain + 3 ops | | Sub-agents | **11** | **all-inherit top-tier (Harness-8 S66 06-16 — thay thế two-tier H4):** em main Fable 5 (1M) Max (fallback Opus 4.8 1M, Fable suspended H5) · **cả 11 sub `model: inherit`** (7 demoted `claude-opus-4-8` flip S66; SE không có helper/gopher rẻ → cả 11 lên top-tier) · effort Max. 9 product/quality + 2 monitor INFORM-only. Nấc H8 = **executed-file VERIFIED-pending-restart**. Prev two-tier H4 runtime-verified S57bis (spawn-test 2 chiều). | | RAG chunks | **2423** | re-check S63 (`list_projects` — alive, +3 vs S58). Stale `last_indexed 05-29` (S42-S62 via store_memory stopgap; full re-index = AI_INFRA op cần VOYAGE_API_KEY). | @@ -31,10 +31,11 @@ --- -## 🔥 In Progress (S78) +## 🔥 In Progress (S79) | Task | Owner | Status | |---|---|---| +| **S79 — adopt User-Mark (H-12/13) canonical §P + Harness-14 (Eval/Budget/Outcome) + chữ-ký RC** — anh `/check-email AI_INFRA` + `/adap-apply` step-by-step (workflow double-check mỗi step), rồi gõ `/user-mark-active-high` "áp đầy-đủ chính-xác nhất theo AI_INFRA, không hỏi thêm". em main + **4 Workflow** (invest `wf_82337f7f-95c` → review `wf_a7cbe93e-912` → align-re-review `wf_9d3beebb-a95` → H14-review `wf_4d4eba6f-8a0`). **0 production code.** Áp **canonical §P đầy-đủ** (P1-P10): 4 lệnh `.claude/commands/user-mark-{active-high,active,medium,disable}.md` (DACI report-before-stamp) + ledger `.claude/governance/ACTIVE-MARKS.md` (4 cấp **Active-High/Active/Medium/Disable** + display-filter) + `harness-11-engine.md §E`(P1-P10)+**§F**(H-14 3-mức maturity honest) + `rules.md §6.6` (objective-criteria KHÔNG quy-mô-đội/thời-gian-tuổi) + session-start §2.1.4/session-end §L.b(h) mark-display. **3 mark Active-High stamped** anh-confirm (`RC-pqhuy1987-20-06-2026-10-29-09/10/11` = objective-criteria/User-Mark/time-age). completeness-gate H-6→H-13 **ĐẠT** (H-8 soi: 11/11 inherit no-`[1m]`; H-7 Cat-6 real). §F floor 6/6 + maturity HONEST. **3 adap-report** + email ai_infra (`7b8615b3`). **Bài học:** broadcast cô-đọng→canonical command/§P là spec THẬT (em bản đầu MUST/TRACK→align lại khi anh trỏ `/user-mark-active-high`) · report-before-stamp dogfood (lệnh tự cưỡng-chế báo-cáo-trước-stamp, em hỏi anh = đúng lệnh) · investigator residual-write own-diary = OK (D9 áp canonical/memory-chính, không cấm sub ghi diary). **State THẬT GIỮ NGUYÊN: Mig 57 · 88 bảng · 354 test · gotcha 71 · menu 54 · bundle `CsJetgZH`/`BVS0ApIm`.** ⚠️ restart CLI (4 lệnh + session-cmd no hot-reload — skill-list đã hot-register tên). **🔴 NEXT (em):** curate L1 over-cap reviewer/cicd/inv (carry 7-session, +workflow-spawn S79) · §7-header `rules.md` "77 test" stale → C2/monthly-audit. → log `2026-06-20-S79-user-mark-harness-14-adopt.md`. | 👤 + 8 review-agent (4 wf) | ✅ | | **S78 — PE: đính kèm file khi DUYỆT (UAT Tra Sol / 5 tester)** — người duyệt tải file của mình lên ngay lúc Duyệt thay vì Trả lại phiếu. Reuse hệ attachment + enum `ApprovalAttachment=5` **MIGRATION-FREE** · FE 2 app SHA-identical (`PeWorkflowPanel` picker multi-file + upload-trước-chuyển-phase + mục "📎 File đính kèm khi duyệt" + 2 filter fix #71) · commit `7886fd0` → **Run #330 PASS** (test 354, bundle `CsJetgZH`/`BVS0ApIm`, no migration, smoke 4×200). 3 lỗi tự bắt (authz · filter-pollution #71 · Dialog mirror-truncate). em-main-led + self-gate (grep no-leak) + cicd-monitor. → log `2026-06-19-S78-pe-attach-file-on-approve.md`. | 👤 + 🟩cicd | ✅ | | **S77 — PE UX batch: 10 deploy prod-verified #320→#329 (anh Kiệt FDC + Tra Sol + Bích Phượng UAT realtime, HMW-mode ON)** — (1) cờ GẤP **pill** 🔴PRO/🟢CCM mọi danh sách+inbox (#320 NEW `PeUrgentChips`) · (2) **focus mode** bấm phiếu→overlay (#321) → **revert** list layout gốc bám-trái (#322) · (3) **Mig 57** ô ghi chú giá đề xuất PRO/CCM + **số phân cách VND** + chính tả "Bảng so sánh giá" + **guard #70** (#323) · (4) số âm → **đỏ+ngoặc** hàng 7/8/9 (#324) · (5) mục con **thụt+gạch đầu dòng** (#325) · (6) cờ gấp **BẤT ĐỐI XỨNG** GẮN=NV / GỠ=Trưởng phòng (DeptManager) (#326) · (7) **tách chọn-phiếu (inline) khỏi mở-rộng (overlay)** + nút "Xem mở rộng" mỗi dòng `?expand=1` (#327) · (8) **chuông báo người duyệt** khi phiếu vào cấp họ (#328 `LogTransitionAsync`) · (9) **banner phiếu Trả lại** hướng dẫn gửi lại (#329). Mig 56→**57** · test 344→**354** (+10). Bundle cuối `BqKD3Y23`/`Cn-i349D`. **3 lỗi em tự bắt review-TRƯỚC-deploy** (guard#70 stale-echo · luật asymmetric Tra Sol clarify giữa-chừng · double-mount Task H). FD process-death Task H → recover-disk. **NEXT (em):** 🔴 curate L1 reviewer **45KB** + cicd 37.6KB + inv 35.6KB keep-floor-hit manual-condense (archive-gate A7 GATE PASS 186/186) + FD/test-spec WATCH. **NEXT (anh/anh Kiệt UAT):** cờ gấp (GỠ chỉ TP) · chuông báo người duyệt · banner Trả-lại · Xem mở rộng · ô ghi chú PRO/CCM. → log `2026-06-19-S77-pe-ux-batch-10-deploy.md`. | 👤 + 🩷FD×3 + 🟧impl-FE + 🟨impl-BE×2 + 🟪test×3 + 🟩cicd×10 | ✅ | | **S76 — PE ngân sách MA TRẬN 3 cột (Dự án\|PRO\|CCM) + bảng lưới `
` + badge quyền-NS theo role (anh Kiệt FDC + chị Trà Sol, go-live)** — anh giao `/ultra-on` step-by-step + workflow-review-per-step. **3 commit prod-verified:** `e33481e` (feature Run #318 `BhFDF9IJ`/`BAkuRl3C`) → `21d1f4e` (bảng lưới Run #319 **`jOqxW4-p`**/**`DbsznVvR`**). **Part 1** form ma trận: PRO/CCM sửa cột mình (canEditPro/canEditCcm), Dự án FE-only; Mig 56 +ProInitial/ProAdjust additive + data-migrate 4 rows prod. **Part 2+3** badge "✎ NS PRO/CCM" cạnh approver (suy role, display-only) ở Workflow Designer + flow Duyệt NCC. Bảng lưới `
` viền-ô (anh phản hồi "chưa chia cột giống Excel"). Test 339→**344**. 2 workflow review bắt **race mất-dữ-liệu** → vá `useIsFetching` (gotcha #70). **NEXT:** 🔴 curate L1 (reviewer **45KB** keep-floor manual-condense + inv 35KB + cicd 29KB + test-spec 28KB) · anh/anh Kiệt UAT bằng PRO/CCM. → log `2026-06-19-S76-pe-budget-matrix-table-grid.md`. | 👤 + 🟦inv + 🟪test + 🟧impl-FE + 🟥reviewer×2wf + 🟩cicd×2 | ✅ | diff --git a/docs/changelog/sessions/2026-06-20-S79-user-mark-harness-14-adopt.md b/docs/changelog/sessions/2026-06-20-S79-user-mark-harness-14-adopt.md new file mode 100644 index 0000000..2633bf1 --- /dev/null +++ b/docs/changelog/sessions/2026-06-20-S79-user-mark-harness-14-adopt.md @@ -0,0 +1,45 @@ +# S79 (2026-06-20) — adopt User-Mark (H-12/13) canonical §P + Harness-14 (Eval/Budget/Outcome) + chữ-ký RC + +**Anh:** `/session-start` → `/check-email AI_INFRA và /adap-apply step by step làm cẩn thận, sau mỗi step đều phải chạy workflow double check, đáp ứng chính xác nhất theo hướng dẫn` → giữa-chừng gõ **`user-mark-active-high`** → "Áp dụng đầy đủ và chính xác nhất, step by step theo hướng dẫn của AI_INFRA, chi tiết có trong hướng dẫn, ko hỏi thêm". + +**Done (0 production code · governance/memory only):** + +### check-email STAGE 1+2 +- 2 directed email mới (`2026-06-19-harness-all-notify` + `2026-06-20-harness-14-adopt-notify`) copy + verify whole-file + body-hash PASS (`50ec0b92` / `37ae1b19`) → processed `inbox/ai_infra/` + `_index` 2 INBOUND. + +### 4 Workflow (run-id = bằng chứng Harness-9 mandate) +- INVESTIGATE `wf_82337f7f-95c` (3× investigator-codebase): governance-landing map + **completeness-gate H-6→H-13 = ĐẠT** (H-8 11/11 inherit no-`[1m]`; H-7 Cat-6 real) + budget-audit (ALIGNED no-decay + eval/ GENUINE). +- REVIEW Step-1 `wf_a7cbe93e-912` (3× reviewer): floor **10/10 MET** + 1 Minor B1. +- **align-RE-REVIEW** `wf_9d3beebb-a95` (2× reviewer): §P P1-P10 **PASS 10/10** + drift **PASS** (M-1 resolved). +- REVIEW Step-2 `wf_4d4eba6f-8a0` (2× reviewer): §F floor **6/6 MET** + maturity **HONEST** + SE-state **ACCURATE**. + +### Canonical-align pivot (then-chốt) +- Bản đầu em adopt-từ-broadcast → tự đặt 4 cấp **MUST/TRACK/ANCHOR/OFF** + ledger `decision-marks.md`. Anh gõ `/user-mark-active-high` → em grep ra **4 lệnh canonical** (`AI_INFRA/.claude/commands/user-mark-*.md`) + **§P P1-P10** (`CANONICAL-RULES.md`) + ledger `ACTIVE-MARKS.md` → **GỠ bản phỏng-theo + align FULL canonical:** + - 4 cấp = **Active-High 🔴 / Active 🟢 / Medium 🟡 / Disable 📦**. + - Ledger → `.claude/governance/ACTIVE-MARKS.md` (schema + display-filter AH/Active hiện · Medium tóm-tắt · Disable ẩn). + - Cài **4 lệnh** `/user-mark-{active-high,active,medium,disable}` tailor §-target SE. + - `harness-11-engine.md §E` rewrite map P1-P10 + **§F** (Harness-14 3-mức maturity) + intro consolidate H-11/§E/§F + extend D7 (report-before-stamp = vận-hành-hoá D7, không flow song-song → tránh C3). + - `rules.md §6.6` objective-criteria (KHÔNG quy-mô-đội / KHÔNG thời-gian-tuổi) + Goodhart. + +### 3 mark Active-High stamped (report-before-stamp, anh-confirm) +- `RC-pqhuy1987-20-06-2026-10-29-09` (objective-criteria) · `…-10-29-10` (User-Mark codify) · `…-10-29-11` (time/age extension). Mirror nội-dung AI_INFRA 3 mark, SE timestamp riêng (P1 forward-only, không mượn dấu). +- Trình 3-7 tiêu-chí khách-quan (pain/volume/quality) mỗi mark → anh confirm "đầy-đủ chính-xác nhất, không hỏi thêm" → stamp `date`-real `10-29-09/10/11`. + +### Finalize +- **3 adap-report** (`…rc-signature` + `…harness-all-update` + `2026-06-20-Governance-harness-14`) + email ai_infra (`2026-06-20-se-to-ai_infra-harness-12-13-14-adopt-report`, body-hash `7b8615b3`) + `_index` OUTBOUND. +- agents/README Upgrade S79 + STATUS/HANDOFF + user-memory `feedback_canonical_spec_over_broadcast` (count 29→30). + +**Nấc trung-thực:** §E phần-lớn convention; 4 lệnh + session-wiring = **verified-pending-restart** (no hot-reload, skill-list đã hot-register tên). H-14: eval-precision Mức-1 (manual-weekly chưa-CI) · budget ALIGNED mechanized · hit-rate+outcome-correlation Mức-2 tool-pending-data (KHÔNG bịa số) · trần-nhiễu Mức-3 gác. 3 mark owner-confirmed-trong-session. + +**Bài học (`feedback_canonical_spec_over_broadcast`):** +1. **Broadcast cô-đọng ≠ spec thật** — anh trỏ LỆNH canonical → pull command-files + §P, đừng phỏng-theo (tốn 1 vòng rework align). +2. **report-before-stamp dogfood** — lệnh `/user-mark-active-high` bước-4 tự BẮT báo-cáo-trước-stamp; em hỏi anh = đúng lệnh, không chần-chừ. +3. **residual own-diary OK** — investigator-codebase tự-append diary qua raw-Workflow (no writeGuard) = valid base memory-discipline; D9 single-writer áp canonical/luật, không cấm sub ghi diary riêng. Nhưng đẩy L1 over-cap → curate. +4. detector clean sau align (0 C1/C3 mới); tier cũ gỡ sạch. + +**State THẬT GIỮ NGUYÊN:** Mig 57 · 88 bảng · 354 test · gotcha 71 · menu 54 · bundle `CsJetgZH`/`BVS0ApIm`. + +**🔴 NEXT SESSION:** +- **Anh:** ⚠️ **restart CLI** (đầu việc) — activate 4 lệnh `/user-mark-*` + session-start §2.1.4 / session-end §L.b(h) mark-display + engine §E/§F runtime. Sau restart, session-start tự hiển-thị 3 mark Active-High. +- **Em (carry GẤP 7-session + S79 spawn):** curate L1 over-cap reviewer (~45KB+, +review-spawn S79) + cicd + investigator-codebase (39.8KB, +diary S79) — manual SPLIT/condense, archive-gate A7 GATE. + §7-header `rules.md` "77 test" stale → C2/monthly-audit flush. +- **Pending product (carry):** "Ngưỡng giá CEO" Mig 54 Designer UAT · "C" chuyển phiếu→dự án chờ spec. **Ops S58/S59:** tzutil VPS · anh Chương email typo · 5 real-staff pw · gán CNTT. **Monthly audit 2026-07-01.** diff --git a/docs/governance/adap-reports/2026-06-19-Governance-architecture-decision-rationality-rc-signature.md b/docs/governance/adap-reports/2026-06-19-Governance-architecture-decision-rationality-rc-signature.md new file mode 100644 index 0000000..98b98aa --- /dev/null +++ b/docs/governance/adap-reports/2026-06-19-Governance-architecture-decision-rationality-rc-signature.md @@ -0,0 +1,38 @@ +# adap-report — Architecture-decision rationality + RC-signature (tiêu-chí khách-quan + chữ-ký niêm) + +- **id:** 2026-06-19-Governance-architecture-decision-rationality-rc-signature +- **source broadcast:** `ai_infra/broadcasts/outbox/all/2026-06-19-Governance-architecture-decision-rationality-rc-signature.md` (`reviewer_gate: PASS` · `content_sha256: 4deb7876514686155c389cc8b9cf636855aae4fb0e75369de9b9947a83f32cd5`) +- **adopted by:** se (SOLUTION_ERP) · **session:** S79 · **date:** 2026-06-20 +- **protocol:** Harness-9 PART-2 mandate = workflow IMPLEMENT + REVIEW tách biệt + report-with-run-id + - INVESTIGATE `wf_82337f7f-95c` (3× investigator-codebase — governance-landing map + completeness-gate H-6→H-13 + budget audit) → IMPLEMENT em-main single-writer (governance D9) → REVIEW `wf_a7cbe93e-912` (3× reviewer, floor 10/10) → **canonical-align re-REVIEW `wf_9d3beebb-a95`** (2× reviewer — §P P1-P10 fidelity PASS + drift PASS) +- **project-fit:** ✅ FIT — SE = solo-dev (chính đối-tượng dễ mắc lỗi "quá mức solo-dev") + có governance engine 11-agent cần kỷ-luật quyết-định. + +## VERDICT: ✅ ADOPTED — 2 nguyên-tắc codify, mark Active-High stamped (anh-confirm S79) + +Broadcast có 2 nguyên-tắc: (1) quyết-định kiến-trúc = tiêu-chí khách-quan (điểm-đau + khối-lượng + chất-lượng) KHÔNG quy-mô-đội; (2) chữ-ký niêm `RC-pqhuy1987-dd-mm-yyyy-hh-mm-ss` cho mỗi rule-change. Cả 2 codify vào canonical SE + neo bằng User-Mark. + +## Nấc (executed-file vs runtime · mechanized vs convention) + +| Phần | Trạng-thái | Nấc | +|---|---|---| +| **Nguyên-tắc 1 — objective-criteria** | `rules.md §6.6` (bảng "Căn-cứ SAI" quy-mô-đội + AI=neo-lý-tính + thẩm-quyền cross-project) + `engine §E.5/P10` | executed-file · **convention** (kỷ-luật quyết-định) | +| **Nguyên-tắc 2 — RC-signature** | format `RC-pqhuy1987-dd-mm-yyyy-hh-mm-ss` REUSE (KHÔNG redefine) ở `ACTIVE-MARKS.md` + `engine §E.1/P1` + `rules §6.6`; forward-only no-retrofit | executed-file · convention | +| **Mark Active-High** | `RC-pqhuy1987-20-06-2026-10-29-09` (objective-criteria) stamped, anh-confirm S79 via report-before-stamp | executed-file (owner-confirmed) | + +## Tailoring (SE-specific) +- §-anchor SE = `rules.md §6.6` + `engine §E` (≙ AI_INFRA `§F4.2`) — notation `(≙ AI_INFRA)` giữ traceability cross-project, KHÔNG mượn §-number bên phát. +- Chữ-ký RC + objective-criteria neo qua **User-Mark canonical §P** (xem report `2026-06-19-Governance-harness-all-update`) — cùng cụm cơ-chế. +- SE stamp timestamp RIÊNG `20-06-2026-10-29-09` (P1 forward-only: mỗi dự-án ký lúc sign-off của mình), KHÔNG copy timestamp AI_INFRA. + +## Honest caveats (KHÔNG nói quá) +- objective-criteria = **convention** (kỷ-luật người+AI), KHÔNG mechanized — đừng nhận "công-cụ-ép". +- RC-signature stamp = executed-file owner-confirmed (anh xác-nhận trong session qua "áp dụng đầy đủ chính xác nhất, không hỏi thêm"); chưa runtime-tested qua nhiều session. + +## Reverse-findings (đề-xuất ngược AI_INFRA) +1. **2-channel enforcement ⊂ cái SE đã chứng-minh empirically** — broadcast trình "tool-action → permission-config NOT hook" như nguyên-tắc; SE đã có bằng-chứng SỐNG **E-006/AS-10** (`error-ledger.md`): hook fails-open → `store_memory` allowlist-strip = gate THẬT. Xác-nhận nguyên-tắc đúng + đã được thực-chứng ở sister. +2. **objective-criteria rule ⊃ rule team-size cũ** — SE map "time/age" (H-14) + "team-size" vào CÙNG bảng "Căn-cứ SAI" (`rules §6.6`) = trình-bày 1-họ-lỗi gọn hơn 2 rule rời. Đề-xuất AI_INFRA cân-nhắc gom trình-bày tương-tự. + +## Evidence +- run-id: `wf_82337f7f-95c` (investigate) · `wf_a7cbe93e-912` (review) · `wf_9d3beebb-a95` (canonical-align re-review, §P 10/10 + drift PASS). +- Mark stamped: `ACTIVE-MARKS.md` 🔴 ACTIVE-HIGH `RC-pqhuy1987-20-06-2026-10-29-09`. +- 0 production code — governance-only. State THẬT GIỮ NGUYÊN: Mig 57 · 88 bảng · 354 test · gotcha 71 · bundle `CsJetgZH`/`BVS0ApIm`. diff --git a/docs/governance/adap-reports/2026-06-19-Governance-harness-all-update.md b/docs/governance/adap-reports/2026-06-19-Governance-harness-all-update.md new file mode 100644 index 0000000..dbe25a1 --- /dev/null +++ b/docs/governance/adap-reports/2026-06-19-Governance-harness-all-update.md @@ -0,0 +1,47 @@ +# adap-report — Harness-all-update: User-Mark (H-12/13) + hợp-nhất chuỗi H-6→H-13 + +- **id:** 2026-06-19-Governance-harness-all-update +- **source broadcast:** `ai_infra/broadcasts/outbox/all/2026-06-19-Governance-harness-all-update.md` (`reviewer_gate: PASS` · `content_sha256: 8c5377742b45b8447952f37a537052a0d99e63bfa581d430ada924d8c76af556`) + checklist `2026-06-19-Governance-checklist-harness-all.md` (`7e6e0555…`) + - directed heads-up `outbox/se/2026-06-19-ai_infra-to-se-harness-all-notify.md` (inbox verify ✓ whole-file `a52b8d03` + body `50ec0b92`) + - **canonical spec đầy-đủ:** `ai_infra/.claude/commands/user-mark-{active-high,active,medium,disable}.md` + `.claude/governance/ACTIVE-MARKS.md` + `CANONICAL-RULES.md §P` (P1-P10) — anh trỏ qua lệnh `/user-mark-active-high`, em pull canonical áp ĐẦY-ĐỦ (KHÔNG dùng bản phỏng-theo). +- **adopted by:** se (SOLUTION_ERP) · **session:** S79 · **date:** 2026-06-20 +- **protocol:** Harness-9 PART-2 = workflow IMPLEMENT + REVIEW tách biệt + report-with-run-id + - INVESTIGATE `wf_82337f7f-95c` (3× investigator-codebase) → IMPLEMENT em-main single-writer (D9) → REVIEW `wf_a7cbe93e-912` (3× reviewer, floor 10/10) → **canonical-align + re-REVIEW `wf_9d3beebb-a95`** (2× reviewer — §P P1-P10 fidelity **PASS 10/10** + drift **PASS**, M-1 resolved) +- **project-fit:** ✅ FIT. + +## VERDICT: ✅ ADOPTED — User-Mark canonical §P FULL (P1-P10) + completeness-gate H-6→H-13 ĐẠT + +Bản làm 2 việc: ① công-bố User-Mark (H-12/13) · ② hợp-nhất H-6→H-13 + checklist tự-verify. SE adopt User-Mark **canonical §P đầy-đủ** (anh chốt "áp đầy-đủ chính-xác nhất theo AI_INFRA, không hỏi thêm") + chạy completeness-gate. + +### ① User-Mark (H-12/13) — §P P1-P10 (re-review `wf_9d3beebb-a95` PASS 10/10) +| Cấu-phần | SE artifact | Nấc | +|---|---|---| +| Cơ-chế P1-P10 | `harness-11-engine.md §E` (E.1→P1·P2·P3·P8 · E.2→P4·P6 · E.3→P9 · E.4→P5·P7 · E.5→P10) | executed-file · phần-lớn **convention** (report-trước-đóng-dấu + behavioral-enforce + neo-lý-tính), mechanized chỉ session-display + tool-deny-config | +| Ledger | `.claude/governance/ACTIVE-MARKS.md` (canonical path + schema + 4-tier section + display-filter) | executed-file | +| Interface | 4 lệnh `/user-mark-{active-high,active,medium,disable}` (tailor §-target SE) | command `.md` **verified-pending-restart** (no hot-reload — đã thấy hot-register skill-list) | +| Display | `session-start §2.1.4` + `session-end §L.b(h)` status-filtered | executed-file, pending-restart | +| 3 mark Active-High stamped | objective-criteria `RC-…10-29-09` · User-Mark `…10-29-10` · time/age `…10-29-11` — anh-confirm S79, mirror AI_INFRA 3 mark by-content, SE timestamp riêng (P1 forward-only) | executed-file (owner-confirmed) | + +### ② Completeness-gate H-6→H-13 — VERDICT ĐẠT (investigate `wf_82337f7f-95c`) +Cả 8 harness ADOPTED sạch. Soi kỹ 2 cái hay-sót: **H-8 all-inherit = 11/11 sub `model: inherit`, ZERO `[1m]` trong frontmatter** (3 hit `[1m]` đều prose/comment, không phải frontmatter); **H-7 Category 6** reviewer.md real on-disk (không pending). H-9/10/11 evidence đủ. + +## Tailoring (SE-specific — form-autonomy P7 location-agnostic) +- Ledger ở `.claude/governance/ACTIVE-MARKS.md` (match canonical path cho command-consistency) — interim `docs/governance/decision-marks.md` (form em tự-nghĩ ban đầu) đã GỠ khi anh trỏ canonical. +- 4 lệnh tailor §-target = `rules.md §6.6` / `engine §E` / `error-ledger.md §L.a` / SE session-phase (≙ AI_INFRA `§F4.2`/`§P`/`§J9`/`§L1`). +- §E gom vào `harness-11-engine.md` (1 engine governance hợp-nhất H-11 + §E + §F) thay doc rời — B1 một-canonical-place. +- 2-channel enforce (P9) = XÁC-NHẬN bằng-chứng SE sẵn-có (E-006/AS-10 hook-fails-open), KHÔNG novelty. + +## Honest caveats (KHÔNG nói quá) +- §E phần-lớn **convention** (report-trước-đóng-dấu + behavioral-enforce + neo-lý-tính = kỷ-luật, KHÔNG công-cụ-ép). CAVEAT engine ghi rõ. +- 4 lệnh + session-wiring = **verified-pending-restart** (command/agent `.md` no hot-reload giữa phiên — anh restart CLI để runtime đầy-đủ; skill-list ĐÃ hot-register tên lệnh). +- 3 mark = owner-confirmed trong session (anh "áp dụng đầy đủ … không hỏi thêm" = confirm report-before-stamp); chưa runtime-tested qua nhiều phiên session-display. +- B1 cross-pointer label M-1 (review #1 nêu) đã RESOLVED khi gỡ decision-marks.md + align canonical. + +## Reverse-findings (đề-xuất ngược AI_INFRA) +1. **Broadcast cô-đọng → canonical là spec THẬT:** broadcast mô-tả 4 cấp theo CHỨC-NĂNG (không tên); spec dùng-được = lệnh `/user-mark-*` + `ACTIVE-MARKS.md` + §P P1-P10. Sister adopt từ broadcast-mình sẽ ra FORM khác (như SE bản đầu MUST/TRACK) → đề-xuất broadcast User-Mark TRỎ thẳng canonical command-files/§P để sister align đúng tên cấp ngay (cross-project consistency = chính giá-trị objective-criteria coi trọng). +2. **report-before-stamp (P4) ⊂ owner-approve đã có ở SE (D7 engine):** SE map P4 = vận-hành-hoá D7 (KHÔNG flow song-song) → tránh C3 vocab-fork mà detector SE tự bắt. Xác-nhận P4 không chọi cơ-chế owner-approve sẵn có. + +## Evidence +- run-id: `wf_82337f7f-95c` (investigate + completeness-gate ĐẠT) · `wf_a7cbe93e-912` (floor 10/10) · `wf_9d3beebb-a95` (§P 10/10 + drift PASS). +- Marks stamped: `ACTIVE-MARKS.md` 3× ACTIVE-HIGH (anh-confirm S79). +- 0 production code. State THẬT GIỮ NGUYÊN: Mig 57 · 88 bảng · 354 test · gotcha 71 · menu 54 · bundle `CsJetgZH`/`BVS0ApIm`. diff --git a/docs/governance/adap-reports/2026-06-20-Governance-harness-14.md b/docs/governance/adap-reports/2026-06-20-Governance-harness-14.md new file mode 100644 index 0000000..2843534 --- /dev/null +++ b/docs/governance/adap-reports/2026-06-20-Governance-harness-14.md @@ -0,0 +1,45 @@ +# adap-report — Harness-14 (Eval / Budget / Outcome theo hướng "khối-lượng × chất-lượng") + +- **id:** 2026-06-20-Governance-harness-14 +- **source broadcast:** `ai_infra/broadcasts/outbox/all/2026-06-20-Governance-harness-14-adopt.md` (`status: 🟢 ADOPT` · `reviewer_gate: PASS` · `content_sha256: 8da7e8b1854493f6e0f84211d82c04fbd2fe915b2b5686c0ab8033107ddefc0a`) + checklist `2026-06-20-Governance-checklist-harness-14.md` (`e96930da…`) + - plan-announce tiền-thân `2026-06-19-Governance-harness-all-update-v-2-0.md` = **SKIP n-a** (visibility-only PLAN-status, content_sha256 chưa stamp, superseded bởi adopt-broadcast này — KHÔNG áp riêng) + - directed heads-up `outbox/se/2026-06-20-ai_infra-to-se-harness-14-adopt-notify.md` (inbox verify ✓ whole-file `94c533cf` + body `37ae1b19`) +- **adopted by:** se (SOLUTION_ERP) · **session:** S79 · **date:** 2026-06-20 +- **protocol:** Harness-9 PART-2 = workflow IMPLEMENT + REVIEW tách biệt + report-with-run-id + - INVESTIGATE `wf_82337f7f-95c` (budget/eval audit stream) → IMPLEMENT em-main single-writer (D9) → REVIEW `wf_4d4eba6f-8a0` (2× reviewer — §F floor **6/6 MET** + maturity **HONEST** + SE-state **ACCURATE**) +- **project-fit:** ✅ FIT — SE có L1/L2/L3 memory + archive-gate + `eval/` golden-set harness + memory-budget seed-by-measure. + +## VERDICT: ✅ ADOPTED — 🔴 rule-floor codify + neo Active-High · 🟡 method honest 3-mức maturity + +H-14 = đo chất-lượng + định-cỡ bộ-nhớ trên nguyên-lý "mọi con-số suy từ nhu-cầu thật, KHÔNG đặt-cứng". **Phát-hiện then-chốt (investigate): SE đã ALIGNED sẵn 2/3 cơ-chế** (budget no-decay + baseline-drift canonical-anchor) — adopt = codify rule tường-minh + map method onto cái SE THẬT có + khai honest 3-mức. + +## Nấc theo phần (review `wf_4d4eba6f-8a0`) +| Phần | Trạng-thái | Nấc | +|---|---|---| +| 🔴 **RULE time/age = false-proxy** (§A 4 mục floor) | `rules.md §6.6` (bảng "Căn-cứ SAI" time/age cạnh team-size) + mark `RC-…10-29-11` Active-High + `memory-budget.json` 0 núm-decay + drift canonical-anchor | floor 4/4 MET · convention (rule) + mechanized (config no-decay) | +| 🔴 **Outcome** (§D 2 mục floor) | `§F.4` + `rules §6.6` (indicator-tied-to-outcome + Goodhart tức-thì, tổng-quát H8.2 "KHÔNG hạ model") | floor 2/2 MET · convention | +| 🟡 **Eval-precision** (Mức 1) | `§F.2` map onto `eval/` harness sẵn có (golden-set 14-q + evaluator.md recall@5≥0.7 + trial-state-lock) | **executed-file + convention** (weekly-MANUAL, CHƯA mechanized-CI; RAG re-index = AI_INFRA-op) | +| 🟡 **Budget** (Mức 1 ALIGNED) | `§F.3` = seed-by-MEASURE + archive_gate hysteresis/keep-floor/2-strike, 0 decay-knob (= PHẦN A) | **mechanized ALIGNED** (config) | +| 🟡 **Budget-hit-rate + outcome-correlation** (Mức 2) | `§F.3`/`§F.4` khai rõ "có công-cụ ĐO chưa đủ data" — SE chưa có đếm-lượt-truy-cập + thu-đánh-giá có cấu-trúc | **Mức-2 tool-pending-data** (KHÔNG trình như xong) | +| ◦ **Trần nhiễu ngữ-cảnh** (Mức 3) | `§F.1` ghi-nhận sao-bắc-đẩu, KHÔNG ép số | ack-only | + +**Completeness-gate:** 6/6 🔴 floor (§A×4 + §D×2) MET (review xác-nhận meta-gate "tổng 6 mục sàn"; data-gate §C KHÔNG đếm thành mục thứ-7). + +## Tailoring (SE-specific) +- §F gom vào `harness-11-engine.md` (engine governance hợp-nhất) — H-14 budget = PHẦN A đã có, eval = `eval/` đã có → map-onto thay vì dựng mới. +- 🔴 rule neo qua User-Mark mark-3 (cùng cụm §P) — self-sign RC-sig của SE. + +## Honest caveats (KHÔNG nói quá — chính cốt-lõi H-14) +- **3-mức maturity trung-thực:** chỉ eval-precision Mức-1 dùng-được-ngay (NHƯNG manual-weekly, KHÔNG mechanized-CI); budget-hit-rate + outcome-correlation = Mức-2 **có công-cụ chưa-ra-số** (KHÔNG bịa); trần-nhiễu = Mức-3 tạm-gác. KHÔNG nâng mức thấp lên cao. +- **eval = đã CÓ, KHÔNG phải gap mới-dựng** — `§F.2` khai đúng "SE đã có harness (KHÔNG phải gap)", map nguyên-lý onto, không claim tự-chạy. +- **budget ALIGNED là may-mắn cấu-trúc** (seed-by-measure từ Harness-9), KHÔNG phải H-14 mới làm — khai rõ. +- Con-số AI_INFRA tự-đo (cỡ golden-set, recall) = bằng-chứng của HỌ, KHÔNG mục-tiêu áp-cứng SE — SE suy số riêng từ nhu-cầu mình. + +## Reverse-findings (đề-xuất ngược AI_INFRA) +1. **SE đã obey 2/3 H-14 TRƯỚC khi adopt** (budget no-decay + drift canonical-anchor) — vì Harness-9 seed-by-measure + Harness-11 detector canonical-anchor đã ép đúng hướng. Xác-nhận: H-9/H-11 là tiền-đề cấu-trúc của H-14; dự-án nào đã chắc H-9/H-11 thì H-14-budget gần như free. +2. **Eval-precision automation = gap chung khả-dĩ:** SE có harness nhưng manual-weekly (RAG re-index AI_INFRA-owned). Nếu AI_INFRA mở tooling re-index/eval-CI cho sister, Mức-1 sẽ lên mechanized — hiện là nút-thắt cross-project, KHÔNG riêng SE. + +## Evidence +- run-id: `wf_82337f7f-95c` (budget/eval audit: budget ALIGNED + eval GENUINE) · `wf_4d4eba6f-8a0` (§F floor 6/6 + maturity HONEST + state ACCURATE). +- Mark stamped: `ACTIVE-MARKS.md` `RC-pqhuy1987-20-06-2026-10-29-11` Active-High. +- 0 production code. State THẬT GIỮ NGUYÊN: Mig 57 · 88 bảng · 354 test · gotcha 71 · menu 54 · bundle `CsJetgZH`/`BVS0ApIm`. diff --git a/docs/governance/harness-11-engine.md b/docs/governance/harness-11-engine.md index 5a24192..7623f8d 100644 --- a/docs/governance/harness-11-engine.md +++ b/docs/governance/harness-11-engine.md @@ -4,6 +4,8 @@ > > 🔑 **Đâ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). > +> 🔭 **Phạm-vi (S79 consolidate):** doc gốc Harness-11 (PHẦN A-D) nay **gom thêm §E (User-Mark H-12/13 canonical §P)** + **§F (Harness-14 Eval/Budget/Outcome)** — 1 engine governance hợp-nhất (mirror AI_INFRA "harness-all" consolidation). Ledger mark = `.claude/governance/ACTIVE-MARKS.md`. +> > 🔑 **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. --- @@ -16,6 +18,8 @@ | 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 | +| PHẦN E — User-Mark (H-12/13, canonical §P) + RC-signature | doc này §E (cơ-chế P1-P10) + `.claude/governance/ACTIVE-MARKS.md` (sổ-cái + display) + 4 lệnh `/user-mark-*` (interface) + `session-start §2.1.4`/`session-end §L.b(h)` (display) | convention (report-trước-đóng-dấu P4) + mechanized (display gắn-lệnh-phiên + tool-deny settings P9) | +| PHẦN F — Harness-14 Eval/Budget/Outcome | doc này §F (3-mức maturity + method) + `eval/` golden-set harness (F.2) + `memory-budget.json`/`measure-agent-memory.ps1` (F.3 = PHẦN A) | eval = executed-file + convention (manual) · budget = mechanized ALIGNED · outcome-correlation/hit-rate = Mức-2 tool-pending-data | | Canonical state (nguồn-chuẩn) | `docs/STATUS.md` CURRENT STATE table | — | --- @@ -66,7 +70,7 @@ Tất cả ở `scripts/governance-detectors.ps1` — NO-API (grep/measure only) |---|---|---| | **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 | +| **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 — **vận-hành-hoá bởi report-trước-đóng-dấu §E.2** (đổi-luật cấp-governance đi qua quy-trình 4-bước + chữ-ký RC) | ### 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.) @@ -76,9 +80,87 @@ Tất cả ở `scripts/governance-detectors.ps1` — NO-API (grep/measure only) --- +## PHẦN E — User-Mark (Harness-12/13) + chữ-ký RC quyết-định = canonical §P (🔴 FUNCTION-FLOOR) + +> **Adopt S79 (2026-06-20)** — AI_INFRA `2026-06-19-Governance-harness-all-update` (User-Mark) + `…rc-signature` + **canonical §P** (P1-P10). Neo + cưỡng-chế **quyết-định cấp-governance** (luật/chính-sách/kiến-trúc/harness) để không-quên + không-giảm-bằng-cảm-tính. **KHÔNG** dùng cho vận-hành/tác-vụ thường-ngày (P6 scope-discriminator). +> +> 🔑 **3 cấu-phần (B1 phân-vai):** §E này = **CƠ-CHẾ** (codify §P P1-P10 cho SE) · ledger = `.claude/governance/ACTIVE-MARKS.md` (SỔ-CÁI + display, single-writer em-main) · interface = 4 lệnh `/user-mark-active-high|active|medium|disable`. Cấp do em-main gán + anh confirm (KHÔNG agent tự-phán cảm-tính — P8). + +### E.1 — Chữ-ký + 4 cấp + binding (P1·P2·P3·P8) +- **P1 Chữ-ký:** mỗi mark mang `RC-pqhuy1987-dd-mm-yyyy-hh-mm-ss` (REUSE format rc-signature, timestamp lúc anh sign-off). Bằng-chứng-có-niêm: minh-oan · tranh-luận-bằng-bằng-chứng (debate khi ruling mâu-thuẫn) · trách-nhiệm-2-chiều. Forward-only (no-retrofit từ 2026-06-20). +- **P2 4 cấp deterministic** (anh-instruction trực-tiếp, KHÔNG design-invention) — **trực-giao** với tầng-an-toàn D5-D8: + + | Cấp | Hành-vi xác-định (P8) | Vi-phạm | + |---|---|---| + | 🔴 **Active-High** | bắt-buộc phải làm (cao nhất) | → `error-ledger.md §L.a` RCA (P9) | + | 🟢 **Active** | follow + nhắc-lại xuyên-suốt | nhắc-lại (KHÔNG mandate RCA-tự-động) | + | 🟡 **Medium** | neo quyết-định chưa-rõ; follow nhưng **skippable** | — | + | 📦 **Disable** | tắt (reversible, giữ audit-trail) | — | + +- **P3 Binding nhị-phân:** **có stamp = LỆNH · không stamp = đang BÀN** (thảo-luận ≠ lệnh execute). +- **P8 No-cảm-tính:** mỗi cấp = hành-vi DETERMINISTIC, KHÔNG agent tự-phán. "Tự-skip-workflow tiết-kiệm-token" = lệch → theo rule TƯƠNG-ĐỐI H6.1 (substantive→HMW · trivial→solo), KHÔNG số-magic. + +### E.2 — Flow DACI report-trước-đóng-dấu + scope-check (P4·P6 = vận-hành-hoá D7, 🔴 floor) +Đổi-luật cấp-governance đi qua **các bước, KHÔNG được tắt** (4 lệnh `/user-mark-*` thực-thi): +1. **Scope-check (P6):** "Có đổi CANONICAL §-rule / authority-routing không? KHÔNG → đây là **work-flow** → KHÔNG mark." (User-Mark = Gov-decision, KHÔNG task-execution.) +2. **Adjust-Gov (P4):** soạn nội-dung luật mới — em-main **single-writer D9**, KHÔNG fan-out. +3. **Double-check (P4):** quét `§A-§E` + `error-ledger.md` Active-Guards + `ACTIVE-MARKS.md` + `governance-detectors.ps1 C3` tìm mâu-thuẫn (cross-harness / vocab-fork). +4. **🔴 Báo anh kèm 3-7 tiêu-chí khách-quan (P4):** điểm-đau đã-xảy-ra-thật · khối-lượng · chất-lượng (KHÔNG quy-mô-đội / thời-gian-tuổi); cấp đề-xuất; §-target; supersedes?; mâu-thuẫn đã-rà. **CHỜ anh confirm. KHÔNG stamp trước báo-cáo.** +5. **Stamp (anh confirm):** `RC-pqhuy1987-dd-mm-yyyy-hh-mm-ss` → ghi `ACTIVE-MARKS.md` + áp §-change vào canonical. + +> NEW vs D7-cũ = scope-check tường-minh (P6) + rà-mâu-thuẫn (bước 3) + 3-7 tiêu-chí khách-quan (P4). D7 vốn = "owner duyệt trước hiệu-lực"; §E.2 làm rõ QUY-TRÌNH, KHÔNG tạo flow song-song (tránh C3). + +### E.3 — Cưỡng-chế 2-kênh, KHÔNG hook (P9 — = XÁC-NHẬN cái SE đã chứng-minh) +| Kênh | Vi-phạm | Cưỡng-chế | Bằng-chứng SE sẵn-có | +|---|---|---|---| +| **Behavioral-mark** | ghi `error-ledger.md §L.a` (AS-table) + **RCA** | convention (kỷ-luật người+AI) | §L.a 2-strike-promote đã chạy | +| **Tool-action-mark** | **permission-DENY** ở `.claude/settings*.json` (deny-absolute) — **KHÔNG hook** (hook fails-open = observability-only) | mechanized (config) — *xem D10: Bash residual chưa block cứng = gap honest* | **E-006/AS-10** (`error-ledger.md`): hook fails-open → `store_memory` allowlist-strip = gate THẬT; git-diff = backstop | + +### E.4 — Lifecycle + storage/SHOW (P5·P7) +- **P5 Lifecycle:** con-trỏ-XUÔI 1-chiều (mark-mới `supersedes:` mark-cũ) + cập-nhật status/cấp mark-cũ (downgrade HOẶC →Disable). 🔴 supersede mark **Active-High** = anh-confirm RIÊNG (KHÔNG auto-downgrade). **KHÔNG freeze-immutable** (git-history audits; anh sửa/đổi-ý qua re-stamp). Disable ≠ revert-rule (tách-bạch). +- **P7 Storage + SHOW:** ledger `.claude/governance/ACTIVE-MARKS.md` (single-writer em-main B3; P7 location-agnostic). 🔴 **SHOW @session-start §2.1.4 + @session-end §L.b(h)** status-filtered: Active-High + Active HIỆN rõ · Medium tóm-tắt · Disable/superseded ẨN. + +### E.5 — Objective-only + neo-lý-tính (P10 = `rules.md §6.6`, 🔴 floor) +- Adopt/giảm function bằng **điểm-đau + khối-lượng + chất-lượng KHÔNG quy-mô-đội / KHÔNG thời-gian-tuổi**; "overkill/quá-mức-solo-dev/cảm-tính/cũ-rồi-nên-bỏ" = **BÁC**. +- **AI = neo-lý-tính:** gặp quyết-định biện-minh bằng cảm-giác → em-main **nêu-cờ + bác trên cơ-sở khách-quan**, KHÔNG xoa-dịu. Thẩm-quyền phán "cần/thừa" = **tầng xuyên-dự-án (AI_INFRA)**, KHÔNG dự-án đơn-lẻ. (Bối-cảnh: rule nảy từ audit thật — 1 dự-án từ-chối chức-năng chống-lách-engine bằng "quá mức solo-dev"; điều-phối ban-đầu cũng xoa-dịu trước khi được chỉnh.) + +--- + +## PHẦN F — Harness-14: Eval / Budget / Outcome (🟡 method TAILORED + 🔴 rule-floor) + +> **Adopt S79 (2026-06-20)** — AI_INFRA `2026-06-20-Governance-harness-14-adopt` + checklist-14. Cơ-chế **đo chất-lượng + định-cỡ bộ-nhớ** trên nguyên-lý nền: **mọi con-số suy từ nhu-cầu thật, KHÔNG đặt-cứng tùy-tiện.** 🔴 rule bắt-buộc (time/age = false-proxy) đã codify ở mark `RC-…10-29-11` + `rules.md §6.6` — §F này = phương-pháp + trạng-thái-độ-chín honest. + +**4 nguyên-lý nền:** ① suy-ra-từ-nhu-cầu KHÔNG đặt-cứng (cấm "số ma-thuật") · ② loại proxy-sai (time/age/quy-mô-đội) · ③ chỉ-báo phục-vụ kết-quả (tối-ưu chỉ-báo bỏ kết-quả thật = kinh-tế-giả) · ④ trung-thực về độ-chín. + +### F.1 — Trạng-thái độ-chín 3 MỨC (🔴 honest — KHÔNG nâng mức thấp lên cao) +- **Mức 1 LÀM-ĐƯỢC-NGAY:** eval-precision (đo chất-lượng truy-xuất) — SE CÓ harness chạy thật (xem F.2). +- **Mức 2 ĐANG-TÍCH-LŨY (có công-cụ ĐO, CHƯA đủ data ra số):** budget-theo-hit-rate (cần nhật-ký truy-cập memory) + tương-quan-outcome (cần nhiều tuần đánh-giá). **🔴 Cổng dữ-liệu: dưới ngưỡng → DỪNG, giữ quy-ước đo-được, KHÔNG bịa số.** +- **Mức 3 TẦM-NHÌN-XA (tạm gác):** trần "nhiễu ngữ-cảnh" — không mốc-cứng đáng-tin theo nghiên-cứu → sao-bắc-đẩu định-hướng, KHÔNG ép số. + +### F.2 — Eval-precision (🟡 — SE đã CÓ, map onto, honest) +SE đã có RAG golden-set harness (KHÔNG phải gap): `eval/golden-set-solution_erp.jsonl` (14 query: 11 pos + 3 neg) + `eval/evaluator.md` (Spec-A strict, recall@5 gate ≥0.7, rerank ≥0.7 **per-query confident-hit** [gate aggregate avg-rerank 0.65], Case A/B/C/D triage) + `eval/trial-state-lock.json` (baseline recall@5=1.0, chunk-drift 5%). Nguyên-lý H-14 áp: +- **Cỡ golden-set suy từ độ-chính-xác mong-muốn** (công-thức cỡ-mẫu) KHÔNG đặt-cứng — hiện 14 query là quy-ước-đo-được; khi mở-rộng → suy theo confidence-level. +- **Chống nhồi-từ-khóa:** query test KHÔNG lặp nguyên-văn từ-khóa tài-liệu đích (đo năng-lực thật, không trúng-vì-trùng-chữ). +- **Ngưỡng theo đường-nền tương-đối** (so `trial-state-lock` baseline + biên tụt nhỏ) KHÔNG mốc tuyệt-đối tự-đặt; **mẫu-số động** (tỉ-lệ theo số query thật-có). +- 🟡 **Honest nấc:** harness EXISTS + well-specified nhưng **weekly-Friday MANUAL** (`evaluator.md` chạy MCP `search_memory` tay), CHƯA automated trong `scripts/`; RAG re-index = AI_INFRA-owned op. → **executed-file + convention (manual gate)**, KHÔNG mechanized-CI. KHÔNG overclaim "tự-chạy". + +### F.3 — Budget bộ-nhớ (🟡 ALIGNED — đo-thật, KHÔNG số-ma-thuật) +- **Đã ALIGNED:** `memory-budget.json` cap = **seed-by-MEASURE** (`scripts/measure-agent-memory.ps1`, `_note` "SEEDED BY MEASUREMENT NOT imagined headroom"); `archive_gate` = hysteresis 0.85 + keep-floor-5 (newest-protection) + 2-strike — **0 núm decay-theo-tuổi** (≙ mark `RC-…10-29-11`). Trần = hệ-quả (dung-lượng ÷ tốc-độ-thay-mới qua A4 hysteresis), KHÔNG retention-by-age. Cross-ref **PHẦN A**. +- 🟡 **Hit-rate sizing = Mức 2 chờ-tích-lũy:** SE chưa có công-cụ đếm-lượt-truy-cập-memory → budget giữ **quy-ước đo-được** (đo byte thật). KHÔNG trình như "đã suy từ hit-rate". + +### F.4 — Outcome (🔴 floor + 🟡 tích-lũy) +- 🔴 **Chống kinh-tế-giả (Goodhart) — tức-thì:** cắt chất-lượng tiết-kiệm token → làm-lại → tốn HƠN (mark/§6.6 + H8.2 "KHÔNG hạ model"). Mỗi chỉ-báo tự-động (recall/hit-rate/byte) gắn câu hỏi "có làm anh chốt-OK sớm hơn không". Áp NGAY, không chờ data. +- 🔴 **Ground-truth = đánh-giá chủ-dự-án** (đo gián-tiếp qua số-lần-làm-lại); chỉ-báo tự-động chỉ là trung-gian. +- 🟡 **Tương-quan chỉ-báo↔đánh-giá-người = Mức 2 chờ-tích-lũy:** SE chưa có công-cụ thu-đánh-giá + đếm-rework có cấu-trúc (error-ledger §L.a RCA = mầm gần nhất) → cần nhiều tuần mới khẳng-định tương-quan. **KHÔNG bịa số tương-quan "đẹp".** + +> **Tổng nấc §F (honest, checklist-14):** 🔴 floor (loại proxy time/age 4 mục + outcome 2 mục) = ĐẠT qua mark + §6.6 + §F.4. 🟡 method = eval-precision **executed-file + convention** (manual, không mechanized-CI) · budget **ALIGNED mechanized** (config no-decay) · outcome-correlation + hit-rate = **Mức-2 tool-pending-data** (KHÔNG trình như xong). Các con-số AI_INFRA tự-đo (cỡ golden-set, recall) = bằng-chứng của HỌ, KHÔNG mục-tiêu áp-cứng cho SE. + +--- + ## 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). +- **§E User-Mark = phần-lớn CONVENTION (S79):** report-trước-đóng-dấu (E.2/P4) + cưỡng-chế-hành-vi (E.3 behavioral) + neo-lý-tính (E.5/P10) = **kỷ-luật người+AI**, KHÔNG công-cụ-ép (đừng nhận "mechanized"). CHỈ session-display (gắn lệnh-phiên P7) + chặn-tool-ở-config (E.3 tool-action P9) = mechanized. RC-sig 3 mark Active-High đã anh-confirm-stamp S79 (`ACTIVE-MARKS.md`) = executed-file; 4 lệnh `/user-mark-*` = command `.md` verified-pending-restart (no hot-reload). diff --git a/docs/rules.md b/docs/rules.md index 12bf28b..de5558e 100644 --- a/docs/rules.md +++ b/docs/rules.md @@ -374,6 +374,29 @@ Co-Authored-By: Claude Opus 4.7 (1M context) - User nói "consolidate", "compact", "gọn lại MD", "rõ ràng MD" - Cuối phase đóng (>1 tháng) khi compact STATUS/HANDOFF/migration-todos +### 6.6 Quyết-định kiến-trúc/chức-năng = tiêu-chí khách-quan (KHÔNG cảm-tính) [User-Mark H-12/13 + H-14, S79] + +> **Adopt S79 (2026-06-20)** — AI_INFRA `rc-signature` (06-19) + `harness-14-adopt` (06-20) + User-Mark canonical §P. Bịt một kẽ-hở: từ-chối/cắt một chức-năng bằng **lập-luận cảm-tính**. Quyền tự-quyết HÌNH-THỨC (form-autonomy) GIỮ nguyên — rule này chỉ chặn cảm-tính. Marks Active-High đã anh-confirm-stamp → [`.claude/governance/ACTIVE-MARKS.md`](../.claude/governance/ACTIVE-MARKS.md) (3 mark: objective-criteria `RC-…10-29-09` · User-Mark `…10-29-10` · time/age `…10-29-11`); cơ-chế P1-P10 → [`harness-11-engine.md §E`](governance/harness-11-engine.md). + +**Một chức-năng được quyết bởi 3 trục KHÁCH-QUAN — KHÔNG gì khác:** + +1. **Điểm-đau (pain-point)** — một lỗi đã **thực-sự xảy ra** (không phải giả-định). +2. **Khối-lượng công-việc.** +3. **Chất-lượng công-việc.** + +**🔴 Căn-cứ SAI (cùng một họ — đều cảm-tính, đều CẤM dùng để bỏ/giảm chức-năng):** + +| Căn-cứ sai | Vì sao sai | Nguồn | +|---|---|---| +| **Quy-mô-đội** ("quá mức cho solo-dev", "1 người làm thì cần gì") | Số người KHÔNG làm điểm-đau/khối-lượng/chất-lượng nhỏ đi. ERP solo dựng-1-tuần đã có khối-lượng lớn. | mark `RC-…10-29-09` (rc-signature) | +| **Thời-gian / tuổi-dự-án / recency-decay** ("cũ rồi nên bỏ", "lâu chưa dùng nên hạ", "tự-giảm theo tuổi") | Tuổi KHÔNG liên-quan nhu-cầu. Trần budget = (dung-lượng ÷ tốc-độ-thay-mới), KHÔNG núm-giảm-theo-tuổi; phát-hiện-trôi neo đường-nền-cuộn, KHÔNG cửa-sổ-theo-tuổi. | mark `RC-…10-29-11` (H-14) | + +**Hệ-quả vận-hành (🔴 floor):** +- **AI = neo-lý-tính.** Gặp quyết-định biện-minh bằng cảm-giác ("nhiều quá", "không cần cho quy-mô tụi tôi", "cũ rồi") → em-main **nêu-cờ + bác trên cơ-sở khách-quan**, KHÔNG xoa-dịu. "AI phải lý-tính HƠN ở chỗ này, không để con-người kéo mình về phía cảm-tính." +- **Thẩm-quyền phán "cần/thừa" = tầng xuyên-dự-án (AI_INFRA)**, KHÔNG dự-án đơn-lẻ tự-phán "thừa" (một dự-án chỉ thấy phạm-vi mình → thiếu bối-cảnh). Chức-năng adopt **đầy-đủ + nhất-quán**; chỉ HÌNH-THỨC là phần tự-chọn. +- **Chống "kinh-tế giả" (Goodhart)** — cắt chất-lượng để tiết-kiệm token thường khiến **làm-đi-làm-lại → tốn HƠN**. Tổng-quát rule H-8 "KHÔNG hạ model để chạy nhanh" thành "KHÔNG hạ chất-lượng bất-kỳ để tiết-kiệm". Áp NGAY, không chờ data. Mỗi chỉ-báo tự-động (recall/hit-rate/byte) phải gắn câu hỏi "có làm anh chốt-OK sớm hơn không". +- **Chữ-ký RC + User-Mark:** mỗi đổi-luật cấp-governance từ S79 mang `RC-pqhuy1987-dd-mm-yyyy-hh-mm-ss` (anh ký-duyệt qua report-trước-đóng-dấu §E.2/P4) → ledger [`.claude/governance/ACTIVE-MARKS.md`](../.claude/governance/ACTIVE-MARKS.md). 4 cấp Active-High/Active/Medium/Disable (lệnh `/user-mark-*`). Forward-only. + ## 7. Testing (Phase 9 active — 77 test pass post-Mig 21 + CI gate live) ### Stack đã apply