Files
solution-erp/.claude/agent-memory/implementer-backend/archive/2026-07.md
2026-07-29 19:32:44 +07:00

2.8 KiB
Raw Blame History

Archive 2026-07 — implementer-backend (L2, moved-not-cut từ L1 @S161 curate)

Verbatim entries dời khỏi MEMORY.md L1 khi chạm ~93% autoinject_cap (25.600B). KHÔNG nén — nguyên văn.

  • S134 (07-17) PE lũy kế TẠM TÍNH BE [wf_58302bd5-b9f INV-2.A · return sạch 0-garble] [engine: opus-worker]: +ComputePendingAsync + PePendingAccumulation (PeBudgetAccumulator.cs pure-add +68/0) + PePendingPriorPeDto + PeBudgetSummaryDto append-cuối 5 field (2 construction site: :946 frozen-defaults 0/0/0/0/null · :985 live-fill) + D4 audit-note TRONG ApplyBudgetSnapshotOnFinalizeAsync (Action=Update KHÔNG Transition — #49 tránh UI đọc 2 lần chuyển-phase; insertion-only +30/0; signature GIỮ → 5 call-site 0-diff, site cuối line-shift :1112→:1142 content bất động). Build slnx 0/0 · 0 mig · ComputeAsync body 0-diff (A1). Learned: (1) insertion-only diff (grep '^-' = 0 real-removal) = bằng-chứng MẠNH NHẤT "thân method/call-site bất động" — mạnh hơn đọc-mắt, chống báo-số-sai kiểu #53; (2) derived-audit thêm vào helper KHÔNG cần đổi signature nếu tính nội bộ từ field entity sẵn có (giữ call-site 0-diff); (3) accumulator ns ≠ DTO ns (...Dtos) → cần using tường minh dù cùng project. Tag [s134, pe-luyke-tam-tinh, computepending, insertion-only-proof, d4-changelog-update-not-transition]

  • S133 (07-17) PE budget-freeze BE [wf_4bef08b8-730 INV-B · #53 return-fail → disk-truth + em-main-solo hoàn tất; entry on-behalf]: lane sửa XONG 6 file + PeBudgetAccumulator.cs mới (Domain 11 props ApprovedBudget* + Config precision/maxlength + DTO append BudgetFrozen=false cuối positional-record + display-gate frozen/live 2-nhánh trong GetPurchaseEvaluationQuery + helper ApplyBudgetSnapshotOnFinalizeAsync gọi 4-site :862/:901/:934/:1109 + 2 terminal-guard block-CẢ-Admin) rồi CHẾT TRƯỚC bước sinh migration → em-main solo: scaffold Mig 67 sạch 11 AddColumn (0 RenameColumn #63) + backfill Sql() OUTER APPLY ×3 khớp accumulator TỪNG điều kiện (Suppliers/Quotes = BaseEntity KHÔNG soft-delete filter → SQL không thêm IsDeleted trên s/q; WorkItemId-null → 4 lũy kế NULL mirror helper, SnapshotAt vẫn set) + apply 2 DB — Dev lòi drift Mig 66 committed-chưa-apply-local, catch-up luôn — + filter test 44/44 (T0 RED→GREEN không sửa test). Phát hiện đáng giữ của lane: TransitionAsync KHÔNG SaveChanges nội bộ :537 → snapshot flush qua SaveChanges của caller (mirror ApprovedPrice pattern); khuôn backfill THẬT Mig 61/65 = plain Sql() KHÔNG C# provider-guard (SQLite EnsureCreated không replay = guard kiến trúc). Tag [s133, pe-budget-freeze, mig67, 53-writelane-disk-recover]