12 KiB
implementer-backend/2026-05-q3 — gist
distill-gen: 1
source-verbatim: .claude/agent-memory/implementer-backend/archive/2026-05-q3.md (5 entry ## trên đĩa → 4 cụm; bản draft đầu ghi "6" — không tái-dựng được, ring4 T-3 vá @S170)
pointer-style: substring
TỔNG-HỢP (3-5 ý)
- Nhận/từ-chối việc là bài học 2 chiều đối-xứng: H1 ca nhận-rồi-vỡ (E3 tự dừng giữa chừng đúng chỗ judgment call; phải
stashWIP em-main vì song-song cùng lớp BE) ⟂ H2 ca lẽ-ra-nhận-mà-không-được (2/8 task hợp-lệ nhưng registry rỗng ⇒ em-main forced solo, thiệt ~30 phút) — ngưỡng giao việc = độ mơ-hồ spec >20%, không phải số file. - Song-song trên cùng một lớp code đẻ chi-phí ẩn ⇒ luật: chunk tuần-tự A→B→C khi cùng chạm BE, KHÔNG parallel.
- Governance S28: cấm tự-cho-phép đặt luật xuyên dự-án (bro bắt tại trận); luật cũ phải khai tử công-khai (ABANDONED) thay vì để trôi — luật zombie hại hơn không có luật; pattern proven ≥2× mới đề-cử Layer B.
- ⚠️ FIDELITY-FLAG (reviewer ĐÃ chấm @S170): 4 tên cờ trong claim Pattern 7 đều 0-hit src/Backend, VÀ con số "4×" cũng CHƯA KIỂM — "4×" suy từ đếm đúng 4 tên vừa bị bác (3 tên đổ về ~3 migration), KHÔNG có chứng độc-lập; đừng cite cả tên lẫn số như fact. Ý giữ được ở dạng không mang số: "Pattern 7 (per-NV admin opt-in) lặp qua chuỗi Mig 28→31 (số lần chưa kiểm)".
Entries
⚠️ FIDELITY-FLAG — reviewer CHẤM XONG @S170 (sub-reviewer-sleep-fidelity-S170.md §P1), bắt buộc mang theo mọi trích-dẫn Pattern 7 từ file này: verbatim (S29 wrap) khai "Pattern 7 per-NV admin opt-in flag (Mig 29 AllowDrafterEdit + Mig 30 AllowApproverEditSection1 + Mig 31 AllowEarlyApprove + AllowDelegate) đã proven 4×". Phán từng tên (2 dụng-cụ độc-lập: grep src + git pickaxe toàn lịch-sử):
AllowDrafterEdit= tên viết sai, lai-ghép 2 cờ thật:AllowDrafterSkipToFinal(Mig 29 → bảngUsers) +AllowApproverEditDetails(Levels — và là approver, không phải drafter);AllowApproverEditSection1= trôi từ-vựng UI củaAllowApproverEditBudget(Mig 30 — đúng 1 cột duy nhất);AllowEarlyApprove= tên sai nhưng CÓ đối-ứng ngữ-nghĩa 1-1 =AllowApproverSkipToFinal(Mig 31);AllowDelegate= MA HOÀN TOÀN — 0 đối-ứng, pickaxe 0 commit toàn lịch-sử (chưa từng được viết ra dòng code nào;src/Backendkhông có khái-niệm uỷ-quyền duyệt). Con số "4×" của claim CŨNG CHƯA KIỂM (suy từ đếm 4 tên trên). Số đo control dươngAllowApproverSkipToFinal= 54 file với bộ lọc trừ/obj/+/bin/(raw = 86; còn 12 khi trừ thêm*.Designer.cs+ModelSnapshot — 0-hit của 4 tên vững dưới cả 3 bộ lọc); control âm tên bịa = 0 — thước còn răng. Tên Mig thật:20260513114505_AddAdvancedOptionsToApprovalWorkflows(28) ·20260513130144_RefactorAdvancedOptionsToPerLevelAndDrafterUser(29) ·20260513160703_AddAllowApproverEditBudgetToLevels(30) ·20260514160124_RefactorSkipToFinalToApproverLevel(31).
[cao] H1 — S29 wrap: 5 lần được gọi, và bài học về chạy song-song
- VIỆC: phiên bận nhất — Plan CA Chunk B (~10K) + Plan B 4 chunk (A2 Mig 32 ~25K · C Mig 33 ~25K · D FE ~12K · E3 dừng giữa chừng).
- KẾT-LUẬN: A2 phải
stashphần đang làm dở của em-main (ContractWorkflowService.cs) mới build sạch được — vì em-main và vai cùng sửa BE song song. E3 (FE Section 5 V2) tự dừng đúng chỗ phải phán-đoán ("checkContractDetailtype") và trả lại cho em-main. Đúc 3 luật: (1) khi cùng chạm BE thì chunk phải tuần-tự A→B→C, không song-song; (2) tính-năng FE phức-tạp cần mở rộng type + thêm component thì em-main tự làm đáng tin hơn khi độ mơ-hồ của spec >20%; (3) Pattern 16-bis được củng-cố lần 2. - BÀI-HỌC: song-song trên cùng một lớp code đẻ ra chi-phí ẩn (mẹo
stash) — nhanh trên giấy, chậm khi chạy. Và ngưỡng giao việc nên tính bằng độ mơ-hồ của spec, không bằng số file. - BẤT-NGỜ: vai tự dừng giữa nhiệm-vụ thay vì đoán bừa — biến "không đủ dữ-kiện" thành hành-động hợp-lệ, và ghi lại đúng chỗ dừng để người sau nối tiếp. → substring:"stash em main WIP"
[cao] H2 — S27 hồi-cứu: tự chấm điểm việc mình KHÔNG được gọi
- VIỆC: dựng bảng 8 task của S27, đối chiếu từng dòng với tiêu-chí nhận/từ-chối.
- KẾT-LUẬN: 6/8 xác-nhận "em-main tự làm là ĐÚNG" (curate MEMORY = phán-đoán §6.5 giữ-hay-cắt → #1 · dashboard = #7 chưa có tiền-lệ + #2 · viết docs 421 dòng = #2 · sửa lỗi Qdrant = #4). 2/8 lẽ ra giao được: A3.1 viết 5 script PS (Case 2) và F2 sửa
model:inheritở 4 file agent (Case 1) — nhưng registry không nạp được nên em-main buộc phải tự làm; thiệt-hại ước ~30 phút + mất kỷ-luật mirror. Đúc Pattern 20 (bộ 5 script PS start/stop/status/dashboard/boot: cùng kỷ-luật ASCII, cùng cấu-trúcWrite-Host, cùng khuôntry-catch). - BÀI-HỌC: hồi-cứu phải chấm từng dòng, không chấm tổng — nhờ vậy mới tách được "quyết đúng" khỏi "quyết đúng nhưng vì lý do sai" (2 ca này em-main đúng kết-quả nhưng nguyên-nhân là hạ-tầng hỏng, không phải phán-đoán).
- BẤT-NGỜ: cơ-hội bị mất không do ai quyết sai mà do registry rỗng — tức lỗi hạ-tầng lặng-lẽ biến thành lỗi phân-công, và chỉ lộ ra khi có bảng hồi-cứu. → substring:"Net loss"
[vừa] H3 — S28: 5 điều tự áp sau khi bị bắt lỗi
- VIỆC: ghi lại governance Layer A dưới góc nhìn của vai.
- KẾT-LUẬN: (1) pattern đã chứng ≥2 lần thì đủ tư-cách đề-cử lên Layer B; (2) tag bắt buộc
[pattern, phase-<N>, <bc>]; (3) quy-ướcsource_path=solution_erp/pattern/<topic>-<date>; (4) cấm tự cho phép mình đặt luật xuyên dự-án — đúc từ ca t4 bro bắt tại trận; (5) luật cũ "mọi tương-tác đều phải lưu" BỊ BỎ. - BÀI-HỌC: phạm-vi quyền của một vai phải thu về chính dự-án của nó; và luật cũ nên khai tử công-khai ("ABANDONED") thay vì để trôi — luật zombie còn hại hơn không có luật.
- BẤT-NGỜ: chính vai này ghi nhận mình quên mất luật cũ rồi mới phát-hiện luật đó đã bị bỏ — quên đúng thứ đáng quên, nhưng chỉ biết là "đúng" sau khi tra lại. → substring:"ABANDONED"
[thấp] H4 — Log curate + baseline
- VIỆC: ghi mốc: dồn 12 entry S21→S24 sang
archive/2026-05-q1.md; và mốc khởi-tạo 2026-05-11. - KẾT-LUẬN: MEMORY 38.8 KB → mục-tiêu ~22-24 KB, giữ nguyên khối Pattern 1-19; lúc khởi-tạo vai đã nạp sẵn 5 (thực tế liệt-kê 6) pattern nền tích-luỹ S1-S20, chưa làm gì, đã bật sẵn cơ-chế tự từ-chối theo phạm-vi.
- BÀI-HỌC: mỗi lần dồn kho phải ghi nguồn → đích + kích-thước trước/sau + thứ giữ lại thì lần sau mới truy được.
- BẤT-NGỜ: vai bật quy-tắc từ-chối ngay từ lúc chưa làm việc nào — ranh-giới được cài trước, không phải rút ra sau khi vỡ. → substring:"2026-05-q1"
Phụ-lục token (coverage)
- Pattern#:
7per-NV admin opt-in (tên cờ SAI — xem FIDELITY-FLAG) ·12-biscross-module cookie-cutter ·16-bis4-place mirror (reinforced 2×) ·20MỚI (bộ 5 script PS mirror) · nền "5 patterns S1-S20" (liệt-kê 6 mục) - criteria#:
#1phán-đoán giữ-hay-cắt (§6.5) ·#2thiết-kế UX / viết docs ·#4chuỗi suy-luận sửa lỗi ·#7lần đầu, chưa tiền-lệ · Case 1 (n file sửa cơ-học giống nhau) · Case 2 (cookie-cutter mirror) - surprise: "E3 stopped mid-task ... STOPPED at 'check ContractDetail type' judgment call" · "stash em main WIP
ContractWorkflowService.csđể build verify clean (em main + Implementer parallel touch BE → race condition trick)" · "Forward SEQUENTIAL chunks A→B→C khi cùng touch BE, NOT parallel" · "em main solo more reliable than Implementer khi spec ambiguity > 20%" · "2/8 task lẽ ra delegate được ... nhưng registry empty → em main forced solo" · "Net loss ~30 phút" · "registry KHÔNG load (per pitfall VIPIX #1+#2)" · "bro caught self-authorize cross-project rule mistake" · "Quên rule cũ 'mọi tương tác mandatory store' — ABANDONED" · "Implementer = busiest agent S29 với 5 spawn" - guard:
git stashphần WIP trước khi build verify · chunk tuần-tự khi cùng chạm BE · ngưỡng spec ambiguity 20% để chuyển về em-main · tự-dừng khi gặp judgment call · tag schema bắt buộc[pattern, phase-<N>, <bc>]· cấm tự-cho-phép luật liên-dự-án · pattern phải proven ≥2× mới đề-cử Layer B · verifyLayout staticMapkhi page move/route enhance (vế lệnh-làm của Pattern 16-bis — ring4 T-1 vá @S170: rơi khỏi draft đầu) - root-cause: em-main + vai cùng sửa BE song song ⇒ cây làm việc bẩn ⇒ build verify không sạch ⇒ phải
stash· registry không nạp ⇒ không spawn được ⇒ 2 việc hợp-lệ bị dồn cho em-main · từ-vựng UI-section dùng thay tên cờ trong code ⇒ 3/4 tên = drift của cờ thật, 1/4 (AllowDelegate) = ma 0-đối-ứng (xem FIDELITY-FLAG) - file:line / định-danh:
ContractWorkflowService.cs(WIP bị stash) · Mig 32 (+column FK Restrict + IX + Configuration +DbInitializerSeedSampleContractWorkflowV2) · Mig 33ContractLevelOpinions(entity + Mig + Config + DbSet +Contract.cs+LevelOpinionsnav) ·ContractCreatePage.tsx×2 (88 LOC) · 4 master page +App.tsx(+5 route) +menuKeys.ts(+5 keyCatalogs*) ·pattern_master_page_mirror.md·archive/2026-05-q1.md· script PSstart/stop/status/dashboard/boot - số-đo: 5 spawn S29 · ~10K + ~25K + ~25K + ~12K token · 948 LOC mirror / 6 file (phương-pháp-chứng của nguồn — ring4 T-2 vá @S170: 4 master pages mirror fe-admin→fe-user byte-identical SHA256 + build PASS 0 TS err) · MEMORY 38.8 KB → ~22-24 KB · 12 entry dồn kho · setup 2026-05-11 · token rơi vét lại (T-4): Plan AG · Pattern 19
- 🔬 disk-check hôm nay (S170, có 2 control):
AllowApproverSkipToFinal= 54 file (bộ lọc: trừ/obj/+/bin/— raw 86; 12 khi trừ thêm Designer/Snapshot) (control dương; pickaxe 5 commit) ·AllowXyzKhongTonTai= 0 (control âm) ·AllowDrafterEdit/AllowApproverEditSection1/AllowEarlyApprove/AllowDelegate= 0 / 0 / 0 / 0 (grep) + 0 commit pickaxe toàn lịch-sử · cột thật:AllowApproverEditDetails·AllowDrafterSkipToFinal→Users·AllowApproverEditBudget·AllowApproverSkipToFinal· Mig thật:20260513114505_AddAdvancedOptionsToApprovalWorkflows·20260513130144_RefactorAdvancedOptionsToPerLevelAndDrafterUser·20260513160703_AddAllowApproverEditBudgetToLevels·20260514160124_RefactorSkipToFinalToApproverLevel