wal: flush 20260809T2218

This commit is contained in:
pqhuy1987
2026-08-09 22:18:22 +07:00
parent 8f1cacc4a9
commit 93173099fe
23 changed files with 922 additions and 13 deletions

View File

@ -1,5 +1,17 @@
# Reviewer Agent — Persistent Memory
- **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]`
- **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-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**.
@ -96,3 +108,13 @@ Adversarial pre-commit reviewer SOLUTION_ERP. Read-only verify + live curl prod
- **[→ `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

View File

@ -0,0 +1,19 @@
---
name: doctrine-line-undercounts
description: Câu doctrine tự khai trong mã ("Exit 0 always") KHÔNG phải phép đếm phạm vi — phải liệt từng máy + soi từng đường thoát, và ranh giới thật thường đã có sẵn trong comment
metadata:
type: feedback
---
Khi được giao đo *"phạm vi thật của doctrine X"*, **đừng đếm bằng câu doctrine**. Liệt **từng máy** rồi soi **từng đường thoát** của nó, và tách bạch 3 loại: exit≠0 **khi phát hiện lỗi** ⟂ exit≠0 **khi thiếu hạ tầng** ⟂ exit-0-luôn.
**Why:** S180 lane C. Đề bài (kế thừa N1 + lead) khẳng định *"SE chỉ có 2 máy fail-loud"*, dựa trên câu `governance-detectors.ps1:1962` *"Exit 0 always (never fails build)"*. Đo lại 17 máy cắm vào cửa lệnh thì ra **5 máy** trả exit≠0 khi phát hiện lỗi (`session-counter-tick` · `h24-signal-write` · `memory-archive-gate:325` · `session-scaffold` · `stamp_verify.py:51`), và `hmw.js`**4 chỗ throw** chứ không phải 1. Con số 2 làm bài toán trông như *"du nhập cơ chế lạ"*; con số 5 làm nó thành *"mở rộng ranh có sẵn"***đổi hẳn tập phương án trình cho owner**.
**How to apply:** ba bước, theo thứ tự.
1. Đếm mẫu số trước (`grep -ohE "scripts/[^ ]+\.(ps1|py)" .claude/commands/*.md | sort | uniq -c`), kèm control-dương để chứng thước có bắt.
2. Soi từng đường thoát; **phân biệt exit≠0-vì-thiếu-config với exit≠0-vì-tìm-thấy-lỗi** — trộn hai loại này là nguồn sai số chính.
3. 🔴 **Tìm ranh giới trong comment trước khi tự vẽ ranh.** Ca S180: `memory-archive-gate.ps1:323-325` đã viết sẵn *"Exit non-zero only on A7 integrity failure... Over-cap is a FLAG (not an error) - the gate reports, a human curates"* — tức **một máy, hai chế độ, ranh đã vẽ**. Ranh đó khớp 5/5 máy fail-loud: *sắp-GHI hoặc vị-từ-nhị-phân ⇒ chặn; phán-xét ⇒ cờ*. Đề xuất dựa trên ranh có sẵn rẻ hơn và khó bị bác hơn nhiều so với ranh tự nghĩ.
Kèm: chạy máy để lấy **số sống** làm đánh đổi định lượng (`governance-detectors.ps1``TOTAL FLAGS: 49` + `INFORM-ONLY: 21`, vẫn exit 0) — *"lật sang chế độ chặn hôm nay = 49 cờ chặn tức thì"* là con số quyết định, không phải lý luận.
Liên quan: [[refuse-coordinator-suggested-verdict]]

View File

@ -0,0 +1,14 @@
---
name: measure-with-the-detectors-own-regex
description: Đo vùng mù của một máy phải dùng CHÍNH regex/vị-từ của máy đó, không dùng grep thô — sai thước cho ra lỗ nhỏ hơn 6 lần
metadata:
type: feedback
---
Khi kiểm "máy X có bỏ sót gì không", **trích đúng biểu thức mà X dùng** rồi chạy lại trên dữ liệu thật. Đừng đo bằng một `grep` gần đúng.
**Why:** @S180 lane E kiểm detector **H24-2** (`scripts/governance-detectors.ps1:892-897`) — nó dựng segment từ `$marks[0].Index` nên **mọi thứ nằm trên marker đầu tiên không bao giờ được đọc**. Đo bằng `grep -n "NEXT em" docs/HANDOFF.md` ra marker đầu ở `:29` ⇒ kết luận "lỗ 28 dòng". Nhưng regex thật của detector đòi `^\*\*` (đậm, đầu dòng), nên `### 🔵 NEXT em` **không khớp**; marker đầu tiên khớp thật ở **`:172`** ⇒ lỗ là **L1-171 / 25 trong 54 carry key / 46%** — sai thước làm lỗ nhỏ đi **6 lần**. Control-dương bắt buộc kèm: `[carry:` xuất hiện 289 lần trong tệp, chứng minh thước sống.
Hệ quả kèm theo đáng nhớ: lỗ đó **to gấp đôi sau khi khoản liên quan bị dán nhãn ĐÓNG** (rider @S179 khai 12 slug, đo lại @S180 = 25), và trong 25 key bị nuốt có `tools-whitelist-no-teeth` — máy đo tuổi carry không nhìn thấy chính cái carry ghi rằng "có cưỡng chế được tuyên mà không có răng".
**How to apply:** (1) Mở mã của máy, copy nguyên vị-từ (regex/filter/slice) sang phép đo của mình. (2) Luôn kèm control-dương để 0-hit không bị đọc thành sạch. (3) Khi một khoản được dán "đã đóng", hỏi **"máy này quét những đâu"** rồi so với **"khoản này áp ở những đâu"** — hai phạm vi lệch nhau là đường thoát. Liên quan: [[stale-anchor-born-dead]]

View File

@ -0,0 +1,16 @@
---
name: refuse-coordinator-suggested-verdict
description: Coordinator gợi sẵn kết luận ("đó có phải đúng bẫy này không?") vẫn phải đo rồi trả lời ngược nếu đo ra ngược — và ca ngược thường lộ ra khoản làm-MẠNH-HƠN
metadata:
type: feedback
---
Khi coordinator đưa **ca sống kèm kết luận gợi ý** (dạng *"đó có phải đúng bẫy X không?"*), đo tận nơi rồi trả lời theo số đo, **kể cả khi số đo bác lại gợi ý**. Gật theo là đúng anti-pattern Smart-Friend.
**Why:** S180 lane C. Coordinator trỏ `docs/HANDOFF.md:17` (anh nói `"5 -> OK"`, lead tự thu hẹp thành *"ghi-nhận, CHƯA phải lệnh đổi số"*) và hỏi có phải bẫy A1 của hub — *"đổ nhãn-của-đội vào cột lời-nguyên-văn"*. Mở tệp ra thì bảng có **đúng hai cột** `Nguyên văn | Lead thi-hành`; ô nguyên văn chứa đúng bốn ký tự anh gõ; phần diễn giải nằm ở cột kề bên **và đã tự khai bằng chữ đỏ** *"Diễn-giải của lead, không phải chữ của anh"*. ⇒ điều kiện của bẫy (ô nhiễm cột nguyên văn) **không thoả** — chấm theo thang 4 nhãn của hub thì đây là *suy-giảm-hợp-lệ*, không phải lỗi.
Giá trị thật nằm ở **chỗ đo ra ngược**: khuôn sổ của hub chỉ có 6 trường (mã · nguyên văn · thời điểm · trạng thái · số lần nhắc · con trỏ), **không có trường "đội hiểu thành gì"** ⇒ dựng sổ y khuôn hub thì đúng cái sai thật (lead tự thu hẹp phạm vi lệnh) **bốc hơi khỏi sổ**. Tức repo đang làm **mạnh hơn** spec — thành một khoản gửi ngược hub, thay vì một lỗi phải vá.
**How to apply:** ca gợi-ý-ngược ⇒ (1) trích **chữ định nghĩa** của bẫy và tách ra **cơ chế** của nó, (2) kiểm từng điều kiện của cơ chế trên ca thật, (3) nếu không thoả thì nói KHÔNG **và** hỏi tiếp *"vậy spec có bắt được ca này không?"* — câu hỏi thứ hai mới là chỗ ra phát hiện. Và vẫn phải chỉ ra **chỗ repo SẼ mắc** nếu thi công theo bản đồ hiện có (ở đây: đổ 61 tệp auto-memory — toàn nhãn do đội đúc — vào cột nguyên văn = mắc bẫy chính xác từng chi tiết).
Liên quan: [[doctrine-line-undercounts]]

View File

@ -0,0 +1,14 @@
---
name: stale-anchor-born-dead
description: Neo trích dẫn bằng số dòng phải kiểm TẠI CHỖ lúc viết — ở SE có neo sai ngay tại commit sinh ra nó, và luật B1 (trỏ-canonical) đang tự cài bằng chính cơ chế hỏng này
metadata:
type: feedback
---
Khi review bất kỳ diff nào có **neo dạng `file:<số dòng>`**, phải mở đúng dòng đó ở **chính commit đang review** rồi so nội dung — không được tin neo vì nó "trông có vẻ đúng".
**Why:** @S180 lane E đo `docs/STATUS.md` và tìm **3 neo tự-trỏ, cả 3 lệch đúng +2**. Hai neo (`:479` bundle, `:470-471` Policies/Menu keys) **đúng lúc sinh rồi trôi**. Neo thứ ba (`:474` S170 / `:476` S176 ở `STATUS.md:463`) **sai ngay tại commit `57e672f` sinh ra nó**`git show 57e672f:docs/STATUS.md` cho thấy hai mốc đó ở `:476`/`:478`. Đây là hai **chế độ chết khác nhau** cần hai thuốc khác nhau: *drift-sau-sinh* cần neo-bằng-chuỗi; *born-dead* cần **vị-từ kiểm tại chỗ lúc viết**.
Nặng hơn: cả ba neo đó **chính là luật B1 đang thi hành** (*"KHÔNG chép số, trỏ canonical"* — thuốc chống số-chép-tay-trôi). Tức thuốc chữa bệnh A được xây bằng bệnh B. Vá 3 con số là vá triệu chứng; phải đổi **hình thức neo**.
**How to apply:** (1) diff chạm doc governance ⇒ `git show <sha>:<file>` rồi đối chiếu từng neo, đừng đọc bản working-tree. (2) Neo mới trong review đề xuất phải là **chuỗi tìm được** (tên row, tiêu đề) chứ không phải số dòng, trừ tệp đã đóng băng. (3) Cảnh giác đặc biệt với neo nằm trong **ghi chú của chính vai bắt-stale** — đó là chỗ born-dead hay xuất hiện nhất. Liên quan: [[measure-with-the-detectors-own-regex]] · [[unit-mismatch-keep-both-numbers]]

View File

@ -0,0 +1,18 @@
---
name: unit-mismatch-keep-both-numbers
description: Hai số lệch thì hỏi "đếm CÁI GÌ" trước khi hỏi "ai sai" — tuyên một bên thắng là xoá mất chính thông tin đắt nhất
metadata:
type: feedback
---
Gặp hai (hay ba) con số lệch nhau cho "cùng một đại lượng": **giữ cả hai, gắn đơn vị cho từng số**, rồi đọc **hiệu số** như một phát hiện. Cấm phán "bên nào đúng" trước khi biết mỗi bên đếm cái gì.
**Why:** @S180, N2 xử vụ số-lệch bằng cách tuyên một bên thắng, trong khi đo lại cho thấy đó là **lệch ĐƠN VỊ chứ không phải lỗi**:
- `runs/`: `ls -d */` = **88 thư mục** · `ls */run.md` = **85** ⇒ hiệu số 3 chính là **3 thư mục lượt chạy không có tệp mô tả** (`S117-pe-approve-minmax-range`, `S117-pe-luyke-finalize`, `S144-bootstrap`) — đúng bệnh TC-04 đang chảy máu, và nó **biến mất** ngay khi chọn một con số.
- `auto-memory/`: **61 tệp** = **60 memory + 1 `MEMORY.md` index**. Không bên nào sai.
Cùng lớp với ca `harvest-curator` F-05 cùng phiên: baseline "24 hit/11 file" không khai đơn vị — `grep -rc` đếm **DÒNG** (22), `grep -ro | wc -l` đếm **LẦN** (24). Bài học chống bẫy này đã được viết ra từ S168 nhưng nằm trong tệp **chính vai đó chưa harvest**, nên vai giẫm lại đúng bẫy 6 phiên sau.
Biến thể tinh vi hơn: "đã harvest chưa" đo bằng `grep -c "S168" MEMORY.md` = 2 ⇒ trông như đã harvest; thật ra 2 hit đó là **mention nằm trong entry S179**, không phải **entry S168**. Đơn vị ở đây là *mention ⟂ entry*.
**How to apply:** (1) Mọi con số bàn giao **phải kèm đơn vị và lệnh sinh ra nó**. (2) Khi review thấy ai đó "chốt" một trong hai số, đòi họ nêu hai thước trước. (3) Đọc hiệu số như dữ liệu, không như nhiễu. Liên quan: [[stale-anchor-born-dead]] · [[measure-with-the-detectors-own-regex]]

View File

@ -0,0 +1,28 @@
---
name: proxy-predicate-blind-measure
description: Máy đo chọn mẫu bằng vị-từ HÌNH-DẠNG-ĐƯỜNG-DẪN sẽ mù câm khi hạ tầng đổi đường ghi, mà vẫn in "0 lệch" — phải hỏi PHỦ ĐƯỢC BAO NHIÊU, không chỉ hỏi CLAIM CÓ ĐÚNG
metadata:
type: feedback
---
Khi soi một máy đo (audit/detector/gate), đừng dừng ở "hằng-số của nó có đồng bộ không". Phải hỏi
thêm: **nó chọn mẫu bằng vị từ gì, và vị từ đó có còn đúng không?**
**Why:** S180 `scripts/spawn-model-audit.ps1:251-254` chọn phiên bằng
`Test-Path (subagents\workflows)` — một **đại-diện (proxy)** cho "phiên này có spawn". Khi lane đi qua
Agent/Task tool thay vì Workflow tool, bản ghi rơi **phẳng** vào `subagents/agent-*.jsonl`, vị từ trả
false, máy **im lặng tụt về phiên cũ hơn 26,5 giờ** rồi vẫn in `scope = CURRENT session only`
(`:262`), `0 mismatch`, `TOTAL FLAGS: 0`. Đo thật: **0/17 lane** của phiên hiện tại được nhìn, trong
đó có **168 bản ghi `claude-fable-5`** — đúng cái mô-hình-đắt mà máy sinh ra để canh.
Điểm đắt: các claim "0-mismatch" dựa trên nó **không bị chứng minh là SAI**, chúng **mất chỗ dựa**.
Đó là khác biệt giữa *"đã đo và bằng không"* với *"chưa đo gì"* — hai thứ in ra trông y hệt nhau.
**How to apply:**
- Với mỗi máy đo, đòi **mẫu số**: `n đơn vị đã đo / m đơn vị tồn tại`. Không in mẫu số = đèn xanh giả.
- Đòi **control cho vế DÂN SỐ**, không chỉ control cho vế so-sánh. Máy này có control chống grep ngây
thơ (khối A) nhưng **không có** control "mẫu có rỗng không".
- Nhãn tự-mô-tả (`CURRENT session only`) phải **kiểm được**, không được in vô điều kiện.
- Phản chứng bắt buộc khi vá: chạy trên phiên chỉ có lane phẳng ⇒ máy **phải** thấy, không được rơi
về phiên cũ.
- Liên hệ: [[ranking-claim-needs-two-denominators]] — cùng gốc bệnh "đếm-về-tổng".

View File

@ -0,0 +1,27 @@
---
name: ranking-claim-needs-two-denominators
description: Claim xếp hạng ("X gần xong nhất", "Y hổng nhất") chỉ đứng khi có ≥2 đại lượng CÙNG ĐƠN VỊ đem so — từng claim thành phần đúng hết vẫn không đẻ ra được thứ hạng
metadata:
type: feedback
---
Phân biệt hai loại claim khi review: **claim thành phần** ("máy X tồn tại, đo được 0-mismatch") và
**claim xếp hạng** ("GĐ-5 gần xong nhất"). Loại thứ hai cần bằng chứng **khác hẳn** loại thứ nhất.
**Why:** S180 — N1 tuyên *"GĐ-5 gần xong nhất"* dựa trên 5 gạch đầu dòng. Lane N2 verify **~60 phép
đo trên ~45 claim, không claim nào đổ**. Nhưng thứ hạng vẫn sai: đếm cùng thước (8 bước làm của thư
chính) ra **GĐ-5 = 5,33/8 (67 %)** so với **GĐ-2 = 5,56/8 (6975 %)** — GĐ-2 ≥ GĐ-5. Từng viên gạch
đúng, **phép cộng thành thứ hạng** thì sai. Đây là biến thể của *meta-count self-coverage blind-spot*:
đo tốt, đếm-về-tổng thì hỏng.
Hậu quả không dừng ở chữ nghĩa: nhãn "gần xong nhất" chảy vào `run.md` rồi đẻ ra đề xuất "W5 ghép W2",
vi phạm điều-kiện-vào của chính giai đoạn đó. **Nhãn lạc quan → xếp lịch sai.**
**How to apply:**
- Thấy chữ *nhất* / *hơn* / *~N %* ⇒ hỏi ngay **"trên mẫu số nào, và cái nó vượt có mẫu số không?"**
- Tách mẫu số **trước** khi tính tử số; dán bảng để người khác đếm lại được.
- Dùng **≥2 mẫu số độc lập** rồi kiểm hội tụ. S180: 3 mẫu số ra 6067 % ⇒ phép tách không bơm số.
Nếu hai mẫu số lệch nhau, hỏi **"đếm CÁI GÌ"** trước khi hỏi **"ai sai"**.
- Chia vai đúng: một lane kiểm *claim có đứng không*, một lane kiểm *phủ có đủ không*. Lane thứ hai
bắt được thứ lane thứ nhất **không thể** bắt.
- Liên hệ: [[proxy-predicate-blind-measure]].