Files
solution-erp/docs/STATUS.md

183 lines
81 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# STATUS — Snapshot hiện tại
> **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-07-12 (S111 — **Adopt H22 WAL session-continuity — governance/tooling-only 0 prod-code src, em-main-led + 7 spawn (2 monitor ×2-lượt SendMessage-resume + invest/reviewer Fable per-invocation **0-garble 2/2** + cicd) + WF `wf_5ba3daf6-fe0` 3-worker-Opus **RUN-TRACE (dogfood sàn mới ngay)**, HMW-ON, 3 commit pushed (`318a271`+`8aa3869`+closeout).** Bootstrap ALL-GREEN: 440 ✓ · detector 39-benign 0-HIGH · spec-audit 0-GAP · RAG **2438** rerank-OK (Qdrant transient tự-hồi ~30s) · H1 PASS_WITH_FLAGS (FLAG-1 `STATUS:39` mark-proposal stale → flip done) + H2 ALL-CLEAN (0/15 orphan · 2 gist FROZEN · 2 monitor diary **self-compact hook-directed md5-verified** harvest 22.2→16.3K + tooling 18.4→16.9K — 2/4 L1-compact treo S110 TỰ GIẢI) · ✅ Fable **streak-5** S107F→S111F. **Pipeline H21-chuẩn:** `/check-email` 1-new (notify+broadcast H22, hash **4/4**) → invest-**Fable** READY_WITH_NUANCES **14N** (N2 mô-tả-vs-luật 0-mark-cấm-hook · N3 AS-6-không-tăng · N9 per-TURN≠per-TASK) → spec lead-**3-chỉnh** (⭐ hook **PS1 path-independent** — PATH **3-context ngược nhau**: PS-primary→WSL-HỎNG system32 · cmd→Git-Bash · PS-from-bash→usr/bin; bash-hook rơi WSL = chết-mọi-lượt + fail-open CHE) → WF 3-Opus 3/3 ~322K → reviewer-**Fable PASS_WITH_FIXES** (0C·**1M**·7m — M1 lớp nâng-nấc-quên-sync-câu-cũ CÙNG-file; fault-inject cây-tạm 2-ca bịt nhánh-0-delta; refutation 2-claim × 3-hướng đều ĐỨNG) → **8/8 fix** (+**detector C5 WAL-guardrail** răng-thật [OK] 17/40). ⚡ **Stop-hook HOT-RELOAD FIRE ×2 CÙNG PHIÊN** (`12071c5` 11:05:39 — **7 giây** sau ps1 sinh, GIỮA cửa-sổ worker + `67be443` 11:17 reviewer **chứng kiến SỐNG** giữa review; forensics NTFS-CreationTime×commit-time; N.3 STAGED→**VERIFIED-RUNTIME**; ENV-DEPENDENT data-point **#2/#3** lớp registry-hot-reload — #3 = chính §5.0/§6.4 session-end THỰC THI lần đầu ngay phiên sinh nó) + **squash §5.0 dogfood-THẬT K=2** (reset-soft về ==origin/main, 0-rewrite-đã-push, flow khớp 100% dry-simulate reviewer) + `/pause`·`/tiep` skill-registry hot-reload đăng-ký giữa phiên. **Artifacts:** `.claude/WAL.md` + `wal-flush.ps1` + `settings.json` (file ĐẦU TIÊN repo) + 2 command + BƯỚC 0.7/§5.0/§6.4 + **FLIP-policy run-trace ≥3-task/>5'** (hmw.js+README) + engine **PHẦN N** + rules §5.2 `wal:`-exception + CLAUDE.md `/tiep`-pointer + runs/README taskList-snapshot. **Anh-directed ×2:** mark MỚI **`RC-pqhuy1987-12-07-2026-11-43-45`** (H22 — **Active-High thứ 6**, additive) + **D10** deploy.yml +2 paths-ignore → 🔴 **AS-6 taxonomy ĐỔI từ Run #495: `.claude/agent-memory/**`+`runs/**` đổi HẾT trigger CI** (pattern #490/#492 chết). Outward: adap-report + email **`9cdcda2f3c83`** selftest-MATCH + STAGE-2 ×2 processed. 🟩 cicd **Run #495 PASS 5m11s** (bundle **FROZEN ×6** `BVyH-FY7`/`EDsZebvn` LM-in-window 11:49/11:50 ship-proof · Mig 62/89 frozen · smoke 3×200 · **deploy.yml self-change D10 hợp-lệ** — run parse+chạy trọn bằng chính file mới · diary tự-curate 20.5→17.04K). State GIỮ NGUYÊN: **Mig 62 · 89 bảng · 440 test · gotcha 79 · menu 54 · Sub-agents 12**. 🎯 **Pilot NEXT-anh:** phiên-mới verify hook-fire re-check · kill-giữa-chain→`/tiep` · đổi-acc · pause-roundtrip 1 workflow THẬT. → log `2026-07-12-S111-h22-wal-adopt.md`) · **Prev S110** (S110 — **Adopt H21 engine-đắt PER-INVOCATION + spec-file kết-tinh + model-tier-v3 lead owner-choice — governance/docs-only 0 prod-code, em-main-led + 2 monitor ×2-lượt + invest/reviewer Fable per-invocation + WF 3-worker-Opus + cicd ×2, HMW-ON, 6 commit pushed.** Bootstrap: 440 re-verified · detector 39-benign 0-HIGH · spec-audit 0-GAP · RAG 2437 · H1 ALL-PASS (correction: 2 file dirty = diary lượt-SÁNG S110 transcript-lost lần-2-liên-tiếp WATCH → `162f0b9`) + H2 CLEAN (orphan 0/14 · 2 gist S109 byte-exact) · ✅ Fable streak-4 S107F→**S110F**. **`/check-email` 4 msg hash 4/4 MATCH:** triage-reply (S5 hot-reload **ENV-DEPENDENT** — hub NGƯỢC kết quả → caveat 3 chỗ; S6 #53-mitigation ACCEPT) + notify + 🔴 **H21** (① spec-file 3-mục mỗi run engine-đắt: engine propose → lead verify → LEAD ghi → worker theo spec · ② owner-gõ-kèm-vai, BỎ marker + BỎ 2-vai-cố-định) + **MTv3** (lead = frontier-class owner-choice per-session {Fable|Opus 4.8 1M MAX} · owner-chọn ≠ outage 0-caveat/0-revert · 1-line-ask sau outage · A1/A2). **Adopt đúng lệnh anh** ("/fable-real inves và review + hmw Opus"): invest-**Fable** PASS (7 nuance + 15 cụm + 12-persona-SẠCH + hmw.js:38 xung-đột-MTv3 surprise) → lead ghi **spec-file dogfood run-1** `runs/2026-07-11-h21-mtv3-adopt/` → WF **`wf_0c3b307f-a64`** 3-worker-Opus 3/3-DONE (commands redesign + engine **§K.E mới** + runbook ~30 point-edit) → reviewer-**Fable PASS_WITH_FIXES** (0C·5M·9m: M1 worker-đổi-fact "12 vai" · **M2 boundary-gap lệnh-B × 2 monitor** · M3 ~16 cụm un-🧊 sweep-token-mù-semantics · M4 two-tier-stale · M5 filename) → fix trọn, grep-suite SẠCH. ⚠️ **#53-garble ×2 CHÍNH 2 lane Fable** → **SendMessage-resume recover 3/3 lifetime**. **Anh-directed ×2:** mark MỚI **`RC-pqhuy1987-11-07-2026-20-42-01`** (H21+MTv3 Active-High; row H19 → 📦 SUPERSEDED-partial) + **VALID_ROLES 10→12** (+2 monitor, M2 RESOLVED cùng phiên, node-check PASS, sweep 10 consumer). Outward: email `01d9096e` selftest-MATCH + 2 adap-report + 3 supersede-note + STAGE-2 ×4. 🟩 cicd **Run #493 PASS** 5m24s (bundle FROZEN ×4 ship-proof LM-in-window; trigger AS-6 hmw.js đúng #41) + **spot-check (i) TƯƠI bắt Run #494** (trigger `ac3f122`) → verify lượt 2. Closeout: archive-gate 12/12 under-cap 0-strike + A7 233/233 · marker `.claude/fable-real-mode.on` ĐÃ XÓA. State GIỮ NGUYÊN: **Mig 62 · 89 bảng · 440 test · gotcha 79 · menu 54 · Sub-agents 12**. ⚠️ **Restart CLI** (4 command .md đổi semantics — engine-đắt từ nay = `/fable-real|/fable-clone <vai> <đề-bài>`). → log `2026-07-11-S110-h21-mtv3-adopt.md`) · **Prev S109** (S109 — **Sleep-recovery P1 RESUME→DONE (scope-truth 16→2) + bootstrap all-green — memory/docs-only 0 prod-code, em-main-led + 5 spawn (2 monitor RE-REPORT + H2-propose + reviewer-Fidelity + cicd-AS6), HMW-ON + fable-real-ON.** Bootstrap: **440 re-verified** · detector 36-benign 0-HIGH · spec-audit 0-GAP · reinject trống · RAG **2436** rerank-OK · marks 5 AH · monthly n/a (next 08-01) · ✅ Fable giữ (S107F→S108F→**S109F**, lead+spawns self-report ×6, 0 flip) · H1 **ALL-PASS 4-mặt** (resume-point nhất-quán 3-nguồn; tooling self-compact 17.2→14.8K md5) + H2 **ALL-CLEAN** (0 mồ-côi post-S108 · orphan 0/14 · disk==resume-point MATCH; harvest self-compact 20.2→16.7K md5). **Sleep-recovery P1 (`f5a5c3e`):** Phase-0 re-verify bắt **14/16 file scope-pause ĐÃ covered** bởi `2026-05.gist.md` gộp-kỳ S70 `f36aab8` (header `source-verbatim` + git-date proof 14/14 verbatim unchanged-since-gist; phiên-pause match gist theo TÊN-file 1:1 nên tưởng chưa-nén) → SKIP đúng guard Phase-0.2 "tránh nén lại"; scope thật = 2 file gen-0 (tooling 2026-06 16.4K + harvest 2026-06 17.1K) → pipeline Cách-B trọn vai: ⬜ H2 PROPOSE-ONLY sạch (cluster 5-cụm + inventory 5-lớp + 3 flag tự-bắt-lỗi giữ nguyên) → lead distill 2 gist `distill-gen:1` 5-entry 4-field + N/A-note (6,141/6,544B; ratio 2.66×/2.61× báo-cáo) → coverage-diff PASS + pointer 10/10 grep-unique + G-009 0-mojibake → 🟥 reviewer **Fidelity Fable-real single-deep-pass PASS_WITH_FIXES 3-fix applied** (**14-entry count-từ-disk** [em+proposal đều đếm sai 15] · **+8.9KB** arithmetic · **ERD-debt §16+ CÒN-pending** N/A-fact-claim) + 2 minor; **meta-lesson: gist-metadata-count + số-TỰ-TÍNH + N/A-fact-claim = 3 bề-mặt lỗi NGOÀI body mà coverage-diff máy-móc MÙ** → `last_sleep_at = 2026-07-10`. Verbatim FROZEN 0-touch (2 gist untracked-new · archive 2026-07 pure-append +N0). 🔸 Option anh: 14-file per-quý re-distill = ép-đè-guard `distill-gen:2`, gõ đích-danh — mặc-định KHÔNG. Closeout: **§L.a 1 AS-6 hit** (`f5a5c3e` chứa `memory-budget.json` `.json` NGOÀI paths-ignore → CI **Run #492 trigger** dù 0-code — path-filter INTACT; 🟩 cicd **PASS 5m21s**: bundle **FROZEN-streak ×3** #490→#492 `BVyH-FY7`/`EDsZebvn` [LM-in-window + real-size 1.64/1.55MB ship-proof — dòng bundle :27 VẪN ĐÚNG khỏi hoist] · Mig 62/89 frozen · smoke 3/3 · AS-6-reasoning CONFIRMED pattern lặp #490 cùng budget.json; 12 AS còn lại sạch, 3 sub diary-write = normal-spawn mandate verified-keep) · archive-gate **12/12 under-cap 0-strike** (lần đầu toàn-roster sạch; +reviewer curate 22.4→17.4K) + **A7 GATE 233/233 pointer** · spot-check TƯƠI 4/4 · guard #53-recover HELD 0-garble 6/6 (streak S107→S109) · user-memory +`feedback_resume_premise_reverify` (32) · forensic `/usr/bin/bash` inv-cb gist:43 = quoted-lesson G-009 KHÔNG corruption. State GIỮ NGUYÊN: **Mig 62 · 89 bảng · 440 test · gotcha 79 · menu 54 · Sub-agents 12**. → log `2026-07-10-S109-sleep-recovery-p1-resume.md`) · **Prev S108** (S108 — **Fable-real FIRST-REAL-RUN (H19 dogfood — đóng honest-note §K:334 "chưa chạy thật lần nào") + runbook 60KB + email-chain AI_INFRA — governance/docs-only 0 prod-code, em-main-led + 4-worker-Opus + 2-judge-Fable + cicd, HMW-ON + fable-real-ON.** **Email-chain:** check-email **0-new** (9/9 ≤07-04 processed) · adap-apply n/a · **adap-request MỚI `2026-07-10-se-registry-hot-reload-new-agent`** (S27-lesson thu hẹp, đề nghị AI_INFRA verify n=2 + broadcast fleet) · adap-report n/a-no-new · **send-email `8d14405f` selftest-6c-MATCH** (6 mục: roster-12 · hot-reload · #53 data-point · first-real-run · runtime-note). **Runbook `docs/governance/fable-real-runbook.md` 60KB** (anh yêu cầu "hàm/biến/checklist → file"): §1 dùng-nhanh · §2 wiring 12-biến + 3-GAP-rule + decision-matrix · §3 lane-invest (8-biến + spawn-template + 12-checklist) · §4 lane-reviewer (6-cat + 2-trục boundary) · §5 PRE/PER/POST-RUN + **AC 8-tiêu-chí** + dogfood-form + 8 anti-pattern. Draft **4-worker-Opus tier-2** (`wf_2f85b3f6-3dc` 4/4-done 0-empty ~514K tok; 2 bẫy Workflow-tool tự-fix: **args-đến-script-dạng-STRING → parse-guard** + **`tier:` = hmw-convention → generic dùng `model:'opus'`**) → em-main assemble + 6 stale-fix. **First-real-run:** `/fable-real` marker ON (check-ignore ✓ :92) → **2 judge SINGLE-FABLE song song 2-đầu-khác-trục** theo chính template runbook: 🟦 invest **PARTIAL 103/111 cite-exact** (~111 anchor · **bắt trúng bẫy-honesty** [email "đã sửa hmw.js:31" khi disk chưa sửa] · 7 off-by-1/2 quanh code-fence · 1 **meta-drift 2-tầng** [drift-note tự-stale vì engine vá song song]) · 🟥 reviewer **FAIL Smart-Friend** (1 CRITICAL email-fact + 4 MAJOR [nặng nhất: clone-example thiếu `tier:'opus'` = leak N×Fable trái K.D floor-2 khi Fable UP] + 6 minor; 7 refutation 5-đứng; core JSON-shape/biến/checklist/GAP-guard **SOUND**) → em-main **37/37 fix** + vá `hmw.js:31` comment per-session-probe THẬT + engine §K.C:328 9→10-vai / §K:334 designed+**dogfooded** / K.D:332 S108-note (H20 đủ-tầng) + dogfood-form điền → **AC 8/8** · harvest 2-entry on-behalf **`[engine: fable-real-single · Fable-S108]`** (GAP-2/3 stamp lần đầu áp thật). **cicd Run #491 PASS** 5m06s (`69957fd` hmw.js trigger · bundle **FROZEN** `BVyH-FY7`/`EDsZebvn` — **#69 frozen-streak ×2** #490→#491 sau rotate-#489, LM-in-window + real-size = ship-signal duy nhất · **path-filter verified 2-chiều** `f1af05c` .md-only 0-run). **0-garble 7/7** (4 worker schema-NHỎ + 2 judge VERDICT-header + cicd — mitigation streak). Closeout: §L.a 0-AS-hit · spot-check 4/4 (sha-recompute `8d14405f0f5ae7ed` khớp · bundle-curl FROZEN · runbook 9×tier-opus + 0-stale-claim · engine-10-vai) · A7 228/228 · sleep 8d INFORM-×3 · marks 5 Active-High n-a-mới. 3 commit `69957fd`/`f1af05c`/`5d13b48` + closeout. State GIỮ NGUYÊN: **Mig 62 · 89 bảng · 440 test · gotcha 79 · menu 54 · Sub-agents 12**. 🔴 **Marker fable-real VẪN ON** (anh gõ `/fable-clone` khi muốn về ảo — em KHÔNG tự toggle, AP-4). *(🧊 H21 S110: marker RETIRED — engine-đắt = per-invocation `/fable-real|/fable-clone <vai> <đề-bài>`.)* → log `2026-07-10-S108-fable-real-first-run-runbook.md`) · **Prev S107** (S107 — **+office-document 12th sub (anh giao "Sub chính" Office) VERIFIED-RUNTIME cùng-phiên + reconcile S106-leftover — governance/docs-only 0 prod-code, em-main-led + 4 spawn (2 monitor ×2-lượt SendMessage-resume + cicd + office-document).** Bootstrap all-green: **440 re-verified** · detector 36-benign 0-HIGH · spec-audit 0-GAP · A7 226/226 · RAG 2434 rerank-OK · ✅ **Fable VỀ lần 4** (flip-8 S106-Opus→S107-Fable, self-report ×5) · 2 monitor RE-REPORT ALL-PASS/ALL-CLEAN (H1 verify S106 self-compact **md5 3/3 moved-not-cut** + 2 flag-S106 closed · H2 Fidelity byte-level PASS + orphan 0/14). **Reconcile `1eea51b`:** commit S106 leftover 7-file (gộp flip-chain 1-owner §Sub-agents per anh-confirm + tooling self-compact) + flip-8 canonical + ERD-range →62 ×2. **+office-document `21387cd`:** agent **OD1OD10** (skill-first · fidelity-template-100% · extract-không-bịa · round-trip-verify · file-mới-không-đè-gốc · boundary ⟂ implementer-backend code-engine) + skill nạp **docx·xlsx·pptx·pdf + form-engine** + MEMORY seed + wire 14-file (roster 11→**12** · VALID_ROLES hmw.js 9→**10**) → **cicd Run #489 PASS** ~5m33s (bundle rotate benign #69 admin `ChSNAJBK`→`BVyH-FY7`/user `Bn2w1znH`→`EDsZebvn` CSS-frozen · Mig 62/89 frozen · smoke 200×3 · path-filter 12/14-ignore 2-trigger đúng #41). **Spawn-test `86a34d5`: VERIFIED-RUNTIME CÙNG PHIÊN** — registry **HOT-RELOAD agent MỚI giữa phiên** (S27 lesson THU HẸP còn EDIT-agent/command; user-memory harness4 corrected) + PASS OD1/OD4/OD5 template thật (FO-002.05 249-para/10-table · FO-002.07 3-sheet · round-trip 37KB VN-dấu 3/3 · **finding: 2 template `wwwroot/templates` 0-placeholder `{{field}}` — mẫu blank "…………..", mapping ở render-engine hoặc chưa placeholder-hóa → câu hỏi mở khi đụng form-engine**). **Closeout:** §L.a 0-AS-hit · guard **#53-recover HELD 5/5 spawn return-verdict-sạch 0-garble** (RETURN-FORMAT + narrow-prompt mitigation ăn — phiên sạch đầu tiên sau chuỗi ×11) · spot-check H18-D(a) **3/3 PASS** (bundle TƯƠI curl khớp `BVyH-FY7`/`EDsZebvn` · `{{`-grep độc-lập 0-hit · alias-map 3-fork verified; +1 false-alarm CWD-drift tự-giải — lesson cd-in-compound spot-check) · archive-gate 0-over-cap · budget.json **full re-measure S107** (supersede S98; harvest 18.1K>17.1K self-target + cicd L1 20.2K → compact-candidates phiên sau) · sleep 8d≥7 INFORM chờ anh · marks 5 Active-High n-a-mới. State: **Mig 62 · 89 bảng · 440 test · gotcha 79 · menu 54 · Sub-agents 12** · bundle admin `BVyH-FY7`/user `EDsZebvn` (Run #489). → log `2026-07-10-S107-office-document-12th-sub.md`) · **Prev S105** (S105 — **Bootstrap all-green + BVAAU cross-repo assist (favicon + auth-RCA) + closeout eval-all — docs/memory-only 0 prod-code SE, em-main-led + 3 spawn (2 monitor + investigator).** Session-start: test **440 re-verified** · detector **36-benign 0-HIGH** (S104-reconcile sạch, canonical==disk) · 2 monitor RE-REPORT: **H2 CLEAN + tự-bắt mồ-côi record H2-S104 của CHÍNH NÓ** (self-record blind-spot gate-agent → em-main retro-append 2 entry) · **H1 PASS 4-mặt** (#53-garble lần-6 → recover-from-diary) + 2 flag → em-main vá **4 derived-flush**: `skills/README:20` Mig 62/S104 + `agents/README:3` + `session-start:37` flip-chain +S104-O/S105-F + `session-end:113` trailer→Fable 5 · ✅ **Fable VỀ lần 3** (flip-6: S102F→S103O→S104O→**S105F**; lead + 2 monitor self-report `claude-fable-5` ×3 = runtime-verified) · sleep 5d<7 skip · RAG 2433 · marks 5 Active-High. **BVAAU cross-repo (anh gửi, repo BENHVIEN_A_AU — chỉ đụng 1 file disjoint, session BVAAU kia đang live):** favicon Home placeholder-teal-cross → **brand thật** (trắng + vũ công navy `#00249b` + pip nhà vàng `#f9ca17`, hệ per-app S81) commit `0cc815b` pushed (**prod-verify pending CI** lúc đóng còn teal) · **investigator deep-pass RCA 3-Q** (⚠️ **#53-garble lần-7** ở reasoning-lane → **recover-path MỚI: SendMessage-resume** khi diary trống → verdict đầy đủ lần 2): **Q1** Home Google "đá-ra-ngoài" = **FE mù session** — bundle cũ gọi relative `/api` trên site TĨNH → `/api/auth/me` 404 → anonymous vĩnh viễn, hub-side OK hết (7 nghi vấn a-g đều KHÔNG; cookie `.benhvienaau.com` set đúng) — fix API_BASE-absolute = `51c69fb` bởi CHÍNH session BVAAU cùng-lúc → em-main **byte-verify prod LIVE** (bundle mới Home `CtTKjYz2` + CRM1 `Cr8wJMpn` marker PRESENT, config zalo:true) · **Q2** CRM1 trước hở 2 tầng (FE soft-gate + API `enforceCrmGate:false` — data thật lộ anonymous); FE-redirect-home live 51c69fb; **kín API = flip `AUTH_ENFORCE_CRM_GATE=true` CHỜ ANH quyết** (đề nghị: bật sau UAT login ổn) · **Q3** "User_ID" Zalo KHÔNG có trong UI 3 app (duyệt = StaffCode+Note; `ProviderUserId` backend = identity-map GIỮ) — trường anh Mỹ thấy khả năng ngoài repo. `/fable-real` anh gõ nhầm → hủy, 0 marker. **eval-all closeout:** MFE **FIT PASS** (denom 30 item, 1.1% cap worst-case; SUB coverage 85-100% đo-thật; age-band 0) + archive-gate **A7 226/226** 0-over-cap + spec-audit **0-GAP** + reinject-ledger trống + **§L.a 0-AS-hit** + guard #53-recover **HELD 2/2**. State GIỮ NGUYÊN: **Mig 62 · 89 bảng · 440 test · gotcha 79 · menu 54**. → log `2026-07-07-S105-bootstrap-bvaau-auth-favicon.md`) · **Prev S104** (S104 — **Session-start audit bắt Mig 62 docs-lag → reconcile (docs/memory-only 0 prod-code, em-main-led + 2 monitor).** Cùng-ngày commit `778fc98` `[CLAUDE] Supplier: Mig 62 expand 30-field` (16:06, Opus) ship BE+FE 2-app+Mig 62+deploy Run #488 NHƯNG bỏ closeout docs → STATUS/HANDOFF kẹt "Mig 61/S103". S104 session-start: governance-detectors bắt **1 HIGH** (`STATUS Mig=61 nhưng disk=62`) + 2 monitor RE-REPORT (**H1** 4-mặt PASS [skill/roster/plugin unchanged] + patch-list D1-D4 · **H2** 5-trục CLEAN — investigator-harvest-in-HEAD verified **moved-not-cut** [khác vụ cut S102] + 3 cicd file uncommitted **commit-worthy** Run #488 bundle admin `ChSNAJBK`/user `Bn2w1znH` #69-meaningful) + `dotnet test` **440 PASS re-verified** (#65 no-bite dù Mig 62 đổi chữ ký `Create/UpdateSupplierCommand`). **Reconcile:** STATUS Mig 61→62 + mega-line + Sub-agents S104-Opus + In-Progress S104 + Supplier-backlog Phase-A-shipped + HANDOFF + ef-core SKILL row Mig 62 + commit 3 cicd memory (Run #488). Mig 62 = **Supplier 9→27 field** (18 AddColumn nullable) + `SupplierType +CaHai=6` + enum `SupplierStatus` + seed 4 NCC 30-field + FE 2-app SHA-mirror (form 4-section + Status select + component `PathLink` 3 NAS-link tách từ PE HoSoLink) — **no new table (89)**, reversible Down, test-after-UAT (Phase B Excel-auto-map defer). ⚠️ runtime S104=Opus (Fable outage flip-5: S98→S101-Opus→S102-Fable→S103-Opus→**S104-Opus**). State: **Mig 62 · 89 bảng · 440 test · gotcha 79 · menu 54**. → log `2026-07-06-S104-mig62-supplier-reconcile.md`) · **Prev S103** (S103 — **AI_INFRA 6-broadcast adap (crystallized-backfill + Harness-20 + memory-hygiene mapping) + session-start audit — governance/scripts-only 0 prod-code, em-main-led + 2 workflow HMW-ON.** Session-start: test **440 re-verified** (0 code-delta) · 2 monitor RE-REPORT (H1 ①②③ PASS + 1 LOW model-note-S103 · H2 ALL-CLEAN 0-orphan/0-byte) · governance-detectors 35→36 (benign +1 wikilink) 0-CRITICAL · memory-selfimprove A1-A3/B1-B2 0-GAP · reinject-ledger trống · RAG 2431 · ⚠️ **runtime S103 = Opus** (Fable outage lại — lead+spawn self-report `claude-opus-4-8`, `~/.claude/settings.json:11` vẫn pin fable → H5-fallback revert-free; per-session flip **S98-Fable→S101-Opus→S102-Fable→S103-Opus**, đúng lý-do BƯỚC 0.6 probe mỗi phiên). **Adap (`/check-email` 3 new pulled whole-file+body verified → `/adap-apply` hash MATCH cả 6):** (1) **Harness-20 fix-all-structure** engine §L + dogfood model-note 4-tầng-sweep (README:3-PERSONA/session-start:37/session-end:113 Fable→Opus + §G.5 220K→380K neo-supersede, history-saga giữ) + **2-đầu-catch** review bắt 2 DẪN-XUẤT stale-trailer `rules:220`/`guides:428` sweep-sót→fixed (14 session-log SNAPSHOT giữ). (2) **F4 crystallized-backfill** = NEW `scripts/crystallized-backfill.ps1` (measure-then-fill DRY, **default target=0=OFF owner-authority**, calibrated-range [bytes/4..bytes/3.0], precondition target>0∧headroom>0, **file-floor=UPPER-BOUND honest** peak~368K) + `budget.json:crystallized_backfill` + budget-table wire §2.1.6/§L.b(c). (3) **F1/F3 already-met** (0 hardcoded-violation toàn-kho persona-clean; BƯỚC 0.6 bắt S103=Opus real-metadata). (4) **session-cmd budget-table (Up1) + run-loop 2-tầng (Up2 largely-already-met §L.b(c))**. (5) **H16 no-key Applied%** = `scripts/applied-eval-nokey.ps1` (adversarial-gate fail-closed 3-ca + fault-inject FLIP bắt real-bug `$script:`-scope; **mechanism-built numbers-DEFERRED**). (6) **memory-hygiene A/B/C** already-met (archive-gate DRY-RUN sidesteps-grep-trap + governance-detectors 4-layer 1:1; **C n/a JS-sandbox no-CLI-launcher**). (7) **consolidation** reference-ack (crystallization≠backfill absorbed). engine **§L + §M** codify. **2-workflow:** WF1 implement `wf_55ef6778-a0d` (3 lane schema-CLEAN, 2 script selftest exit-0 + fault-inject teeth + Lane-C verify) + WF2 review `wf_3c5c37cb-aa2` fable-clone (**Lane-C PASS returned + Lane-B recover-from-memory PASS**, 0-BLOCKING 2-CONCERN-addressed; ⚠️ **#53 garble ×3** [investigator recon + 2 review-lane] → em-main recover, **investigator AS-10 garble-curation REVERTED** git-backstop). **6 adap-report + 1 adap-request** (`2026-07-06-se-53-garble-reasoning-lanes-mitigation` — evidenced build-3/3-clean vs review-1/3 → N-lane-redundancy+narrow-schema+em-main-recover mitigation) + send-email `fc1e22ac` selftest-MATCH + STAGE-2 move 3-inbox. State GIỮ NGUYÊN: **Mig 61 · 89 bảng · 440 test · gotcha 79 · menu 54**. ⚠️ restart CLI (session-start/end + agents/README đổi). → log `2026-07-06-S103-crystallized-backfill-harness-20-adopt.md`) · **Prev S101** (S101 — **H18 WF2 review closeout + session-start audit — governance/docs-only 0 prod-code, em-main-led + 1 review-workflow HMW-ON.** Session-start: test 440 baseline (0 code-delta S98→S100) · 2 monitor RE-REPORT ALL-PASS/CLEAN (tooling 4-mặt fresh + **MODEL-DRIFT bắt: runtime=Opus 4.8 KHÔNG Fable dù `settings.json:11` pin `claude-fable-5[1m]` → H5-fallback tự-kích S101, Fable unavailable phiên này, revert-free KHÔNG sửa frontmatter**; harvest 0-orphan/0-byte-0/11/0-corruption + cicd #486 dirty-delta fidelity-verified→commit) · governance-detectors 35 flag 0-CRITICAL (3 MED vocab-fork known-alias-mapped S96) · memory-selfimprove A1-A3/B1-B2 ALL-PASS 0-GAP · reinject-ledger CG-1 trống · sleep-check 1-ngày<7 skip · RAG 2431 alive. **H18 WF2 closeout (NEXT-em #1 từ S100):** WF2 gốc `wf_31ea3985-92c` MẤT theo CLI-restart (TaskList empty · mode-A no-run-folder) → đúng report-before-stamp KHÔNG bịa PASS → **re-run fresh 3-lane `wf_955643c3-f7d` → PASS_WITH_CONCERNS 0-BLOCKING:** Lane-A detector-teeth **PASS** (fault-inject 4/4 tái-dựng ĐỘC-LẬP `-RepoRoot` temp-tree: 68-gotcha→MED · 79-đúng→IM · 6-test→LOW · 88-bảng→MED [od-c verify byte `0xE1 0xBA 0xA3`='ả' khớp `$VN_BANG`]; MED derived-stale real-repo 11→0; refute 3-trục đều FAIL) · Lane-B ledger-retire **PWC** (0/15 lifetime byte-exact reversible `sed 3,4d`==parent · 6/6 consumer 🧊-repointed · history preserved; **1 CONCERN = `workflows/README.md:51` nhãn-cũ "ledger orphan-scan" sweep-S100-SÓT [grep-exact `_ledger` không match] → FIXED S101** + 2 NIT) · Lane-C codify+frontier+containment **PARTIAL** (codify-khớp-2-report + n-a-legit-H8-S66 + containment-0-residual first-hand ✓; frontier-hash `b8d2a846`≠`8b6a8354` + reviewer_gate-missing dựa **record-S100** do **broadcast inbound VẮNG khỏi repo** [inbox chỉ tới 06-20-H15v2] → process-gap ghi backlog; HELD=an-toàn dù không tái-kiểm). ⚠️ **Lane-C #53-return-garble tái-diễn lần-5** (`subagent completed without calling StructuredOutput`) → em-main recover first-hand KHÔNG re-spawn (`feedback_agent_return_garble_recover`). Stamp run-id+verdict → adap-report:5 + engine §J:283; model-note reconcile STATUS:24 + agents/README:3. State GIỮ NGUYÊN: **Mig 61 · 89 bảng · 440 test · gotcha 79 · menu 54**. **PART 2 — `/check-email AI_INFRA` + `/adap-apply` (anh-directed):** directed ack `batch13` pull+verify (whole-file + body-hash `72aaeee` MATCH) → AI_INFRA **ack trọn 13 báo cáo SE** (bắt-kịp H-17; deep-reverify H-17="mạnh nhất fleet"; Fable-restore H-8 runtime-verified S98 ghi-nhận); **re-stamp H10** body-hash lỗi-phương-pháp `5f511fe5`→`5f8b8504` (no-strip→canonical) + **frontier flag#2 RESOLVED** (AI_INFRA xác-nhận lỗi-stamp-của-họ → re-stamp `8b6a8354`=đúng-SE-computed, SE HELD đúng). **4 broadcast 07-03 adap (hash-MATCH + reviewer_gate PASS — format-regression H18 fixed):** model-tier **12/12** (SE all-inherit form-valid per autonomy; v2-pin-simple KHÔNG mandate→SE giữ all-inherit; C3 `[1m]`=0 frontmatter-scoped) + Q1/Q2-documented + selftest-stamp→send-email · **H19 fable-clone FORMAL ADOPT + RC-stamp `RC-pqhuy1987-03-07-2026-17-46-35`** (anh chọn "Formal adopt" + "full 2-workflow": WF1 `wf_5f308fd8-744` SOUND_WITH_CONCERNS [3 floor-fidelity gap; lost-to-interruption→resume-cached] + WF2 `wf_ed5b972f-a4d` PASS_WITH_CONCERNS 0-BLOCKING): 2 command `/fable-real`+`/fable-clone` thật/ảo-toggle (semantic-inverse marker-vắng=ảo-DEFAULT) + marker `.claude/fable-real-mode.on` gitignored + engine **§K** (K.A-K.D + 3 gap) + session-start **BƯỚC 0.5b reader** (WF2-Lane-A-fix marker-write-only) + 4 adap-report. Mapping reviewer+investigator-codebase. Honest **VACUOUSLY-MET-SE-today** (all-inherit→2 vị-trí đã top-model→0 runtime-delta; value=future-proof-floor + anti-consensus-catch KHÔNG cost; nấc designed+will-dogfood). ⚠️ **GAP-3 AS-10 fired LIVE** (WF2 lanes tự-ghi reviewer-memory dù RETURN-only → harness-sanctioned KEPT → dogfood-validate §K.C "convention-KHÔNG-mechanism" ngay trong review chính bản codify). +2 command · RC-mark 4 Active-High · engine §K. → log `2026-07-03-S101-h18-wf2-closeout.md` + `2026-07-03-S101-h19-fable-clone-adopt.md`) · **Prev S100** (S100 — **Harness-18 adopt (kiện-toàn kiến-trúc 4 khuôn-mẫu additive) + frontier-assessment HELD-integrity — governance/scripts-only 0 prod-code, em-main-led + 2 workflow HMW-ON.** `/check-email AI_INFRA` 0 directed mới → `/adap-apply` 3 broadcast: **(1) hash-verify** H18+checklist MATCH ✓ · **frontier `content_sha256` MISMATCH** (4 biến-thể canonical đều lệch, 2 file kia match → body lệch stamp) → **HELD-integrity** không codify + đề nghị AI_INFRA re-stamp; ⚠️ cả 3 thiếu field `reviewer_gate` (24 broadcast cũ đều có) → flag format-regression. **(2) J.A detector v2** (`governance-detectors.ps1`): ratio-band mismatch-only (0.52.0=MED stale-total, xa=LOW module-local — sửa lớp FP `|diff|≥10` NGƯỢC, S98 8/8 MED đều FP) + scan-range **glob động** ALL SKILL.md + ALL commands/*.md (vá lớp-mù "(68)" sống 11 phiên) — **fault-inject 4/4 PASS** (`-RepoRoot` temp: stale-MED/đúng-IM/local-LOW/anti-Goodhart-MED) + real-repo MED derived-stale 11→0. **(3) J.B retire `runs/_ledger.md` two-beat:** đo bắt-thật **0/15 lifetime** (đều open+close cùng-ngày 06-18) + mode-A coverage 0/8 S93+ + đính-chính "S71 `harvest/` rỗng" = criterion-wording KHÔNG phải incident (caveat-3 parity ghi honest) → freeze 🧊 1-dòng reversible + **sweep 15 điểm/8 file**; orphan-authority = folder-scan (`run.md` có mà `*-synthesis.md` vắng/0-byte). **(4) J.C bracket** 2/3 n-a-by-owner-mandate H8 + revisit-condition viết ra (C3 ĐẠT). **(5) J.D** D(a) spot-check-tươi wired `session-end §L.b(i)` (dogfood n=1) + D(b/c) REUSE reinject-ledger CG-1. **(6) Frontier self-audit (dù HELD, vô-hại):** cron monthly = **ghost-wire THẬT** (CronList runtime=0 + scheduler RỖNG 05-04 + S96 chạy 13:04 em-main) → **honest-retire 5 file** (audit = thủ-công em-main session đầu-tháng — function vẫn đúng hạn S44/S96, chỉ wiring-claim sai) · 3 script đo GLOB-LIVE ✓ 0-hardcode · MAST=0 · defer **D-1/D-2** đánh-số Maintenance backlog. **(7) Hygiene:** F2 SendMessage-note patch 2 command (runtime-verified KHẢ DỤNG lại) + B1-pointer "130 PASS"/cron-date + Co-Authored trailer → Fable. Checklist H18: **10/12 ĐẠT + 2/12 n-a-reasoned**. WF1 `wf_50a817ce-a69` 3-lane investigator (0-residual, chunk 2431==2431); **WF2 review `wf_31ea3985-92c` IN-FLIGHT lúc đóng** → session kế đọc verdict + điền run-id + email AI_INFRA. 3 adap-report committed. Đầu phiên: test **440 re-verified** + 2 monitor RE-REPORT ALL-PASS/ALL-CLEAN (`513aa09`). Dogfood frontier-method: tự-bắt 1 ca suýt-stamp run-id WF2-chưa-chạy → placeholder. State GIỮ NGUYÊN: Mig 61 · 89 bảng · 440 test · gotcha 79. → log `2026-07-02-S100-harness-18-adopt.md`) · **Prev S98** (S98 — **Harness backlog batch ĐÓNG — docs/memory-only 0 prod code, 2 commit `4263d63`+`8a249c5` CI-skip.** ✅ Fable-restore gỡ caveat H5.6: settings `claude-fable-5[1m]` + spawn-test inherit ×2 monitor self-report `claude-fable-5` → H8 all-inherit runtime-verified, fallback-Opus H5 S62→S97 kết thúc · monthly pointer→2026-08-01 · skill ef-core-migration +row Mig 60/61 · re-tier mega-line S93/S94→`docs/_archive/STATUS-HANDOFF-tier-S98-2026-07-02.md` · 3 orphan-append H2 (database-agent 4th+5th spawn S97 · reviewer S97-bis addendum · implementer-frontend S97-Part2 hook) · cicd-monitor L1 curate 19.9→17.5KB + `memory-budget.json` re-measure fresh · sleep-compress implementer-frontend `2026-H1.gist.md` distill-gen:1 · email AI_INFRA Fable-restore · ledger H10 mode-A note. Session-log skip (docs-batch). State GIỮ NGUYÊN: Mig 61 · 89 bảng · 440 test · gotcha 79. *(Flip ✅ hồi-tố @S99-start — S98 đóng thiếu flip header/row, H1 F1 catch.)*) · **Prev S97** (S97 — **PE finalize 4-fix UAT anh Kiệt FDC (buổi live) — em-main-led, prod-verified Run #481+#482.** **(1)** badge cấp-sau-finalize `"không trình tới"`→**`"Kết thúc tại {finalizeLevelName}"`** (render-động → hiện "Kết thúc tại CCM"; fallback finalizeStepName/'cấp trên') + tooltip template-literal. **(2)** đảo default checkbox "Cấp này KẾT THÚC quy trình" **opt-out→opt-in** (`useState(true→false)` init + reset onSuccess + helper text reword + comment S96-"default checked"-drift fix) — mặc định TRÌNH TIẾP CEO, tick mới KẾT THÚC tại cấp. **FE-only mirror 2-app SHA-identical `PeWorkflowPanel.tsx` (`bcf812fd`), 0 BE/mig/test** (BE service `if(AllowApproverFinalize && applyLevelFinalize)` tôn trọng cờ FE; param default `true` giữ làm fallback caller non-FE, FE luôn POST tường minh). Workflow `wf_0e01fdba-209`: implementer-frontend (8 hunk 4×2, build×2 PASS) → reviewer (PASS 0-issue; verify comment-L121+handler-L664 giữ, logic non-break). Commit `1c8fb6a`. **cicd Run #481 PASS ~5m10s byte-level #77:** JS rotate admin `COYAX-yQ`→**`Cf0o8dx8`**/user `0MU-kb4N`→**`x8rppRAK`** (CSS frozen `Bbtesa6B`/`BmuPz_Dy` #69-REFINE logic-only; real-size 1.64/1.54MB anti-SPA-trap) · **NEW `Kết thúc tại`+helper `Mặc định…TRÌNH TIẾP` PRESENT / OLD `không trình tới`+`Đã BỎ tick` ABSENT** (fix shipped byte-level → UI-cũ=cache→incognito, KHÔNG deploy-fail) · Mig 59/88-table frozen · smoke api+admin+eoffice 200×3 + PE-list 200 items[]-valid. **Lessons:** #53 return-garble **tái-diễn lần-4** (cicd trả prose-curate-memory "18.7KB above target" thay verdict dù instruction "return-verdict" → **recover-from-diary S97-#481-entry KHÔNG re-spawn** per `feedback_agent_return_garble_recover`; instruction-fix giảm-không-100%) · BE-honors-explicit-flag → đảo-default chỉ sửa FE `useState` (BE param=fallback, FE luôn POST tường minh) = zero BE/test-churn zero-prod-risk · comment-drift cleanup trước commit. impl MEMORY compaction giữa-spawn (23.8→11.5KB, archive S76-79→`2026-H1.md` verify no-loss). **(3) endsBeforeCeo config→RUNTIME (Mig 60 `8037fa0` #482 — cross-stack, reviewer PASS 0-issue):** phiếu có cấp finalize nhưng approver opt-out → lên CEO thật + CEO duyệt, nhưng sơ đồ báo sai "kết thúc tại CCM, không qua CEO" + làm-mờ Bước CEO (endsBeforeCeo suy CONFIG). Fix: field runtime `EndedByLevelFinalize` (set CHỈ nhánh level-finalize) → EndsBeforeCeo cho phiếu DaDuyet đọc runtime; 4 projection (detail/List/Inbox/ListApproved) + FE gate làm-mờ 2-app + backfill marker; test 440 (repro `peFinButWentCeo` config-finalize+field-false→false) + reviewer 6-điểm PASS + **cicd #482 bug fixed LIVE** (PE-detail `31faef0d` endsBeforeCeo=False phase=7, EF-ternary SQL-Server 200-NOT-500) → gotcha #78 (display-flag CONFIG-vs-RUNTIME). **(4) badge "✅ Đã được CEO duyệt" (`9e12e80` #483, FE-only):** đối xứng fix-3 — phiếu DaDuyet + `!endsBeforeCeo` (đi hết lên CEO) → PeFinalizeChip hiện badge; tận-dụng cờ runtime (0 BE/mig); mirror 2-app + 6 call-site; cicd #483 byte-#77 PRESENT. **(5) Mig 61 backfill fix (`fb2dfa9` #484 data-fix):** anh Kiệt check A/005 "CEO duyệt chưa" → điều tra (API+sqlcmd) phát hiện A/005/A/008 **finalize-CCM (KHÔNG qua CEO)** nhưng badge sai "Đã được CEO duyệt" do Mig 60 backfill soi NHẦM bảng (Approvals thay Changelogs nơi marker thật). Mig 61 query đúng Changelogs → prod A/005/A/008 EndedByLevelFinalize 0→1 + endsBeforeCeo flip True (cicd #484), A/010 control unchanged → gotcha #79. database-agent điều tra + em-main verify-prod + migration. **State: Mig 61 · 89 bảng · 440 test · gotcha 79 · menu 54 · bundle admin `mEGqlNWc`/user `Dnrp4PU1` (Run #484 data-fix, #69-rebuild) · prod 21 NCC/17 user.** **REVIEW-before-session-end (anh yêu cầu, workflow `wf_4951c347` 4-lane):** prod-data-integrity CLEAN (flag-vs-marker 3 phiếu chuẩn 0-miss/0-over-reach, #78/#79 ăn prod) · prod-deploy CLEAN (11 commit deploy OK, Mig 61 applied, health 200) · code-review PASS (em-main grep 0 wrong-table khác) · feedback captured. **PROD AN TOÀN.** **🔴 NEXT anh:** UAT **incognito** phiếu "8 MEP Sub Hệ thống solar" xác nhận: (a) sơ đồ hết báo "không qua CEO" + Bước 3 CEO KHÔNG còn mờ [fix-3 mới], (b) badge "Kết thúc tại CCM" + checkbox default-unchecked [fix 1-2] (+ vụ cũ "lỗi phân quyền vào phiếu": cho số-phiếu+user). **NEXT em:** monthly re-tier mega-line pending (giờ 5-blurb S97-S93). → log `2026-07-01-S97-pe-finalize-wording-default-flip.md`) · **Prev S96** (S96 — **buổi UAT LỚN anh Kiệt/chị Trà/anh Chương live + monthly-audit — 5 commit prod-verified, em-main-led (HMW-mode ON; 1 prep-workflow monthly-audit + spawn-lẻ, chủ-yếu solo).** **(1) Monthly drift audit `881783c`** (docs-only CI-skip): ef-core SKILL Mig→59 + bảng rows 57/58/59 + Mig 14/Phase-7 Budget-DROPPED annotate · skills/README Mig 55→59 + gotcha #69→76 · docs/CLAUDE Budget REMOVED Mig 50 strike-through · **`docs/governance/vocab-alias-map.md` MỚI** (3 fork run-trace/Ngân-sách-PRO/all-inherit + `$ExcludeExact` anti-self-match) · **re-tier STATUS/HANDOFF mega-line 5→3 blurb** (S92/S91→archive, conservation delta=0 BOM-preserved) + hoist 3 UAT-carry→blockers · **FD memory distill** (H17 strike-1 CLEARED: L1 26129→21492B, 5 war-story→archive/`_INDEX`/gist, Lessons value-protect lên L1). Workflow `wf_2d687d27` 4-cluster draft→verify (reviewer bắt #74-paraphrase-drift + AS-10 residual reverted). detector 27→25. **(2) Import NCC DONGDUONG `ba4b8e0`** (Excel anh Kiệt "Database NCC" 4 NCC/30-field): 3 NCC đã seed sẵn (TRUONGGIANG/TANPHU/TGN) → chỉ +DONGDUONG vào SeedRealMasterDataAsync (ungated idempotent, pack extras→Note, no-mig); prod 20→21 NCC (Run #477). Backlog 15-18 field "note-lại-từ-từ-tính"→Next-up. **(3-5) 3 PE bug-fix UAT:** `e657faa` ô "Cấp này KẾT THÚC quy trình" (AllowApproverFinalize S89-auto) → **opt-out bỏ-tick-được** (2-tier: Designer=cấp-quyền / phiếu=chọn kết-thúc-hay-trình-CEO; +param `applyLevelFinalize` default-true BE + FE 2-app, Run #478) · `36cbf8b` **chuông tự sạch** noti "cần duyệt" cũ khi phiếu rời cấp (LogTransitionAsync mark-read Generic+RefId ExecuteUpdate BE-only, Run #479) · `0c2f9f6` **khóa sửa giá đề xuất PRO/CCM sau gửi-duyệt** ("duyệt là fix" — Mig 54 "KHÔNG-ràng-Phase" ĐẢO → non-admin chỉ sửa Nháp/TraLai + Admin-override; BE+FE 2-app+4 test, Run #480). Test 434→440. **Delete-sau-duyệt = ĐÃ chặn sẵn** (FE nút Xóa chỉ DangSoanThao + BE guard, không cần sửa). Checkbox "ko-được" = **browser-cache** (verify byte-level: prod bundle `0MU-kb4N` CHỨA fix + "✅-static" cũ đã mất; index.html no-cache đúng-chuẩn + no-service-worker) → **incognito = golden-test**. **State: Mig 59 · 88 bảng · 440 test (45D+395I) · gotcha 77 · menu 54 · bundle admin `COYAX-yQ`/user `0MU-kb4N` (Run #480) · prod 21 NCC/17 user.** **Lessons:** verify-deployed-artifact-byte-level (cache≠deploy; incognito golden — gotcha #77) · #53-return-garble tái-diễn ×3 (investigator + cicd×2 trả text-memory-curation thay verdict → recover từ agent-memory; instruction-fix "return-verdict" ăn lần-3) · 2-tier-permission (grant-vs-exercise) · spec-change→update-test-cũ (SeedPeAsync ChoDuyet→DangSoanThao). **🔴 NEXT anh:** UAT incognito checkbox + cho **số-phiếu/user** vụ "lỗi phân quyền vào phiếu" để em soi config-workflow. **NEXT em:** cicd-monitor S-tag-drift S97/S98→S96 reconcile (closeout này) · monthly re-tier mega-line (giờ 4-blurb S96/S95/S94/S93). → log `2026-07-01-S96-uat-pe-fixes-monthly-audit.md`) · **Prev S95** (S95 — **Harness-17 adopt (Vòng tự-cải-thiện bộ-nhớ Đo→Tinh-chỉnh→Kiểm) — governance-only 0 prod code, em-main-led + 3-workflow fan-out (HMW-mode ON).** `/check-email AI_INFRA` (0 directed mới; H16 đã áp trọn S93) → `/adap-apply` H17 (2 broadcast hash-MATCH · `reviewer_gate:PASS`). **10/10 mục 🔴 sàn ĐẠT:** REUSE-cite A2=§H MFE/C3=D9/CG-2=value_protect/archive=§A; **build mới** `scripts/memory-selfimprove-audit.ps1` (C1 spec-audit NO-API exit-0, **runtime-verified bắt frontend-designer over-cap GAP thật**) + `.claude/governance/reinject-ledger.md` (B2 CG-1 N=3, tách khỏi budget.json) + engine **§I** codify + `session-start §2.1.7`/`session-end §L.b(c)` wire + HCV alias no-seed (coverage 3-nghĩa, detector vẫn 27). **3-workflow (run-id bằng-chứng):** WF1 `wf_f085d7c4-d78` ground-truth + WF2 `wf_8e73c1d6-ee6` 3-lane review PASS 0-blocking + WF3 `wf_6f44eddf-680` deep-reverify (**fault-injection 13-inject chứng-răng-thật** + integration + cross-doc, 0 application-defect). **2 commit:** `18a17f5` (adopt — cicd **Run #476 PASS** prod 200×3, bundle rotate admin `0T6vVJST`/user `BGXEVZO6`, Mig 59 unchanged) + `65b434a` (deep-reverify docs-only CI-skip). **adap-report + 2 email AI_INFRA** (hash `54789e19` adopt + `8c94fa34` deep-reverify-update). **Dogfood C3 4-fire:** AS-10 WF1+WF3 self-write reverted (git-diff net = backstop THẬT; **instruction-fix NOT 100%** — WF3 explicit-return-only STILL self-wrote → E-006 recurrence S95, guard HELD 4/4, 0 escape; cicd-monitor diary KEPT = normal-spawn legit). **Lessons:** fault-injection-via-`-RepoRoot`-temp chứng checker-teeth (không chỉ happy-path PASS) · Lane B #53 empty-return → em-main self-gate recover · workflow-agent persona-write stochastic → git-diff mandatory. **State GIỮ NGUYÊN: Mig 59 · 88 bảng · 434 test · gotcha 76 · menu 54 · prod 17 user/7 NCC.** **NEXT em:** frontend-designer distill (WATCH strike-1 = H17 loop's live finding) · monthly re-tier mega-line + ef-core SKILL Mig→59 + 3 vocab-fork (2026-07-01 due). → log `2026-07-01-S95-harness17-adopt.md`) · *(S93-S94 blurb đã tách → `docs/_archive/STATUS-HANDOFF-tier-S98-2026-07-02.md`, re-tier S98; session ≤S90 → `docs/_archive/STATUS-HANDOFF-tier-S94-2026-06-29.md` + `docs/changelog/sessions/`, re-tier S94)*
---
## 🎯 CURRENT STATE (verified S40)
| Metric | Value | Note |
|---|---|---|
| Migrations | **62** | +S104 (reconcile): Mig 62 `ExpandSupplierFields` (Supplier 9→27 field: 18 AddColumn nullable + 18 DropColumn Down + `SupplierType +CaHai=6` append-only + enum `SupplierStatus` mới + guarded un-cram `Sql()` clear legacy crammed Note 4 seeded rows exact-match; **no new table (89 giữ nguyên — 18 AddColumn/0 CreateTable)**, reversible Down; seed fill-nulls-if-exists 30-field TRUONGGIANG/TANPHU/TGN/DONGDUONG idempotent; commit `778fc98` shipped UN-closed-out → S104 session-start docs-reconcile; prod-verified Run #488 PASS bundle admin `ChSNAJBK`/user `Bn2w1znH`; 440 test re-verified #65-no-bite). +S97: Mig 61 `BackfillEndedByLevelFinalizeFromChangelog` (data-only no-schema — đính chính Mig 60 backfill soi NHẦM bảng `Approvals`→`Changelogs`; set `EndedByLevelFinalize=1` cho phiếu finalize-sớm pre-Mig60 [A/005/A/008 finalize-CCM KHÔNG qua CEO] qua marker ở `PurchaseEvaluationChangelogs.ContextNote`; idempotent SQL-Server-only; prod-verified Run #484: A/005/A/008 0→1 + endsBeforeCeo-flip-True, A/010=0 control-unchanged; gotcha #79). +S97: Mig 60 `AddPeEndedByLevelFinalize` (PE +`EndedByLevelFinalize` bit NOT NULL default 0 — cờ RUNTIME "phiếu ĐÃ kết thúc sớm bằng level-finalize", set-true CHỈ nhánh finalize service; +`Sql()` backfill Phase=7-marker→=1; EndsBeforeCeo display đọc runtime thay config → phiếu-lên-CEO hết báo sai "không qua CEO" [gotcha #78]; AddColumn no new table, prod-verified Run #482 PE-detail endsBeforeCeo=False live). +S87: Mig 58 `AddPeMultiWinnerAndLevelFinalize` (`PurchaseEvaluationSupplier` +`IsWinner` bit multi-winner backfill từ SelectedSupplierId + `ApprovalWorkflowLevel` +`AllowApproverFinalize` bit cấp-KẾT-THÚC-quy-trình AUTO; 2 AddColumn + 1 backfill, no new table) + Mig 59 `AddCcmBudgetPeriodToPurchaseEvaluation` (PE +`CcmBudgetPeriodAmount` decimal(18,2)? — NS kỳ-này cột CCM cho Section B 3-cột; 1 AddColumn nullable, no backfill, no new table). +S77: Mig 57 `AddPeSuggestedPriceNotes` (PE +`ProSuggestedPriceNote` +`CcmSuggestedPriceNote` nvarchar(1000) — ô ghi chú giá đề xuất PRO/CCM giải-thích Min/Max · additive-nullable, 0 backfill, no new table; absolute-set role-gate mirror Mig 54/55). +S76: Mig 56 `AddProBudgetSplitToPeWorkItemBudget` (PeWorkItemBudget +`ProInitialAmount`+`ProAdjustmentAmount` decimal(18,2)? — cột PRO "Ban hành lần đầu"+"V0/hiệu chỉnh" mirror CCM Initial/Adjustment; AddColumn additive + `Sql()` data-migrate `ProInitial=ProEstimate` 4 rows prod gotcha #64; no new table). +S74: Mig 55 `AddCcmNoteToPeWorkItemBudget` (PeWorkItemBudget +CcmNote nvarchar(1000) — "Ghi chú từ CCM" mirror ProNote · additive-nullable, 0 backfill, no new table). +S73: Mig 54 `AddPeSuggestedAndApprovedPrice` (PE +5 cột giá đề xuất PRO Min/Max + CCM + giá chốt ApprovedPriceAmount/Source — additive-nullable, 0 backfill, prod-verified Run #313). +S69: Mig 53 `AddPeUrgentAndCeoApprovalThreshold` (PE +IsUrgentByPro/Ccm cờ gấp + ApprovalWorkflow +CeoApprovalThreshold ngưỡng CCM duyệt-final · 3 AddColumn no new table). Prev S65: Mig 51 `AddDepartmentParentId` (Department.ParentId loose-Guid no-FK — org-tree) + Mig 52 `AddHoSoLinkToPurchaseEvaluation` (PE HoSoLink nvarchar(1000) hyperlink NAS) — **cả 2 AddColumn-only, no new table** (tables giữ 88). Prev Mig 50 `ReplaceBudgetModuleWithPeWorkItemBudgets` (bảng `PeWorkItemBudgets` per-gói-thầu + DROP module Budget cũ + backfill BudgetManual→BudgetPeriod TRƯỚC DropColumn + DROP PE/Contracts.BudgetId; gotcha #63/#64). Prev Mig 49 PE WorkItemId (S57bis) |
| SQL tables | **89** | re-ground S97 (cicd `sys.tables` is_ms_shipped=0 Run #482 LIVE = **89**, pre==post Mig 60 no-new-table; "88" từ S62 STALE). Prev net 93→88 S62 (Mig 50 drop Budget + create `PeWorkItemBudgets`) |
| Master data (prod) | **71 WorkItems PMH-only S59** | 62 Projects + **WorkItems = ĐÚNG 71 mã PMH** (S59: wipe 15 demo + rename format anh Kiệt `MAT-1..16`/`SUB-1..30`/`MEP-SUB-1..9`/`MEP-EQU-1..16`, Name "STT nhóm tên") + Suppliers 22 (3 real + demo; POST mở any-auth S59 quick-add). Transactional testing data wiped S59 (PE/HĐ/Notif = 0 baseline, phiếu thật từ A/001). Provenance `scripts/master-import-data.generated.md` |
| API endpoints | **~253** | +1 S54 `GET /it-tickets/assignable-staff` (capability endpoint); +3 S52 (attendances/report + report/excel + it-tickets/{id}/assign) |
| FE pages | **68** | unchanged S54 (ItTicketsPage reassign = in-place 2 app); +1 S52 AttendanceReportPage |
| 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 | **440 PASS** | 45 Domain + 395 Infra · 0 fail / 0 skip · **S96 +6** (PE `PeApproverFinalizeTests` +2 [#6 finalize-opt-out→advance-CEO · #7 stale-noti-clear ExecuteUpdate] · `PeSuggestedPriceSetterAuthzTests` +4 [price-lock phase-guard after-submit — PRO/CCM ChoDuyet/DaDuyet→Conflict, Admin-override; +sửa SeedPeAsync default ChoDuyet→DangSoanThao spec-change]) · **S92 +3** (`AdminOnlyModulesRevokeTests` ẩn 5 nhóm menu chỉ Admin — non-Admin revoked-4-cờ / Admin untouched / Pe_* preserved) · **S91 +9** (ChangePassword self-service BE+test) · **S89 +3** (`PeDraftVisibilityTests` IDOR nháp riêng-tư) · **S88 +17** (D1 financials/CEO-notify/HoSoLink null-safe +11 · D2 create-contract multi-winner +6) · **S87 +25** (Mig 58 net +18: `PeMultiWinnerTests` sum + `PeSelectWinnerClearTests` multi-update + `PeSubmitGuardAndBypass` budget=0 + `PeApproverFinalizeTests` 5 auto-finalize [từng 7, 2 khi opt-in→auto rework] + `PeCcmThresholdFinalize`/`PeWorkItemBudget` collateral; Mig 59 +7 `PeCcmBudgetPeriodSetterAuthzTests` role-gate Admin|CCM/budget=0/null-clear) · **S86 +3** (`PeApproverNotifyExcludesDrafterTests` — notify "cần duyệt" loại NGƯỜI TẠO phiếu: drafter-excluded · co-approver-vẫn-nhận · drafter-vẫn-nhận-chuông-kết-quả) · **S85 +18** (PE CV PRO C5 hủy/đổi NCC winner +10 · urgent drafter-self-unset +5 · workflow-preserve bug-class S42 +3 `PeUpdateDraftWorkflowPreserveTests`) · **S83 +2** (PE require-workflow: `PeWorkItemGuardTests` ApprovalWorkflowId `NotEmpty` ×2 validator + submit-guard rewrite test 7/13 `PeSubmitGuardAndBypass` V1-submit-deprecated, no-count-change) · **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 | **79** | +1 S97 (**#79** backfill soi NHẦM bảng — transition-marker "[Duyệt KẾT THÚC]" nằm ở `PurchaseEvaluationChangelogs.ContextNote` KHÔNG phải `PurchaseEvaluationApprovals` → Mig 60 backfill match 0, phiếu finalize-CCM giữ flag=0 hiện sai "Đã được CEO duyệt"; fix Mig 61 query đúng bảng. PE 2 bảng lịch-sử tách vai [Approvals=ai-duyệt record :745 · Changelogs=chuyển-phase+marker LogTransition :1073]; verify marker-count prod trước khi tin backfill). +1 S97 (**#78** display-flag suy CONFIG thay RUNTIME → nói dối khi instance lệch config: `endsBeforeCeo` từ "workflow CÓ cấp finalize" thay "phiếu NÀY finalize" → phiếu lên CEO báo sai "không qua CEO"; nặng sau S97 default-flip opt-in; fix field runtime `EndedByLevelFinalize` Mig 60. Flag = "instance ĐÃ làm-gì" KHÔNG "config CÓ THỂ"). +1 S96 (**#77** SPA deploy bundle cache-lag: team thấy UI CŨ dù đã deploy + Ctrl+F5 — index.html no-cache ĐÚNG-chuẩn + JS hash-immutable nhưng browser giữ tab-SPA-mở/cache-local → verify bundle prod **BYTE-LEVEL** (curl + grep string-fix trong `/assets/index-<hash>.js`) phân-biệt cache-vs-deploy; **incognito = golden-test**; no-service-worker nên clear-site-data đủ). +2 S91 (**#76** deploy render config từ `.example` KHÔNG phải file-gitignored → prod thiếu setting tới khi điền tay · **#75** seed ungated per-code RESURRECT data đã-wipe mỗi restart → gate sau env-flag `DemoSeed:Disabled` + verify-by-restart-thật). +1 S90 (**#74** Chrome-MCP screenshot kẹt SPA-SignalR `document_idle` → PowerShell `CopyFromScreen` + Win32 lọc-process-`chrome.exe`). +2 S85 (**#72** lệch giờ +7h — DateTime lưu UTC nhưng serialize thiếu 'Z' → FE `new Date()`=local → `UtcDateTimeJsonConverter` global ép UTC-with-Z · **#73** UpdateDraft absolute-set CLEAR field SÓT khỏi pattern null-safe = bug-class S42 → guard `if (request.X is not null)`). +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 | **31** | +S84 `feedback_derived_flush_execution` (derived→canonical flush = em-main execution KHÔNG gate user-confirm; monitor INFORM-only ≠ cần-anh-duyệt; chỉ ĐỔI-con-số/policy = quyền anh). +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 | **12** | **+S107 📄 `office-document` (12th sub — Office document WRITE specialist: docx·xlsx·pptx·pdf + form-engine; floor OD1OD10; VALID_ROLES hmw.js 9→10; anh giao trực tiếp S107 "Sub chính" Office; ✅ **verified-runtime S107 CÙNG PHIÊN** — registry hot-reload agent MỚI giữa phiên [S27 lesson thu hẹp còn EDIT-agent/command] + spawn-test PASS OD1/OD4/OD5 template thật, model self-report `claude-fable-5` [data-point #5 flip-8]; finding: 2 template `wwwroot/templates` 0-placeholder mẫu-blank).** **all-inherit top-tier (Harness-8 S66 06-16 — thay thế two-tier H4):** em main Fable 5 (1M) Max (✅ **Fable RESTORED S98 2026-07-02** — lead self-report `claude-fable-5` + settings `claude-fable-5[1m]`; fallback-Opus H5 S62→S97 kết thúc, H5.6 hoàn tất) ⚠️ **S101 2026-07-03: runtime lead = Opus 4.8** (lead + 2 monitor + WF2 reviewer inherit đều self-report `claude-opus-4-8`; settings vẫn pin `claude-fable-5[1m]` → **Fable unavailable phiên này → H5-fallback tự-kích, revert-free, KHÔNG sửa frontmatter**; "Fable RESTORED S98" = point-in-time KHÔNG phải steady-state — inherit-chain resolve theo availability runtime; ✅ **S102 2026-07-06: Fable VỀ LẠI runtime** — lead + 2 monitor inherit self-report `claude-fable-5` → H5-fallback S101 kết thúc, pattern availability per-session xác nhận [S98 Fable → S101 Opus → S102 Fable → **S103 Opus** → **S104 Opus** (2026-07-06 Fable outage tiếp — S104 lead + 2 monitor spawn self-report `claude-opus-4-8` ×3, H5-fallback revert-free) → ✅ **S105 Fable** (2026-07-07 Fable VỀ lần 3 — lead + 2 monitor self-report `claude-fable-5` ×3, runtime-verified) → ⚠️ **S106 Opus** (2026-07-07 Fable outage lại — lead runtime self-report `claude-opus-4-8`, H5-fallback revert-free; flip-7) → ✅ **S107 Fable** (2026-07-10 Fable VỀ lần 4 — lead + 2 monitor self-report `claude-fable-5` ×3, runtime-verified; flip-8)], BƯỚC 0.6 probe mỗi phiên; per-session KHÔNG steady-state. 🔴 **[§Sub-agents = CANONICAL single-owner flip-chain — S106 gộp per anh-confirm; derived `agents/README:3` · `session-start:37` · `session-end:113` trỏ về đây, KHÔNG tự enumerate mỗi flip → chống churn 4-file/flip]**) · **cả 12 sub `model: inherit`** (7 demoted `claude-opus-4-8` flip S66; SE không có helper/gopher rẻ → cả 12 lên top-tier; office-document S107 inherit-born) · effort Max. 10 product/quality + 2 monitor INFORM-only. Nấc H8 = **runtime-verified S98 (2026-07-02)** — spawn-test inherit-chain ×2 monitor self-report `claude-fable-5` (cả đội tự lên Fable khi lead restore, 0 sửa frontmatter — đúng thiết kế all-inherit). Prev two-tier H4 runtime-verified S57bis (spawn-test 2 chiều). |
| RAG chunks | **2429** | re-verify S80 (`list_projects` — alive, +6 vs S63's 2423). Stale `last_indexed 05-29` (S42-S62 via store_memory stopgap; full re-index = AI_INFRA op cần VOYAGE_API_KEY). |
**Bundle hash live (prod):** admin **`BVyH-FY7`** · user **`EDsZebvn`** (S107 — **Run #489** `21387cd` +office-document 12th sub governance-only; **rotate benign #69-two-mode** [0 fe-src — Vite non-determinism], CSS frozen `Bbtesa6B`/`BmuPz_Dy`, real-size 1.64/1.55MB + Last-Modified-in-window 09:32/09:33 = ship-proof, Mig 62/89 frozen, smoke 200×3; hoist @S107-closeout per H1 flag D-BUNDLE-lặp — ⚠️ closeout-push kế có non-md sẽ rotate tiếp → Run #490 record nằm ở cicd MEMORY [authoritative], hoist ở bundle đầu phiên sau per precedent S99-#485). **Prev S104** — admin **`ChSNAJBK`** · user **`Bn2w1znH`** (S104 — **Run #488** `778fc98` Mig 62 Supplier expand 30-field; real-src-rotate FE 2-app SHA-mirror [form 4-section + Status select + `PathLink` 3 NAS-link], **sys.tables 89 pre==post no-new-table**, prod-verified marker grep-HIT, smoke 200×3; S104-shipped nhưng dòng-live `:27` lag tới S106 → hoist per H1 flag D-BUNDLE). **Prev S97** — admin **`mEGqlNWc`** · user **`Dnrp4PU1`** (S97 — **Run #484** `fb2dfa9` Mig 61 data-fix backfill; bundle rebuild **#69-benign** [0 FE-src change, review-workflow cicd re-snapshot LIVE → `CeTA7Z82`/`CGaAyXen` #483 đã bị #484 rebuild rotate]; backfill A/005/A/008 flag 0→1 prod-verified). **Prev #483** — admin **`CeTA7Z82`** · user **`CGaAyXen`** (S97 — **Run #483** `9e12e80` badge "✅ Đã được CEO duyệt" phiếu đi-hết-lên-CEO [PeFinalizeChip single-source + 6 call-site 2-app, đối xứng chip "⚑ Kết thúc·X"]; FE-only tận-dụng endsBeforeCeo runtime, no BE/mig; JS rotate CSS-frozen #69; byte-#77 "Đã được CEO duyệt" PRESENT cả 2 app + prev-badge additive no-regression; Mig 60 frozen; smoke 200×3 + PE-list 200). **Prev #482** — admin **`DR9q2VUy`** · user **`Bgz8u4E5`** (S97 — **Run #482** `8037fa0` endsBeforeCeo config→RUNTIME [Mig 60 `EndedByLevelFinalize`]: **Mig 60 applied prod** (history-top + col-default-0 EXISTS + backfill=0 UAT-no-marker + sys.tables **89** pre==post); **EF-ternary SQL-Server LIVE-confirmed** GET /purchase-evaluations 200 items=9 + PE-detail `31faef0d` 200 **endsBeforeCeo=False phase=7** = runtime-path chạy = **bug fixed LIVE** (NOT 500); JS rotate 2-app PeWorkflowPanel gate-diff, CSS frozen #69-REFINE; byte-#77 `endsBeforeCeo` PRESENT in-bundle; smoke 200×3. reviewer PASS 0-issue + test 440. **Prev #481** — admin **`Cf0o8dx8`** · user **`x8rppRAK`** (S97 — **Run #481** `1c8fb6a` PE finalize 2-fix [badge "không trình tới"→"Kết thúc tại {cấp}" + đảo default checkbox opt-in]; JS rotate real-FE 2-app `PeWorkflowPanel` diff, CSS frozen `Bbtesa6B`/`BmuPz_Dy` #69-REFINE logic-only; **byte-level #77** NEW `Kết thúc tại`+helper PRESENT / OLD `không trình tới`+`Đã BỎ tick` ABSENT; real-size 1.64/1.54MB; Mig 59/88-table frozen; smoke 200×3. FE-only mirror SHA `bcf812fd`, 0 BE/mig/test). **Prev S96** — admin **`COYAX-yQ`** · user **`0MU-kb4N`** (S96 — **Run #480** `0c2f9f6` price-lock; chuỗi 3 PE deploy #478 `e657faa` checkbox-opt-out → #479 `36cbf8b` chuông-stale-clear (BE-only) → #480 `0c2f9f6` khóa-giá-sau-duyệt, cicd PASS each ~5m; **FE JS rotate THẬT** (PeWorkflowPanel #478 + PeDetailTabs #480, 2-app) real-size 1.64/1.54MB vs 919b SPA-trap, CSS frozen #69-REFINE; Mig 59 frozen 0-mig; +Run #477 `ba4b8e0` NCC seed no-mig prod 21 NCC. **Verify byte-level:** prod `0MU-kb4N` CHỨA checkbox-fix ("BỎ tick"/"Đã BỎ tick") + "✅-static" cũ MẤT → checkbox "ko-được" = browser-cache KHÔNG deploy-fail). **Prev S95** — admin **`0T6vVJST`** · user **`BGXEVZO6`** (S95 — **Run #476** `18a17f5` H17 governance-only deploy; bundle rotate benign #69 CSS-frozen, prod 200×3, Mig 59 unchanged; cicd re-snapshot LIVE — pre-deploy `CkZ1MjC1`/`_-gpX7_Y`, mega-line S93 `CDn40vpV`/`CoPmPBg7` đã bị deploy trung-gian rotate từ S94). **Prev S85** — admin **`aKuNip19`** · user **`BUsL0HeQ`** (S85 — **Run #341** `49ac086` lệch-giờ TZ serialize UTC-with-Z; FE frozen #339+#341 BE-only. Chuỗi ~10 deploy #334→#341 buổi UAT anh Kiệt CV PRO: #334 `5a61254` batch CV PRO 6-fix → #335-#338 6 vòng UAT → #339 `1263c0d` workflow-preserve bug-class S42 → #341 `49ac086` TZ; #342 `d4f6021` docs+cicd BE-frozen, bundle giữ-nguyên gotcha #69-REFINE). **Prev S78** — admin **`CsJetgZH`** · user **`BVS0ApIm`** (S78 — **Run #330** `7886fd0` PE attach-file khi duyệt; bundle ROTATE từ S77 `BqKD3Y23`/`Cn-i349D` dù NO migration enum-only — gotcha #69 non-determ rebuild; cicd ship-proof byte-stable + fake-hash control). **Prev S77** — admin **`BqKD3Y23`** · user **`Cn-i349D`** (S77 — **Run #329** `e823694` banner Trả-lại; cuối chuỗi 10 deploy #320→#329 cùng ngày, cicd PASS each: #320 pill `DsSg6RRz`-era → #321 focus → #322 revert → #323 Mig57+notes `CPm4LTqm`/`BWJUAqEI` → #324 số-âm-đỏ `C6fx-0ea`/`N3sW4Div` → #325 indent `BhnNMucS`/`B1VebpXc` → #326 cờ-gấp-asymmetric `DwXqn37C`/`COXMCv7E` → #327 decouple `B0gboSAg`/`DbDg7pM-` → #328 notify (BE-only, FE frozen) → #329 banner **`BqKD3Y23`**/**`Cn-i349D`**). **Prev S76** — admin **`jOqxW4-p`** · user **`DbsznVvR`** (S76 — **Run #319** `21d1f4e` bảng lưới `<table>` ngân sách viền-ô; chuỗi S76 cùng ngày: #318 `e33481e` feature ma-trận-3-cột + badge quyền-NS `BhFDF9IJ`/`BAkuRl3C` → #319 **`jOqxW4-p`**/**`DbsznVvR`**, cicd PASS each, smoke 3×200, Mig 56 applied prod #318). **Prev S74** — admin **`BYF5vIMJ`** · user **`CB-tiRxd`** (S74 — **Run #315** `8655ebf` Mig 55 CcmNote, cicd PASS ~4m54s: Mig 55 applied prod CcmNote nvarchar(1000) nullable · sys.tables 88 · smoke 4×200 · 0 regression). **Prev S73** — admin **`Bv3jUCNo`** · user **`BWlMBQz6`** (Run #314 `6aa4dcb` FE empty-candidates guard fix; chuỗi 2 deploy: #313 `1d86abc` feature `OlNyG9OD`/`DSzSLVtL` → #314 **`Bv3jUCNo`**/**`BWlMBQz6`**, cicd PASS each). **Prev S72** — admin **`fc_xkNpJ`** · user **`DP-tBcg0`** (Run #312 governance commit `18fced6`; bundle ROTATE do **non-deterministic hash + deploy rebuild-FE-unconditional** (gotcha #69) — 0 FE source change, prod state/DB GIỮ NGUYÊN). **Prev S69** — admin **`BgNCjwsG`** · user **`CBvh0vtf`** (Run #308 PE cờ gấp + ngưỡng CCM; chuỗi 4 deploy session: #305 Văn phòng số foundation → #306 re-skin 10 page → #307 Office golive (BE-only) `Wt54PHYl`/`B99fMU6X` → #308 **`BgNCjwsG`**/**`CBvh0vtf`**). **Prev S68** — admin **`CNUv1jxY`** · user **`CpOskeS1`** (S68 — Run #304 `37752eb` fix tên đen→trắng; chuỗi #303 `6983609` `D532XZKG`/`CuFaBoWt` → #304 **`CNUv1jxY`**/**`CpOskeS1`**, cicd PASS each). **Prev S67** — admin `CcrZqfht`/user `DniDFUB_` (S67 — 6 deploy Run #297→#302; admin rotate chuỗi #298`xkSz9BfE`→#300`PxiZQkaw`→#301`I1fpLeYw`→#302**`CcrZqfht`** · user #297`BumgrwCJ`→#300`B36hGoKd`→#301`DrQYkzh0`→#302**`DniDFUB_`**; #299 tests BE-only cả 2 frozen, cicd PASS each). **Prev S65** — admin `BDwV5d0X`/user `DbVv6rsf` (Run #293-295). Prev S62 admin `0xKYGhhf`/user `C81ZdG9G` (Run #286). **Prev S59:** admin `B1DtNT9C` · user `D6uF3Mln` (Run **#282** `792c030` FINAL — bỏ nút Thêm hạng mục; ships kèm `80b64dd` gỡ Điều khoản TT, #281 cancelled-benign ancestor-verified). Chuỗi S59 cùng ngày: #280 `69997da` (`BKy_8OO9`/`XcZ6PRyA`, ships kèm `f21c55d` table-fixed #279-cancelled) · #278 `9c330d2` self-approve+quick-add-NCC (`BSh2fG2X`/`D22KfpPc`, authz probe 4/4) · #277 `faed59f` SearchableSelect (`ex7Tc92G`/`DzUeSk96`) · #276 `c869d26` rename 71 PMH (`BBA0KSWu`/`DzdTI18G`) · #275 `bbd1554` dọn demo WorkItems (FROZEN BE-only) · #274 `0eafcd3` tree 4 tầng (`DuU7OTym`/`DWyeTzf3`) · #273 `56882ac` wipe + tree v1 (`R9uGRxvw`/`DikfX1RD`). Prev S58: Run #386 `3ebaf84` admin `DMm9rtNA`/user `BUkOMn_Y` (chi tiết session log S58).
**Phase:** ✅ Phase 10 COMPLETE · ✅ **Phase 11 product backlog ĐÓNG TRỌN** · ✅ **Văn phòng số (E-Office) golive S69** (foundation PURO + re-skin 10 page + public read+create 16-key allow-list mọi role) prod-verified · ✅ **PE cờ gấp PRO/CCM + CCM duyệt-final theo ngưỡng (Mig 53 S69)** prod-verified · ✅ **PE ngân sách MA TRẬN 3 cột Dự án/PRO/CCM (bảng lưới `<table>`) + badge quyền-NS theo role trong Workflow Designer & flow Duyệt NCC (Mig 56 S76)** prod-verified · ✅ **PE UX batch S77 (10 deploy)** — cờ GẤP pill mọi danh sách+inbox · focus/inline+overlay decouple+"Xem mở rộng" · ô ghi chú giá đề xuất PRO/CCM (Mig 57) · số phân cách + số-âm-đỏ-ngoặc + indent mục con · cờ gấp GẮN=NV/GỠ=Trưởng phòng · chuông báo người duyệt · banner Trả-lại — prod-verified · ✅ **PE đính kèm file khi DUYỆT (S78, Run #330)** — người duyệt tải file lên lúc duyệt thay vì Trả lại; migration-free reuse-enum `ApprovalAttachment=5` — prod-verified · 🚫 Phase 9 Ops blocked (anh main coordinate — anh dừng).
> ⚠️ **Count drift fixed S40:** endpoints ~223→**211**, FE pages 53→**65**, menu keys 85→**~53**. Tables **84 confirmed correct** (DbSet 77 + Identity 7). 3 số "khó fake" (mig/gotcha/git) luôn đúng. Cause: số "incremented mỗi session" over/under-count optimistic — re-ground định kỳ.
---
## 🔥 In Progress (S111)
| Task | Owner | Status |
|---|---|---|
| ✅ **S111 adopt H22 WAL session-continuity** — pipeline H21-chuẩn trọn (invest-Fable 14N → spec PS1-3-chỉnh → WF `wf_5ba3daf6-fe0` 3-Opus RUN-TRACE 3/3 → reviewer-Fable PASS_WITH_FIXES 0C·1M·7m → 8/8 fix) + ⚡ hook HOT-RELOAD FIRE ×2 VERIFIED-RUNTIME (`12071c5`/`67be443`) + squash §5.0 dogfood-THẬT K=2 + mark **AH thứ 6** `RC-…12-07-2026-11-43-45` + D10 AS-6-taxonomy-đổi + adap-report/email `9cdcda2f3c83` + cicd **Run #495 PASS** | 👤 em main + 🟦🟥 Fable + 3 Opus + 🟩 | 🟢 done |
| **H22 pilot** (phiên mới): hook-fire re-check · kill-giữa-chain → `/tiep` · đổi-acc · pause-roundtrip 1 workflow THẬT | 👤 anh + em | ⚪ pending (NEXT-anh) |
| **PE "lỗi phân quyền vào phiếu"** (anh Kiệt UAT) — chờ **số-phiếu + user** soi config workflow | 👤 em main | ⚪ pending (chờ anh specifics, carry S103) |
## 🔥 In Progress (S110)
| Task | Owner | Status |
|---|---|---|
| ✅ **S110 adopt H21 + model-tier-v3** (4 msg AI_INFRA hash-verified 4/4) — marker fable-real RETIRED → **per-invocation** `/fable-real\|/fable-clone <vai> <đề-bài>` + **spec-file 3-mục mỗi run engine-đắt** (K.E mới) + MTv3 lead=owner-choice (BƯỚC 0.6 reword, 0 revert-nghĩa-vụ, 1-line-ask) + triage-S5 hot-reload ENV-DEPENDENT caveat. Pipeline đúng lệnh anh: invest-**Fable** → spec `runs/2026-07-11-h21-mtv3-adopt/` → WF **`wf_0c3b307f-a64`** 3-worker-**Opus** → reviewer-**Fable** **PASS_WITH_FIXES** (5M+9m → fixed; M2 boundary-gap lệnh-B × 2 monitor → **RESOLVED cùng phiên: anh-directed VALID_ROLES 10→12** đủ roster). ⚠️ #53-garble ×2 (invest + reviewer Fable-lane) → **SendMessage-resume recover 2/2 sạch**. 2 adap-report + 3 supersede-note + STAGE-2 done | 👤 em main + 🟦🟥 Fable + 3 Opus-worker | 🟢 done |
| **Mark-proposal H21+MTv3** (supersede `RC-…17-46-35` → 📦) — trình anh cuối phiên → **ĐÃ stamped cùng phiên S110** `RC-pqhuy1987-11-07-2026-20-42-01` (ACTIVE-MARKS:19 Active-High; H19 → 📦 superseded-partial) | 👤 anh | 🟢 done (stale-flip S111 per H1 FLAG-1) |
| **PE "lỗi phân quyền vào phiếu"** (anh Kiệt UAT) — chờ **số-phiếu + user** soi config workflow | 👤 em main | ⚪ pending (chờ anh specifics, carry S103) |
## 🔥 In Progress (S109)
| Task | Owner | Status |
|---|---|---|
| ✅ **S109 sleep-recovery P1 RESUME→DONE** — Phase-0 re-verify scope-truth 16→2 (14 file 2026-05 ĐÃ covered gist gộp-kỳ S70, git-date proof) → 2 gist mới tooling/harvest 2026-06 `distill-gen:1` + reviewer Fidelity Fable-real PASS_WITH_FIXES 3-fix-applied + `last_sleep_at=2026-07-10` (commit `f5a5c3e`) | 👤 em main + ⬜🟥 | 🟢 done |
| ✅ **S109 bootstrap all-green** — 440 ✓ · detector 36-benign · spec-audit 0-GAP · 2 monitor ALL-PASS/ALL-CLEAN · RAG 2436 · archive-gate 12/12 + A7 233/233 · Fable giữ S107F→S109F | 👤 em main | 🟢 done |
| ✅ **S109 cicd verify Run #492** (AS-6: `budget.json` ngoài paths-ignore → run trigger dù 0-code) — **PASS 5m21s**, bundle FROZEN-streak ×3 `BVyH-FY7`/`EDsZebvn`, Mig 62/89 frozen, smoke 3/3 | 🟩 cicd-monitor | 🟢 done |
| **PE "lỗi phân quyền vào phiếu"** (anh Kiệt UAT) — chờ **số-phiếu + user** soi config workflow | 👤 em main | ⚪ pending (chờ anh specifics, carry S103) |
<details><summary>S108 In-Progress (đã đóng — chi tiết session log)</summary>
## 🔥 In Progress (S108)
| Task | Owner | Status |
|---|---|---|
| ✅ **S108 email-chain AI_INFRA** — 0-new · adap-request MỚI hot-reload · send-email `8d14405f` selftest-MATCH (AI_INFRA tự pull) | 👤 em main | 🟢 done |
| ✅ **S108 Fable-real runbook + FIRST-REAL-RUN** — runbook 60KB (4-worker-Opus draft → 2-judge single-Fable 2-trục: FAIL/PARTIAL → 37-fix → AC 8/8) + engine §K note-supersede + hmw.js:31 comment-fix + cicd #491 PASS bundle-FROZEN | 👤 em main | 🟢 done |
| **PE "lỗi phân quyền vào phiếu"** (anh Kiệt UAT) — chờ **số-phiếu + user** soi config workflow | 👤 em main | ⚪ pending (chờ anh specifics, carry S103) |
</details>
<details><summary>S107 In-Progress (đã đóng — chi tiết session log)</summary>
## 🔥 In Progress (S107)
| Task | Owner | Status |
|---|---|---|
| ✅ **S107 session-start reconcile** — commit S106 leftover 7-file (gộp flip-chain 1-owner anh-confirm + tooling self-compact **md5-verified moved-not-cut 3/3**) + flip-8 S107-Fable canonical + ERD-range →62 ×2 (root CLAUDE:131 + docs/CLAUDE:70) + bootstrap all-green (**440 test** re-verified · detector 36-benign 0-HIGH · spec-audit 0-GAP · 2 monitor ALL-PASS/ALL-CLEAN · RAG 2434 rerank-OK) | 👤 em main | 🟢 done |
| ✅ **+office-document (12th sub — anh giao)** — agent .md OD1OD10 + MEMORY seed + skill nạp (docx·xlsx·pptx·pdf + form-engine) + wire 12 điểm (README/2 session-cmd/hmw.js VALID_ROLES 9→10/ultra-on/fable-real/workflows-README/engine/2 monitor baseline/STATUS/budget.json) — ✅ **verified-runtime CÙNG PHIÊN** (registry hot-reload + spawn-test PASS: OD1 skill invoke · OD4 extract-honest · OD5 round-trip 37KB VN-dấu · finding template `wwwroot` 0-placeholder) + cicd **Run #489 PASS** (bundle rotate benign #69 admin `BVyH-FY7`/user `EDsZebvn`, Mig 62/89 frozen, smoke 200×3) | 👤 em main | 🟢 done |
| **PE "lỗi phân quyền vào phiếu"** (anh Kiệt UAT) — chờ **số-phiếu + user** soi config workflow | 👤 em main | ⚪ pending (chờ anh specifics, carry S103) |
</details>
<details><summary>S105 In-Progress (đã đóng — chi tiết session log)</summary>
## 🔥 In Progress (S105)
| Task | Owner | Status |
|---|---|---|
| ✅ **S105 bootstrap + closeout eval-all** — all-green: 440 test · detector 36-benign · MFE FIT + 0-GAP + A7 226/226 · 4 derived-flush vá + 3 spawn-record harvest · Fable flip-6 runtime-verified ×3 | 👤 em main | 🟢 done |
| ✅ **BVAAU cross-repo assist** — favicon `0cc815b` pushed (**prod-verify pending CI**) + auth RCA 3-Q byte-verified (Q1 FE-mù-session fix `51c69fb` LIVE · Q2 CRM1 FE-redirect live, **API-gate chờ anh** · Q3 User_ID không có trong UI) | 👤 em main | 🟢 done |
| **PE "lỗi phân quyền vào phiếu"** (anh Kiệt UAT) — chờ **số-phiếu + user** soi config workflow | 👤 em main | ⚪ pending (chờ anh specifics, carry S103) |
</details>
<details><summary>S104 In-Progress (đã đóng — chi tiết session log)</summary>
## 🔥 In Progress (S104)
| Task | Owner | Status |
|---|---|---|
| ✅ **Reconcile Mig 62 Supplier docs-lag** — DONE S104: session Mig 62 (`778fc98`, cùng-ngày 16:06) ship code+FE+deploy Run #488 nhưng bỏ closeout docs (STATUS/HANDOFF kẹt Mig 61/S103). S104 session-start audit bắt (detector HIGH + H1/H2 monitor) → flush STATUS Mig 61→62 + mega-line + Sub-agents S104-Opus + HANDOFF + ef-core SKILL row + Supplier-backlog Phase-A + commit 3 cicd memory. Test **440 re-verified** (#65 no-bite) · deploy **Run #488 PASS** verified · 2 monitor CLEAN. | 👤 em main | 🟢 done |
| **PE "lỗi phân quyền vào phiếu"** (anh Kiệt UAT) — chờ **số-phiếu + user** soi config workflow | 👤 em main | ⚪ pending (chờ anh specifics, carry S103) |
</details>
<details><summary>S103 In-Progress (đã đóng — chi tiết session log)</summary>
## 🔥 In Progress (S103)
| Task | Owner | Status |
|---|---|---|
| ✅ **AI_INFRA 6-broadcast adap** (crystallized-backfill + Harness-20 + memory-hygiene) — DONE S103: 2 script + engine §L/§M + wiring + model-note sweep + 6 adap-report + 1 adap-request + send-email. 2-workflow WF1 `wf_55ef6778-a0d` + WF2 `wf_3c5c37cb-aa2` (Lane-C PASS + Lane-B recover). Còn: restart CLI + cicd verify | 👤 em main | 🟢 done |
| ✅ **Mark-decision Harness-20 + crystallized-backfill** — anh chọn **codify-only (KHÔNG mark)** như H16/H17/H18 precedent; engine §L/§M = canonical đủ; crystallized-backfill owner-authority dưới mark H15 §G sẵn. ACTIVE-MARKS giữ 5 Active-High. | 👤 anh | 🟢 done |
| **PE "lỗi phân quyền vào phiếu"** (anh Kiệt UAT) — chờ **số-phiếu + user** soi config workflow | 👤 em main | ⚪ pending → carry S104 |
</details>
<details><summary>S101 In-Progress (đã đóng — chi tiết session log)</summary>
## 🔥 In Progress (S101)
| Task | Owner | Status |
|---|---|---|
| **PE "lỗi phân quyền vào phiếu"** (anh Kiệt UAT báo) — chờ **số-phiếu + user** để soi config workflow (nhiều khả năng user chưa được gán approver Cấp phiếu đang chờ — config, không phải code-bug) | 👤 em main | ⚪ pending (chờ anh specifics) |
| ✅ **H18 WF2 review closeout** — DONE S101: WF2 gốc `wf_31ea3985-92c` mất theo CLI-restart → **re-run fresh `wf_955643c3-f7d` → PASS_WITH_CONCERNS** (Lane-A detector-teeth PASS fault-inject-4/4 · Lane-B ledger PWC 1-concern `workflows/README:51`-FIXED · Lane-C PARTIAL: codify+containment first-hand ✓, frontier-hash+reviewer_gate dựa record-S100 do broadcast-inbound vắng repo; Lane-C #53-garble→recover). Verdict stamped adap-report:5 + engine §J:283. Còn: `/send-email AI_INFRA` + commit | 👤 em main | 🟢 done |
| ✅ **H19 fable-clone formal adopt + model-tier compliance** — DONE S101 (anh-directed `/check-email`+`/adap-apply`): RC-stamp `RC-…03-07-2026-17-46-35` + 2 command thật/ảo + engine §K + BƯỚC 0.5b + 4 adap-report; 2-workflow WF1 `wf_5f308fd8-744` + WF2 `wf_ed5b972f-a4d` PASS_WITH_CONCERNS. Model-tier 12/12. Frontier flag#2 resolved + H10 re-stamp. Còn: `/send-email AI_INFRA` + commit + ⚠️ restart CLI (2 command + BƯỚC 0.5b) | 👤 em main | 🟢 done |
</details>
---
## ✅ Recently Done (newest on top — 3 session; cũ hơn → session logs)
> Chi-tiết 4 session gần nhất (S98/S97/S96/S95) = mega-line đầu file (4 blurb — re-tier S95 defer monthly 2026-08-01). Blurb S93-S94 → `docs/_archive/STATUS-HANDOFF-tier-S98-2026-07-02.md` (re-tier S98). Detail S75↓ đã tách (re-tier S94) → `docs/_archive/STATUS-HANDOFF-tier-S94-2026-06-29.md` + bản đầy-đủ `docs/changelog/sessions/`.
---
## 🎯 Next up
### ✅ Phase 11 — Polish/wire skeleton (COMPLETE S52)
- ✅ **P11-A** wire ApproveV2 + LevelOpinions 4 module — **DONE S42** (prod).
- ✅ **P11-B** LeaveBalance business logic — **DONE S43** (Mig 42, prod).
- ✅ **P11-C** Vehicle+Driver catalog — **DONE S51** (Mig 44/45, prod).
- ✅ **P11-D** ItTicket round-robin assign + SLA timer — **DONE S52** (Mig 46, `dcf76f8`, prod). Dept-IT pool + `ItTicketSlaJob` no-auto-transition. _Follow-up minor: reassign-UI defer (endpoint `/assign` sẵn)._
- ✅ **P11-E** AttendanceReport + Excel + OtPolicy multiplier — **DONE S52** (`6a66429`, prod). Admin-only, weighted-OT-hours (no salary field → quy-đổi-giờ not pay, MVP). _Follow-up: menu-key promote (hiện via button)._
- ✅ **P11-F** CodeGen atomic MaTicket — **DONE S52** (`6a66429`, prod). gen-on-Create `IT/2026/NNN`.
### 🔧 Maintenance backlog
- RAG re-ingest `solution_erp` S42-S43 content (store_memory stopgap live; full re-index = AI_INFRA op)
- 🟡 **Supplier schema mở-rộng (anh Kiệt "note lại từ từ tính", S96) — Phase A SHIPPED Mig 62 (S104, commit `778fc98`):** Supplier 9→27 field (18 AddColumn nullable) + `SupplierType +CaHai=6` + enum `SupplierStatus` + seed 4 NCC 30-field + FE 2-app form 4-section + `PathLink` 3 NAS-link. **Phase B (Excel upload auto-map) 🅿️ PARKED (anh chốt S104 — GỠ khỏi active queue, CHỜ ANH NHẮC mới làm, KHÔNG tự khởi động ở session sau)** + đối-chiếu field-list dưới còn thiếu khi làm. Nguyên spec form Excel "Database NCC" ~30 field, entity gốc 9. S96 import 4 NCC (option-3 crammed→Note, nay un-crammed Mig 62). **Field-list gốc (đối-chiếu Phase B):** GÓI THẦU (có thể → WorkItem/category) · ĐỊA CHỈ VP · FAX · SỐ TK+NGÂN HÀNG (tách field) · SỐ TK PHỤ · NGƯỜI ĐẠI DIỆN PL + CHỨC VỤ · GIẤY ỦY QUYỀN (số/ngày/người) · **Link GUQ/GPKD/HSNL** (nvarchar(1000) mirror HoSoLink) · CHỨC VỤ LH · SĐT contact riêng · ĐỊA CHỈ GỬI THƯ · NGƯỜI NHẬN THƯ · NGUỒN GT · PMH · TÌNH TRẠNG (enum active/blacklist) · NGÀY/NGƯỜI CẬP NHẬT. Additive-nullable → 1 migration khi làm. Enum `SupplierType` cần thêm "Cả hai" (NTP+NCC) nếu gặp.
- ✅ **gotcha #57 LeaveType+ShiftPattern+OtPolicy filtered-unique DONE S51** (Mig 45, **3 HRM catalog** — OtPolicy bị bỏ sót khỏi backlog "2 catalog", bắt được via grep + test-before 5 case). ⬜ **EXT (worktree session, Mig 46):** Department/Supplier/Project (Master, confirmed-reachable via global query-filter quirk); ContractClause/MeetingRoom/EmployeeProfile = SKIP (audit-verified not-reachable).
- Skill + doc drift audit (**thủ-công em-main session đầu-tháng** — 🧊 ghost-wire "cron fire 9:00" gỡ S100 H18/frontier-P2: CronList runtime = 0 job, S44/S96 thực-tế đều em-main chạy in-session đúng hạn) — ✅ **2026-07-01 DONE (S96 `881783c`)** — ef-core→Mig 59 + vocab-alias-map + re-tier mega-line (prev 2026-06-01 S44); next **2026-08-01**
- ⬜ **H18/frontier deferred (S100 — mục-sổ đánh-số per frontier-P2):** **(D-1)** wire-or-retire 2 config key `mfe.sub_denominator.role_file_glob`/`diary_path_pattern` (`memory-budget.json:54-55` defined-but-unread — `mfe-eval.ps1:216/:237` re-hardcode giá trị trùng; chờ frontier-assessment re-stamp [content_sha256 MISMATCH → HELD] hoặc maintenance kế) · **(D-2)** `memory-selfimprove-audit.ps1:147` latent blind-spot skip-if-no-`tools:`-line trong A1 (0 agent affected — 12/12 có `tools:` re-verified S107 +office-document; vá khi thêm agent class này)
### 🚫 Phase 9 Ops (blocked — anh main coordinate)
- SMTP email outbound · Rotate prod creds · SQL auto-backup (backup-sql.ps1 ready, chờ Task Scheduler register) · UAT 2-3 user 1 tuần
---
## 🚨 Blockers / risks
- ⚠️ **Email SMTP chưa có** — blocker notification outbound
- ⚠️ **Credentials trong chat** — rotate trước go-live thật
- ⚠️ **SQL backup chưa auto** — risk data loss (script ready, chờ register)
- ⚠️ **UAT real user chưa chạy** — risk edge-case bug
- ⏳ **UAT-confirm chờ anh sign-off (carry S91/S92, hoist khi re-tier S96):** (1) eoffice non-admin ẩn 5 nhóm menu [S92 · Run #358 sqlcmd 0-leak] · (2) đổi mật khẩu self-service [S91 · +10 test] · (3) NCC demo không sống-lại sau restart [S91 · #75 gate verified 2 restart] — cả 3 code/prod-verified server-side, chỉ chờ anh xác nhận UAT (blurb đầy đủ S91/S92 → `docs/_archive/STATUS-HANDOFF-tier-S94-2026-06-29.md`).
- ✅ **Cert** `api.solutions.com.vn` ĐÃ auto-renew — verified S99 TLS live: NotBefore 2026-06-18 → NotAfter **2026-09-16** (win-acme task chạy đúng hạn; hết blocker)
---
## 🔑 Credentials + URLs
```
Prod login: admin@solutions.com.vn / Admin@123456 (⚠️ rotate sau login đầu)
```
- API prod `https://api.solutions.com.vn` (`/health/live` + `/health/ready`) · dev `http://localhost:5443` (`/swagger`)
- Admin FE prod `https://admin.solutions.com.vn` · dev `:8082`
- User FE prod `https://eoffice.solutions.com.vn` · dev `:8080`
- Gitea `https://git.baocaogiaoduc.vn/vietreport-admin/solution-erp` · SSH `ssh vietreport-vps`
- SQL prod `.\SQLEXPRESS` / `SolutionErp` · dev `(localdb)\MSSQLLocalDB` / `SolutionErp_Dev`
---
> **Session history:** S0→S39 full detail trong `docs/changelog/sessions/` + `docs/_archive/STATUS-preS40-fullhistory.md`. File này chỉ giữ state hiện tại + 3 session gần nhất.