Files
solution-erp/.claude/workflows/runs/2026-08-01-S169-bookend-open/sleep-drafts/reviewer--2026-05-q2.gist.draft.md
2026-08-03 10:14:49 +07:00

6.6 KiB
Raw Blame History

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ột SaveChangesAsync nhậ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ột SaveChangesAsync nhậ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 test khi 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 0bf6c7e 2 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-deterministic OrderByDescending(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 test recurring 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 mirror 21001E90... · commit cdfd542 · 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 #48 chú-giải KHÁC batch A — xem _lienfile-notes-batchB.md #5