From e21533759e82e7e0f02e25cbe9f5d7469396273e Mon Sep 17 00:00:00 2001 From: pqhuy1987 Date: Fri, 7 Aug 2026 14:44:17 +0700 Subject: [PATCH] wal: flush 20260807T1444 --- .../agent-memory/reviewer/archive/2026-08.md | 42 ++++++ ...edback_measure_with_detectors_own_regex.md | 14 ++ .../feedback_stale_anchor_born_dead.md | 14 ++ .../sub-n3-lane-e-benh.md | 141 ++++++++++++++++++ 4 files changed, 211 insertions(+) create mode 100644 .claude/agent-memory/reviewer/archive/2026-08.md create mode 100644 .claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/.claude/agent-memory/reviewer/feedback_measure_with_detectors_own_regex.md create mode 100644 .claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/.claude/agent-memory/reviewer/feedback_stale_anchor_born_dead.md diff --git a/.claude/agent-memory/reviewer/archive/2026-08.md b/.claude/agent-memory/reviewer/archive/2026-08.md new file mode 100644 index 0000000..32e98c0 --- /dev/null +++ b/.claude/agent-memory/reviewer/archive/2026-08.md @@ -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//`** ⇒ `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à `
` trần) — 🔴 **chính bẫy này sau đó lead tự dẫm** (grep `'
`**, 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 :` 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]] diff --git a/.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-n3-lane-e-benh.md b/.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-n3-lane-e-benh.md index 8b758c3..bc0d692 100644 --- a/.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-n3-lane-e-benh.md +++ b/.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-n3-lane-e-benh.md @@ -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 ""` 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**.