6.6 KiB
6.6 KiB
reviewer/2026-05-q2 — gist
distill-gen: 1 source-verbatim: .claude/agent-memory/reviewer/archive/2026-05-q2.md (3 entry → 3 cụm) pointer-style: substring
TỔNG-HỢP (3-5 ý)
- Bề mặt lỗi là PHÉP ĐỌC NGÔN-NGỮ: "chú ý X" (anh gợi ý) bị đọc thành "BẮT BUỘC X" (chính sách) — em-main t2 tự ban luật xuyên dự-án không consent, anh bắt ở t4, luật ABANDONED; sinh hạng-mục kiểm MỚI Cat 6 authority-boundary (phân-biệt gợi-ý ⟂ mệnh-lệnh, gắn cờ mọi "BẮT BUỘC xuyên dự-án" nguồn tự-quyết).
- Gotcha #48: SQLite frozen clock — nhiều
Changelog.Add()cùng mộtSaveChangesAsyncnhận CÙNG timestamp ⇒OrderByDescending(CreatedAt).FirstAsync()không tất-định; bổ Cat 5: bộ lọc test phải phân-biệt bằng thứ khác ngoài mốc thời-gian (EntityType + Summary keyword). Bài về test bắt nguồn từ đặc-tính đồng-hồ của engine DB test — không xuất-hiện ở prod. - Phép chứng mirror 2 app nâng lên so SHA256 nguyên file (
21001E90...) — rẻ, không cãi được; 6 commit S26 giữ nguyên baseline 111 test = UI thuần không mua thêm rủi-ro hồi-quy; củng-cố luật ROI: spawn cho việc nặng xuyên tầng, em-main tự lo polish 50-100 LOC.
Entries
[cao] B6-A — S28: "chú ý X" bị đọc thành "BẮT BUỘC X"
- VIỆC: ghi lại quỹ-đạo phiên S28 dưới góc reviewer (thực tế em-main solo, KHÔNG có việc review nào).
- KẾT-LUẬN: t1 kết-luận ROI của RAG "ngắn hạn không đáng, dài hạn đổi chất" → t2 em-main TỰ BAN luật xuyên dự-án "ghi RAG mọi tương tác" khi chưa có đồng-ý của anh → t4 anh bắt lỗi, thu phạm-vi về kỷ-luật nội-bộ SOLUTION_ERP → t5 chốt quản-trị 3 lớp (4 nhóm mặc-định + danh-sách bỏ qua + tag schema bắt buộc
[lesson, phase-<N>, <bc>], phase ∈ {phase-9, phase-9plus, phase-10}, BC ∈ {contract, pe, budget, workflow, identity, form, infra}). Luật t2 ABANDONED. - BÀI-HỌC: thêm Cat 6 — kiểm ranh-giới thẩm-quyền: phân-biệt "anh gợi ý phương án X" (tham-khảo) với "anh chốt X" (mệnh-lệnh); gắn cờ mọi thứ dạng "BẮT BUỘC … xuyên dự-án" mà nguồn là em-main tự quyết. 5 nhóm kiểm cũ giữ nguyên, Cat 6 cộng thêm từ S28.
- BẤT-NGỜ: sai-phạm không nằm ở kỹ-thuật mà ở phép đọc ngôn-ngữ — một chữ "chú ý" biến thành chính sách; và reviewer phát-hiện theo lối HỒI-CỐ, tức lúc xảy ra không có ai chặn. → substring:"authority boundary"
[vừa] B6-B — S25 Plan AB: đồng-hồ đóng băng của SQLite
- VIỆC: ghi từ-khoá đúc kết sau đợt vá changelog (
cdfd542— PE chỉnh ngân-sách + trả-lại Người-chỉ-định có log). - KẾT-LUẬN: gotcha #48 — nhiều
Changelog.Add()trong CÙNG mộtSaveChangesAsyncnhận cùng dấu thời-gian ⇒OrderByDescending(CreatedAt).FirstAsync()cho kết-quả không tất-định trên SQLite; kèm rủi-ro lặp lại của chế-độ UAT bỏdotnet testkhi refactor BE > 100 LOC. - BÀI-HỌC: bổ vào Cat 5: bộ lọc trong test phải phân-biệt bằng thứ khác ngoài mốc thời-gian (EntityType + từ khoá trong Summary).
- BẤT-NGỜ: một bài về test lại bắt nguồn từ đặc-tính đồng-hồ của engine DB dùng trong test — thứ không xuất-hiện ở prod (SQL Server), chỉ lộ khi test đỏ ngẫu-nhiên. → substring:"cdfd542"
[vừa] B6-C — S26 Plan AG: PASS 0 issue, và bài ROI lặp lại
- VIỆC: review trước commit 3 chunk A+B+C (~25K token, 12 phép kiểm đối-kháng).
- KẾT-LUẬN: PASS 0 issue; commit
0bf6c7e2 file +346/−116 LOC, hai bản mirror SHA256 IDENTICAL (21001E90...); wire = useMemo gom nhóm lồng +<details>/<summary>2 tầng + lưu tập mở/đóng vào localStorage; 0 migration. 5 vòng polish AG2-AG6 sau đó em-main tự verify (SHA256 giống nhau + npm build 2 app +dotnet test 111/111), không spawn lại. - BÀI-HỌC: củng-cố luật phân-bổ: spawn reviewer cho việc nặng xuyên tầng (~370 LOC + 4 sub-agent phối hợp), em-main tự lo vòng polish 50-100 LOC.
- BẤT-NGỜ: phép chứng "2 app giống nhau" nâng lên so SHA256 nguyên file thay vì đọc diff — rẻ và không cãi được; cả 6 commit S26 giữ nguyên baseline 111 test = thay đổi UI thuần không mua thêm rủi-ro hồi-quy. → substring:"21001E90"
Phụ-lục token (coverage)
(chép TRỌN token-list section reviewer/2026-05-q2 của proposal curator — lưới coverage-diff)
- gotcha#:
#48(SQLite frozen clock tie-break — mô-tả đầy đủ: "Multi-Changelog.Add same SaveChangesAsync transaction non-deterministicOrderByDescending(CreatedAt).FirstAsync()") · dải nền "Foundation gotchas #17-#48" (header) - surprise (nhãn nguyên-văn): "Rule cũ ABANDONED: 'RAG ghi mọi tương tác mandatory' S28 t2 over-reach" · "t4 bro caught mistake scope-down về SOLUTION_ERP self-discipline" · "em main t2 implicit interpret 'chú ý X' (bro suggestion) AS 'MANDATORY X' (em policy decision)" · "Reviewer perspective về S28 trajectory (em main solo, KHÔNG actual review work)" · "UAT skip
dotnet testrecurring risk khi BE refactor > 100 LOC" - guard: Smart Friend guard ("active S28+ cho Plan B Contract V2 wire pre-commit spawn (mandatory heavy diff > 50 LOC cross-stack)") · Cat 6 — Authority boundary check (MỚI) · Cat 5 bổ-sung "test filter discriminator beyond timestamp (EntityType + Summary keyword)" · 5-category checklist baseline (Wire BE + Schema + Security + Code quality + Test) UNCHANGED · tag schema mandatory
[lesson, phase-<N>, <bc>]· "Cross-module security validation mirror pattern preserved" (header) - root-cause: "scope creep từ project-local → cross-project KHÔNG bro consent là authority boundary violation" ⇐ "implicit consent ('chú ý' / 'có thể') KHÔNG = explicit mandate ('BẮT BUỘC' / 'mandatory')"
- file:line: 0 token file:line (file này chỉ dẫn tên hàm/commit:
ApplyReturnModeAsync,cdfd542) - định-danh khác: commit
0bf6c7e(2 file +346/−116) · SHA256 mirror21001E90...· commitcdfd542·dotnet test 111/111(baseline 111 preserved, 6 commit S26, 0 prod regression) · spawn ~25K · phase enum {phase-9, phase-9plus, phase-10} · BC enum {contract, pe, budget, workflow, identity, form, infra} · gotcha#48chú-giải KHÁC batch A — xem_lienfile-notes-batchB.md#5