All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 10m0s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
158 lines
42 KiB
Markdown
158 lines
42 KiB
Markdown
# 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).
|
||
|