Files
solution-erp/.claude/auto-memory/MEMORY.md
2026-07-31 21:47:23 +07:00

69 lines
17 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.

# Memory Index — SOLUTION_ERP
> One line per memory. **Feedback** = how I work · **Project** = ongoing context · **Pattern** = reusable scaffold. Detail lives in topic files; this index = recall hook only. Compacted S93 (was 23.7KB).
## Feedback — how I should work
- [Charter v2 — infra ownership](feedback_aiinfra_charter_v2.md) — AI_INFRA owns infra (RAG/MCP/agent/skill); SE focus product, phản-biện infra chỉ khi derail
- [Monthly drift audit](feedback_monthly_drift_audit.md) — cron ngày 1: investigator ground-truth-from-disk → em-main patch từng cite (gotchas no self-count)
- [STATUS/HANDOFF tiering](feedback_status_handoff_tiering.md) — giữ lean (current + 2-3 session); archive verbatim trước rewrite; re-ground count từ code
- [Implementer truncation mitigation](feedback_implementer_truncation_mitigation.md) — heavy scaffold truncate mid-MEMORY; Strategy B = em-main proxy-append next session
- [High→Max multi-agent quality](feedback_high_to_max_multiagent_quality.md) — Max reasoning ↑ cross-stack reliability; Max re-review wire/financial claim BẮT BUỘC
- [Background spawn visibility](feedback_background_spawn_visibility.md) — long foreground spawn "looks frozen" → `run_in_background` + report ngay
- [RAG MCP recovery + concurrency](feedback_rag_mcp_recovery_concurrency.md) — MCP rớt → quit+relaunch FRESH trust .mcp.json (KHÔNG resume); KHÔNG 2 SE-session cùng repo; git-add file cụ-thể
- [store_memory rebootstrap protection](feedback_store_memory_rebootstrap_protection.md) — at-risk ⟺ content NOT in {exists ∧ corpus-glob ∧ not-excluded}; promote-to-disk twin trước re-bootstrap
- [Session-end memory write verify](feedback_session_end_memory_write_verify.md) — closeout Write có thể 0-byte (#53); verify byte>0 sau mỗi memory Write (S45 mất index)
- [AI_INFRA adap-* channel](feedback_aiinfra_adap_channel.md) — federated adoption /adap-apply|report|request; read outbox→apply own repo→adap-report (§J2); lead=sole RAG-writer
- [Monitor residual-write containment](feedback_monitor_residual_write_containment.md) — propose-only sub vẫn Bash-write được (G-015); git-diff commit-gate = backstop THẬT (AS-10/E-006)
- [Agent kill/truncation recovery](feedback_agent_kill_recovery.md) — kill/truncate/die-0-byte giữa task → recover qua git/disk/prod truth + em-main-solo redo + self-gate evidence-checklist (S52)
- [Agent cwd-relative memory mis-land](feedback_agent_cwd_relative_memory_misland.md) — sub cd subdir → MEMORY Write rơi `<subdir>/.claude` stray; session-end git-status scan + reconcile (S54)
- [Harness-7 outward writing quality](feedback_harness7_outward_writing_quality.md) — outward (email/broadcast/report + lead→anh) = full-grammar VN; internal stays compressed (asymmetric, S64)
- [Workflow fan-out reliability](feedback_workflow_fanout_reliability.md) — fan-out parallelism thật; return: schema-NHỎ 3-field 4/4-clean S108 (S73 "tránh schema" thu hẹp còn schema-SÂU) + free-text VERDICT-header-dòng-1; 2 bẫy Workflow-tool: args-đến-dạng-STRING → parse-guard · `tier:` hmw-only → generic dùng `model:'opus'` (S65/S73/S108)
- [Fault-injection proves teeth](feedback_faultinjection_proves_teeth.md) — chứng checker/guard có RĂNG bằng inject-lỗi-vào-cây-tạm (`-RepoRoot`) → confirm FLAG, KHÔNG chỉ happy-path PASS; boundary + anti-Goodhart-flip; verify anchor bằng chính regex script (S95)
- [Harness-9 L2-recovery + 2-workflow adap](feedback_harness9_l2_recovery_2workflow_adap.md) — mỗi adap = 2 workflow (impl+review) + run-id; L2 _INDEX/gist dark-matter recovery; self-gate khi reviewer no-schema (S70); **+ vocab-collision-check on adopt** (review bắt tên-trùng: memory-fidelity H6.7≠H16; alias-map KHÔNG seed detector, S93)
- [Stale diagnostic in background agent](feedback_stale_diagnostic_background_agent.md) — IDE diagnostic giữa agent NỀN = snapshot dở; chỉ tin build SẠCH chạy SAU agent (gotcha #68, S69)
- [Harness-10 run-trace folder](feedback_harness10_run_trace.md) — git-tracked `runs/<id>/` FLAT (`sub-*`+`*-synthesis.md`); raw-Workflow≠writeGuard→residual caught+revert; detector-tailored-out (S71-72)
- [Harness-11 engine adopt](feedback_harness11_engine.md) — engine governance tự-bảo-trì: `governance-detectors.ps1`+`memory-archive-gate.ps1`; B1 derived-trỏ-canonical; #30-via-Edit (.ps1 pure-ASCII+code-point) (S75)
- [Canonical spec over broadcast](feedback_canonical_spec_over_broadcast.md) — adap khi anh trỏ LỆNH canonical → pull command/§P/ledger, ĐỪNG phỏng-theo broadcast cô-đọng; report-before-stamp (S79)
- [Review presentation & stale config](feedback_review_presentation_and_stale_config.md) — review độc-lập bắt honesty-PRESENTATION gap + stale-config đánh-lừa reviewer; tighten-wording + re-measure TRƯỚC review (S81)
- [Derived-flush = execution](feedback_derived_flush_execution.md) — derived-doc flush khớp canonical owner-set = em-main tự làm KHÔNG gate; chỉ ĐỔI con-số/policy = quyền anh (S84)
- [Cơ-chế đúng, dữ-liệu không có](feedback_mechanism_right_data_absent.md) — lớp ×6; UAT báo "không chạy" ⇒ ĐO DỮ LIỆU PROD trước, đừng đọc/viết code (S157: auto-fill đúng, 57/62 dự án rỗng `Location`)
- [Root-cause over symptom](feedback_root_cause_over_symptom.md) — bug lặp sau band-aid → truy field/case LỆCH-quy-ước vào pattern đã-đúng = fix 1 chỗ; verify "tạo lỗi MỚI còn lặp?" (S85, #72/#73) · **+S122 anh nêu: (i) được-chỉ-1-chỗ ⇒ PHẢI grep cùng-lớp (script thứ-2 lòi ra khi anh hỏi — thoát vì MAY) · (ii) 🔴 bài-học nằm-trong-context KHÔNG tự bật (file này auto-inject mà lead vẫn vá triệu-chứng; +SHA-bịa tái-phạm sau 1 NGÀY) ⇒ chặn được = LUẬT soi-được, không phải trí-nhớ · chứng: hardcode sống 27 ngày qua 1 đợt "double-check" vì nó hỏi "logic đúng?" mà logic VẪN đúng · truy-gốc ≠ tự-sửa-gốc (harness owns → R6 hỏi hub)**
- [Cardinality change grep consumers](feedback_cardinality_change_grep_consumers.md) — đổi field single→multi = grep MỌI consumer; sửa write-site sót read-site → vỡ feature (S87/S88 PE multi-winner)
- [Prod config: inspect-before-change](feedback_prod_config_inspect_before_change.md) — đổi config prod = inspect LIVE trước (runbook STALE); backup→apply→verify-LIVE→commit; replicate mọi rule cũ + delta (S88)
- [Wipe durability — check re-seed](feedback_wipe_durability_check_reseed.md) — sau prod-wipe audit seeder: ungated per-code seed RE-ADD mỗi restart; gate sau env-flag + verify-by-restart-THẬT (S91, #75/#76)
- [Verify deployed artifact byte-level](feedback_verify_deployed_artifact_byte_level.md) — UAT "fix chưa ăn" sau deploy → curl-grep bundle prod byte-level (cache≠deploy); incognito=golden-test (S96, #77)
- [Agent return-garble recover](feedback_agent_return_garble_recover.md) — sub trả wrong-slice-of-transcript thay verdict (#53, **×72-cận-dưới qua S162 [S159-S161 chưa-đếm-được; S163+ sự-kiện ghi, chốt @closeout L9 — ≥2: lead-gap ×2, lần 1 = skeleton-nấc-2 instance #2 1.302B] — derive-from-body, đếm-cái-chắc** [🔴 **S158 = ĐỐI-CHỨNG NỘI-PHIÊN SẠCH đầu tiên (cùng lead/ngày, khác đúng 1 biến): ép-ghi-đĩa KHÔNG giảm garble (2/2 vẫn garble) nhưng đưa thiệt-hại về 0 B** — 4 vai không-ép mất TOÀN BỘ phải resume, 2 vai có-ép mất 0; ⇒ chống #53 = thiết-kế ARTIFACT không phải PROMPT, xác nhận lần 5 · **+2 sub-class**: `skeleton-nấc-2` (1.661B byte>0 mà ruột toàn heading ⇒ guard "verify byte tăng" KHÔNG bắt được) · `engine-process-exit` (0 delta đĩa = lượt chạy chưa từng tồn tại) · **câu garble CHỨA finding thật, đừng vứt** (ring1/ring2 chết ngay chỗ nghĩ sắc nhất) · S153-S157 CHƯA đếm được — "~27" của lead-gap neo bằng SỐ DÒNG `_mind`, ring2 bác, KHÔNG nhập tally]; [qua-S148 33 · S149 ×5 · S150 ×7/7 · S151 ×5/6 write-boundary · **S152 ×10 (7 @open + 3-chắc @close, 2 UNKNOWN-sau-compact không đếm; ring2-STRICT + trio = 4 CLEAN cùng phiên; MỚI: pin-bản-cắt 4-A — file ghi-từng-finding LUÔN hợp-lệ giữa chừng, lead pin 16.911B/30.195B mất 3 FLAG → đề END+TOTAL-line chờ owner; commit-subject `1b85713` "53"=SAI errata)** — skeleton-rỗng 2-strike → AS-17; `ngược-#53` ×3 lifetime]; S143 ×5 5/5-sub; +path-4 lead-on-behalf; **+sub-class S150 `ngược-#53`/`skeleton-ruột-rỗng` ⇒ ghi-đĩa-trong-lúc-làm = CẦN KHÔNG ĐỦ — verify byte-content**) → recover: **(0) WRITE-lane→disk-truth (git+build+test) · VERIFY-lane→em-main-re-curl+sqlcmd (2-nguồn-khớp)** → (1) diary → (2) SendMessage-resume in-session → (3) em-main solo; garble ∝ reasoning-lane; **WRITE-lane garble≠mất-code** (S114 ×5); cicd tái-phạm dai + tự-dán "CLEAN-return" sai (harvest-curator bắt S118)
- [H18 ghost-wire + stamp-integrity](feedback_h18_ghostwire_stamp_integrity.md) — hash-verify TRƯỚC khi áp broadcast (bắt stamp-then-edit THẬT → HELD + re-stamp); ghost-wire 2 class (cron-claim CronList=0 · config-key defined-but-unread); KHÔNG stamp run-id chưa chạy (S100)
- [Resume premise re-verify](feedback_resume_premise_reverify.md) — re-verify tiền-đề từ ĐĨA trước execute (header+git-date, match NỘI-DUNG KHÔNG tên-file 1:1); **S121: bảng-kế-hoạch ≠ đĩa — "không-ai-được-giao" ≠ "chưa-làm"; khẳng-định trạng-thái-đĩa = phải chạm đĩa 1 lệnh**; +bẫy `grep -c` (dòng) vs `-o|wc -l` (occurrence) trên mega-line; +bẫy Get-Content-no-Encoding no-BOM = ANSI đếm ×2-3 → báo-số-sai-owner, đính-chính-ngay (S130 E-010/AS-14); +acceptance literal tự-lão-hoá (S109/S121)
- [Permission grant = 2 layers](feedback_permission_grant_two_layers.md) — cấp/verify quyền = display-layer (menu CanRead) ⟂ API-authz-layer (controller `[Authorize(Policy)]`) 2 tầng ĐỘC-LẬP; grep authz controller đích TRƯỚC khi tin grant (menu-ẩn ≠ API-đóng; `[Authorize]` trần = lỗ hổng); reviewer-adversarial bắt, em-main-solo sót (S118, #82)
- [Meta-count self-coverage blind-spot](feedback_meta_count_selfcoverage_blindspot.md) — lead ĐO tốt (~80% đúng) nhưng ĐẾM-VỀ-MÌNH sai (~13%, tập trung TRỌN ở meta-count/coverage); "vá 19 finding" khi thật 23 = con-số đóng vai đã-phủ-hết → bảng disposition TỪNG DÒNG thay số tổng; giữ kết-luận thì giữ cả caveat (S119)
- [Return terminates agent](feedback_return_terminates_agent.md) — CẤM lệnh "trả verdict TRƯỚC, làm việc SAU" = bất-khả-thi vật-lý; sub mô-tả ý-định rồi tắt → claim-sai mà lỗi ở LỆNH lead; thứ-tự đúng = làm→verify→return, hoặc lead ghi on-behalf sau VERIFY-đĩa (S119) · **+S123: prompt-đúng KHÔNG chặn được #53** (cấm bẫy từ prompt đầu cho cả 3 sub, cả 3 vẫn garble ×4) ⇒ chặn được = **ghi-đĩa-TRONG-lúc-làm** (harvest-curator vớt ngay từ đĩa; 2 vai kia phải resume) + resume-in-session; reviewer **tự rút luật "ghi diary TRƯỚC return"** từ garble-1 và nhờ đúng nó mà garble-2 vớt được
- [Citation-trap self-reference](feedback_citation_trap_selfreference.md) — doc định-nghĩa anti-pattern TẤT-YẾU chứa mẫu đó ⇒ detector khớp-mẫu bắt chính nó, **lây qua trích-dẫn** (3 đời/1 wave); discriminator = **enclosure use⟂mention**, KHÔNG port charset-guard; vá 1 CLASS ⇒ grep MỌI matcher cùng-lớp TRONG diff (gen-2 xảy ra thật)
- [Goodhart: rời tập-đo](feedback_goodhart_leave_measurement_set.md) — "vá" bằng đổi HÌNH-DẠNG thứ đang bị đo = rời tập-đo; **flag-count giảm trông y hệt thành công** ⇒ hỏi "cái mất đi là dương-giả hay CHỨNG-NHÂN?"; kể chuyện bằng THÀNH-PHẦN không bằng tổng; +2 phép thử rẻ (trục-nào-KHÔNG-có-ca · áp-luật-cho-nhánh-anh-em)
- [Vắng-mặt trông giống ổn](feedback_absence_looks_like_clean.md) — slot-index tái-dụng xoá IM-LẶNG (mất uỷ-quyền owner, hỏi lại 3 lượt) · phép trích RỖNG đọc thành sạch (`.{50}x` vs `.{0,60}x`) · ghost-wire soi 2 CHIỀU (wired-but-declared-unwired); vá xong PHẢI grep lại bằng lệnh KHÁC (S146)
- [Claim mạnh hơn việc đã làm](feedback_claim_stronger_than_work.md) — "đã ghi/đã archive/đã VERDICT" = CLAIM ĐO ĐƯỢC, đo trước khi viết; 0-hit phải kèm control-dương (S162 ×3 ca/1 phiên)
- [Edit phải có trước review](feedback_edit_must_predate_review.md) — edit-cần-review (nhất là file vai reviewer) LAND TRƯỚC lượt L3 (no-self-exempt cần vật tồn-tại trong diff); spec tự-mâu-thuẫn → fix-mới thắng footer-cũ + khai trong report (anh ratify S139)
- [Máy rộng, UI hẹp](feedback_may_rong_ui_hep.md) — nguyên tắc owner S164 ×2 quyết định: schema/BE theo ca TỔNG QUÁT (N/gộp), UI default ca HẸP (1-1), user cần thì bung — 0 đổi máy; rào cứng 409 → rào hiển thị
- [Pause phải nhớ kỹ plan-progress](feedback_pause_track_plan_progress.md) — owner S165: /pause giữa chuỗi wave = WAL/run.md liệt TỪNG đầu việc đã-review (wave + vá-số + finding treo), rà từng dòng OG trước khi tuyên xong (ca thật: gap checkbox OG-3 → gate F-1 MAJOR)
## Project — ongoing decisions / context
- [SOL-CCM-SP-002 signing matrix](project_sol_ccm_sp002_signing_matrix.md) — spec ký HĐ (nắm-ý S164, anh dạy 4 nhịp): bảng = danh mục **LOẠI HĐ SOLUTION**, nén **8 pattern ký**; trình ký số hóa **TƯƠNG TỰ duyệt NCC** (workflow V2 trạm, role→user như note 54); ký nháy = **mực trên BẢN CỨNG** (GĐ4 in khối ký); GĐ2 = duyệt HẠNG MỤC (PE cha) → GĐ3 = ĐIỀU KHOẢN → GĐ4 bản cứng; 🔴 3 trục hạng-mục ⟂ loại-HĐ-SP002 ⟂ khuôn-form (chữ "loại HĐ" 2 nghĩa — đặt tên field tách bạch); treo: cardinality N-hạng-mục→1-HĐ
- [H22 WAL session-continuity](project_h22_wal_session_continuity.md) — sổ WAL ≤40 + Stop-hook persist VERIFIED-RUNTIME S111 (hot-reload ENV-DEP #2/#3) + /pause·/tiep 1-đường + squash wal: + FLIP run-trace ≥3-task + D10 AS-6-taxonomy-đổi; hook PS1 KHÔNG bash (PATH 3-context); pilot kill/đổi-acc pending
- [Model-tier evolution → worker-tier-pin S124](project_harness4_two_tier_model.md) — H4 two-tier → H8 all-inherit → **S124 worker-tier-pin (14/14 sub = opus+effort:max, lead owner-choice, Fable qua /fable-real)**; restart-lesson: EDIT-agent-tồn-tại/command cần restart (hot-reload ENV-DEP, agent-MỚI khác)
- [H23 spawn-precedence — ĐO S126](project_h23_spawn_precedence.md) — spawn-param tier THẮNG frontmatter hard-pin ⇒ /fable-real SỐNG · worker-pin ăn runtime (no-tier=opus DÙ lead=Fable ⇒ không inherit); đo 2026-07-16 spawn-model-audit 0-mismatch
- [Session-model direction S140](project_session_model_direction.md) — owner 2026-07-18: 5-vòng đóng (hở=khuôn bộ-ba-SUB chờ hub) → adopt phiên-LOGIC xuyên cửa-sổ; draft VC-1/2/3 nhãn-2-tầng + email b9ef5ede chờ hub; CẤM wire trước mẫu-hub + anh duyệt
- [database-agent verified + local-drift catch](project_database_agent_verified_local_drift.md) — verified-runtime S53; read-advisory DB lens bắt committed-but-unapplied-local mig (green tests+prod miss)
- [HoSoLink open-from-web browser block](project_hosolink_open_from_web_browser_block.md) — web KHÔNG click-open file:// từ https (browser block); chỉ Edge GPO `IntranetFileLinksEnabled` one-click; FE render + Copy fallback (S67)
- [Harness 1·2·3 adopt](feedback_harness_123_adoption.md) — roster 8→10 (+2 monitor INFORM-only tooling-auditor+harvest-curator) · email channel `broadcasts/` self=se; verified-runtime S50
- [7-agent split upgrade](feedback_7agent_split_upgrade.md) — multi-agent 4→7: backend/frontend split + test-specialist, budget +50%, split theo trục workload (S39)
- [Phase 10 NamGroup port](feedback_phase10_namgroup_port.md) — port 11 module; scope FULL / DB single dbo / reuse WF V2 ApplicableType / rollout per-module (S32)
- [Skeleton-first aggressive finish](feedback_skeleton_first_aggressive_finish.md) — "finish cho xong" → schema FULL + logic SKELETON defer, trade-off ghi commit + UI banner (S38)
## Pattern — reusable scaffold
- [Declarative KIND_CONFIG](feedback_declarative_kind_config_pattern.md) — single-page multi-kind CRUD via `:kind` URL + `KIND_CONFIG: Record<Kind,...>` (S29/S35)
- [Pattern 12-ter — N-satellite scaffold](feedback_within_module_n_satellite_scaffold.md) — within-module N-satellite CRUD: 1 mega file N `#region` + controller extend (S34)
- [Real-data master import](feedback_realdata_master_import.md) — Excel master data qua UNGATED DbInitializer idempotent seed → reaches prod; extract→spec→Dev-proof→cicd-check (S55, Mig 48)
- [Multi-entity create + self-committing codegen](feedback_multi_entity_create_self_committing_codegen.md) — N entity cần mã codegen TỰ-COMMIT → gen TẤT mã TRƯỚC (local) → atomic final SaveChanges no-partial (S88)
- [Prod screenshot → docx pipeline](feedback_prod_screenshot_to_docx.md) — chụp prod khoanh-đỏ chèn Word: PowerShell `CopyFromScreen`+Win32-lọc-chrome + DOM overlay + python-docx; prod xem-only (S90, #74)