Files
solution-erp/.claude/agent-memory/reviewer/MEMORY.md

119 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Reviewer Agent — Persistent Memory
- **S187 (08-10) STAGE-C plan-review YC-023 Duyệt-HĐ (artifact `runs/2026-08-10-S187-duyet-hd-tu-khkk/sub-plan-review-fable.md`) — verdict 12/12 claim ĐỨNG · 3 phát hiện MỚI · 11 wave · 12→9 câu:** 🔴 **Bài đắt nhất — review PLAN phải check KHỚP-KHUÔN-CHÉO:** FE invest chọn mirror `KhkkWorkflowPanel` (UI) nhưng đề xuất DTO khuôn **PE precompute** — 2 shape NGƯỢC NHAU (panel KHKK tự-suy cây-thô, header `:19-25` TỰ KHAI "KHÁC PE Ở CHỖ ĐẮT NHẤT"); cả 3 bản trước (2 invest + style-review 7-flag) đều không bắt ⇒ khi ai nói "mirror X + data theo Y", MỞ HEADER X xem nó ĂN shape gì. **0-hit DTO-gap tin được nhờ control-dương cùng lệnh trên module anh em** (PE có hit :158/:186). **Tách wave theo MỐI-CHẶN không theo tầng:** W3-seed (chặn roster-owner) ⟂ W4-guard (chặn UX-dialog) — gộp = wave nghẽn kép; wave "bất biến mọi nhánh câu-owner" (gỡ-bom + DTO) lôi lên chạy NGAY. **Ẩn menu có thể 2 TẦNG** (set `ADMIN_HIDDEN_KEYS` + prefix-rule `startsWith('Ct_')` `:248`) — grep 1 tầng là sót nửa việc gỡ. Thước-hỏng: `grep -E '^\d{14}'` MSYS trả 0 im lặng (GNU grep không \d) ⇒ dùng `[0-9]` hoặc Glob đếm. Tag `[s187, plan-review, khop-khuon-cheo, tach-wave-theo-moi-chan, an-menu-2-tang]`
- **[→ `archive/2026-08.md` §@S180-N2-N3-5lane — verbatim 5 entry, probe 5/5 + control-âm 0] S180 (08-07) N2 + N3 lane C/D/E/F (digest gộp):** (digest nén @S188 E2 — verbatim + digest cũ đủ ở archive, đọc on-demand).
- **S182 (08-08) lens HOÀN-CHỈNH-VẬN-HÀNH + tổng hợp WAVE-PLAN FINAL `[LEAD SEED ON-BEHALF — nguồn `runs/2026-08-08-S182-khkk-awf-mirror-ncc/sub-review-2-fable.md` 32.326 B; entry S182 sẵn có chỉ khai đĩa `sub-review-1-fable` + `sub-reviewer-precommit`]`:** review **không dừng ở diff** mà dựng trọn đường ship: W4 test-gate (số canonical đổi ⇒ update **DUY NHẤT** `docs/STATUS.md` row test, B1) · W5 **commit MỘT phát** BE+FE+tests · **cicd 4-chân** với **control-âm bắt buộc** (bundle cũ 0-hit; *"eoffice: hash GIỮ nếu bỏ W2e / ĐỔI nếu làm — **đo, không suy**"*) · acceptance PROD **đọc-only** (CẤM bấm "Tạo phiên bản mới" trên prod). 🔴 **Rollback không đối xứng — phải khai:** 0-mig nên revert sạch phần MÁY, nhưng **revert W1a = bom per-type TÁI VŨ TRANG** ⇒ sau revert CẤM "Tạo phiên bản mới" mọi panel type-10. Data ở lại là **hợp lệ + khai rõ** (changelog W1c = audit-history · v02+ = ratchet vô hại, pin by-Id). Accepted-risk ghi thẳng: race 2-admin-cùng-Code → 500 thô (UNIQUE đỡ data, **không silent-dup**). Tag `[s182, review-2, review-den-duong-ship, control-am-bat-buoc, rollback-khong-doi-xung, accepted-risk-khai-thang]`
- **S185 (08-09) review CHECKLIST 21-item (YC-017 email-adap, artifact `runs/2026-08-09-S185-email-adap-pipeline/sub-review-checklist-fable.md`) — `PASS_WITH_FIXES` 9MAJ/4m:** review CHECKLIST ≠ review code — đòn đắt nhất = **đối-chiếu TỪNG DÒNG bảng-nợ §2.1 → checklist §3**: ≥5 dòng BIẾN MẤT không disposition (1 dòng "CHỜ-ANH" rơi im lặng). **File-đích tự khai guard thắng sổ-lead**: `tien-kiem-cua.ps1:4-5` "phải qua W3b trước, đang chờ owner (P1)" ⟂ HANDOFF:7 NEXT-em "tự chạy" — xung đột 2 nguồn uỷ-quyền phải hoá giải TRONG spec, không được để Opus tự chọn. **Invest chép số cũ từ report thay vì đo tươi** → ring2 thật 30.781B ĐÃ VỠ cap (không phải 96,8%) — stale chiều NGƯỢC làm item KHẨN trông như thường. **Harvest nợ bằng grep debt-marker hụt nợ không-marker** ("PENDING"·"không máy nào canh") — 2/2 report mở thêm đều dính. **LT3 bậc-2 (đảo-ngược-được?) = thước routing rẻ** → demote 1 W khỏi CHỜ-ANH. **Carry đa-vế gỡ phải đóng TỪNG VẾ** (evidence lẫn trio khác trio). Thước-hỏng của TÔI: `cd` AI_INFRA rồi chạy `git ls-files` → đo nhầm repo (cwd-trap, warning path lộ) — compound-cd rồi git = tự kiểm repo-root trước khi tin 0-hit.
- **[→ `archive/2026-08.md` §@S182 — verbatim 2 lượt, probe 7/7 + control-âm 0] S182 (08-08) YC-013 KHKK 8-panel — lượt SPEC `2C/5M`, lượt DIFF pre-co:** (digest nén @S188 E2 — verbatim + digest cũ đủ ở archive, đọc on-demand).
- **[→ `archive/2026-08.md` §@S180 — verbatim, probe 10/10 + control-âm 0] S180 (08-07) LANE A/6 GĐ-0+GĐ-1 (đĩa `runs/…-S180-adap-upgrade-pack-phased/sub-n3-lane-a-gd01.md` 57 KB):** 🔴 **"0 hit" ĐÚNG THEO LUẬT vẫn là LỖ THẬT** — `_index` thiếu **24/69** thư (lead giao "4"); `to=se` **23/23 sạch**`to=all-fit` 22 có/20 thiếu; luật `:7` trỏ `COMMS-LEDGER``find "*COMMS*"`=**0 trong SE** (control `*ledger*`=4) ⇒ **sổ mà luật trỏ tới KHÔNG TỒN TẠI**; S153 phán dương-giả = đúng cho câu-hỏi CŨ. ⇒ gặp 0-hit phải hỏi thêm **"sổ đó có tồn tại không"** · **phân-họ regex 160/159, lệch 1 vì `S57bis`** ⇒ luôn cộng lại đối-chiếu tổng · **`CLAUDE.md` quy-ước nhật-ký khớp ≤64/159 đĩa** · **"single source" tự-xưng ≠ chuẩn** (bảng-dịch; 3 phép thử tiên-đoán/phủ-sóng/hướng) · **số-trong-chú-thích trôi** (`hmw.js` "11 class" ⟂ đĩa **12**).
- **[→ `archive/2026-08.md` §@S179 — verbatim] S179 (08-07) C7 re-review sau vá — `PASS-WITH-8`, 3 MAJOR:** **2/3 MAJOR là lỗi TRONG CHÍNH BẢN VÁ vừa pass 12/12 acceptance** — vì acceptance đo **HÌNH-DẠNG chuỗi, không đo HÀNH-VI**. `cut -c4-` đẻ path RÁC (rename 1 dòng `R old -> new`) · ba-chấm→hai-chấm = **regression có điều-kiện** (thủ phạm thật = `git diff` mù untracked, lead gán sai tội) · mỏ-neo `:112` **tự-vô-hiệu ngay lúc viết** ⇒ neo TÊN SELECTOR không neo số dòng · census "8/9" thiếu 3 ý đóng im lặng.
- **[→ `archive/2026-08.md` §@S171 — verbatim] S171 (08-04) 3 lane lens ĐỐI-KHÁNG, cả 3 chết hết-giới-hạn nhưng ĐĨA CỨU 74.070 B:** **cite sai ≠ claim sai** (`WorkflowService.cs:552` trỏ hụt mà claim vẫn HELD — phải tách 2 lớp) · **A-6 kiểm SAI KHOÁ ⇒ lỗ thủng NGAY TRONG hàng rào R-4** · **N-3 HELD về THỨ TỰ nhưng lệch số hình-thức** (template-literal đếm động) — 🔴 chính bẫy này lead tự dẫm sau đó ⇒ *có thước đúng trong tay ≠ sẽ dùng thước đúng*.
- **[→ archive/2026-07.md §@S166-K5-curate · §@S167-K7-curate · §@S167-K7-curate-2 — verbatim] S166 K4a/b/c/K5 + S167 K7 (digest gộp):** mỏ-neo XUYÊN FILE · tham-số-trang-trí · **mỏ-neo tự-vô-hiệu** ⇒ đo **2 THẾ GIỚI HEAD ⟂ cây** · **cây phình giữa review** ⇒ re-đo `--stat` TRƯỚC verdict · HIGH-nằm-ở-git (`--porcelain … '^??'`) · bất-biến Σ do CẤU TRÚC · **phép-đo-rẻ-nhất ở file RÁC của lane khác** · chân-lý-RỖNG phải khai rỗng · tiền-lệ đo ở BASE · **flake chỉ lộ LƯỢT ĐẦU, `-v q` NUỐT assert** · **1 số đóng 2 câu hỏi** · **prod probe sửa số của chính comment** · **răng phủ NỬA** (`await` tuần tự ⇒ ca ĐỒNG THỜI hở) · **SHA-identical ≠ route-identical**.
- **[→ archive/2026-07.md §@S168-curate + @S168-K8 — verbatim, ĐÃ PROBE] S168 gate GĐ3-D (Panel-3 ×3 trang) + K8 Lines-editor KHKK — PASS-WITH-FLAGS 10 / 8, 0 blocker:** **khuôn dùng-lại phải ĐO LẠI theo HOST** (`max-h`/`sticky` hiệu-chỉnh cho host CŨ ⇒ 2 thanh cuộn lồng) · **class chết ÂM THẦM khi đổi kiểu cha** (`self-start`/`lg:sticky`) — tsc+build 0 bắt, chỉ đọc CSS-chain · `{!selectedId && <X/>}` = unmount ⇒ **mất state thuần** trong khi `localStorage` sống · **1 con số đóng 2 câu hỏi** (642 = 639 + 3 Fact) · **quy-ước-của-chính-file là thước rẻ nhất** (mọi changelog điền `EntityId`, chỗ mới là chỗ DUY NHẤT trống ⇒ MAJOR bằng 1 grep) · **`<select>` controlled NUỐT giá-trị đã lưu** khi option vắng · test phủ NỬA vế `if`. Thước hỏng: python Windows đọc JSON phải khai `encoding` · `while read` bỏ dòng CUỐI khi thiếu newline · `$?` sau `| tail`.
- **[→ `archive/2026-08.md` §@S170 — verbatim] S170 GATE Fidelity `/sleep-recovery-memory-l2` — PASS-WITH-FIXES:** **tên-cờ-bịa sống 4 hiện-vật** (0-hit cần dụng-cụ THỨ HAI `git log --all -S` mới nâng nghi→chốt) · **nhãn phủ TÊN mà không phủ CON-SỐ** ⇒ 'giữ 4 lần, bỏ tên cờ' = giữ khẳng-định + vứt CHỨNG-NHÂN (Goodhart) · **census tự-xưng đủ** ('4 LỖ') thiếu 4 lỗ · `pointer-style: substring` phải CHẠY THỬ (1/10 chết vì hoa-thường) · **lưới token in ĐẦU-DÒNG không in lân-cận** ⇒ mega-line gán FAIL cho Run PASS.
- **[→ archive/2026-07.md §@S166-curate + §@S167-K7-curate-2 — verbatim; 2 nhãn `S161-W1`/`S152-D2` 0-hit nên GIỮ tên ở đây] S167-K6 · S164/S165-K3 · S164-K1 · S162 · S161-W1/W2 · S159-đợt5 · S15:** (digest nén @S188 E2 — verbatim + digest cũ đủ ở archive, đọc on-demand).
> **Persistent diary cross-session.** Auto-injected first ~200 lines at spawn (L1 HOT).
> Update BEFORE every stop. Tiered Memory v1: L1 HOT cap ~17KB (hook 24.4KB read-limit) · L2 `archive/` on-demand · L3 RAG `search_memory` just-in-time. Keep entry ≤ 1.5K chars (gotcha #53).
> Full verbatim history pre-S40 → git `d2f52ba` + `archive/2026-05-q1..q2.md`; S51→S76 detail → `archive/2026-06.md` (S69/S70/S71/**S80** curate). Archive map: `archive/_INDEX.md` + per-period `.gist.md`.
- **[→ archive/2026-07.md @S161-curate] S160 (07-29) CHỐT-CUỐI 13-fix:** fix áp NỬA spec = dư-lượng (soi CẢ FILE khi nhận 'đã fix') · anchor-list là artifact RIÊNG phải sync · verify NGƯỢC premise · owner để-mở ⇒ finding MOOT-đúng.
## 📁 Area memory (L2 on-demand — Read khi review vùng tương ứng)
- [S62 PE budget soft-warning](project_s62_pe_budget_soft_warning.md) — hard-block→soft-warning, submit-guard intact (additive-only).
- [Wire/mirror claim verification anchors](feedback_wire_claim_verification_anchors.md) — sha256 twin-file · `git diff -U0` isolate true-adds · `allowNegative` bleed check · guard-still-intact grep.
- **[→ archive @S161-curate] S160 review SPEC-BỘ KHKK:** review SPEC ≠ review CODE · seeder-grant kiểu insert = NO-OP 403 im lặng ⇒ acceptance đo CỜ không đếm ROW · acceptance 'PASS SẴN' = 0-bit · choke-point 'DUY NHẤT' sai vì gán QUA BIẾN (#81).
- **S89 trio** ([sectionB](project_s89_pe_sectionb_review.md) · [endsBeforeCeo](project_s89_pe_endsbeforeceo_plan_review.md) · [finalize-note](project_s89_finalize_note_plan_review.md)) — authz-lens ≠ concurrency-lens; FE 4 render-site, plan sót 2.
- **S101 H18/H19 WF2 + LANE-C:** content-hash ≠ commit-SHA (hex strip/no-strip) · exact-token sweep miss paraphrase → widen concept-phrase. → `archive/2026-07.md`.
- [S103 H20 + crystallized-backfill](project_s103_h20_crystallized_backfill_review.md) — cảnh báo multi-axis phải nằm trong OUTPUT của script, không chỉ trong doc.
- [S111 PE sign-off design (schema/history)](project_pe_signoff_history_schema_review.md) — opinion-history append-only; REJECT version-col (phá UNIQUE + UPSERT).
- **PE per-hạng-mục ×5** ([1](project_pe_multiwinner_perhangmuc_review.md) · [2](project_s114_pe_multi_ncc_perhangmuc_financial_review.md) · [3](project_pe_multi_ncc_perhangmuc_specreview.md) · [4](project_s114_multi_ncc_perhangmuc_impl_review.md) · [5](project_pe_negative_quote_correctness_review.md)) — derived source-of-truth: re-derive MỌI write-path KỂ CẢ Delete; grep field-NGUỒN không chỉ field-đọc.
- [S113 Supplier import v2](project_s113_supplier_import_v2_review.md) — "filter added" ≠ "drafts hidden": grep-all-consumer + create write-path.
- [S118 Procurement master-access seeder](project_s118_procurement_master_access_review.md) — menu-flag grant ≠ API capability; `[Authorize]` trần = mở cho mọi user.
- [S123 governance 4-change](project_s123_governance_4change_review.md) — citation-trap gen-2: vá 1 CLASS phải grep MỌI matcher cùng-lớp TRONG diff.
- [S147 Project whitespace-dupe merge](project_project_dupe_merge_verify.md) — "FK Projects" trong COMMENT ≠ FK vật lý; INNER-join + filter = biến mất im lặng.
---
## 🎯 Role baseline
Adversarial pre-commit reviewer SOLUTION_ERP. Read-only verify + live curl prod UAT (`*.solutions.com.vn`). Tools: Read, Grep, Glob, Bash (curl + git diff + sqlcmd read) + 5 RAG MCP. Skills: `dependency-audit-erp` + `contract-workflow` + `permission-matrix`. Output: PASS/FAIL + concrete issues file:line. NEVER write code.
---
## 🚨 Recurring bug patterns — CHỈ phần KHÔNG có trong system-prompt
> #44 · #43 · #42 · #41 · #39 · #17 và "Wire BE claim" đã nằm trong system-prompt (Category 1+2) — không chép lại ở đây.
- **#70 FE absolute-set stale-echo race** — N field cùng-cột share 1 mutation + echo sibling từ server-snapshot + `invalidate()` không await ⇒ lưu 2 ô liên-tiếp đè mất. Window mở **SAU** `isPending=false`, KHÔNG lúc in-flight. Catch: đếm field-cùng-cột share mutation + check invalidate awaited.
- **#71 enum proxy-predicate pollution** — thêm enum value vào entity dùng-chung → UI/guard phân-loại theo PROXY-predicate (`supplierId===null`) thay vì enum tường minh ⇒ value mới lẫn nhầm + false-pass guard. Catch: grep mọi field-proxy predicate; build-verify TỪNG app.
- **Cross-module security mirror (S29)** — mirror entity/Command cross-module hay focus data-shape mà MISS security guard. Validate `aw.ApplicableType == ExpectedType` ON Create TRƯỚC khi instantiate (khuôn `PurchaseEvaluationFeatures.cs:62-77`) — FK Restrict chỉ check Id-tồn-tại, KHÔNG check type ⇒ Drafter forge `approvalWorkflowId` module khác = pin sai-scope. MAJOR.
---
## 📋 Checklist + anti-patterns + Smart-Friend guard
**KHÔNG chép ở đây** — 6 category, 6 anti-pattern và Smart-Friend guard đã nằm NGUYÊN VĂN trong system-prompt của vai, auto-inject mỗi spawn. Chép lại = 2 bản, và bản ở đây sẽ stale trước (đã từng: dòng cũ ghi baseline test `354` trong khi canonical đã trôi xa). Chỉ giữ 2 delta không có trong system-prompt: (a) **baseline test = `docs/STATUS.md` canonical, KHÔNG chép số**; (b) **Cat-6 chỉ áp cho văn hướng RA NGOÀI** — STATUS/HANDOFF/gotchas/diary giữ lối nén, đừng ép ngữ pháp.
---
## 🧠 SOLUTION_ERP review essentials (S80 verified — re-ground từ docs/STATUS.md canonical)
- **Tests · gotchas · migration · endpoint · bảng = SỐ CANONICAL ở `docs/STATUS.md`** (B1 derived-trỏ-canonical — KHÔNG chép số vào sổ này, chép là stale sau 1 phiên; mốc @S161 để nhận diện độ trôi: test 566 · gotcha 83 · Mig 69 · 96 bảng). Test phải TĂNG khi thêm feature (§7); Phase 9 UAT exception (`feedback_uat_skip_verify`).
- **Identity password ≥12 chars** (reject 11-char). Test creds: admin `admin@solutions.com.vn/Admin@123456` (full) · UAT `nv.test@solutions.com.vn/TestUser@123456` (Drafter CCM).
- **Prod:** api/admin/eoffice.solutions.com.vn. Bundle live admin `CsJetgZH` / user `BVS0ApIm` (Run #330). **Pin:** MediatR `12.4.1` (flag `Version="14`) · Swashbuckle `6.9.0` · Node CI `20.x`.
- **Conventions:** `docs/rules.md` (§1.1 outward writing, §3.9 mirror 2 FE, §5.2 commit, §6.5 docs narrative, §7 test timing, §2.8 pin).
---
## 📅 Recent activity (compressed — full verbatim → `archive/2026-06.md` + `archive/2026-07.md` via `archive/_INDEX.md`)
- **[→ archive @S126/@S134] S123·S124·S125·S129·S131 (digest):** follow-up phải GIỮ con-số source · re-derive từ raw (fencepost) · writer-only = NỬA-VÁ · do-token trap ⇒ re-Read full + sibling-test 2-CHIỀU · 🔴 ghi diary TRƯỚC return + vá-1-lớp phải grep MỌI matcher cùng-lớp.
- **Digest S93→S117 + June-2026 (verbatim → `archive/2026-07.md`):** code-gate re-derived denom · default-flip byte-mirror SHA ×2 · persist-claim cần reader-side + tracked + 0-drift · outward-claim 'đã sửa X' phải cat X trước gate · claim-về-code grep lại kể cả reword · verify EACH regex-alt by-hand · merge-distill đẻ false-specificity ⇒ QUALITY gate SAU presence · sha = self-declared NOT recompute · TRACKED = check-ignore ≠ ls-files · menu-hide ≠ API-lock.
- **S92 PROD-security hide 5 menu-groups admin-only — PASS (1 note):** → [project_s92_admin_only_modules_revoke.md](project_s92_admin_only_modules_revoke.md).
- **[→ archive/2026-07.md @S128/@S134] S112·S126·S127·S128 (digest):** derive guard từ ENDPOINT authz, self-flip ≠ external-accept · AGGREGATE cumulative KHÔNG vào outward artifact · direction-of-error quyết mức lỗi outward + brute-force sha-variant TRƯỚC phán tamper · hedge broadcast bằng MỞ config THẬT.
---
## 🔄 Curate trigger
- Hook-cap **>17.1KB** (24.4KB read-limit) → move recent → L2 `archive/<period>.md` (additive) + `_INDEX.md` pointer. Stale >3mo → remove.
- **Trình tự BẮT BUỘC (S102 recovery, cut-not-moved ×5 `f229b07`):** append archive TRƯỚC → probe moved-not-cut **bằng token lấy từ THÂN BÀI, không lấy từ digest** (digest là paraphrase ⇒ 0-hit GIẢ; @S168 suýt giữ 938 B vô ích) + control-âm → mới cắt.
- **3 bài đo:** số trong sổ phải là số **ĐO** không ước (`wc -c`, baseline thừa-kế cũng stale) · script sinh chữ **đẻ chữ hỏng câm** (byte-count không bắt, chỉ ĐỌC LẠI mới thấy) · hook đếm **KÝ TỰ** còn `wc -c` đếm **BYTE** — tiếng Việt đa-byte ⇒ 2 số lệch nhau là bình thường, đừng truy "ai sai".
- ⚠️ **NỢ CÒN LẠI (đo, không ước):** curate S182 đưa **22.518 → 20.292 B** (2.226, đồng thời THÊM entry S182) — **vẫn trên trần mềm 17.1KB**, còn dưới trần đọc 24.4KB nên chưa truncate. Lượt sau cắt tiếp: 2 bullet dài nhất là **S182 (dòng 3)****digest gộp S167-K6… (dòng ~17)**, cả hai đã có verbatim trong `archive/`. 🔴 **2 bài THƯỚC phiên này:** probe archive bằng token lấy từ **DIGEST L1** cho **3/7 = 0-hit GIẢ** (archive dùng chữ khác) ⇒ luôn lấy token từ **THÂN BÀI** · **`grep -icF` trong MSYS trả CHUỖI RỖNG thay vì `0`** ⇒ đếm bằng `python -c "s.count(...)"`, đừng tin `$(grep -c)`.
- **Prev:** S182 (22.5→20.3, probe python 7/7 + control-âm 0) · S180 (probe 10/10 + control-âm) · S168 (22.2→17.1) · S166-K5 (3/3) · S162 (2/2) · S145 · S140 · S134 · S128 · S102 · S116 · S113 · S109 · S80 · S71 · S70 · S40.
- **[→ `archive/2026-08.md` §@S152-R1 — verbatim] S152 R1 ranh NEVER:** verdict-only; NEVER áp cho ĐÍCH (code-tree·commit·push — chưa từng vỡ); Write/Edit runtime hợp lệ cho sub-file run-folder + diary (AS-10); containment thật = git-diff lead.
- **[→ archive/2026-07.md @S165-curate] S159 đợt-1 (07-29) diff pipeline — 7 FLAG:** rút TOÀN BỘ chuỗi hiển-thị MỚI từ diff rồi soi từng chuỗi = phép đo 100%-tiếng-Việt · 2 queryKey cùng resource = 2 ảnh-chụp khác thời-điểm · a11y nút TRÙNG tên đọc-được · bác-claim cũng phải có chứng.
- **[→ `archive/2026-08.md` §@S176 — verbatim] S176 (08-06) SETUP-REVIEW đội STYLE 3 vai — `SỬA-6`:** chấm **THIẾT-KẾ một đội sub-agent**, không phải diff code. 🔴 **thước dispatch MÙ WORKING-TREE** (`git diff origin/main...HEAD` ba-chấm trả RỖNG ⇒ gate pre-commit chết câm đúng use-case chính) · **đo TREE ≠ đo HISTORY** · **miễn-trừ chỉ-con-trỏ = dấu cao-su** ⇒ đòi TRÍCH NGUYÊN VĂN ≤1 dòng · **thách-CLEAN bẻ được nếu không bắt neo `file:line` cả 2 bờ** · **3/5 lo wiring của lead là LO HÃO** (script enumerate ĐỘNG — mở ra đo) · **chép-luật-vào-persona vi phạm chính B1 viết trong CÙNG file**.
- **[→ `archive/2026-08.md` §@S180-LANE-B — verbatim, probe 3/3 + control-âm 0] S180 (08-07) N3 LANE-B GĐ-2 (digest):** NGHI-THỨC ≠ MÁY (đọc CỘT KIỂU error-ledger) · guard-byte MÙ skeleton ⇒ vị-từ nhãn-treo-heading (use⟂mention) · sổ RETIRED-có-khai vẫn làm điểm-danh-2-nguồn MẤT VẾ PHẢI · **secrets_sweep bỏ sót đúng thư-mục chứa vật chứng đắt nhất** (2 lưới hụt cùng lúc) · **tỉ lệ không mẫu số = vô nghĩa** (3 số cùng 1 sự thật) · auditor 0-hit vì không quét `runs/` (control FLAG=4).
- **[→ `archive/2026-08.md` §@S180-ba-khối — verbatim, probe 6/6 + control-âm 0] S180 (08-07) N4 wave-plan · W0 lane-a/b (digest gộp):** **ô-đòi-MÃ không nhận CÂU-VĂN** · tách trục **CHỮA ⟂ NGHIỆM-THU** · 2 hệ đánh số trong 1 artifact phải khác TIỀN-TỐ · 🔴 **acceptance ĐO HÌNH-DẠNG-DÒNG chứ không ĐO GIÁ-TRỊ-Ô** (`grep -c '^| GĐ-…'` vẫn xanh dù ô điền sai từ-vựng) · **2 tệp anh em cùng hình-dạng = dương-giả thật** ⇒ chạy chéo 2 chiều + control-dương · **`grep -c` exit 1 khi 0-hit CẮT ĐỨT chuỗi `&&`** · **lệnh lead có thể sai theo chiều PHÁ chính mục-đích lệnh** (2 số cùng trị khác nghĩa va nhau trong CÙNG bản giao việc) ⇒ dẫn giá-trị **từng dòng từ đĩa** · **`grep -c <substring>` có TRẦN CỨNG** ⇒ khai mẫu-số NGAY CẠNH con số · **glob `*/` bỏ trọn thư-mục GỐC** · 🟢 thêm cột thì đặt **CUỐI hàng** ⇒ "không sửa dòng cũ" thành phép kiểm chạy được (tiền-tố nghiêm ngặt) · `status` **định-nghĩa-bằng-thư-mục** đo đúng NỬA số dòng · **2 số bằng nhau từ 2 nguồn KHÔNG phải phép đo thứ hai** nếu số sau là hệ-quả số trước · thước hỏng: **heredoc `<<'EOF'` gãy** với tiếng Việt+backtick ⇒ dùng Write/Edit · **probe `grep -F` sai HOA/thường ⇒ 0-hit GIẢ**.
## Memory-files trong folder (7 tệp — hạ cánh @S185 từ `lane-memory-proposals/` S180, copy-nguyên KHÔNG viết lại)
- [Neo số dòng chết ngay khi sinh](feedback_stale_anchor_born_dead.md) — mở neo tại CHÍNH commit đang review; luật B1 trỏ-canonical đang tự cài bằng cơ chế hỏng
- [Đo bằng chính regex của máy](feedback_measure_with_detectors_own_regex.md) — grep gần đúng làm lỗ nhỏ đi 6 lần; luôn kèm control-dương
- [Hai số lệch = hỏi đếm CÁI GÌ](feedback_unit_mismatch_keep_both.md) — tuyên một bên thắng là xoá mất hiệu số, mà hiệu số mới là phát hiện
- [Doctrine tự khai ≠ phép đếm phạm vi](feedback_doctrine_line_undercounts.md) — "Exit 0 always" phải liệt từng máy + soi từng đường thoát
- [Từ chối verdict coordinator gợi sẵn](feedback_refuse_coordinator_suggested_verdict.md) — vẫn đo rồi trả lời ngược nếu đo ra ngược; ca ngược thường lộ khoản làm-MẠNH-HƠN
- [Vị-từ hình-dạng-đường-dẫn mù câm](proxy_predicate_blind_measure.md) — hạ tầng đổi đường ghi thì máy vẫn in "0 lệch"; hỏi PHỦ BAO NHIÊU, không chỉ CLAIM ĐÚNG KHÔNG
- [Claim xếp hạng cần 2 mẫu số](ranking_claim_needs_two_denominators.md) — ≥2 đại lượng CÙNG ĐƠN VỊ; thành phần đúng hết vẫn không đẻ ra thứ hạng
## S188 (2026-08-10) — [LEAD SEED ON-BEHALF]
- 3 luot: plan-review xFable (12/12 claim re-verify code, 3 phat hien moi, plan 11 wave, hop nhat 9 cau) · review dot-1 PASS_WITH_FLAGS-8 (2 MAJOR ten field FE<->BE + nullability — build xanh nen 0 may nao bat) · review cum CHET TRANG x2 (0 trace) -> lead tu soi 4 truc do. Bai: dot-1 minh chung 'build xanh != hop dong dung'; luot khong ep ghi-file-truoc-tien thi chet trang.