Files
solution-erp/.claude/agent-memory/reviewer/archive/2026-08.md

158 lines
42 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 — archive 2026-08 (verbatim, moved-not-cut từ L1 `MEMORY.md`)
> L2 on-demand. Mỗi mục = bản ĐẦY ĐỦ đã từng nằm ở L1; L1 chỉ giữ digest + con trỏ về đây.
> Curate @S180 (2026-08-07): L1 chạm 34.5 KB / cap 17.1 KB ⇒ hạ bằng cách MOVE (không CUT).
---
## @S180 — LANE A/6 `/fable-clone reviewer`: bóc GĐ-0 + GĐ-1 gói 7-giai-đoạn AI_INFRA
- **S180 (2026-08-07) LANE A/6 `/fable-clone reviewer` — bóc GĐ-0+GĐ-1 gói 7-giai-đoạn AI_INFRA (đĩa `runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-n3-lane-a-gd01.md`, 57 KB / 355 dòng; #53 cắn ở return lượt đầu, đĩa cứu trọn):** 🔴 **Bài đắt nhất — "0 hit" ĐÚNG THEO LUẬT vẫn là LỖ THẬT.** Lead giao ca "4 thư inbox 2 ngày, `_index` 0 hit". Đo ra: **24 thư thiếu dòng / 69**, cũ nhất 25 ngày. Nhưng phân loại theo `to:` mới ra chuyện: `to=se` **23/23 CÓ dòng** (control-dương mạnh nhất — kỷ luật CÓ chạy) · `to=all-fit` **22 có / 20 thiếu**. Mà chính `_index.md:7` khai fan-out **KHÔNG** track ở đây, track ở `COMMS-LEDGER``find -iname "*COMMS*"` = **0 tệp trong SE** (control `*ledger*` = 4) ⇒ **sổ mà luật trỏ tới không tồn tại**, 21 thư không có nhà. Và S153 đã phán ca này **dương-giả** (`bookend-close-synthesis.md:25`, hồi đó 19 thư) — phán đúng cho **câu hỏi lúc đó**, sai cho câu hỏi A0-3 bây giờ. ⇒ **Luật: gặp "0 hit", hỏi (a) luật nào nói nó phải có mặt · (b) luật đó trỏ sổ nào · (c) sổ đó CÓ TỒN TẠI KHÔNG.** Bỏ (c) là đóng nhầm khoản đang hở. 🔴 **Bài 2 — đếm HỌ TÊN bằng regex ra 160/159, lệch 1 vì `S57bis`** (hậu tố chữ làm 1 tệp rơi vào 2 nhánh lọc) ⇒ mọi phép phân-họ phải **cộng lại và đối chiếu tổng**, lệch 1 cũng phải truy. Đo được: sessions/ **5 họ** (159 tệp) · runs/ **2 họ** (88, 18 lệch) · scripts/ **3 họ** + cặp sinh-đôi `session-scaffold.ps1``session_scaffold.py` (cùng khái niệm, 2 quy ước) · vai **1 họ SẠCH** (agents 26 = agent-memory 26 = `hmw.js` VALID_ROLES 26, `comm` rỗng 2 chiều — vì có máy STOP-HARD `:173`). 🔴 **Bài 3 — `CLAUDE.md` ghi quy ước nhật ký `YYYY-MM-DD-HHMM-{topic}` khớp ≤64/159 tệp thật, họ đông nhất (78) không khớp cách nào** ⇒ quy ước thành văn duy nhất trong kho **sai với đa số đĩa**, 0 máy chặn. 🔴 **Bài 4 — "single source" tự xưng ≠ chuẩn.** `vocab-alias-map.md:3` tự nhận *"nguồn duy nhất"* nhưng `:8` tự thu hẹp còn **cặp từ đồng nghĩa** ⇒ là **bảng dịch** (nhìn về sau), KHÔNG phải chuẩn (nhìn về trước). 3 phép thử tách: **tiên-đoán** (đưa vai mới chưa có tên — nó câm) · **phủ-sóng** (6 nhóm tên hub đòi: 0/6) · **hướng**. ⇒ SE **không khai `không áp dụng` GĐ-1 được**. 🔴 **Bài 5 — số-trong-chú-thích trôi, bắt bằng 1 lệnh:** `hmw.js` chú thích *"11 class: 5 view-\* + 6 gap-\*"*, đĩa `memory-budget.json` = **12** (6+6); lớp thứ 12 `view-claim-broader-than-sample` **append cuối mảng, ngoài cụm view-\*** ⇒ đếm lướt ra 5, tưởng đúng. Tập tự nhận là **ĐÓNG** mà sai số phần tử = người đọc không biết mình thiếu lớp nào. Tag `[s180, lane-a, 0hit-dung-luat-van-la-lo, so-trong-cua-luat-khong-ton-tai, phan-ho-phai-cong-lai-tong, single-source-tu-xung-la-bang-dich, so-trong-chu-thich-troi]`
---
## @S179 — C7 re-review sau vá SỬA-1..6b
- **S179 (2026-08-07) C7 re-review sau vá SỬA-1..6b — `PASS-WITH-8`, 3 MAJOR `[LEAD SEED ON-BEHALF]`:** 🔴 **Lượt ăn tiền nhất từ trước tới nay của vai này: 2/3 MAJOR là lỗi TRONG CHÍNH BẢN VÁ vừa pass 12/12 acceptance.** [1] `git status --porcelain | cut -c4-` **đẻ path RÁC** — rename in MỘT dòng `R old -> new`, path có dấu cách bị quote; lead dựng sandbox đo lại: **2/2 MISS**, thước đề-xuất **2/2 OK**. [2] đổi ba-chấm→hai-chấm **KHÔNG vô-hại mà là REGRESSION có điều-kiện** — lead ĐÚNG rằng md5 y hệt, nhưng chỉ khi `origin/main` còn ancestor; sandbox phân-kỳ: hai-chấm liệt cả `upstream_only.txt` (= ĐÃ PRODUCTION) vào "phần MỚI", ba-chấm ra đúng. ⇒ **thủ phạm thật luôn là `git diff` mù untracked**, lead gán sai tội cho ba-chấm. [3] khối MIRROR lead vừa viết mang số `:112` trong khi chính 6 dòng đó đẩy thành 118 — **mỏ-neo TỰ-VÔ-HIỆU ngay lúc viết**; lead vá thành `:118` thì 3 dòng vá đẩy tiếp thành 121 ⇒ **sửa gốc = bỏ số dòng, neo TÊN SELECTOR**. [4] census "8/9 khoá" của lead THIẾU — §D gốc 25 mục, **3 ý đóng im lặng**, 1 trong 3 (`Đợt B — NỘI DUNG từng mục`) **0 hit ở cả `_mind` lẫn `_context`**. [5] con-trỏ verbatim `ca9208f` sai (thiếu 4.636 B) ⇒ lead vá **per-block**: `d081681` cho MIND-1, `727a512` cho 3 block S179, đối chứng từng cái resolve ra bản CHƯA nén. 🔸 **Bài đắt nhất:** *chẩn-đoán sai vẫn pass acceptance* — cả 2 MAJOR lọt vì acceptance đo **HÌNH-DẠNG chuỗi**, không đo **HÀNH-VI**. 🔴 #53 garble, resume vớt trọn; mảnh garble mang "a third thước defect" ⇒ lead biết có cái thứ 3 trước khi đọc verdict. Tag `[s179, C7, bat-loi-trong-ban-va, ba-cham-dung-hai-cham-regression, cut-c4-path-rac, moc-neo-tu-vo-hieu, acceptance-do-hinh-dang-khong-do-hanh-vi]`
---
## @S176 — SETUP-REVIEW đội STYLE 3 vai (engine `/fable-real`, run `wf_264fb5c2-0db`) — verdict `SỬA-6`
- **Chấm THIẾT-KẾ một đội sub-agent, không phải diff code** — trục mới của vai. Vật: `runs/2026-08-06-S176-doi-style-3-vai/sub-reviewer-0.md` (15.798 B, full-detail).
- 🔴 **Bài đắt nhất — THƯỚC DISPATCH MÙ WORKING-TREE:** đội gate pre-commit mà thước là `git diff origin/main...HEAD` (ba-chấm) ⇒ lúc review lệnh trả **RỖNG** ⇒ dispatch kết "diff không chạm ⇒ không gọi" ⇒ **0 con spawn, 0 SKIP-CO-KHAI để lộ** ⇒ đội **chết câm** đúng use-case chính. Lớp `guard-chặn-không-đường-ghi` / `dry-run bắt lời-hứa-chưa-land`. Sửa: `git diff origin/main` (2-chấm) `git status --porcelain` lọc `??`.
- **Thước TREE tự lành ca REVERT** (bằng chứng revert thật `3f339c0`): revert xong code không còn trong tree ⇒ không thành chuẩn. Lo-nghi "revert phá thước" = **lo hão** — vì thước là tree, KHÔNG phải history. Ranh này đáng nhớ: đo TREE ≠ đo HISTORY.
- **Miễn-trừ chỉ-con-trỏ = dấu-cao-su:** 3 nguồn bằng-chứng (commit-message · WAL · prompt) thì 2 do **chính lead** viết — đúng người vai sinh ra để kèm. Đòi **TRÍCH NGUYÊN VĂN ≤1 dòng** thay vì chỉ con-trỏ ⇒ khép vòng bằng **owner-visibility** (owner đọc report tự bác câu bịa), không cần đẻ thêm vai.
- **Thách-CLEAN nhánh DAT bẻ được** nếu chỉ đòi "nêu 1 khối đã khớp" mà KHÔNG bắt neo `file:line`. Khuôn `db` (kèm số đếm 3-file — con số sai được) mạnh hơn 2 con kia. Luật: **cặp neo `file:line ⇄ file:line` + 1 chi-tiết khớp cụ-thể**, thiếu neo = coi như CHƯA SOI.
- **Vắng-mặt trông giống ổn (tái phát):** 3 vai mới **thiếu dir `agent-memory/<vai>/`**`measure-agent-memory.ps1` enumerate theo DIR ⇒ 3 vai **vô hình câm** trong đo/budget. Lead tự đo lại: 3/3 THIẾU — CONFIRMED. *(🔄 @S180 đo lại: agents 26 ⟂ agent-memory 26, `comm` rỗng 2 chiều ⇒ khoản này ĐÃ ĐÓNG.)*
- **3/5 lo wiring của lead là LO HÃO** (engine đo từng đường): `spawn-model-audit.ps1` · `governance-detectors.ps1` · `mfe-eval.ps1` đều enumerate **ĐỘNG**, không hardcode ⇒ tự nhận vai mới. Bài: **đừng giả-định script hardcode — mở ra đo.**
- **Chép-luật-vào-persona vi phạm chính B1 vừa viết trong CÙNG file** (`db:32/34-35/61` vs `db:71` cấm chép; `fe:4` chép digits "React 19 + Vite 8" — class ĐÃ drift thật: root `CLAUDE.md` ghi React **18** vs `package.json` ^19.2.5). Bài: viết luật cấm-chép xong phải **grep chính file mình** xem có chép không.
- Tag `[s176, setup-review, thuoc-mu-working-tree, do-tree-khong-do-history, mien-tru-can-trich-nguyen-van, vang-mat-giong-on]`
---
## @S171 — 3 lane lens ĐỐI-KHÁNG (`/fable-clone reviewer` ×3)
- **S171 (2026-08-04) — 3 lane lens ĐỐI-KHÁNG (`/fable-clone reviewer` ×3), cả 3 CHẾT hết-giới-hạn nhưng ĐĨA CỨU 74.070 B** `[LEAD HARVEST HOI-TO @S172 — no mo tu closeout truoc; owner slot (71) chot 'gom va sleep thi auto, tu quyet'. Nguon = artifact tren dia, KHONG suy dien]; nguồn `runs/2026-08-04-S171-khkk-ui-mirror-pe/sub-reviewer-lens-{feasibility,regression,fidelity}-s171.md` 26.461 + 24.432 + 23.177 B`:** **feasibility 8 ĐẠT / 6 BROKE** — mở đầu bằng **tự bác giả-thuyết của chính lane** (*'chỉ ghi 1 nhánh' = SAI; claim D-2 HELD, ≥9 chỗ ghi → thật 10*); bắt **trích-dẫn hỏng dạng nhẹ**: `WorkflowService.cs:552` **không trỏ vào cái gì cả** (call-site thật `:485`/`:554`, định-nghĩa ở file KHÁC) nhưng **nội dung claim vẫn HELD***cite sai ≠ claim sai*, phải tách. **regression 8 ĐẠT / 4 BROKE / 10 bỏ-sót** — phát hiện nặng nhất: **A-6 kiểm SAI KHOÁ ⇒ lỗ thủng NGAY TRONG hàng rào bảo-vệ R-4** (bắt `canPe`); R-4 HELD nhưng *lý-do bản invest đưa QUÁ THÔ*. **fidelity DỞ** (§6+§8 trống, `VERDICT=?`) — lead derive ≈12/6/3; bảng N-1→N-4 đối chiếu **từng claim bằng lệnh dán kèm**: N-1 tự phân loại 35 dòng ⇒ khớp 27/6/2 · N-2 khớp chính xác `:106/:125/:249` · **N-3 HELD về THỨ TỰ nhưng lệch con số hình-thức** (chỉ 3 hit `title="N.` vì Section 2 dùng template-literal đếm động, Section 4 là `<section>` trần) — 🔴 **chính bẫy này sau đó lead tự dẫm** (grep `'<Section title='` ra 0, suýt kết FAIL). ⇒ **Bài kép: lane dự báo đúng cái bẫy mà người viết bản sửa vẫn sa vào** — có thước đúng trong tay ≠ sẽ dùng thước đúng. Tag `[s171, 3-lane-doi-khang, dia-cuu-74070, cite-sai-khac-claim-sai, a6-sai-khoa-canPe, template-literal-dem-dong]`
---
## @S170 — GATE Fidelity `/sleep-recovery-memory-l2` (16 gist-draft) — PASS-WITH-FIXES
- **S170 GATE Fidelity /sleep-recovery-memory-l2 (16 gist-draft) — PASS-WITH-FIXES (digest):** **tên-cờ-bịa sống 4 hiện-vật** — grep 0-hit CẦN dụng-cụ THỨ HAI (`git log --all -S` + control-dương) mới nâng 'nghi'→'chốt: chưa từng tồn tại'; 3/4 là drift của cờ THẬT, 1/4 (`AllowDelegate`) 0 đối-ứng ⇒ **đừng gộp 2 lớp**. 🔴 **Nhãn phủ TÊN mà không phủ CON-SỐ** — claim mang tải là 'proven 4×' (kích-hoạt luật ≥2× promote), và đơn-thuốc 'giữ 4 lần, bỏ tên cờ' = **giữ khẳng-định + vứt CHỨNG-NHÂN** ⇒ bất-khả-bác (Goodhart). **Census tự-xưng đủ** ('4 LỖ') thiếu 4 lỗ nữa gồm 1 lỗ +23 — số-đóng-vai-đã-phủ-hết (meta-count blind-spot), dù draft TỰ chép đủ số để trừ ra. **Chính-sách số BẤT-ĐỐI-XỨNG trong cùng đợt**: file A bị buộc 'KHÔNG tự sửa số', file B lén sửa 7→6 field không khai ⇒ đọc-sau không biết số nào là chữ nguồn. **`pointer-style: substring` phải CHẠY THỬ**: 1/10 con-trỏ CHẾT do lệch hoa-thường (`PRIORITY` vs `priority`). **Lưới token máy-append in ĐẦU-DÒNG không in lân-cận-token** ⇒ mega-line cho trích-dẫn LẠC HẲN (gán FAIL cho Run PASS) — tái-lập ở 2 file độc-lập. Thước tốt giữ lại: control-ÂM cạnh control-dương · claim liên-file phải HAI BỜ CÙNG KHAI · tag-chain 14/14 đo bằng grep -F từng chuỗi. Tag `[s170, nhan-phu-ten-khong-phu-so, census-tu-xung-du, con-tro-chet-hoa-thuong, luoi-dau-dong]`
---
## §@S180-LANE-B — S180 (08-07) N3 LANE-B /6 · adap upgrade-pack GĐ-2 "lưới ghi đĩa + sổ mục lục vật chứng" (verbatim move từ L1 @S180-N4 curate; đĩa gốc `runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-n3-lane-b-gd2.md`)
- **NGHI-THỨC ≠ MÁY, và sổ của chính SE là bằng chứng mạnh nhất** — đừng suy, hãy đọc **cột kiểu** của `error-ledger`: AS-17 ghi `procedural`, AS-19 tự khai *"🔴 hiện là nghi-thức, **chưa cơ-khí-hoá**"*. Khi bản đồ nói "SE đã có AS-17/AS-19" thì đó là **có LUẬT**, không phải **có MÁY**. Phép kiểm rẻ: grep cột kiểu, đừng grep tên mã lỗi.
- **Guard đo KÍCH THƯỚC mù với hỏng TỈ LỆ KHUNG/RUỘT** (ca S180 N1: 7.049 B, 6/9 heading là `[ĐANG ĐO]`, sau 202K token — `nhip-no-probe` báo `run-chua-gom 0`). Hai đại lượng **không tương quan**: tệp toàn heading tăng byte y hệt tệp đầy ruột. Dựng sandbox + chạy máy thật + **control-dương** (giấu `*-synthesis.md` → 1, trả lại → 0) mới phân biệt được **mù** với **hỏng thước**.
- **Vị từ bắt `skeleton-ruột-rỗng` rẻ nhất = neo NHÃN TREO VÀO HEADING**, không phải đếm thô: `grep -cE '^#{1,6} .*\[(ĐANG ĐO|CHỜ|TODO)'`. Đếm thô cho **dương-giả trên chính bản đã xong** (câu định nghĩa nhãn ở header) = đúng lớp **citation-trap self-reference** đã có trong auto-memory; discriminator vẫn là **use ⟂ mention**. Đo 3 file: 6 / 0 / 0 — 0 dương-giả.
- **"Sổ chết" có hai loại, phải tách trước khi phán:** `runs/_ledger.md` **RETIRED có khai** (lý do đo được `0/15 catch`, người kế nhiệm chỉ định, caveat parity trung thực, đường đảo ngược) = **suy-giảm hợp lệ**, KHÔNG phải "quên". Nhưng **hệ quả với người dùng vẫn y hệt**: 73/88 run-folder không có dòng nào trong sổ ⇒ *"điểm danh 2 nguồn"* mất **vế phải**, không phải mất phép so. Khen cơ chế nghỉ-hưu, vẫn FAIL khoản chức năng.
- **BỘ ĐẾM không thay được MỤC LỤC:** `run-chua-gom N` in một con số, không liệt tên, không có bộ-tệp-chuẩn, và **đọc thẳng đĩa** ⇒ nó **chính là nguồn-1**, không dùng làm nguồn-2 được. Nguồn-2 rẻ nhất đã nằm sẵn trên đĩa: **taskList snapshot trong `run.md` ghi TRƯỚC launch**.
- **Vùng chứa vật chứng đắt nhất lại nằm trong 2 vùng miễn cùng lúc:** `secrets_sweep(session_dir)` chỉ rglob `sessions/` (`session_ctx.py:173/180/787`) **và** `.claude/workflows/runs` in nguyên văn trong khối `- excluded:` của detector. C11 là cửa hậu duy nhất, chỉ soi khuôn tag FLAG + diary-delta; 21/21 dòng chạm `runs/` đều `LOW` + INFORM-only + **tách khỏi TOTAL** ⇒ mức nghiêm trọng đang **ngược chiều** yêu cầu "đắt tiền = nặng nhất".
- **Tỉ lệ không mẫu số là số vô nghĩa — ca đo được:** cùng một sự thật GĐ-2 ra **42% / 72% / 25%** tuỳ mẫu số (13 khoản lane / 8 bước thư chính / 6 ô nghiệm thu). Con số "~70%" của bản đồ **không sai**, nó là **mẫu số dễ nhất trong ba**; mẫu số hub dùng cấp nấc cho **25%**. ⇒ khi thấy tỉ lệ trần, hỏi mẫu số TRƯỚC khi hỏi ai sai.
- **Reviewer tự thành ca bệnh mình đi soi (datum, không phải lời xin lỗi):** lượt-1 của tôi hạ cánh 2.765 B / 150K token. Đối chiếu với ca N1 mới lộ ra điều không thấy nếu chỉ có 1 ca: **V-2 (nhãn treo) phân biệt đúng "khung rỗng" ⟂ "ruột thật mới bắt đầu"; V-1 (tỉ lệ) thì không.** Ca thứ hai là thứ chọn được vị từ.
- **Xác nhận ngược có giá trị:** N2 F-06 (GĐ-2(v) "khai điểm mù" vắng trọn) **ĐÚNG**, và N2 còn **nói nhẹ hơn sự thật** — SE có sẵn 2/3 vế; bỏ khoản này là **mất điểm cho việc đã làm đúng** (A13), không chỉ mất cảnh báo. Nhưng đo tiếp thì vế (v-3) **yếu hơn cả N2 lẫn tôi tưởng**: `lead-stale-auditor.md` **0 hit** `run-folder|runs/` (control-dương `FLAG`=4) ⇒ tự hạ đánh giá của chính mình, giữ câu cũ để so.
- Tag `[s180, adap-gd2, nghi-thuc-vs-may, skeleton-ruot-rong, vi-tu-heading-scoped, use-vs-mention, ledger-retired-co-khai, diem-danh-2-nguon-thieu-ve-phai, mau-so-3-cach-lech-3-lan, sandbox-control-duong]`
## §@S152-R1 — S152 (07-25) R1 ranh NEVER (on-behalf lead) (verbatim move từ L1 @S180-N4 curate)
- **NEVER Edit/Write code-tree · NEVER commit · NEVER push** — vai = verdict-only; sửa là việc em-main/implementer. Khai thật 2 nấc: ranh commit/push/code-tree **chưa từng vỡ**; Write/Edit runtime CÓ cấp và dùng hợp lệ cho sub-file run-folder + diary-self (AS-10). "NEVER" áp cho ĐÍCH (code/commit/push), không phải cho tool-tồn-tại; containment thật = git-diff lead. Tag `[s152, r1-retention, never-target-scoped]`
---
# @S180 — ba khối verbatim chuyển từ L1 (curate 2026-08-07, hook-cap)
## S180 (08-07) — N4 `/fable-real reviewer` · TỔNG HỢP 15 nguồn → `wave-plan-S180.md` (50.519 B, 7 wave + 3 sub gated)
- **"Sự-thật-đã-chốt" của lead = hàng rào tiết kiệm, nhưng phải giữ nguyên CHIỀU khi chép:** errata E-5 phiên này — lead viết ĐẢO chiều-mù `spawn-model-audit` ngay trong prompt dù file verify của chính lead viết đúng. Tổng-hợp-viên chép PROMPT thay vì chép FILE-VERIFY thì bản vá đi sửa đúng phía đang chạy tốt. ⇒ khi 2 bản phát biểu của CÙNG một người lệch nhau, tin bản có PHÉP ĐO đính kèm.
- **Ô-đòi-MÃ không nhận CÂU-VĂN:** N1 điền *"điều kiện tồn tại của mọi TC"* vào ô TC (fitmap:238) — lane E gọi đúng tên: wave không trỏ mã TC = wave thoát ràng buộc nghiệm thu. Fix chuẩn: tạm-gán mã có ca-sống (TC-06, A0-3 0-hit) + khai NGOẠI-LỆ + trình chủ-luật 2 đường — đừng bịa chữ vào ô mã.
- **Tự dẫm nhãn-số va nhau:** tôi đặt câu hỏi owner `Q1..` đụng nhãn quy-ước `§Q1..Q6` trong CÙNG file ⇒ phải đổi `P1..P8` + vá 3 ref đã ghi đĩa. Bài: 2 hệ đánh số trong 1 artifact = khác TIỀN TỐ ngay từ đầu.
- **Trục xếp wave đắt nhất = tách CHỮA ⟂ NGHIỆM-THU** (lane E §4.4): TC-02/03/07 chỉ thiếu THƯỚC — mở wave "chữa" là làm thừa; TC-10 thiếu THUỐC — có nhãn GĐ-3 vẫn là lỗ. Trộn 2 trục ⇒ 2 sai ngược chiều cùng lúc.
- **Ghi-đĩa-4-nhát qua Edit-append anchor-đuôi** (header → W0-2 → W3-4b → W5-6+chốt): chết giữa chừng vẫn giữ trọn wave đã chốt. Phiên 13 vai dính #53 — 4 nhát land sạch, 0 mục-lục-rỗng.
- Tag `[s180, n4-wave-plan, od-2, tc-contract-hole, ma-vs-cau-van, p-vs-q-prefix, chua-vs-nghiem-thu, edit-append-anchor]`
## S180 (08-07) — W0 lane a/2: dựng `docs/governance/adap-upgrade-pack-{fitmap,tracking}.md` (11.697 + 17.890 B)
- 🔴 **ACCEPTANCE ĐO HÌNH-DẠNG-DÒNG, KHÔNG ĐO GIÁ-TRỊ-Ô**`grep -c '^| GĐ-[0-6]'` vẫn ra **7** dù ô Quyết định điền sai từ-vựng. Lệnh lead bảo điền `chưa làm` (từ-vựng **Phần C** chấm-từng-khoản) vào ô **Phần A** (chỉ nhận `áp dụng`/`không áp dụng`/`hoãn`) ⇒ đẻ **giá-trị-thứ-tư**, đúng lỗi F-03 mà file sinh ra để đóng, mà **nghiệm thu vẫn xanh**. Vá: giữ `áp dụng` + đẩy "hiện trạng chưa làm" sang ô lý do; **thêm phép đo GIÁ-TRỊ** (`awk` đếm ô hợp lệ = 7/7). Cùng lớp: GĐ-6 "chưa ĐÁNH GIÁ ĐƯỢC" là kết luận về **điều-kiện-vào**, không phải giá trị ô ⇒ ô = `hoãn`.
- **2 tệp anh em cùng có bảng 7 dòng = bẫy DƯƠNG-GIẢ thật:** chạy nhầm lệnh bản-đồ trên tệp theo-dõi sẽ ra đúng 7 và "đạt". Vá bằng đổi cột đầu sang `0..6`, rồi **chạy chéo 2 chiều** (0 và 0) + control-dương (`GĐ-` vẫn xuất hiện 16 lần ⇒ 0 là do không-bắt-đầu-bằng, không phải thước hỏng).
- 🔴 **`grep -c` exit 1 khi 0-hit ⇒ CẮT ĐỨT chuỗi `&&`** — lượt đo A0-3 chết ngay sau số 0, **control-dương không kịp chạy**, suýt nộp 0-hit không chứng-nhân. Tách lệnh hoặc `|| true`.
- **1 phép đo, 3 nguồn, 3 số:** lane B liệt-từng-ô cộng ra **2,0**/6 nhưng dòng tổng của chính nó ghi **1,5/6 (25%)**; wave-plan ghi 2/6; lead ghi "4/6 TRƯỢT" (= phần bù của 2/6). ⇒ chép **PHẦN LIỆT KÊ** vào tệp sống-lâu, đừng chép số tổng.
- Tag `[s180, w0-lane-a, fitmap, shape-vs-value-acceptance, sibling-table-false-pass, grep-exit1-chain-cut, vocab-phanA-vs-phanC]`
## S180 (08-07) — W0 lane b: `broadcasts/_index.md` mở phạm vi P6 + bù 17 dòng + ghi băm (nhật ký `sub-w0b-index-hash.md`, 20.553 B)
- 🔴 **LỆNH LEAD SAI, thi-hành-đúng-câu-chữ sẽ PHÁ chính mục-đích của lệnh:** *"backfill `se` cho 22 dòng cũ"* — sổ có **45 dòng** (23 `se` + **22 `all`**), nên ghi `se` hàng loạt = dán nhãn sai lên **đúng 22 dòng fan-out mà P6 sinh ra để hợp-thức-hoá**. Gốc: **hai con số 22 khác nghĩa va nhau trong CÙNG bản giao việc** (22-fan-out-đang-sống ⟂ 22-thư-directed của `check-email.md:62`). ⇒ trị bằng nhau + nghĩa ngược = con số **thôi làm chứng**; dẫn giá-trị **từng dòng từ đĩa**, đừng gán hàng loạt.
- 🔴 **Bẫy đơn-vị: LEAD tự giẫm ngay trong lệnh đi nhắc tôi đừng giẫm.** Lead đọc `grep -c "upgrade-pack-phased"` = 4 ⇒ kết luận *"mới bù được 4"*, suýt bắt đo lại từ đầu. Chuỗi đó **chỉ khớp 4 thư của gói**, trần cứng = 4 dù bù bao nhiêu. Thật: **17 dòng đã land** (`grep -c "bù dòng @S180"`=17 · INBOUND 45→62). ⇒ **biết tên cái bẫy KHÔNG đủ**; phải khai mẫu-số **ngay cạnh** con số.
- 🔴 **Glob `*/ ` bỏ trọn thư-mục GỐC** — lane A đo `inbox/*/` ⇒ mù đúng nơi thư *chưa xử lý* hạ cánh (`check-email.md:64`). Hôm nay 69/24 khớp tôi chỉ vì gốc chỉ có `README.md` = **trùng hợp, không phải tương đương**. Đệ quy + loại `README` **bằng tên**.
- 🟢 **Cột-mới đặt CUỐI hàng ⇒ "không sửa dòng cũ" thành PHÉP KIỂM chạy được:** dòng cũ là **tiền tố nghiêm ngặt** của dòng mới, 45/45 đạt, `OUTBOUND` byte-identical. Khuôn tái dùng cho mọi ca thêm cột vào sổ bằng-chứng.
- **`status` định-nghĩa-bằng-thư-mục ⇒ gộp 2 kênh làm cột chỉ đo đúng NỬA số dòng:** directed thì move⟺xử-lý-xong; fan-out thì `/adap-apply` **không đụng thư mục**`processed` = "đã move", KHÔNG phải "đã áp". Khoản LƯỢC-ĐỒ, không tự thêm giá trị.
- **Mốc nước nói về VẮNG-KHỎI-HỘP-THƯ, không miễn cho thư ĐÃ NẰM TRONG hộp mà thiếu dòng** — 7 thư trước mốc còn hở (4 cùng lớp lại CÓ dòng ⇒ dấu bỏ sót). Lệnh lead (17) ⟂ nghiệm-thu `wave-plan:33` (=0) mâu thuẫn ⇒ trả lead, không tự phá.
- `stamp_verify.py` **17/17 OK, exit 0, 0 tamper**; 4 thư gói khai `content_sha256` **8-hex** (script so tiền-tố). 4 thư mang `status: DRAFT`+`reviewer_gate: PENDING``thu-chinh` đòi dấu đã-duyệt ⇒ **lệch trạng-thái, KHÔNG tamper**.
- Thước hỏng phiên này: **heredoc `<<'EOF'` gãy với nội dung tiếng Việt + backtick** (lead dính y hệt) ⇒ ghi tệp dài dùng **Write/Edit**, đừng `cat >>`.
- Tag `[s180, w0-lane-b, broadcasts-index, p6-additive, colliding-22, grep-substring-ceiling, glob-star-slash-blind, prefix-preserving-column, status-defined-by-folder, watermark-scope, heredoc-broken]`
---
## @S182 — YC-013 KHKK 8 panel nhóm mirror DuyetNcc (2 lượt review: SPEC rồi DIFF)
**Đĩa:** `runs/2026-08-08-S182-khkk-awf-mirror-ncc/sub-review-1-fable.md` (lượt SPEC) · `.../sub-reviewer-precommit.md` (lượt DIFF).
### Lượt 1 — review SPEC (`PASS_WITH_FIXES 2C/5M`)
Chấm SPEC = đo lại claim của spec trên code. Đa số HELD, nhưng:
- 🔴 **spec-unbuildable vì ASSEMBLY-RANH.** Spec bảo "extract helper rồi gọi 3 site" — chết ở site-3 (`SubmitAsync`) vì site đó nằm ở **Infrastructure** còn helper định để `internal` trong **Application**, và `InternalsVisibleTo` chỉ mở cho Tests. ⇒ **Luật rút ra:** mọi đề-xuất extract-helper đa-assembly phải kiểm ACCESSIBILITY trước khi phán "vá rẻ".
- 🔴 **usage-count trên bảng có `HasQueryFilter` mà thiếu `IgnoreQueryFilters()`** = đếm sót phiếu xoá-mềm trong khi FK vẫn chặn ⇒ test hẹp xanh, ca phổ biến vẫn 500. Claim "hết 500" MẠNH HƠN bản vá.
- 🔴 **"FK chặn nên data không mất" phải grep FK THẬT.** 8 cột pin ⟂ chỉ 4 `HasForeignKey` hit ⇒ 5 pin loose-Guid hard-delete êm + dangling. Suy từ 3 module đã biết là suy sai.
- **2 invest cùng dùng chữ "per-Code" nhưng KHÔNG cùng công-thức** (`typeEnum==10` ⟂ regex-họ-mã) — khác hành vi ở code ngoài-họ. Spec khai "hội tụ" ⇒ che mất chỗ lệch. Phải khoá công thức + test ca phân-kỳ.
- **Cờ ignored-nhưng-hành-vi-luôn-bật**: gray-out kiểu "chưa áp dụng" = nói dối theo CHIỀU NGƯỢC.
- Baseline "645" trong spec ⟂ STATUS 644 — đo tươi, đừng chép.
### Lượt 2 — review DIFF pre-commit (`PASS_WITH_FIXES 0C/3M` + 6 minor)
**Đo độc lập (không nhận số của lane):** `dotnet test` = 45 + 614 = **659 P / 0 F** (baseline 645 = 45+600 ⇒ +14 đúng ở Infrastructure) · `npm run build` ×2 exit 0 · tsc `-p tsconfig.app.json` 0-err (225 / 214 file).
**3/3 finding 🔴 của lượt 1 được đóng ĐÚNG BẢN CHẤT, không đóng bằng chữ** — đây là dữ liệu hiếm: (a) assembly-ranh → file `public static class` riêng ở Application, 3 call-site, đối số đúng thứ tự cả 3; (b) `IgnoreQueryFilters` đúng 3 bảng có filter, và **phân biệt được 2 CHIỀU** (DELETE cần bỏ filter vì FK còn thật; changelog CỐ Ý giữ filter vì ghi vết cho phiếu đã xoá là rác) — cùng một hàm-gọi, hai ngữ nghĩa ngược nhau, có khai tại chỗ; (c) 8 module pin verified bằng `grep -E "public (Guid|Guid\?) ApprovalWorkflowId"` trên Domain (đúng 8, +1 hit FK nội bộ của Step phải loại), 5 module loose-0-FK được khai là "rào DUY NHẤT" và T12 chứng minh dangling THẬT trong DB.
**MAJOR-1 — tooltip gắn trên `<input disabled>` ⇒ Chrome/Edge không hiện.** 7 `title=` đặt trên chính checkbox bị `disabled`; Chromium chặn sự kiện chuột trên form-control disabled nên native tooltip thường không bật (Firefox thì có), và `<label>` bao ngoài KHÔNG mang `title` nên rê vào chữ cũng không ra. Nặng nhất ở ô #4: câu riêng của nó là thông tin DUY NHẤT phân biệt "cờ chưa phân nhánh" với 6 ô "chưa áp dụng" ⇒ tooltip câm = ô #4 đọc thành NGƯỢC NGHĨA, đúng class lỗi mà ERRATA vừa sửa xong ở tầng `checked`. **Luật rút ra: quyết-định-của-owner nằm trong tooltip thì phải kiểm tooltip có CỬA HIỆN không — máy dựng mà không ai gọi.** Tiền lệ cùng bệnh đã tồn tại từ đợt trước ⇒ vá phải vá cùng LỚP.
**MAJOR-2 — 3 thành phần bất đồng HOA/thường, và test MÙ THEO CẤU TRÚC.** Cùng câu hỏi "code này có phải nhóm N{n}", ba luật khác nhau: regex `^KHKK-N([1-8])$` **CultureInvariant, KHÔNG IgnoreCase** (case-sensitive) ⟂ `w.Code == request.Code` chạy theo **collation SQL Server `_CI_AS`** (case-INsensitive) ⟂ FE `.toUpperCase()` (case-insensitive). Hệ quả: mã `khkk-n1` gõ tay ở panel gộp sẽ **hạ IsActive bản thật**, **vẫn được FE auto-pin**, mà **rào nhóm + rào version-cuối TẮT im lặng**. 🔴 **Test không thể thấy vì fixture chạy SQLite (BINARY = case-SENSITIVE) ⇒ tầng DB trong test có ngữ nghĩa NGƯỢC với prod.** Đây không phải test ẩu — mù theo cấu trúc, không assertion nào bịt được. **Luật rút ra: mọi bất-biến dựa trên so-sánh CHUỖI ở tầng DB đều không được test-SQLite bảo chứng; chuẩn hoá ở ĐƯỜNG GHI (`Trim().ToUpperInvariant()`) hoặc khai phụ-thuộc-collation ngay tại chỗ.**
**MAJOR-3 — guard mới ở write-path CHÍNH có 0 test.** Rào D6 cắm 2 site (Create + UpdateDraft) nhưng 4 chân của ca test đều đi qua UpdateDraft ⇒ nhánh Create (đường mọi phiếu prod sinh ra) không có răng nào. Gỡ nó đi thì 659 test vẫn xanh. Đây là **lỗ của SPEC** (spec liệt 14 ca và thiếu ca này), implementer làm đúng spec — nhưng **không hạ thước theo spec**.
**MINOR đáng nhớ:** (1) `Contain("N5").And.Contain("N3")` **mù THỨ TỰ toán hạng** — hàm mới nhận 2 tham số kề nhau ở 3 call-site, đảo là vẫn xanh (tôi phải đối chiếu TAY mới chốt được cả 3 đúng); pin nguyên câu có thứ tự mới giữ được bất-biến. (2) File governance bị thêm **BOM `ef bb bf` + CRLF** lẫn vào commit code (HEAD `7b 0a` → worktree `ef bb bf 7b 0d 0a`) ⇒ `git add` từng file, đừng `-A`. (3) rào version-cuối đếm anh-em **KHÔNG lọc `ApplicableType`**. (4) "state THẬT" của ô disabled chỉ đúng cho đường CLONE/EDIT — đường TẠO MỚI thì 6 ô khoá bị đóng băng ở DEFAULT của FE, admin không sửa được.
**FLAG-A của FE lane — đo được và ĐÚNG:** `npx tsc --noEmit` trần ở repo này **biên dịch 0 file** (`tsconfig.json` = `{"files": [], "references": [...]}`) ⇒ luôn xanh **theo cấu trúc**. Chứng bằng `--listFiles | wc -l`: **0** dòng cho dạng trần ⟂ **225 / 214** dòng cho `-p tsconfig.app.json`. 🔸 Bổ sung: `npm run build` = `tsc -b && vite build`, mà `tsc -b` CÓ đi theo project references ⇒ acceptance `npm run build` là thước THẬT. **Luật rút ra: acceptance kiểu "lệnh X xanh" phải kèm MỘT phép đo chứng thước không rỗng (`--listFiles`, `-c`, số file/ca) — exit 0 của một lệnh không đọc file nào trông y hệt exit 0 của một lệnh đọc 225 file.**
**Khuôn chống-nhiễu đáng tái dùng (từ chính bộ test này):** ca Submit có SẴN 3 cửa 409 khác ⇒ bắt được `ConflictException` là CHƯA nói lên gì; bộ test xử bằng cách **kéo dữ liệu fixture đi theo biến đang đo** (hạng-mục lấy `ApprovalGroup` của phiếu) để 2 cửa nhiễu im, rồi thả **một phiếu chứng-nhân khác đúng một biến** trong CÙNG lượt.
- Tag `[s182, yc-013, khkk, assembly-boundary-extract, ignorequeryfilters-two-directions, tooltip-on-disabled-input, collation-vs-sqlite-blind, guard-untested-write-path, argument-order-blind-assert, vacuous-tsc-noemit, bom-in-code-commit]`
---
## @S180-N2-N3-5lane — verbatim 5 entry L1 (curate @S187 2026-08-10, L1 27.6KB>cap)
- **S180 (08-07) N2 phản-biện bản-đồ N1 — `PASS_WITH_FIXES — 0C/5M/6m` `[LEAD SEED ON-BEHALF — nguồn `runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-review-n2-S180.md` 22.418 B]`:** ~60 phép đo trên ~45 claim — **KHÔNG claim nào đổ**; 3 phép 0-hit tái-lập đứng cả khi tách vế ⇒ **bản đồ N1 ĐỨNG VỮNG về DỮ KIỆN, 5 MAJOR đều nằm ở SUY LUẬN/PHỦ, không ở ĐO** (tách 2 lớp này trước khi phán). Nặng nhất **F-10: "chỉ có 1 xung đột" là SAI — có xung đột THỨ HAI**, và nó nằm ngay trong §4.4(c) của chính N1 rồi bị câu §4.3 phủ nhận ⇒ hệ quả: N4 sẽ xếp W4-sổ thành "việc máy" và **bỏ mất bước anh-duyệt-ranh**. 4/4 khoản VƯỢT-KHUNG đều đúng cấp; **không khoản nào bị thổi lên để né, không khoản nào bị hạ để tự làm**. Tag `[s180, n2, du-kien-vs-suy-luan, xung-dot-thu-hai, vuot-khung-dung-cap]`
- **S180 (08-07) N3 LANE-C GĐ-3+GĐ-4 (lane NÓNG NHẤT — chứa CẢ HAI xung đột) `[LEAD SEED ON-BEHALF — nguồn `sub-n3-lane-c-gd34.md` 72.156 B]`:** GĐ-3 **10 khoản** (có 3 · nửa 3 · thiếu 3 · **ngược 1**) · GĐ-4 **12 khoản** (có 2 · nửa 3 · thiếu 5 · **ngược 1** · chưa đo 1) · **5 khoản VƯỢT-KHUNG**. 🔴 **Dựng phương án, KHÔNG CHỌN:** xung đột 1 có **4 phương án**, xung đột 2 có **3 phương án**, lane **không chọn khoản nào** — đúng ranh vai đối-kháng khi việc chạm quyền owner. 🟢 **Ô CHƯA ĐO ghi KÈM LỆNH, không để trống** (4 ô, mỗi ô 1 lệnh chạy được) — và khai thẳng có ô mà kết luận đúng là **"KHÔNG ĐO ĐƯỢC"** chứ không phải "thiếu sót". Không đo lại phần lead đã verify (`status: DRAFT` 4/4 thư) — chỉ nhắc để mục phản biện không rớt. Tag `[s180, lane-c, dung-phuong-an-khong-chon, o-chua-do-kem-lenh, khong-do-duoc-la-ket-luan]`
- **S180 (08-07) N3 LANE-D GĐ-5+GĐ-6 — `GĐ-5 13,0/20 · GĐ-6 3,0/17` `[LEAD SEED ON-BEHALF — nguồn `sub-n3-lane-d-gd56.md` 43.795 B]`:** 🔴 **BÁC claim xếp-hạng "GĐ-5 gần xong nhất" — vì claim xếp hạng KHÔNG CÓ MẪU SỐ**: trên cùng một thước, GĐ-2 (5,5-6/8) **≥** GĐ-5 (5,33/8). 🔴 **1 MAJOR máy-mù:** `spawn-model-audit` **mù 17/17 lane của chính phiên đang chạy** mà vẫn in `0 mismatch` + `TOTAL FLAGS: 0` ⇒ máy in "sạch" trên vùng nó chưa từng đọc. Chấm 2 thang **nới ⟂ nghiêm** cho cùng một GĐ (GĐ-6: 18% nới / 6% nghiêm) thay vì 1 số. Đính chính **4 phía, gồm chính mình**: N1 ×2 · N2 ×0 (F-07b/F-09 xác nhận ĐÚNG) · lệnh lead ×1 (chiều mù viết ngược) · **tự đính chính ×1** (`:250-253``:251-254`). 4 khoản `CHƯA ĐO` **có tên + có lệnh**. Tag `[s180, lane-d, claim-xep-hang-khong-mau-so, may-mu-in-sach, thang-noi-va-nghiem, dinh-chinh-4-phia]`
- **S180 (08-07) N3 LANE-E trục BỆNH (9 lớp lỗi × 12 TC) `[LEAD SEED ON-BEHALF — nguồn `sub-n3-lane-e-benh.md` 38.531 B + `lane-memory-proposals/`]`:** 9 lớp **giẫm 9/9** (bác 1 CA trong LỚP-9) · 12 TC: **10 mắc / 2 không mắc** · **1 GĐ-đồ-chơi** (GĐ-0 không trỏ về TC nào) · **1 TC-không-ai-chữa** (TC-10 chỉ có NHÃN GĐ-3, không có THUỐC). Lead sót 3 ca. 🔴 **Đóng khoản phải hỏi "máy này quét những ĐÂU" so với "khoản này áp ở những đâu":** slot (70) dán ĐÓNG @S179 trong khi rider lỗi máy ở `:51` còn sống — **lỗ thủng TO GẤP ĐÔI SAU KHI ĐÓNG** (12 → 25 slug). 🔴 **Khai trạng-thái-quá-khứ bằng thì hiện-tại:** `session_ctx_kb` bị liệt ghost-wire 0-reader, đo ra **đã đóng từ S153** (`scripts/session_ctx.py:528/:563` là reader fail-loud) — trùng đúng kiểu `pull_warn_days` đã bị bác trước đó, **hai lần cùng lỗi trong cùng một ô bảng**. **Va chạm tệp tạm giữa lane song song:** tên chung bị lane khác ghi đè giữa 2 lượt, chỉ lộ nhờ `grep` chuỗi đặc trưng trước khi nối — **nối mù = mất dữ liệu IM LẶNG**. Tag `[s180, lane-e, may-quet-dau-vs-khoan-ap-dau, qua-khu-ke-bang-hien-tai, va-cham-tep-tam-lane-song-song]`
- **S180 (08-07) N3 LANE-F máy⟂tay · vượt-khung · rủi-ro `[LEAD SEED ON-BEHALF — nguồn `sub-n3-lane-f-maytay.md` 52.923 B — §10 của file này TỰ KHAI "nội dung lẽ ra vào diary"]`:** 🔴 **`fed-but-unread` — sub-class ghost-wire THỨ 3, MỚI:** sổ được nuôi bằng công thật (~40 tệp run tính tally) nhưng **vế so-sánh ngưỡng không tồn tại****nguy hơn `defined-but-unread`** vì khối lượng công đổ vào tạo cảm giác cơ chế đang sống. **Thang máy/tay 2 nấc là thang HỎNG:** SE có **1 máy fire thật · 17 máy-qua-nghi-thức · 3 mồ côi** — điền "máy" cho cả 17 là đúng chữ sai nghĩa; câu hỏi chuẩn: *"kết quả không-hit có phụ thuộc người nhớ chạy không?"*. **Vá doc bình thường làm điểm mù của máy TO RA, im lặng** (`**NEXT em``### NEXT em``marks[0]` trôi :90→:172 ⇒ 12→25 slug bị nuốt) ⇒ neo detector vào **cấu trúc ổn định** + phản-chứng chạy lại mỗi lần bề mặt bị vá. **Đóng khoản bằng bằng-chứng ĐÚNG nhưng ở TẦNG THẤP HƠN mục tiêu** (slot 68). **Whitelist frontmatter = tự lừa:** 20/26 vai khai không Write/Edit, runtime vẫn cấp — lượt này tự chứng bằng chính `Write` của mình; backstop thật là lead soát `git status`, **và đó là TAY**. **`ngược-#53` là lỗi LỆNH không phải lỗi trí nhớ** ⇒ chặn bằng **thứ tự tool-call** (`Write` khung = tool-call #1), không chặn được bằng lời nhắc. 🟢 **CỐ Ý không tạo `<run-folder>/.claude/agent-memory/reviewer/MEMORY.md`** dù harness trỏ vào đó — vì sẽ đẻ đúng stray-mis-land class-S54. Tag `[s180, lane-f, fed-but-unread, thang-2-nac-la-thang-hong, va-doc-lam-diem-mu-to-ra, whitelist-tu-lua, thu-tu-tool-call]`
<!-- digest-L1 moved @S188 (E2) 2026-08-10 — 3 bullet digest nen thanh pointer trong L1; verbatim goc DA o archive tu truoc, khoi nay giu them LOP DIGEST -->
- **[→ 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 · S155 · S145 · S143 · S139 · S134b · S133 · S146/S147/S152-D2 (digest gộp):** **cây menu PROD SỐNG là thước, seed chỉ là bản vẽ** · **typo-noop** (key ẩn sai chính tả = `Set.has` false, tsc vẫn xanh) ⇒ assert TỪNG key tồn tại trong cây prod · **CẤM số-đếm trong comment** · tham-số-chết-vì-thiếu-tầng-UI (đo TẦNG-CUỐI ai GỬI) · flake ⇒ 'N/0 tươi' phải khai SỐ LƯỢT · **ghost-policy** (grep policy, đừng suy từ 'key đã vào All') · **#82 ngược chiều** (FE OR nhiều key LỎNG HƠN policy khớp-đúng-1-key ⇒ tự chuốc 403) · **hợp-đồng FE↔BE VỠ 6 điểm mà tsc+build+574-test XANH** ⇒ so ROUTE+FIELD trên ĐĨA · cookie-cutter soi CẢ phần bản gốc đã CHẶN · `tsc`+`noUnusedLocals` > grep cho claim 'đã cắt' · comment 'bên kia lo' = ĐI ĐỌC BÊN KIA · grep bằng TOKEN-SONG-SINH · đổi-chiều-assert ≠ nới-assert · bằng-chứng-tự-huỷ-sau-squash · 'mọi nhánh set X' phải grep assignment-qua-BIẾN (#81) · `ExecuteDelete` ngoài transaction = mất dữ liệu · 3 THƯỚC-HỎNG (md5 CRLF · `grep -c` citation-trap · `grep -iF` MSYS 0-hit im lặng).
- **[→ `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-commit `0C/3M`+6m:** 🟢 **3/3 finding 🔴 lượt-1 được đóng ĐÚNG BẢN CHẤT** (assembly-ranh → file `public static class` riêng · `IgnoreQueryFilters` **2 CHIỀU NGƯỢC NHAU trong cùng 1 diff**: DELETE bỏ filter vì FK còn thật ⟂ changelog GIỮ filter vì ghi vết phiếu-đã-xoá là rác · 8 module pin verified bằng grep Domain, loại +1 hit FK nội bộ) — dữ liệu hiếm, ghi để đừng phá. 🔴 **tooltip đặt trên `<input disabled>` ⇒ Chromium KHÔNG hiện** (label bao ngoài không mang `title`) — quyết-định-owner nằm trong tooltip mà tooltip không có cửa hiện = **máy dựng không ai gọi**; ô "hành-vi-LUÔN-BẬT" câm ⇒ đọc thành NGƯỢC NGHĨA. 🔴 **3 thành phần bất đồng HOA/thường** (regex CultureInvariant **case-SENSITIVE**`Code ==` theo collation SQL Server **CI** ⟂ FE `.toUpperCase()`) và **test MÙ THEO CẤU TRÚC vì SQLite = BINARY case-sensitive ⇒ tầng DB trong test có ngữ nghĩa NGƯỢC prod** — không assertion nào bịt được. 🔴 **guard mới ở write-path CHÍNH (Create) 0 test** — lỗ của SPEC, implementer đúng spec, **KHÔNG hạ thước theo spec**. **m:** assert `Contain("N5")∧Contain("N3")` **mù THỨ TỰ toán hạng** (3 call-site 2 tham số kề — phải đối chiếu TAY) · **BOM `ef bb bf`+CRLF lẫn vào commit code**`git add` từng file. **FLAG-A đo được:** `npx tsc --noEmit` trần biên dịch **0 file** (`files: []`+references) = xanh THEO CẤU TRÚC; `--listFiles|wc -l` 0 ⟂ 225/214 ⇒ **acceptance "lệnh X xanh" phải kèm phép chứng thước KHÔNG RỖNG**.
- **[→ `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):** tách DỮ-KIỆN ⟂ SUY-LUẬN trước khi phán (N2: 0/45 claim đổ, 5 MAJOR đều ở SUY; bắt 'chỉ 1 xung đột' SAI — có xung-đột-thứ-2 nằm ngay trong chính N1) · dựng-phương-án-KHÔNG-chọn khi việc chạm quyền owner + ô CHƯA-ĐO ghi KÈM LỆNH, 'KHÔNG ĐO ĐƯỢC' là kết-luận hợp lệ (C) · BÁC claim xếp-hạng không mẫu-số + máy mù 17/17 lane vẫn in '0 mismatch' = in-sạch-trên-vùng-chưa-đọc + đính-chính 4 phía gồm chính mình (D) · đóng-khoản phải hỏi 'máy quét ĐÂU vs khoản áp ĐÂU' + khai quá-khứ bằng thì hiện-tại + va-chạm tệp-tạm lane song song ⇒ grep chuỗi đặc trưng trước khi nối (E) · `fed-but-unread` = ghost-wire class-3 nguy hơn defined-but-unread + thang máy/tay 2-nấc là thang HỎNG (hỏi 'không-hit có phụ thuộc người nhớ chạy?') + vá-doc-bình-thường làm điểm-mù-máy TO RA im lặng ⇒ neo detector cấu-trúc-ổn-định + `ngược-#53` chặn bằng THỨ-TỰ-tool-call không bằng lời nhắc (F).