wal: flush 20260807T1444

This commit is contained in:
pqhuy1987
2026-08-07 14:44:17 +07:00
parent f302086346
commit e21533759e
4 changed files with 211 additions and 0 deletions

View File

@ -0,0 +1,42 @@
# 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]`

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,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

@ -163,3 +163,144 @@ Lead đã tự hạ 3 → 2 món sau khi N1 bác `pull_warn_days`. Lane E đo n
🔴 **Điểm chung mà N4 phải dùng để xếp wave:** cả ba ca đều **lọt qua mọi guard hiện có** vì guard đo **sự TỒN TẠI** (byte > 0 · file có mặt · số có mặt) chứ không đo **nội dung có NGHĨA**. Wave GĐ-2 nếu chỉ thêm "kiểm tệp có mặt" thì **không chữa được ca nào trong ba ca này**.
---
## §3 — 12 TRIỆU CHỨNG × SE (bằng chứng đo trên kho SE)
> 🔴 **Ràng buộc tuân thủ:** bốn ô hub **CỐ Ý để CHỮ** (TC-02 · TC-03 · TC-07 · TC-10) — lane E **GIỮ NGUYÊN CHỮ, KHÔNG điền số**. Chỗ nào SE **CÓ** dụng cụ thì nói rõ như một **đóng góp ngược cho hub**, tách bạch khỏi ô của hub.
| TC | SE mắc? | Bằng chứng đo được trên kho SE |
|---|---|---|
| **TC-01** nhắc nhiều lần mới làm | **CÓ** (định tính). **SỐ: KHÔNG ĐO ĐƯỢC** — chưa có sổ đếm lần-nhắc (đúng thứ GĐ-4 dựng) | `auto-memory/feedback_absence_looks_like_clean.md`: mất-uỷ-quyền-owner **phải hỏi lại 3 lượt** · `feedback_pause_track_plan_progress.md`: owner S165 phải **ra luật** `/pause` liệt từng đầu việc vì việc rơi |
| **TC-02** cho làm thẳng vẫn hỏi lại | **GIỮ CHỮ HUB: *chưa có dụng cụ*.** SE cũng 0 phép đếm | Định tính: SE **đã có** cơ chế phân biệt 2 loại — `ACTIVE-MARKS` + 4 lệnh `/user-mark-active*` + luật `feedback_derived_flush_execution` (*derived-flush khớp owner-set = em-main tự làm, KHÔNG gate*). ⇒ **thuốc có mầm, phép đếm chưa có** |
| **TC-03** model mạnh hiểu đúng hơn | 🟢 **KHÔNG MẮC — miễn nhiễm nhờ cấu trúc khác** (xem §6) | Đo: `ls .claude/agents/*.md` = **27** (gồm README) · `grep -l "^model: opus"` = **26** · `grep -l "^effort: max"` = **26** · **control-âm:** `grep -h "^model:" \| sort \| uniq -c` = **`26 model: opus`, KHÔNG có dòng model nào khác** ⇒ SE **không dùng model yếu cho việc đặc tả** nên nguyên nhân của TC-03 không phát sinh. **Ô nghiệm thu của hub GIỮ CHỮ *chưa đủ mẫu*** — SE không điền thay |
| **TC-04** vật chứng lượt đắt bị sót | 🔴 **CÓ — NẶNG NHẤT, và NẶNG HƠN HUB** (xem §5) | (1) Phiên S180: **10 vai** dính #53 (lane E là vai thứ 10). (2) Đo trực tiếp lưới ghi đĩa: `ls -d .claude/workflows/runs/*/` = **88 thư mục** · `ls .claude/workflows/runs/*/run.md` = **85** ⇒ **3 thư mục lượt chạy KHÔNG có tệp mô tả**, đích danh: `2026-07-14-S117-pe-approve-minmax-range` · `2026-07-14-S117-pe-luyke-finalize` · `2026-07-22-S144-bootstrap`. (3) Lưới ĐANG TRẢ LÃI: recover #53 mất **0 byte** nhờ ghi-đĩa-trong-lúc-làm |
| **TC-05** vai soi ghi-đĩa, **cấm sửa** | **CÓ nhu cầu · CÓ ~70% · vế "cấm sửa" YẾU HƠN VẺ NGOÀI** (xem §5) | Có: cặp quan-sát-viên `{harvest-curator, tooling-auditor}` vô-điều-kiện @close + sentinel M5 + INFORM-only. 🔴 Vế **cấm-sửa** chỉ là **lời khai**: `tools:` frontmatter **không có răng** (tự khai ≥7 persona, §1.6) — backstop THẬT là git-diff commit-gate, tức **bắt SAU khi đã ghi**, không phải chặn trước |
| **TC-06** nghi thức bị **tự ý bỏ** | **CÓ — đo được, và SE tự khai tốt** | `CLAUDE.md:121` tự khai drift-audit **trễ 6 ngày** so hạn 08-01 · error-ledger có hẳn mã lỗi cho bệnh này (E-011/AS-15 *"nghi-thức chạy tắt, máy mù lớp nghi-thức-có-chạy-không"*) · thuốc tái-phạm **đã có** (2-strike promote) |
| **TC-07** chủ vắng, máy **đứng chờ** | **GIỮ CHỮ HUB: *chưa có dụng cụ*.** SE cũng 0 bộ đếm | Cơ chế chống **đã có**: `/pause`·`/tiep` một-đường (H22) + WAL + ACTIVE-MARKS + probe-không-chặn ⇒ thoát phiên an toàn khi anh vắng. 🔸 **Đóng góp ngược:** SE **có NGUYÊN LIỆU đếm được** — mỗi lần đứng chờ đều để lại **một dòng khai trong WAL** dạng *"next: chờ anh chọn (a)(b)(c)"*. Đó là **nguyên liệu**, chưa phải phép đếm; lane E **không quy nó thành số** |
| **TC-08** kiểm trong-dòng chỉ bắt cái sống lâu hơn nó | **CÓ — ca chuẩn, thuốc đã uống một phần** | Ca: H2-F3 @S149 coverage-miss (10 lượt invest → 0 delta sổ). Thuốc: `closeout-sentinel` (cửa-SAU) + bookend @open bắt lọt phiên trước. 🔴 **Ca tươi lane E:** 10 vai #53 phiên này đều là **dòng chết sớm**, và thứ bắt chúng là **lead đọc bằng mắt**, không phải máy |
| **TC-09** chỗ ngồi lệch model không ai biết | 🟢 **KHÔNG MẮC — máy đã dựng VÀ đã đo** (xem §6) | `scripts/spawn-model-audit.ps1` + `TIER2_EXPECTED_FULL_ID` (`hmw.js:73`); đo @S126 **0-mismatch**, control âm/dương đủ (`session-start.md:51`). Cộng đo lane E ở TC-03: **26/26 persona pin `opus`+`effort: max`**, 0 ngoại lệ |
| **TC-10** đo tiêu thụ theo từng cửa | **GIỮ NGUYÊN CHỮ HUB: KHÔNG ĐO ĐƯỢC.** SE cũng **không tồn tại dụng cụ** | Doctrine SE @S158: *"đo BYTE, CẤM quy token"*. 🔸 **Đóng góp ngược (nói rõ, KHÔNG điền số vào ô hub):** ở SE, mức tiêu thụ **TỪNG LƯỢT GỌI có tồn tại dưới dạng dữ liệu**, được **ghi tay** vào run-trace (ví dụ `run.md:25` ghi lượt N1 = *202K token / 27 tool-use / 545 s*). ⇒ cái SE thiếu là **bộ TỔNG HỢP**, không phải **quan sát**. Nếu hub cũng có sẵn số per-lượt trong log thì bài toán nhỏ hơn hub tưởng |
| **TC-11** tên duy nhất, không rớt máy đọc tên cũ | **CÓ — ≥3 ca** | `sub-ctx-audit-*` lọt filter C11(b) (S153 → vá S159) · `_tiep-1.md` sha 7-ký-tự vs 40 (S158) · `"17/17"` hardcode stale (`hmw.js:57`). **Máy soi tên tổng: chưa có** ⇒ GĐ-1 **không khai miễn được** |
| **TC-12** chấm điểm bị treo | 🔴 **CÓ — NẶNG HƠN HUB** (xem §5) | `grep -rn "chấm điểm" .claude/commands/*.md` = **0 hit**, control-dương `"điểm dừng"` = **3 file** ⇒ thước sống. Hub: điểm **treo vì chờ chủ**. SE: điểm **chưa từng được sinh ra** |
**Tổng: 10/12 mắc · 2/12 không mắc (TC-03, TC-09).**
---
## §4 — 🔴 KIỂM HỢP ĐỒNG NGHIỆM THU (GĐ ↔ TC) — *"giai đoạn không trỏ về bệnh nào thì là đồ chơi"*
### 4.1 — Bản đồ xuôi (chép từ cột "Chữa ở giai đoạn", `thu-chinh:76-87`)
TC-01→GĐ-4 · TC-02→GĐ-4 · TC-03→GĐ-5 · TC-04→GĐ-2 · TC-05→GĐ-2 · TC-06→GĐ-3 · TC-07→GĐ-3 · TC-08→GĐ-3 · TC-09→GĐ-5 (quét lại GĐ-6) · TC-10→GĐ-3 · TC-11→GĐ-1 · TC-12→GĐ-4
### 4.2 — Bản đồ NGƯỢC (kiểm điều kiện "mỗi GĐ ≥ 1 TC")
| GĐ | TC trỏ về | verdict theo LUẬT HUB |
|---|---|---|
| **GĐ-0** Tiếp nhận + bản đồ áp dụng | **KHÔNG CÓ TC NÀO** | 🔴 **ĐỒ CHƠI theo đúng chữ của hub** |
| GĐ-1 Nền chuẩn đặt tên | TC-11 | đạt |
| GĐ-2 Lưới ghi đĩa + mục lục | TC-04, TC-05 | đạt (2 TC) |
| GĐ-3 Nghi thức 2 đầu + cổng mã lỗi | TC-06, TC-07, TC-08, TC-10 | đạt (4 TC) — **nhưng xem 4.4** |
| GĐ-4 Sổ yêu cầu chủ + chấm điểm | TC-01, TC-02, TC-12 | đạt (3 TC) |
| GĐ-5 Cửa gọi model đắt | TC-03, TC-09 | đạt — **nhưng SE KHÔNG MẮC cả hai**, xem §6 |
| GĐ-6 Niêm phong + bảng gốc | TC-09 (quét lại) + bảng gốc 12-TC | đạt |
### 4.3 — 🔴 LỖ HỔNG 1: **GĐ-0 không trỏ về bệnh nào ⇒ theo luật hub phải LOẠI**
Hub tự viết ở `thu-chinh:72`: *"Đây là hợp đồng nghiệm thu của cả gói: **mỗi giai đoạn phải trỏ ngược về ít nhất một cái bệnh, nếu không thì nó là đồ chơi**."* Quét cả 12 dòng bảng bệnh: **không dòng nào ghi "GĐ-0"** ở cột *Chữa ở giai đoạn*.
**Lane E KHÔNG đề nghị loại GĐ-0** — đề nghị **nêu ngược cho hub**, vì đây là lỗi của **LUẬT**, không phải của GĐ-0: GĐ-0 là **điều kiện tồn tại** của 6 GĐ còn lại (không tiếp nhận thì không có gì để thi công), nên nó thuộc loại *enabling*, không thuộc loại *chữa bệnh*. Hai đường ra hợp lệ, hub chọn:
1. Hub **sửa luật**: thêm ngoại lệ tường minh *"GĐ-0 là giai đoạn enabling, miễn điều kiện trỏ-về-TC"* — rồi mọi nhà khỏi phải tự chế lý lẽ.
2. Hub **gán TC cho GĐ-0**. Ứng viên tự nhiên: **TC-06** (*nghi thức bị tự ý bỏ*) — vì bước "ghi dòng **đã nhận** vào sổ liên lạc" chính là nghi thức dễ bỏ nhất, và **SE đang bỏ nó thật**: `grep "upgrade-pack-phased" broadcasts/_index.md` = **0 hit**, control-dương `harness-22` = **3 hit**.
🔸 **Cảnh báo cho N4:** `sub-invest-fitmap-S180.md:238` (§6, W0) điền ô *"TC chữa"* bằng câu **"điều kiện tồn tại của mọi TC"**. Đó **không phải một TC** — đó là **viết chữ vào ô đòi mã**. Nếu N4 dùng nguyên câu đó, cả gói sẽ có **một wave không chịu ràng buộc nghiệm thu nào**. Phải chọn 1 trong 2 đường trên và **khai ra**.
### 4.4 — 🔴 LỖ HỔNG 2: **TC-10 có nhãn giai đoạn nhưng KHÔNG AI CHỮA**
TC-10 được gán GĐ-3, nhưng ô nghiệm thu của chính hub ghi: *"**KHÔNG ĐO ĐƯỢC** — hub khai thẳng: chưa có dụng cụ; **trần là hướng dẫn kèm nghĩa vụ khai khi vượt**"*. Đọc kỹ: GĐ-3 **không sinh ra dụng cụ đo tiêu thụ**; nó chỉ **đặt trần + bắt khai khi vượt**. ⇒ với TC-10, GĐ-3 là **khai báo**, không phải **thuốc**.
⇒ Theo chiều ngược của cùng hợp đồng: **TC-10 là triệu chứng duy nhất không có giai đoạn nào thực sự chữa.** Ba ô để-chữ còn lại khác hẳn:
- **TC-02**: GĐ-4 **có** dựng sổ 3 khối (thuốc thật), chỉ **phép đo** là thiếu.
- **TC-03**: GĐ-5 **có** siết cửa model (thuốc thật), chỉ **mẫu** là thiếu.
- **TC-07**: GĐ-3 **có** dựng nghi thức 2 đầu + luật tự trị (thuốc thật), chỉ **bộ đếm** là thiếu.
- **TC-10**: **không có thuốc, cũng không có đo.**
🔴 **Phân biệt mà cả N1 lẫn N2 chưa tách bạch: *chữa* (remedy) ⟂ *nghiệm thu* (measurement).** Bốn ô để-chữ của hub là **lỗ NGHIỆM THU**; chỉ TC-10 là **lỗ CHỮA**. Trộn hai thứ này sẽ dẫn tới hai sai lầm ngược chiều: (a) mở wave để "chữa" TC-02/03/07 trong khi thuốc đã có, chỉ thiếu thước; (b) yên tâm với TC-10 vì thấy nó đã có nhãn GĐ-3.
### 4.5 — Kết luận hợp đồng
**GĐ-đồ-chơi = 1** (GĐ-0, do luật hub thiếu ngoại lệ) · **TC-không-ai-chữa = 1** (TC-10). Mười một TC còn lại đều có ít nhất một GĐ chữa thật.
---
## §5 — BỆNH SE MẮC **NẶNG HƠN HUB** (ngoài TC-12 mà N1 đã nêu)
| TC | hub | SE | vì sao nặng hơn |
|---|---|---|---|
| **TC-12** *(N1 nêu — lane E xác nhận)* | cơ chế **đã ký 04-08-2026**, đang chờ mốc-0 | **0 cơ chế** — `grep -rn "chấm điểm" .claude/commands/*.md` = 0 hit (control-dương `"điểm dừng"` = 3 file) | hub **treo một cái đã có**; SE **chưa từng sinh ra cái đó**. Khoảng cách là một **bậc**, không phải một nấc |
| **TC-04** *(lane E bổ sung)* | LỚP-1: *"hub mắc **nhiều lần trong cùng một phiên**"* | **10 vai / 1 phiên** (S180) + **3 thư mục lượt chạy không có `run.md`** (nêu đích danh ở §3) | Ở hub là **sự cố lặp**; ở SE là **NỀN** — mọi vai làm-việc-dài đều dính, chỉ vai return-1-dòng thoát (3/3 CLEAN). Khác nhau về **bản chất phân bố**, không phải tần suất |
| **TC-05** *(lane E bổ sung)* | muốn vai soi ghi-đĩa **không được sửa** | SE **có** vai, nhưng "không được sửa" = **lời khai**, không phải sandbox — và carry ghi đúng điều đó (`tools-whitelist-no-teeth`) **nằm trong vùng mù 46%** của H24-2 (§1.5) | Hub **biết mình thiếu**; SE **tưởng mình có**. Trạng thái *tin sai vào một cái khoá không tồn tại* nguy hiểm hơn trạng thái *biết mình không có khoá* |
---
## §6 — BỆNH SE **KHÔNG MẮC** ⇒ khai `KHÔNG ÁP DỤNG có khai` ⇒ **tiết kiệm wave**
| TC | vì sao SE miễn nhiễm | bằng chứng + control | tiết kiệm gì |
|---|---|---|---|
| **TC-03** *"model thường hiểu lệch đặc tả"* | SE **không dùng model thường** ở bất kỳ chỗ ngồi nào — worker-tier-pin toàn roster | `grep -h "^model:" .claude/agents/*.md \| sort \| uniq -c` → **`26 model: opus`**, và **KHÔNG có giá trị nào khác** (control-âm mạnh: chỉ cần 1 persona pin sonnet là dòng thứ hai hiện ra) · `grep -l "^effort: max"` = **26/26** | **Phần TC-03 của GĐ-5 khai `không áp dụng`** — SE không cần cửa "chọn model đúng", chỉ cần **giữ nguyên pin**. ⚠️ Vẫn **GIỮ CHỮ** ô nghiệm thu của hub (*chưa đủ mẫu*): SE miễn ở **nguyên nhân**, chưa đạt ở **thước** |
| **TC-09** *"chỗ ngồi được cấp model đắt mà không ai biết"* | Máy soát **đã dựng và đã chạy** | `scripts/spawn-model-audit.ps1` (PA-2b) + `TIER2_EXPECTED_FULL_ID` (`hmw.js:73`); đo @S126 = **0-mismatch**, control âm/dương đủ (`session-start.md:51`) | **GĐ-5 phần TC-09 khai `không áp dụng — đã có tương đương`**; **GĐ-6 giữ vế "quét lại"** (rẻ: chạy lại đúng 1 script đã có) |
⇒ **GĐ-5 chỉ còn phần THIẾU nhỏ** (sổ-khung-nhìn lượt đắt + luật truyền-nguyên-văn thành văn) — trùng kết luận N1 §5, nhưng **lý do khai miễn của lane E mạnh hơn**: N1 khai miễn dựa trên *"đã có"*; lane E khai miễn dựa trên **control-âm đo được** (không tồn tại persona nào lệch pin).
🔸 **Chống lạc quan:** hai ô miễn ở trên là miễn **theo nguyên nhân**, KHÔNG phải *"đã nghiệm thu"*. Khi báo cáo về hub phải viết đúng nhãn `không áp dụng` **kèm lý do kiểm được** (luật nấc, `thu-chinh:103`); **cấm** viết `đã được kiểm chứng` — nấc đó chỉ hub cấp.
---
## §7 — Bốn ô để-CHỮ: lane E đã tuân thủ ra sao (tự kiểm)
| ô | hub ghi | lane E ghi | có điền số không? |
|---|---|---|---|
| TC-02 | *chưa có dụng cụ* | giữ nguyên chữ + nêu thuốc-có-mầm phía SE | **KHÔNG** |
| TC-03 | *chưa đủ mẫu* | giữ nguyên chữ ở ô nghiệm thu; con số 26/26 là **đo persona SE**, nằm ở cột bằng-chứng-SE, không đặt vào ô hub | **KHÔNG** |
| TC-07 | *chưa có dụng cụ* | giữ nguyên chữ + khai SE có **nguyên liệu** (dòng khai chờ trong WAL), **không quy thành số** | **KHÔNG** |
| TC-10 | *KHÔNG ĐO ĐƯỢC* | giữ nguyên chữ + đóng góp ngược: dữ liệu per-lượt **có tồn tại** ở SE dưới dạng ghi tay ⇒ thiếu **bộ tổng hợp**, không thiếu **quan sát** | **KHÔNG** |
Theo đúng câu của hub: *"một bảng gốc thật thà tám dòng có giá hơn mười hai dòng đẹp mà bốn dòng bịa."*
---
## §8 — Ba khuyến nghị cho N4 (propose-only, KHÔNG tự thi hành)
1. **Đừng để W0 đi tiếp với ô "TC chữa" ghi *"điều kiện tồn tại của mọi TC"*.** Chọn một trong hai đường ở §4.3 rồi khai ra trong adap-report — đây là **phản biện gửi ngược hub**, cùng hạng với F-1 của N1.
2. **Tách wave theo trục *chữa* ⟂ *nghiệm thu*** (§4.4). Wave "dựng thuốc" và wave "dựng thước" khác nhau về chi phí, rủi ro và người làm; gộp lại sẽ khiến TC-02/03/07 bị làm thừa và TC-10 bị bỏ quên.
3. **Wave GĐ-2 phải có ít nhất một vị-từ đo NGHĨA, không chỉ đo TỒN TẠI** (§2). Ba ứng viên rẻ, đo được ngay: (a) tỉ lệ *dòng-thật / heading* của mỗi sub-file · (b) đếm thư mục lượt chạy thiếu `run.md` (hôm nay = **3**, có tên) · (c) chạy detector **bằng chính regex của nó** trên `HANDOFF` rồi đo vùng-không-đọc (hôm nay = **L1-171 / 25 key / 46%**).
---
## §9 — Datum phát sinh khi đang viết chính lane này (ghi để không mất)
**Va chạm tệp tạm giữa các lane chạy song song.** Lane E soạn phần §3-§8 ra một tệp tạm dùng chung rồi nối vào tệp lane; giữa hai lượt, **tệp tạm bị một lane khác ghi đè** bằng nội dung của họ (nội dung lane GĐ-5/GĐ-6). Phát hiện được **chỉ vì** lane E kiểm nội dung tệp trước khi nối (`head` + `grep` chuỗi đặc trưng), thay vì nối mù.
- **Thuộc lớp:** cùng họ với carry **`hmw-subfile-index-collision`** — mà carry đó nằm trong **25 key bị H24-2 nuốt** (§1.5). Tức bệnh đã được ghi nhận, nhưng cỗ máy đo tuổi carry **không nhìn thấy nó**, nên nó không bao giờ già đi để được xử.
- **Vì sao đáng ghi cho N4:** nếu wave nào dựng "mục lục sống `runs/`" hay bất kỳ máy gom-nhiều-lane nào, **tên tệp trung gian phải mang định danh lane**; nối-mù giữa các lane song song là đường mất dữ liệu **im lặng** — không lỗi, không ngoại lệ, chỉ sai nội dung.
- **Vị-từ chống rẻ tiền:** trước khi nối tệp tạm, `grep -c "<chuỗi đặc trưng của chính mình>"` phải > 0. Đây đúng dạng *"đo NGHĨA thay vì đo TỒN TẠI"* ở §8 mục 3.
---
**END sub-n3-lane-e-benh — LANE E (trục bệnh) HOÀN TẤT.**
`9LỚP 9 giẫm / 1 ca bác (session_ctx_kb) · 12TC 10 mắc / 2 không mắc · 1 GĐ-đồ-chơi (GĐ-0) · 1 TC-không-ai-chữa (TC-10) · lead sót 3 ca (2 neo LỚP-6 + lỗ LỚP-8 to gấp đôi)`
---
## §10 — ERRATA nội bộ lane E (append-only, không sửa đè entry cũ)
Bảng tóm ở **§1** được viết **TRƯỚC** khi đo, nên hai ô còn ghi `CHƯA ĐO`:
- Ô **LỚP-8** — đã đo xong, kết quả ở **§1.5**: GIỮ, và lỗ thủng **to gấp đôi sau khi dán nhãn ĐÓNG** (L1-171 · 25/54 key · 46%).
- Ô **LỚP-9** — đã đo xong, kết quả ở **§1.6**: **BÁC 1 trong 2 món lead giữ** (`session_ctx_kb` đã đóng ghost-wire @S153).
Giữ nguyên chữ `CHƯA ĐO` ở §1 làm **vết thứ tự thao tác** (đo sau khi khai ý định), đúng doctrine append-only. Khi đọc, **§1.5/§1.6 thắng §1**.