Files
solution-erp/.claude/agent-memory/tooling-auditor/MEMORY.md
pqhuy1987 9f9a78e2da [CLAUDE] Memory: S104 bootstrap — cicd #488 orphan-harvest + tooling-auditor RE-REPORT
cicd-monitor 3 files (MEMORY + archive/2026-07 + _INDEX): Run #488 PASS
harvest for 778fc98 Mig 62 Supplier deploy — bundle admin ChSNAJBK / user
Bn2w1znH (#69-meaningful real-src-diff), sys.tables 89 unchanged, Note
un-cram count=0, marker-grep HIT, health 200x3. Orphan-by-construction
(mtime 16:14-16:16 after HEAD 16:06); H2 harvest-curator verified fidelity
+ DEDUP-clean (#488 not-in-HEAD, #487/#486 archive-moves not doubled).
tooling-auditor: S104 session-start 4-facet RE-REPORT self-write.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 16:36:36 +07:00

48 lines
19 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.

# Tooling-Auditor Agent — Persistent Memory
> **Persistent diary cross-session.** Auto-injected first ~200 lines at spawn (L1 HOT).
> Update BEFORE every stop. Tiered Memory v1: L1 HOT (hook hard-limit <17KB) · L2 `archive/2026-06.md` verbatim on-demand · L3 RAG `search_memory`. Keep entry ≤ 1.5K chars.
> **NEW agent 2026-06-07** (adopt AI_INFRA Harness 1 — H1 tooling-freshness; TÁCH khỏi harvest-curator H2 per anh-mandate "H1/H2 hay quên+nhầm → riêng-biệt"). Compacted S99 2026-07-02 (19.6KB→~9KB, 12 entry 06-xx → archive NGUYÊN VĂN).
---
## 🎯 Role baseline
H1 tooling-freshness auditor **SOLUTION_ERP-self**. Read-only + **propose-only** (em main = single-writer; NGOẠI LỆ duy nhất: diary/archive của chính mình). Tools: Read/Grep/Glob/Bash + 4 RAG-read. NO `store_memory`. Audit **4-mặt** mỗi session: skill · sub-role · plugin · docs — đầy-đủ + kịp-thời. @session-start báo state + diff-vs-last; @session-end chốt + new-alloc audit. 🔴 Final message = VERDICT trực tiếp, KHÔNG narrative memory-curation (#53 return-garble ×4).
## 🚫 Split boundary
- ✅ MINE: tooling/docs freshness (4-mặt) + roster-drift + skill/plugin new-alloc — SOLUTION_ERP-self
- ❌ NOT: harvest-memory/5-trục → **harvest-curator** (H2) · corpus/RAG/deploy → cicd-monitor · code/SQL audit → investigator-codebase · write/decide → em main
## 📋 Baseline state (re-ground 2026-07-02 S99 — VERIFY mỗi session, đừng tin số cũ)
- **Roster:** 11 sub, **11/11 `model: inherit`** (Harness-8 all-inherit, runtime-verified S98 — Fable 5 RESTORED, inherit-chain self-report `claude-fable-5`). 9 product/quality (investigator-codebase/api · implementer-backend/frontend · test-specialist · reviewer · cicd-monitor · frontend-designer · database-agent read-advisory) + 2 monitor INFORM-only (tooling-auditor · harvest-curator). VALID_ROLES hmw.js = 9 product-only by-design.
- **Skills:** 6 project (`.claude/skills/`) + 23 standalone (`~/.claude/skills/`) + 14 command-file (`.claude/commands/` — hmw = script `workflows/hmw.js`, KHÔNG phải slash-command).
- **Plugins:** 18 registered (15 enabled / 3 disabled: pr-review-toolkit · code-modernization · hookify) user-global `~/.claude/settings.json:17-35` · marketplace 35 · settings `model: claude-fable-5[1m]` + `effortLevel: xhigh`.
- **Docs canonical:** `CLAUDE.md` (root+docs) · `docs/STATUS.md` (số canonical B1) · `docs/HANDOFF.md` · `.claude/agents/README.md` · `docs/governance/`.
## ⚠️ Anti-patterns
❌ Tự sửa config/doc/enable-plugin (propose-only) · ❌ conflate plugin "enabled"="used" (installed≠enabled≠assigned≠used) · ❌ tick-checkbox no-evidence · ❌ đụng harvest-memory (harvest-curator) · ❌ G-015 overclaim "read-only enforced" (Bash residual = write-channel mở).
## 🧭 Method distilled (S50-S98 — chi tiết verbatim `archive/2026-06.md`)
- **Ground-truth MỌI count từ disk:** `settings.json enabledPlugins` = authoritative plugin# · `skills/README.md` ≠ SKILL.md frontmatter (drift độc lập) · Migrations ở `Infrastructure/Persistence/Migrations` (KHÔNG `Infrastructure/Migrations`).
- **Test count:** KHÔNG attr-count `[Fact]/[Theory]` (Theory expand runtime) — tin session-log/test-run/STATUS.
- **Bundle-hash:** KHÔNG tin 1-source — triangulate (cicd-MEMORY = provenance giàu nhất Run#+sha+rotate); anh-cite chưa verify được → flag "unverified", KHÔNG copy.
- **gotcha format:** entry = `### N.` KHÔNG `#N` — verify format trước khi claim missing.
- **commands/*.md + ultra-on.md = trong radar:** roster-grep (S57 catch) + count-grep (S99 catch "(68)") — lớp file hay bị monthly-audit bỏ sót; index/README files cũng vậy (S50).
- **Drift born-SAU-monthly-CÙNG-NGÀY** = lớp riêng (S97/S98) — per-session monitor bù lớp monthly không thấy.
- **system-reminder claudeMd header = pre-session snapshot** → re-Read line thật trên disk, KHÔNG tin context-injection. Brief "chưa flush" cũng = snapshot lúc spawn → re-ground disk hiện tại (S58).
- **Backlog/coords trong HANDOFF phải re-verify** trước khi tin (stale-contradiction S57-resume).
- **Model spawn-test:** frontmatter no hot-reload — pin/inherit ăn SAU restart CLI; self-report nguyên văn = bằng chứng runtime (H4 S57bis · H8 S98).
- **Tool-gotchas:** Bash nuốt `$` PS-inline → `powershell -NoProfile -Command` escape `\$` · PS `Get-Content -Raw`+`-TotalCount` mutually exclusive → dùng Grep tool `^model:`.
- **Return-cut giữa emit** (S58) = finding chính vẫn salvageable từ partial return; emit finding chính SỚM trong report.
## 📅 Recent activity (FIFO — older → `archive/2026-06.md` verbatim)
- **2026-06 (12 entry S50→S66 → archive):** CREATED+first-run verified-runtime (S50 3-drift: plugin 15→18 · ef-core 31→43 · gotcha 49→57) · S51 new-alloc database-agent STRONG-FIT/codebase-agent SKIP · S57×2 (ultra-on+session-start roster catch; VALID_ROLES 9) · H4 demote spawn-test ×2 (pin ăn post-restart, demote-watch #1 OK) · post-S57bis count-drift top-5 · S58 return-cut-partial · S59×2 ALL-FRESH (bundle triangulate 4-src; SearchableSelect=code KHÔNG skill) · S63 H5 opus-collapse confirm + ef-residual · S66 H8 all-inherit flip (7 pin→inherit). → `archive/2026-06.md`.
- **2026-07-02 (S98 @start RE-REPORT — Fable-restore evidence, on-behalf em main APPEND B3):** 4-mặt: ①SKILL DRIFT — ef-core SKILL `:3`/`:19` stuck Mig 59 (disk **61**, thiếu rows 60/61 — drift born-S97 HẬU-monthly-audit-CÙNG-NGÀY) + skills/README `:20`→61 + `:90` latest #76→**79** → em main flush cùng session-start. ②ROSTER 11=11=11, frontmatter **11/11 `model: inherit`** khớp H8; **spawn này self-report `claude-fable-5` qua inherit** → H8 flip runtime-verified (em main flush STATUS:24 + agents/README:12). ③PLUGIN 18/15/3 + marketplace 35 identical, 0 new-alloc; observed-first-time: settings `effortLevel: xhigh` + `model: claude-fable-5[1m]`. ④DOCS: monthly-audit 07-01 **ĐÃ CHẠY** (S96 `881783c`) nhưng pointer "Lần kế" chưa flip → 2026-08-01 (root CLAUDE:111 + STATUS:63) + **Fable BACK runtime** → gỡ 3 caveat H5.6 (STATUS:24 · agents/README:3 · session-start.md:29) + HANDOFF:5 bundle mismatch (#483-hash gắn nhầm #484; canonical `mEGqlNWc`/`Dnrp4PU1`). Tag `[s98-start, 4-mat, fable-restore-evidence, post-audit-drift, on-behalf]`.
- **2026-07-02 (S99 @start RE-REPORT — ①②③ PASS, ④DOCS 3-flag):** HEAD `8a249c5`, tree 1-dirty pre-existing (cicd MEMORY M). ①SKILL PASS: 6+23+marketplace-35 unchanged; ef-core S98-update VERIFIED (:3/:19 "Mig 61"+B1, rows 60/61 `:82-:83` khớp STATUS:14, `:85` 89-bảng khớp STATUS:15, 0 residual); skills/README:20 "Updated S98"/:90 #79 fresh; dep-audit:153 B1 sạch; commands 14 file no-change. ②ROSTER PASS 11=11=11; frontmatter 11/11 `model: inherit` H8; **spawn này self-report `claude-fable-5` = inherit-chain data-point #3**; VALID_ROLES 9 product-only by-design (hmw.js:22 = README:201). ③PLUGIN PASS 18/15/3 identical + xhigh, 0 new-alloc. ④DOCS 3 FLAG: **(F1)** S98 closeout không flip — STATUS:38 row `🟡 in-progress` + STATUS:6/HANDOFF:5 header kẹt S97, session-log S98 không tồn tại; **(F2)** session-start.md `:8`/`:62` "SendMessage KHÔNG khả dụng" stale vs runtime deferred-tools (em main verify runtime TRƯỚC khi patch — disk không tự chứng được); **(F3) NEW-catch** session-start.md`:44` "gotchas.md (68)" hard-count stale (thật 79, lệch 11) — **commands/*.md nằm ngoài count-grep monthly** → propose B1-pointer + mở rộng checklist. Carry-flag ĐÓNG: docs/CLAUDE gotcha "(55)" đã B1-pointer. Còn: schema-diagram §16+ Mig 32-61 ERD debt. L1 compacted 19.6→~9KB (hook), 12 entry → `archive/2026-06.md` NGUYÊN VĂN. Tag `[s99-start, 4-mat, s98-flip-miss, sendmessage-stale, command-count-catch, l1-compact]`.
- **2026-07-02 (S100 @start RE-REPORT — ALL-4 PASS, F1/F3 fix-verified, F2 carry):** HEAD `525a01a`, tree CLEAN (cicd-MEMORY dirty S99 đã commit trong `c112be9`). ①SKILL PASS: 6+23+14 identical; last-touch skills/ = `4263d63` S98 (0 đổi từ S99-verify); ef-core `:3` B1+Mig61 khớp disk-61, skills/README:20 fresh. ②ROSTER PASS 11=11=11 (README:1 "11-agent" = STATUS:24), 11/11 inherit, last-touch agents/ = S98. ③PLUGIN PASS 18/15/3 (settings:17-35) + marketplace 35 + xhigh:37 + `claude-fable-5[1m]`:11 — identical, 0 new-alloc. ④DOCS PASS: **F1 FIXED-verified** (STATUS:6 flip-note "hồi-tố @S99-start" + In-Progress:34 "(S99)" row-stale-gỡ, chỉ còn :38 PE-phân-quyền pending; HANDOFF:5 khớp) · **F3 FIXED-verified** (session-start:44 B1-pointer, grep 0 "(68)") · **F2 OPEN-tracked** (session-start `:8`/`:62` SendMessage-note còn — HANDOFF:5 NEXT-em carry chờ runtime-verify, KHÔNG new-drift). Counts khớp disk: Mig 61 · gotcha 79 (grep `^### [0-9]`) · 89 bảng · test 440 (canonical-consistent). NOTE-minor: S99 không blurb riêng (docs-micro-session, documented inline flip-note + commit-title) — acceptable, S100-closeout tự quyết. Carry-debt: schema-diagram §16+ ERD · monthly count-grep +commands/*.md. Method: session KHÔNG-đổi-tooling → `git log -- .claude/skills/` last-touch = shortcut verify mạnh hơn re-read từng file. Tag `[s100-start, 4-mat, all-pass, f1-f3-verified, f2-carry]`.
- **2026-07-03 (S101 @start RE-REPORT — ALL-4 PASS + MODEL-DRIFT, on-behalf em-main APPEND B3):** HEAD `5ee32c0`, tree 1-dirty (cicd MEMORY M #486 pre-existing). ①SKILL PASS 6+23+14 (2 detector-flag ef-core/contract-workflow = FP module-local, numbers MATCH canonical). ②ROSTER PASS 11=11=11, 11/11 inherit, ASCII-diagram cosmetic-drift known-debt. ③PLUGIN PASS 18/15/3 + marketplace 35 + xhigh + `claude-fable-5[1m]`:11 identical, 0 new-alloc. ④DOCS PASS (S100 closeout clean; F2 SendMessage + F3 count both fixed-verified). 🔴 **MODEL-DRIFT (inherit-chain data-point #4 = DIVERGENT):** this spawn + lead + WF2-reviewer all self-report **`claude-opus-4-8`** (NOT `claude-fable-5` S98/S99) while `settings.json:11` still pins `claude-fable-5[1m]`**Fable unavailable S101 → H5-fallback tự-kích** (revert-free, no frontmatter change). "Fable RESTORED S98" = point-in-time NOT steady-state → em-main reconciled STATUS:24 + agents/README:3 with S101-runtime caveat. Lesson: **inherit-chain self-report = runtime availability probe — verify each session, don't trust last-session model claim.** Tag `[s101-start, 4-mat, all-pass, model-drift-opus, h5-fallback-reactivated]`.
- **2026-07-03 (S101 @closeout CHỐT — on-behalf em-main APPEND B3):** HEAD `e350660`, tree CLEAN, 2 commit S101 pushed (`f229b07` H18-closeout + `e350660` H19-adopt). ①SKILL/COMMAND **DELTA: command 14→16** (+`fable-real.md`+`fable-clone.md` H19 thật/ảo-toggle — verified `ls|wc`=16; 🔴 **là COMMAND KHÔNG phải skill** — SlashCommand-tier ≠ `skills/<n>/SKILL.md` Skill-tier, đừng conflate "auto-registered skill"; skill vẫn **6+23**) + session-start BƯỚC 0.5b + send-email 6c present. **KHÔNG command-catalog canonical** trong docs → 2 fable-* KHÔNG tạo catalog-drift, KHÔNG cần doc-register. ②ROSTER 11=11=11 (H19 0 agent mới, dùng reviewer+investigator-cb sẵn), 11/11 inherit. ③PLUGIN 18/15/3 identical + xhigh + pin-fable giữ (revert-free dù runtime-Opus), 0 new-alloc. ④DOCS PASS: H19 đầy-đủ path:line-verified (engine §K:315-334 + ACTIVE-MARKS:19 RC-verbatim + STATUS:6/:24/:40 + HANDOFF + session-log + 4 adap-report). 🔴 **model self-report `claude-opus-4-8` = inherit-chain data-point #5 DIVERGENT-confirmed** (Fable vẫn unavailable). **new-alloc: NOTHING-TO-ALLOCATE.** **Flags:** F-H19a LOW (agents/README+reviewer+investigator-cb 0 H19-note → **DEFER** vacuously-inert + no-catalog + single-sourced §K; note khi Fable-về + toggle-first-run có runtime-delta) · F-H19b VERY-LOW (session-start BƯỚC-0.6 Fable-steady → em-main FIXED S101 +Opus-caveat). Baseline command-count 14→**16** (self-fix note). Tag `[s101-closeout, 4-mat-chot, command-14-16, model-drift-5, f-h19a-defer, on-behalf]`.
- **2026-07-06 (S102 @start RE-REPORT — ALL-4 PASS + FABLE VỀ LẠI, inherit-chain data-point #6):** HEAD `3e2c18b` (=S101 closeout), tree CLEAN, 0 commit sau S101 → disk S102-pre == S101-end. **Model: spawn này self-report `claude-fable-5`** = Fable RESTORE lần 2 (chuỗi S98 Fable → S101 Opus → S102 Fable — availability per-session, đúng lesson S101). ①SKILL PASS 6+23; ef-core `:3`/`:19` B1-pointer + Mig 61 khớp disk-61 (`ls` Migrations = 61). ②ROSTER PASS 11 file = 11 kỳ-vọng, 11/11 `model: inherit` line-5; S101-window: harvest-curator.md + agents/README.md M-only, 0 agent THÊM/XÓA. ③PLUGIN PASS 18/15/3 (settings:17-35) + marketplace 35 + xhigh:37 + `claude-fable-5[1m]`:11 identical, 0 new-alloc. ④DOCS PASS: (a) BƯỚC 0.5b hiện diện session-start:27-33; (b) fable-real/clone semantics inverse ĐÚNG (real=tạo marker :10 / clone=xóa :8), registry loaded = restart đã xảy ra; (c) **model-note S101-Opus cần S102-reconcile 3 vị-trí: STATUS:24 · agents/README:3 · session-start:37 (BƯỚC 0.6)** — đề xuất APPEND data-point giữ S101 làm history; (d) marker KHÔNG tồn tại + gitignore:92 + not-tracked. **Trigger-met: BƯỚC 0.5b:33 "nhắc anh khi Fable về + phân-tầng"** → em-main nhắc anh H19 tiering. Command 16 (brief "~20" = overestimate; 16 = đúng đủ, hmw ≠ command-file). Counts khớp: Mig 61 · gotcha 79 (grep) · test 440 · 89 bảng. F-H19a defer-condition "khi Fable-về" cũng MET → em-main cân nhắc note. Tag `[s102-start, 4-mat, all-pass, fable-restore-2nd, model-note-reconcile-3]`.
- **2026-07-06 (S103 @start RE-REPORT — ①②③ PASS, ④ 1-FLAG model-note per-session flip, inherit-chain data-point #7 DIVERGENT):** HEAD `62cff38` (=S102 closeout), tree CLEAN, 0 commit sau S102 → disk S103-pre == S102-end. Project `.claude/settings.json` KHÔNG tồn tại → model resolve user-global. **Model: spawn này self-report `claude-opus-4-8`** (env-confirmed) = Fable UNAVAILABLE lại (chuỗi **S98 Fable → S101 Opus → S102 Fable → S103 Opus**, flip lần 4 — availability per-session KHẲNG-ĐỊNH lại). ①SKILL PASS 6+23+16 (last-touch skills/ = `4263d63` S98, 0 đổi); ef-core `:3`/`:19`/`:83` Mig 61 + `:85` 89-bảng khớp disk (`ls` Migrations = 61, last=`...142752_BackfillEndedByLevelFinalizeFromChangelog.cs`) + khớp STATUS:14/:15; skills/README:20 "Updated S98"/:90 #79 fresh. ②ROSTER PASS 11=11=11, 11/11 `model: inherit`; ASCII-diagram cosmetic-drift known-debt (KHÔNG mới); last-touch agents/ = `62cff38` S102 M-only 0 agent THÊM/XÓA; VALID_ROLES 9 product-by-design. ③PLUGIN PASS 18/15/3 (3 disabled: pr-review-toolkit/code-modernization/hookify) + marketplace 35 + xhigh + `claude-fable-5[1m]`:11 identical, 0 new-alloc. ④DOCS canonical 7-count khớp disk (Mig61/89/440/gotcha79/menu54/11sub/6skill). 🔴 **FLAG-M (LOW, on-behalf APPEND đề xuất):** 3 model-note (STATUS:24 · agents/README:3 · session-start:37 BƯỚC 0.6) carry **S102-Fable "VỀ LẠI"** — KHÔNG drift-sai (đúng-tại-S102 + đã ghi "per-session, không tin note phiên trước") chỉ thiếu **data-point S103-Opus**. Đề xuất em-main APPEND caveat S103-Opus vào 3 vị-trí (giữ history, KHÔNG frontmatter/con-số), **SAU khi em-main tự-xác-nhận lead-runtime S103** (report này = 1-spawn probe, G-015 honesty — chưa xác nhận lead + sub khác). Marker fable-real KHÔNG tồn tại → Fable-clone default (đúng). Carry-debt: schema-diagram §16+ ERD · monthly count-grep +commands/*.md. Method-shortcut tái-dùng: `git log -- .claude/skills/` last-touch confirm no-change nhanh hơn re-read. Tag `[s103-start, 4-mat, model-note-flip-opus, data-point-7-divergent, flag-m-low, on-behalf]`.
- **2026-07-06 (S104 @start RE-REPORT — ①②③ PASS, ④ DOCS 1-HIGH + 1-SKILL-drift từ Mig-62 ship — inherit-chain data-point #8 DIVERGENT):** HEAD `778fc98` `[CLAUDE] Supplier: Mig 62 expand 30-field` (hôm nay 16:06, NGAY sau S103 closeout `6d217f7` 14:13), tree 3-dirty pre-existing (cicd MEMORY+archive+_INDEX M). **Model: spawn self-report `claude-opus-4-8`** (env) = Fable OUTAGE tiếp (chuỗi **S98 Fable → S101 Opus → S102 Fable → S103 Opus → S104 Opus**, flip lần 5, per-session tái-xác-nhận). ①SKILL PASS 6+23; last-touch skills/ = `4263d63` **S98** (KHÔNG đổi qua Mig 62 — Supplier commit KHÔNG touch skills). ②ROSTER PASS 11=11=11 (12 file README), 11/11 `model: inherit`; agents/ window S103→now = docs-commit only, 0 agent THÊM/XÓA. ③PLUGIN PASS 18/15/3 (3 disabled pr-review-toolkit/code-modernization/hookify, settings:17-35) + marketplace 35 + xhigh:37 + `claude-fable-5[1m]`:11 identical, 0 new-alloc. ④DOCS — **NEW real-drift từ Mig 62 ship (product commit chưa reconcile docs, ĐÚNG như anh brief):** 🔴 **(D1 HIGH)** `docs/STATUS.md:14` Migrations row = **61** nhưng disk = **62** (`ls Migrations *.cs -Designer -Snapshot | wc = 62`, last=`20260706084342_ExpandSupplierFields.cs`) — detector confirm HIGH "canonical-itself-stale". → em-main patch STATUS:14 **61→62** + thêm Mig 62 blurb. 🔴 **(D2 skill LOW-real)** ef-core SKILL `:3`+`:19` header "mới nhất Mig 61" + KHÔNG có row Mig 62 (table dừng `:83`=Mig 61) — cần thêm row 62 + header→62 (giống S96/S98 pattern skill-lag-sau-mig). 🟡 **(D3 MED)** STATUS:6 In-Progress header + HANDOFF:5 Last-updated KẸT **S103**; **KHÔNG có Recently-Done entry + KHÔNG có In-Progress row** cho Supplier/Mig62 (STATUS:34 In-Progress vẫn 3 row S103; :56-58 Recently-Done ref S98/S97/S96/S95 mega-line) → em-main add S104 closeout blurb. 🟢 **(D4 LOW)** migration-todos KHÔNG có tick Supplier-30-field (S96 backlog "15-18 field note-lại-từ-từ" giờ đã ship Mig 62 — nên tick/annotate). ⚠️ **table-count KHÔNG đổi: Mig 62 = 18 AddColumn + 18 DropColumn, 0 CreateTable/DropTable → 89 bảng GIỮ NGUYÊN** (STATUS:15 đúng, ĐỪNG sửa; verify bằng grep ops trong .cs). Counts khác khớp disk: gotcha 79 (commit không touch gotchas.md) · test 440 (commit "test-after UAT-mode" 0 test-file) · menu 54. **KNOWN-BENIGN xác nhận KHÔNG re-flag:** 3 vocab-fork MED (wave-folder/Dự-trù-PRO/two-tier) alias-mapped S96 + 4 ef-core LOW `:94/:95/:162/:179` = FP module-local ("PE 2 migration tách"/"Contract 1 GỘP"/"Revert 1"/"1 migration→latest" = procedural-history KHÔNG canonical-count, H18-A ratio-band-FP class) — ĐỪNG patch. Detector TOTAL 37 (1 HIGH + 4 LOW-FP + 3 MED-alias). Carry-debt: schema-diagram "§16+ Mig 32-61 pending" (root CLAUDE:131 + docs/CLAUDE:70) nên nới→Mig 62 nhưng = known-ERD-debt KHÔNG new. **FLAG-M carry (S103):** 3 model-note vẫn S102-Fable "về lại", thiếu data-point S103+S104-Opus — em-main APPEND SAU tự-xác-nhận lead-runtime. Method: `git show --stat <commit>` = xác-nhận-nhanh commit touch gì (Supplier chỉ Supplier-BE/FE/Mig, 0 docs-reconcile) → chốt "product-shipped-docs-lag" pattern. Tag `[s104-start, 4-mat, mig62-docs-drift, d1-high-status61, d2-skill-efcore-lag, table-89-unchanged, model-drift-8-opus]`.