Files
solution-erp/.claude/agent-memory/investigator-codebase/archive/2026-07.md
2026-07-14 10:33:18 +07:00

14 KiB
Raw Blame History

investigator-codebase — archive 2026-07 (L2 verbatim, frozen additive)

Curated 2026-07-06 (em-main, hook-triggered L1->L2)

  • 2026-07-03 S101 H19-adopt Lane-2 (mapping + model-tier compliance, WF1 investigate — VERDICT SOUND): Mapping CORRECT: reviewer=final-review-gate (Category 1-6 adversarial + Smart-Friend anti-rubberstamp reviewer.md:268-276 + live-curl deploy-verify = H19 §3a "cổng rà-soát cuối" exact) · investigator-codebase=ground-truth-lane (investigator-codebase.md:23-26 file:line-evidence + sqlcmd + grep + "if uncertain say uncertain" = H19 §3b "xác-minh sự-thật chống bịa-số/dẫn-chứng"). NO better-fit: investigator-api=EXTERNAL-docs (WebFetch, out-of-scope internal-truth) · database-agent=narrow DB-lens (subset không phải general fact-verify). Model-tier checklist 12-pt: SE meets A1(settings pin claude-fable-5[1m][1m] VALID in settings.json ≠ frontmatter; Fable-down→Opus 1M H5-fallback = A1/A2 frontier-1M allowed) A2 A3(all-inherit=all-top, 5-fn map) A4/A5/A6 N/A-by-form(no tier-2/helper layer) B1 B2 B3(11 role-names SE-own, 0 copied) C1(11/11 model: inherit grep) C2(hmw.js tier field) C3(0 [1m] in FRONTMATTER model: line — 4 grep hits ALL prose: README:9/12/16 Upgrade-notes + database-agent:46 checklist). ⚠️ Toggle-marker template EXACT-exists: .claude/hmw-mode.on gitignored AFTER !.claude/** last-match-wins (.gitignore:87); new .claude/model-real-mode.on MUST copy placement or gets un-ignored. ⚠️ Ảo-ensemble reuse: hmw.js parallel() :97 + synthesis machinery PRESENT (grep 10 hits) — but "S101 WF2 3-lane" is LIVE-mechanism NOT persisted artifact (runs/ = old 06-18 only, HMW-ephemeral S94+ pattern). VACUOUS-MET nuance TRUE: under all-inherit+Fable, 2 positions ALREADY top → H19 §4 "allow reach top-model" adds 0 runtime-delta; new value = toggle depth-control + Fable-outage multi-Opus>single-Opus. Tag [s101-h19-lane2, mapping-sound, 12pt-compliance, marker-template, vacuous-met].
  • 2026-07-02 (S100 H18-adopt WF1 wf_50a817ce-a69 — 3 lane ∥, on-behalf em main APPEND B3, return-only 0-residual): L1 measurer-coverage: 3/3 script (mfe-eval:216/selfimprove:133-137/archive-gate:106) GLOB-LIVE 0-hardcode — agent thứ 12 tự-cử; ghost-wire-class MỚI: config-key defined-but-unread (memory-budget.json:54-55 role_file_glob/diary_path_pattern — script re-hardcode giá trị TRÙNG → không detector nào flag vì cả 2 phía "đúng"; catch = grep key-name across scripts/) + latent skip-if-no-tools: (selfimprove:147, 0 affected 11/11 có). L2 ghost-wire+taxonomy: MAST=0 repo-wide (grep PHẢI case-sensitive \bMAST\b — insensitive dính "Master" noise); cron monthly = ghost-wire THẬT (CronList=0 + scheduler RỖNG 05-04 log + S96 chạy 13:04 em-main in-session); convention "auto = step em-main kích, no-OS-hook" nhất quán 5 nơi. L3 ledger-đo: _ledger.md true-orphan-catch 0/15 lifetime (single-day artifact 06-18, 15 row/14 folder — mig54-R2 share) · mode-A coverage 0/8 S93+ · "S71 harvest/ rỗng" = criterion-wording KHÔNG phải incident (đính chính claim em-main) · repo có 5 "ledger" khác tên → sweep grep _ledger EXACT · hmw.js 0-touch. Tag [s100-h18-wf1, 3-lane, ghostwire-configkey-class, ledger-0-15, on-behalf].
  • 2026-07-02 S98 verify-lane V2 post-flush (VERDICT PASS): detector 28→25 (derived-stale 11→8; wikilink 14 + vocab-fork 3 giữ by-design). 8 derived-stale còn = 100% FP-class count-token soft-net: CLAUDE.md:84 tests-tree "(6 test…)" · ef-core SKILL :94/:95 ("2/1 migration tách/GỘP" history) + :103/:111/:114 ("4/3/1 bảng" Budget-defer/Mig-15 module-local) + :162/:179 (heading "Revert 1 migration" + comment "Script từ 1 migration") — 0 genuine drift vs canonical 61/89/440/79; SKILL edit sáng (+rows 60/61 @:82-83) chỉ shift line-number FP cũ, 0 flag MỚI. Grep gotcha: "Fable RESTORED" exact-string CHỈ STATUS:24 + session-start:29; agents/README dùng biến-thể "Fable 5 1M RESTORED" (:3) + "Fable-restore" (:12) — exact-phrase grep miss README dù substance đủ. HANDOFF:5 mega-line: bundle mEGqlNWc/Dnrp4PU1=#484, CeTA7Z82 chỉ trong note "= #483" (1 line match duy nhất cả file). 3 on-behalf append đúng-chỗ: database-agent :36 (cuối Log = EOF) · reviewer addendum TRONG-entry S97-bis :68 (câu cuối + marker on-behalf @S98) · impl-fe S97-Part2 :16 giữa badge:9/S97:19. cicd "S98" = 2× "(curate S98)" stub :73/:74, 0 material-tag. Ledger :7 Mode-A ephemeral note (wf mode-A vắng ledger-row ≠ orphan) + bảng 15 row :11-25 nguyên.
  • 2026-07-01 S97 session-end feedback-audit (VERDICT CLEAN): Grep-verified capture readiness pre-close. gotcha #77/#78/#79 present docs/gotchas.md:1301/1317/1325 (format ### N. count=79 = STATUS header — no self-count drift; all 3 have Triệu-chứng+Cơ-chế+Fix+Quy-tắc root-cause). #53 return-garble x6 (cicd 5/6) in BOTH feedback_agent_return_garble_recover.md (Why-line ×5→×6 + structural root-cause: cicd MEMORY self-target ~17.1KB→curate-at-return→thinking-step=message-cuối=return-value; fix=archive-cicd-sớm NOT instruction) AND S97-log Parts 1/2/4 (lần-4/5/6). cicd MEMORY LIVE=17.5KB (confirms self-target). Mig 60 wrong-table BUG = 2-fix present: code (Mig 61 20260701142752 query Changelogs) + guard (gotcha #79 "xác định ĐÚNG bảng writer" + "verify marker-count prod trước"). Mig 60 code :29-31 confirmed PurchaseEvaluationApprovals a...a.Comment LIKE = wrong. Both Mig 60/61 have 3-file rule. git status CLEAN, 0 stray .claude misland, 0 git add -A in log, S97 workflows HMW-ephemeral (NOT persisted run-folders — consistent S94+ pattern, runs/ only old 06-18). Product decisions captured (STATUS/HANDOFF/log + commit-msg): "duyệt là fix"→#480 price-lock, "fix trọn"→Mig 60 endsBeforeCeo-runtime, "hiện luôn CEO duyệt"→#483 badge, Supplier-backlog "15-18 field"→STATUS Next-up. MINOR only: S97-log per-Part State footers show progression (Part-1 :47 "88 bảng gotcha 77" stale vs session-end "89/79" Part-4 :113) — intentional per-part snapshot but mid-log reader sees stale count. No BLOCKING/MAJOR gaps.
  • 2026-07-01 Supplier Excel-import GAP audit (anh Kiệt FDC — 30-col "Database NCC & Nhà thầu phụ" cho bên Pro): Entity CỰC LEAN 9 domain-prop (Domain/Master/Supplier.cs:5-16: Code·Name·Type·TaxCode·Phone·Email·Address·ContactPerson·Note) + 8 audit inherited (Base/AuditableEntity). EF SupplierConfiguration.cs: Code len50 UNIQUE-filtered [IsDeleted]=0(:24, Mig47 #57), Name200, TaxCode20, Phone30, Email100, Address500, ContactPerson200, Note1000. enum SupplierType.cs:3-10 = NhaCungCap1/NhaThauPhu2/ToDoi3/DonViDichVu4/ChuDauTu5 — KHÔNG có "Cả hai/Both" (FE mirror fe-admin/types/master.ts:11-16 identical). GAP 30→entity: 6 · 7⚠️collision · 17 no-home — Excel splits Address×2(invoice/office), Phone×2(company/contact), ContactPerson+role; Fax·Bank-acct×2·Legal-rep+role·GUQ+3-NAS-links·Status/blacklist·Referral·PMH-owner. ⚠️ S55 seed SeedRealMasterDataAsync (DbInitializer.cs:2768-2787) crams NĐD/bank/status/category vào free-text Note (:2771-73 TRUONGGIANG/TANPHU/TGN) — proof entity thiếu home. Seed UNGATED (called :128, idempotent-key=Code :2780) — KHÁC demo-master (SeedDemoMasterDataAsync GATED DemoSeed:Disabled :117, #75). POST any-auth (SuppliersController.cs:37-42 S59). FE SHA-identical 2-app (c1760788, 253L, 9 fields). Prod 20 NCC (Type1×3+Type2×17; type3/4/5 wiped go-live S91 → "Cả hai" enum genuinely-needed). Precedent NAS-link = PE.HoSoLink nvarchar(1000) Mig52. Fork→em-main: core-widen ~15col+CaHai=6 vs satellite SupplierDetail. → _INDEX pending.
  • 2026-06-29 S93 Harness-16 MFE ground-truth (WF1 wf_4c63e1bd): MFE denominator extraction (deterministic, status-field KHÔNG grep): marks Active(-High) (ACTIVE-MARKS.md) + AS-class + Active-Guards (error-ledger.md Verified) + recurring-gotcha (gotchas.md); dedup-by-AS-cross-reference (gotcha/guard mà AS-row trỏ #N/AS-N → gộp) = 29 item. Per-role sub-coverage: denom = numbered anti-pattern/NEVER trong agents/<role>.md; numer = diary agent-memory/<role>/MEMORY.md (KHÔNG project/user — bẫy trùng-tên H15-v3) match exact-id OR ≥2 content-word sau stop-list (đánh bại leading-verb-9/9-giả). Codified scripts/mfe-eval.ps1 + engine §H. (WF1 self-write reverted AS-10; em-main harvest single-writer.) → _INDEX.

Moved from L1 2026-07-14 (S117 hook-triggered curate @22.7KB — investigator-codebase self, mirror em-main 07-06 pattern)

  • 2026-07-13 PE quote-NEGATIVE feature LENS Budget-consumers (ensemble, RETURN-only): anh Kiệt: cho nhập SỐ ÂM ô form.thanhTien (báo giá/hạng mục) dialog "Thêm NCC"; RULE = âm=khoản-TRỪ NCC, ngân sách GIỮ NGUYÊN. CRITICAL confirm: quote KHÔNG mutate PeWorkItemBudgets — budget chỉ ghi bởi UpdatePeBudgetPro/CcmCommandHandler (role-gated PRO/CCM, PeWorkItemBudgetFeatures.cs:105-107/175-177) + Adjust/SetCcmBudget; quote write-site (PurchaseEvaluationDetailFeatures.cs:308-345) chỉ đụng quote-field + re-derive IsWinner, NEVER budget. 5 consumer đọc SUM(ThanhTien WHERE IsSelected): (1) winnerQuoteTotal DISPLAY PeFeatures.cs:1188-1191 no-clamp (2) CCM-threshold PeWorkflowService.cs:884-893 guard >=ceoThreshold reject HIGH ko-reject-âm→âm cho CCM-finalize dễ hơn (3) giaTri CreateContract PER-WINNER CreateContractFromEvaluation:88-90,100 → Contract.GiaTri CÓ THỂ ÂM, BYPASS CreateContractCommandValidator.GiaTri>=0 (ContractFeatures.cs:46, chỉ áp manual-create path) (4) "So-với-ngân-sách" block-B DISPLAY PeFeatures.cs:904-947 budget read AsNoTracking untouched, soft-warn only (5) submit-guard PeWorkflowService.cs:196-209 = GUARD DUY NHẤT REJECT: if Sum()<=0 → "chưa có giá chào thầu" — WHOLE-phiếu total, per-item âm OK miễn net>0. NO quote validator tồn tại (grep⌀ UpsertPurchaseEvaluationQuoteCommandValidator) → âm đã flow BE 0-block, chỉ FE chặn. Keep-≥0 fields có validator: BudgetPeriodAmount/ApprovedPriceAmount/ProInitial/InitialAmount. ĐÃ allow-âm sẵn (unrelated): ProAdjustment/Adjustment/ExpectedRemainingAmount (PeFeatures.cs:345-348 mirror-LeaveBalance). Tag [s115?, pe-negative-quote, budget-not-mutated, submit-guard-sum-le-0, giaTri-negative-bypass-validator, no-quote-validator].

  • 2026-07-13 PE negative-quote LENS edge/precedent/test (fable-clone, RETURN-only; complements Budget-consumers entry ↑): BE+DB đã cho âm; blocker = FE helper + submit-guard. (a) parseVnd PeDetailTabs.tsx:51 strip [^\d] → minus mất; formatVndInput:52 n>0?:'' → âm+0 đều blank (lẫn "chưa báo giá"); AddSupplier gate thanhTien>0 :2226 skip quote khi ≤0 (empty≡0 by-design); inline QuoteCellDialog :2870 always-POST (store 0 OK); fe-admin SHA-identical :51/:52/:2226. (b) precedent = OMIT validator: ExpectedRemainingAmount PurchaseEvaluationFeatures.cs:348 + LeaveBalance AdjustmentDays LeaveBalanceFeatures.cs:107; Quote UpsertPurchaseEvaluationQuoteCommand DetailFeatures.cs:272 = NO validator (grep⌀) → BE nhận âm sẵn. (c) 0 test assert ThanhTien≥0. (d) gotcha #81 orthogonal (IsWinner==Any(IsSelected) bool≠sign → no phantom). (e) NO DB CHECK (HasCheckConstraint grep⌀ whole Infra; col decimal(18,2) config:131). HARD-INTERACTION submit-guard Sum()<=0 PurchaseEvaluationWorkflowService.cs:206+FE:201 → net-≤0 BLOCKED "chưa có giá"; che CCM-threshold:891. NS-giữ-nguyên architectural (quote never write PeWorkItemBudgets; âm chỉ shift winnerQuoteTotal:1188). Tag [pe-neg-quote,parsevnd-strip-minus,sum<=0-guard,no-check-constraint,omit-validator,iswinner-orthogonal].

  • 2026-07-12 (S111 H22 WAL deep-pass) [engine: fable-real-single · Fable-S111]: H22 WAL adopt → READY_WITH_NUANCES + spec 3-mục (em-main gov/settings · w1 pause+tiep · w2 start/end delta · w3 hook+README). Chốt: (1) .claude/settings*.json KHÔNG tồn tại → hooks-entry CREATE mới; hook = STAGED-until-verified (S100 ghost-wire, chỉ claim khi thấy wal: commit phiên mới). (2) engine:402 no-OS-hook = MÔ-TẢ (CAVEAT) không phải luật cấm; :116 E.3 "hook fails-open ≠ gate" → persist-only TƯƠNG THÍCH, update :402; ACTIVE-MARKS 0 mark cấm-hook; H5 start:41 chỉ cấm hook-switch MODEL. (3) AS-6 KHÔNG tăng: 2 runtime .json gitignored (.gitignore:124-125), hook commit LOCAL — push-set ≡ hôm nay. (4) cmd-PATH Git Bash trước WSL, bash 5.2.26 OK. (5) .gitattributes exists broadcasts-scoped → append *.sh; repo 0 .sh = zero churn. (6) 16 command 0 trùng pause/tiep. (7) Stop-hook fire chỉ TURN-boundary → chết giữa workflow-turn = vật-liệu DISK uncommitted, /tiep đọc cả git status/disk. (8) run.md thiếu taskList snapshot. Learned: "luật cấm hook" phải phân MÔ-TẢ vs LUẬT trước khi đòi carve-out. L1@19.8KB → suggest em-main curate.

  • 2026-07-11 (S110 H21+MTv3 deep-pass) [engine: fable-real-single · Fable-S110]: Task ground-truth 2 broadcast (H21 spec-file+per-invocation · MTv3 owner-choice) + inventory TOKEN toàn repo + SPEC 3-mục. Verdict PASS: (1) 12 persona file SẠCH 0-hit fable/engine-token (grep 2 vòng cả engine-đắt|top-model|ensemble) — NGƯỢC hub vòng-1 bắt persona-phụ lỗi; (2) MTv3 self-check regex §5 chính-thức 0-hit nhưng extended "lead LUÔN top-model" bắt 5 ACTIVE (engine:332 K.D · runbook:140/:455 · fable-real.md:17 · mark ACTIVE-MARKS:19) = regex-heuristic-miss class — sister diễn-đạt khác cụm regex; (3) hmw.js:38 comment "tier:'fable' khi hệ-trọng" = xung-đột MTv3 §1.3/H21 §3 (đường nâng hạng-nhất DUY NHẤT = owner gõ; comment cho lead-discretion) — comment-only fix; (4) hmw-mode.on = HỆ KHÁC (consent fan-out T3 ultracode-hmw-mem-governance, content tự khai /ultra-on) — ngoài scope H21; (5) mega-line "VẪN ON" class = standing-imperative-trong-history-blurb (S109-header + HANDOFF NEXT-anh = ACTIVE cần sửa; blurb-body = snapshot giữ). Bẫy fidelity lớn nhất: MTv3 §1.2/1.3 "sub gán cứng hạng-hai" đọc như floor → tưởng phá H8 all-inherit; triage-reply S2 CÙNG NGÀY waive đích-danh ("không đổi gì với form all-inherit"). ⚠️ #53 garble lượt return đầu (trả status-line giữa-chừng thay verdict) → coordinator SendMessage re-emit trong-session = recover OK, diary ghi trước re-emit.