2.8 KiB
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+PeBudgetSummaryDtoappend-cuối 5 field (2 construction site::946frozen-defaults 0/0/0/0/null ·:985live-fill) + D4 audit-note TRONGApplyBudgetSnapshotOnFinalizeAsync(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.csmới (Domain 11 props ApprovedBudget* + Config precision/maxlength + DTO appendBudgetFrozen=falsecuối positional-record + display-gate frozen/live 2-nhánh trong GetPurchaseEvaluationQuery + helperApplyBudgetSnapshotOnFinalizeAsyncgọ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) + backfillSql()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:TransitionAsyncKHÔNG SaveChanges nội bộ:537→ snapshot flush qua SaveChanges của caller (mirror ApprovedPrice pattern); khuôn backfill THẬT Mig 61/65 = plainSql()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]