20 KiB
N3 — LANE E: TRỤC BỆNH (9 lớp lỗi xuyên suốt × 12 triệu chứng TC)
- lane: E / 6 — lăng kính CHIỀU NGANG, cắt qua mọi GĐ. 4 lane A/B/C/D soi dọc từng GĐ ⇒ mù chỗ nối; lane này soi bệnh nào tái diễn qua nhiều GĐ và wave nào thật sự chữa bệnh nào.
- nguồn gốc:
broadcasts/inbox/ai_infra/2026-08-04-Governance-upgrade-pack-phased-thu-chinh.md:70-95(bảng 12 TC + 4 dòng chú thích cố-ý-để-chữ) ·…-phu-luc-spec-pitfall.md:40-60(9 lớp lỗi, toàn văn). - đã có:
sub-invest-fitmap-S180.md§2 §3 ·sub-review-n2-S180.md·run.md(bảng lead tự soi 9 lớp — kiểm lại, không gật). - luật đo của lane:
KHÔNG ĐO ĐƯỢChợp lệ và được khuyến khích; mọi 0-hit kèm control-dương; hai số lệch ⇒ hỏi "đếm CÁI GÌ" trước khi hỏi "ai sai". - read-only, propose-only. Ghi đĩa trong lúc làm, không dồn cuối.
§0 — Ghi trước khi đo (để lượt sau đối chứng được ý định)
Bốn ca lead khai "giẫm NGAY HÔM NAY" là bốn ca lead có lợi khi nó đúng (chúng chống lưng kết luận "9/9 lớp SE đều có ca thật ⇒ PROJECT-FIT cao"). Vì vậy thứ tự đo của lane này là: đo 4 ca đó trước, bằng lệnh chạy được, với control-dương, rồi mới đi tiếp phần còn lại. Nếu bốn ca đó đứng thì kết luận của lead mạnh hơn; nếu đổ thì đổ đúng chỗ đắt nhất.
Hai ca MỚI phát sinh trong chính chuỗi N1→N2 cũng được soi ở đây (đề bài giao): (a) N1 hạ cánh 7.049 B / 6-của-9-mục placeholder sau 202K token; (b) N2 xử vụ số-lệch bằng cách tuyên một bên thắng trong khi thật ra là lệch ĐƠN VỊ.
§1 — 9 LỚP LỖI × SE (kiểm lại bảng lead, không gật theo)
Bảng tổng — verdict của lane E trên từng dòng lead
| LỚP | lead nói | lane E kết luận | ghi chú 1 dòng |
|---|---|---|---|
| 1 quên ghi vật chứng lúc mở | ✅ giẫm | GIỮ | #53-family; lane này bổ sung ca thứ 10 = chính tôi |
| 2 thợ rèn không có dao | ✅ ×3 hôm nay | GIỮ 3/3 — và nặng hơn lead khai | mỗi ca có thêm tầng lỗi lead chưa đếm (dưới) |
| 3 chấm chéo lần-1 KHÔNG ĐẠT | ✅ | GIỮ | ring1 32Đ/6T · N2 PASS_WITH_FIXES 5 MAJOR |
| 4 exit-0 ≠ không cờ | ✅ | GIỮ | governance-detectors.ps1 tự khai "Exit 0 always" |
| 5 số chép tay trôi | ✅ | GIỮ | STATUS:8 mega-line |
| 6 neo số dòng chết ngay khi sinh | ✅ 1 ca | GIỮ + LEAD SÓT 2 CA | 3 neo cùng lệch +2; 1 neo chết ngay tại commit sinh ra nó |
| 7 tuyên gấp-đầy-đủ thân mục lục | ✅ | GIỮ | N1 7.049 B; lane E bổ sung: guard byte mù |
| 8 nhãn đã-đóng hẹp hơn phạm vi | ✅ hôm nay | CHƯA ĐO — cần awk 'NR>=48&&NR<=55' docs/HANDOFF.md |
đo ở §1.4 |
| 9 cưỡng chế tuyên mà chưa có máy | ✅ 2 món (không 3) | CHƯA ĐO — cần grep tools-whitelist + session_ctx_kb |
đo ở §1.5 |
§1.1 — LỚP-6 (neo số dòng) — lead ĐÚNG 1/3, SÓT 2
Lead khai đúng một neo. Lane E đo cả file docs/STATUS.md và tìm ba neo tự-trỏ, cả ba lệch đúng +2:
| # | neo ở | nội dung neo | đích THẬT bây giờ | lệch | ai tìm |
|---|---|---|---|---|---|
| N-1 | docs/STATUS.md:8 |
bundle prod → canonical ở `:479` |
Bundle hash live ở :481 |
+2 | lead |
| N-2 | docs/STATUS.md:8 |
Policies/Menu keys — canonical bảng `:470-471` |
Policies :472 · Menu keys :473 |
+2 | LANE E (lead sót) |
| N-3 | docs/STATUS.md:463 |
đã re-ground 2 lần SAU S168 (`:474` S170 · `:476` +S176) |
S170 ở :476 · S176 ở :478 |
+2 | LANE E (lead sót) |
Lệnh tái lập (chạy được, đã chạy):
python -c "import io,re; L=io.open('docs/STATUS.md',encoding='utf-8').read().split('\n');
[print(n,repr(s[max(0,m.start()-90):m.end()+10])) for n,s in enumerate(L,1) for m in re.finditer(r':(\d{2,4})(-(\d{2,4}))?\`',s)]"
Đối chứng vị trí thật: awk 'NR>=467 && NR<=482' docs/STATUS.md → 472 = | Policies |, 473 = | Menu keys |, 476 = | User memory | (chứa S170), 478 = | Sub-agents | (chứa S176), 481 = **Bundle hash live (prod):**.
🔴 Phát hiện nặng nhất của mục này — N-3 CHẾT NGAY TẠI COMMIT SINH RA NÓ.
git log -S':474 S170' -- docs/STATUS.md → commit 57e672f (S179 closeout). Mở đúng commit đó:
git show 57e672f:docs/STATUS.md → S170 ở dòng 476, S176 ở dòng 478
Tức tại chính thời điểm viết, neo :474/:476 đã trỏ sai. Hub viết "neo số dòng chết ngay khi sinh"; ở SE ca này chết đúng lúc sinh, không cần đợi ai chèn dòng. Nặng gấp đôi: câu chứa nó là ghi-chú của lead-stale-auditor FLAG-6 đang tự khen "chính dòng này chép ra cái luật mà nó vi phạm" — rồi vi phạm thêm một luật nữa ngay trong câu đó.
Đối chiếu N-1 và N-2: cả hai đúng lúc sinh, chết sau.
git log -S'canonical ở:479'→50e6d8c; mở ra: bundle ở dòng 479 ✔ đúng lúc sinh.git log -S'canonical bảng:470-471'→88e7ecf; mở ra: Policies 470, Menu keys 471 ✔ đúng lúc sinh.
⇒ Hai chế độ chết khác nhau trong cùng một file: drift-sau-khi-sinh (N-1, N-2) và born-dead (N-3). Thuốc khác nhau: loại 1 cần neo-bằng-chuỗi; loại 2 cần kiểm tại chỗ lúc viết (vị-từ máy: mở file, đọc dòng, so nội dung).
🔴 Vòng ngoài — LỚP-6 ăn thịt thuốc chữa LỚP-5. Luật B1 của SE ("KHÔNG chép số, trỏ canonical") là thuốc cho LỚP-5. Ba neo trên chính là B1 đang thi hành, và cả ba đều hỏng vì được cài bằng số dòng. Tức: thuốc chữa LỚP-5 được xây trên đúng cái bệnh LỚP-6. Đây là LỚP-2 ở cấp học thuyết, không phải cấp một vai. Đề xuất N4: wave nào đụng B1 phải đổi hình thức neo (chuỗi tìm được / tên row) chứ không chỉ vá 3 con số.
§1.2 — LỚP-2 ca (a) harvest-curator F-05 — GIỮ, ĐÚNG NGUYÊN VĂN
- Vết ở
runs/2026-08-07-S180-bookend-open/sub-harvest-curator-open-S180.md:23-26: entry S173 "Corruption ✅ 24 hit/11 file" — baseline giao không khai ĐƠN-VỊ; đo lạigrep -rc(DÒNG) = 22/11 ·grep -ro | wc -l(LẦN) = 24/11. - Bài học chống đúng bẫy đó nằm ở
runs/2026-08-01-S168-bookend-close/sub-harvest-curator-close-S168.md(29.299 B), dòng 269 và 273, nguyên văn: "baseline chuyển giao PHẢI ghi kèm đơn-vị: 22 dòng / 24 lần / 11 file". - File đó chưa về nhà (nợ F-01 của chính vai) ⇒ vai đi lại đúng bẫy 6 phiên sau.
- 🔸 Vệ sinh thước — sắc thái tôi phải khai:
grep -c "S168" .claude/agent-memory/harvest-curator/MEMORY.md= 2 (control-dươnggrep -c "S17"= 2, thước sống). Hai hit đó là mention nằm trong entry S179, không phải entry S168 —sub-ring1-audit-open-S180.md:13đã đo độc lập: 4 marker = 2/5/2/2 ở NGUỒN, 0/0/0/0 ở đích. ⇒ "chưa harvest" đúng ở cấp entry, và ai đo bằnggrep -c "S168"một mình sẽ đọc nhầm thành "đã harvest". Chính là bẫy đơn-vị lần thứ hai trong cùng một ca — lần này là đơn-vị mention ⟂ entry.
§1.3 — LỚP-2 ca (b) lead-stale-auditor.md — GIỮ, và nặng hơn lead khai (3 tầng, không 1)
Lead chỉ nêu :45. Đo thật, dòng 45 mang ba lỗi chồng nhau, và có tầng thứ tư ở dòng 41:
| tầng | nội dung | đo |
|---|---|---|
| T1 stale-count | ví dụ ghi canonical "= 54" | canonical THẬT STATUS.md:473 = 113 |
| T2 neo chết | trỏ STATUS.md:19 |
dòng 19 hiện là đoạn "Vòng kiểm chặn lead 3 lần: D-4…" — không liên quan menu key |
| T3 tiền-đề bốc hơi | ví dụ nói "CLAUDE.md ghi ~60 menu key" |
grep -rn "60 menu key" CLAUDE.md docs/CLAUDE.md = 0 hit; control-dương grep -inc "menu" CLAUDE.md = 4 (thước sống), grep -inE "menu.key" CLAUDE.md = 1 hit ở :62 nhưng là menu-key KeHoachKyKet, không có số |
| T4 (dòng 41) | "Gặp thứ không xếp được vào 5 class dưới" + bảng :45-49 có 5 hàng |
enum thật memory-budget.json lead_self_audit.flag_classes = 12 phần tử = 6 view-* + 6 gap-* ⇒ thiếu view-claim-broader-than-sample |
T4 nặng hơn T1-T3 vì T1-T3 nằm ở cột "Ví-dụ SE" (minh hoạ, có thể là ca lịch sử), còn T4 là câu lệnh ràng buộc ("CẤM tự chế class") — sub đọc persona sẽ thấy json có 6 mà bảng có 5, và không có luật nào bảo phải tin bên nào.
§1.4 — LỚP-2 ca (c) ring2-audit.md:4 "5 class" — GIỮ
ring2-audit.md:4nguyên văn: "ĐỌC OUTPUT củalead-stale-auditor(view LỆCH source, 5 classview-*) +lead-gap-auditor(cái BỊ THIẾU, 6 classgap-*)".- Đo enum:
view-*= 6 (stale-count · stale-status · stale-header · stale-role-desc · residual-asym · claim-broader-than-sample) ·gap-*= 6 ✔. ⇒ vế gap ĐÚNG, vế view SAI — lệch bất-đối-xứng trong cùng một câu. - Class thứ 6 vào enum @S172 theo owner (
memory-budget.json:190_class_added_S172, slot 68). ⇒ drift sống ≥5 phiên. - 🔴 Bổ sung lane E — drift này đã bị NHÌN THẤY rồi ĐI VÒNG chứ không vá:
runs/2026-08-05-S173-bookend-open/sub-lead-gap-open-S173.md:10viết "12 class (5view-*= vai-stale · 6gap-*= vai-GAP · +1view-claim-broader-than-samplemới)" — công thức 5+6+1 là cách kể để khỏi phải sửa persona. Đây là mẫu Goodhart: rời tập-đo (đổi hình dạng cách đếm thay vì vá nguồn). Wave nào chạm enum phải vá cả 2 persona, không chỉ ring2.
§1.5 — LỚP-8 (nhãn "đã đóng" hẹp hơn phạm vi) — GIỮ, và lỗ THỦNG ĐÃ TO GẤP ĐÔI SAU KHI ĐÓNG
Lead khai: slot (70) ~~ĐÓNG @S179~~ ở docs/HANDOFF.md:50 mà rider lỗi máy H24-2 ở :51 còn sống. Đúng — nhưng lead khai NHẸ hơn sự thật.
(1) Nhãn đóng, có thật: docs/HANDOFF.md:50 = "(70) Tách 2 sổ đếm H24 — trung thực đang XOÁ streak ✅ ĐÓNG @S179", đóng dựa trên bằng chứng đĩa scripts/h24-signal-write.ps1 mang slot 70 ở 3 chỗ (:66 :164 :247).
(2) Rider ở :51 mô tả một lỗi MÁY KHÁC, không nằm trong phạm vi cái được đóng: detector H24-2 dựng segment từ marks[0] ⇒ mọi thứ nằm TRÊN marker đầu tiên không bao giờ được đọc.
(3) Lỗi đó CÒN SỐNG trong mã, đo được — scripts/governance-detectors.ps1:892-897:
$marks = [regex]::Matches($raw, '(?m)^\*\*(?:[^\x00-\x7F]+\s*)?NEXT\s+(?:anh|em)\b')
$segs = @()
$start = $marks[$i].Index # <-- segment DAU bat dau o marks[0]
$end = if ($i+1 -lt $marks.Count) { $marks[$i+1].Index } else { $raw.Length }
$segs += $raw.Substring($start, $end - $start) # <-- phan TREN marks[0] boc hoi
(4) Đo LỖ THỦNG HÔM NAY (HEAD 55894a0) — tái lập bằng CHÍNH regex của detector:
| đại lượng | rider khai @S179 | đo lại @S180 (lane E) |
|---|---|---|
| dòng marker đầu tiên khớp regex | :90 |
:172 |
| vùng KHÔNG BAO GIỜ ĐỌC | L1-89 | L1-171 (trên tổng 572 dòng = 30% đầu file) |
| số slug carry bị nuốt | 12 | 25 (trên tổng 54 key phân biệt = 46%) |
| control-dương | — | [carry: xuất hiện 289 lần trong file ⇒ thước sống, 0-hit không do regex chết |
⇒ Sau khi dán nhãn ĐÓNG, lỗ thủng KHÔNG đứng yên — nó to gấp đôi. Đúng chữ hub: "hai phạm vi lệch nhau là đường thoát, và đường thoát thì sẽ có người đi qua."
🔴 Đòn hồi quy đẹp nhất — trong 25 key bị nuốt CÓ tools-whitelist-no-teeth. Cỗ 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". LỚP-2 ở cấp MÁY, không phải cấp vai. Trong 25 key bị nuốt còn có harvest-no-s168-s171 ⇒ nợ harvest ở §1.2 cũng nằm trong vùng mù.
25 key bị nuốt (đủ danh sách, đo được): acceptance-runtime-khkk · account-trung · adap-apply-2-thu · binh-le-decision · bvaau · ctx-t9-dogfood · ctx-verifier-no-self-append · e7-cot-chet-khkk · endline-sub-md · harvest-no-s168-s171 · harvest-orphan-s159-tongquan · hmw-subfile-index-collision · hmw-width-vs-roster · mind-tran-nen-moi-cua · orphan-retro-harvest-s159 · pe-phanquyen · ring5-audit-gap · synthesis-roll-s159-s160 · tiep-3ter-seed-unwired · tiep-reload-underfill · tools-whitelist-no-teeth · tra-bui-relogin · uat-s117 · uat-s133-budget-freeze · uat-s134-luyke.
🔸 Sắc thái phải khai (bẫy thước): regex đòi ^\*\* (đậm, đầu dòng). Marker ### 🔵 NEXT em @S179 ở HANDOFF:29 là heading ###, KHÔNG khớp ⇒ ai đo bằng grep -n "NEXT em" sẽ ra :29 rồi kết luận lỗ chỉ 28 dòng — sai 6 lần. Phải đo bằng chính regex của detector (đúng bài học feedback_faultinjection_proves_teeth). Con số đúng là :172.
§1.6 — LỚP-9 (cưỡng chế tuyên mà chưa có máy) — LEAD SAI THÊM MỘT MÓN: 2/3 ĐỔ, KHÔNG PHẢI 1/3
Lead đã tự hạ 3 → 2 món sau khi N1 bác pull_warn_days. Lane E đo nốt 2 món còn lại, đúng chỗ N1 tự khai "chưa đo lại 2 món kia":
| món lead giữ | lane E đo | verdict |
|---|---|---|
session_ctx_kb 0-reader @S146 |
.claude/agent-memory/memory-budget.json:8 _session_ctx_kb_reader = "🔄 GHOST-WIRE DONG @S153 2026-07-26 (adopt 0df10df4 T7): reader THAT dau tien = scripts/session_ctx.py". Kiểm mã: scripts/session_ctx.py:528 "aux-8: the FIRST REAL READER of session_ctx_kb (closes the H18 ghost-wire)" + :563 caps = _require_budget_kb(repo_root, ['session_ctx_kb']) = fail-loud require, không phải đọc cho vui. Thêm 2 consumer: .claude/commands/pause.md:55 ("Vượt session_ctx_kb ⇒ distill") · session-start.md:120 |
🔴 BÁC — stale ~27 phiên. Ghost-wire ĐÃ ĐÓNG @S153 |
tools-whitelist-no-teeth |
Có thật, và SE đã tự khai ≥7 chỗ: ctx-audit.md:102 · ctx-curator.md:46 · ctx-verifier.md:42 · ring1-audit.md:57 · back-end-reviewer-style.md:133 · front-end-reviewer-style.md:142 · database-reviewer-style.md:135 — cùng một câu: "tools: khai không Write/Edit = MÔ-TẢ Ý-ĐỊNH, không phải cơ-chế chặn; backstop THẬT = git-diff commit-gate" |
✅ GIỮ là CA, nhưng đã vá đúng thuốc hub (vá LỚP-9 = "hoặc viết máy, hoặc khai thẳng là chạy tay") ⇒ KHÔNG phải vết thương hở, N4 đừng mở wave cho nó |
🔴 Hệ quả cho lead: session_ctx_kb đổ đúng cùng kiểu với pull_warn_days đã đổ — khai trạng-thái-quá-khứ bằng thì hiện-tại. Hai lần cùng một lỗi trong cùng một ô bảng ⇒ không phải xui, mà là LỚP-5 tác động lên chính bảng chẩn đoán LỚP-9. Khuyến nghị N4: mọi ô "ghost-wire" phải neo bằng LỆNH ĐO, không bằng tên món.
LỚP-9 có còn giẫm không? CÓ, nhưng phải lấy ca khác: feedback_dryrun_finds_promised_but_unlanded (S168) — command chỉ sống trong comment, sống sót 8 wave + 8 gate + 8 cicd + 644 test; guard-chặn-không-có-đường-ghi = chết câm. LỚP-9 thuần, chưa-khai, và do dry-run bắt ⇒ SE có thuốc (dry-run) nhưng không có máy canh thường trực.
§1.7 — Năm lớp còn lại (1 · 3 · 4 · 5 · 7): GIỮ nguyên verdict lead, không có gì để bác
| LỚP | ca đứng vững | ghi chú lane E |
|---|---|---|
| 1 | #53-family 7 vai/phiên S180 (nay là 10, xem §2) | thuốc SE = scaffold trước spawn, ĐANG trả lãi |
| 3 | ring1 32Đ/6T · N2 trả PASS_WITH_FIXES 0C/5M/6m ngay trong chuỗi này |
SE đã cấu trúc sẵn vòng vá (N1→N5) ⇒ đúng thuốc hub, KHÔNG cần wave |
| 4 | governance-detectors.ps1 tự khai "Exit 0 always (never fails build)" — 49 cờ vẫn exit 0 |
xung đột triết lý với GĐ-3 hub (N1 + N2 F-10 đã nêu) |
| 5 | STATUS:8 mega-line nhiều số stale; luật B1 có mà vẫn trôi |
và B1 tự cài bằng neo LỚP-6 — xem §1.1 |
| 7 | N1 hạ cánh 7.049 B / 6-của-9-mục placeholder sau 202K token | xem §2 ca (a) |
§2 — BA CA MỚI SINH TRONG CHÍNH CHUỖI N1→N2→N3
| ca | đo được | thuộc lớp | vì sao đáng ghi |
|---|---|---|---|
| (a) N1 skeleton nấc-2 | 7.049 B trên đĩa, 6/9 mục [ĐANG ĐO], sau 202K token / 27 tool-use / 545 s; ruột thật grep -vE '^#{1,4} |^\s*$' | wc -l = 27 dòng / 10 heading ⇒ ~15% giá trị |
LỚP-7 ∩ LỚP-2 (bản đồ về lớp lỗi tự giẫm chính lớp nó đang lập bản đồ) | 🔴 guard "verify BYTE tăng" MÙ HOÀN TOÀN — byte > 0 và đang tăng. Vị-từ phải đo NGỮ-NGHĨA ruột. Đây là phản-chứng chạy được cho chính vá LỚP-7 của hub ("so số ký tự với nguồn cùng đơn vị"): SE không có nguồn cùng đơn vị ⇒ theo luật hub phải ghi "không đo được", vị-từ thay thế = tỉ lệ dòng-thật / heading |
| (b) N2 xử số-lệch bằng "tuyên một bên thắng" | runs/: 88 dir ⟂ 90 entry ⟂ 85 có run.md · auto-memory: 61 file ⟂ 60 memory |
LỚP-2 (vai phản-biện-lỗi-đo giẫm đúng lỗi-đo) ∩ bẫy đơn-vị y hệt harvest-curator F-05 §1.2 |
Ba số không mâu thuẫn — chúng đếm ba CÁI KHÁC NHAU. Tuyên "bên nào thắng" là xoá thông tin: chênh 90−85 = 5 run-folder KHÔNG có run.md chính là TC-04 đang chảy máu, và nó biến mất khỏi báo cáo ngay khi chọn một con số. Tương tự 61−60 = 1 file không phải memory (nhiều khả năng MEMORY.md index) = thông tin, không phải lỗi. ⇒ luật lane E: hai số lệch thì hỏi "đếm CÁI GÌ" TRƯỚC, và GIỮ CẢ HAI kèm đơn-vị |
| (c) chính lane E này | lượt-1 chết khi đĩa mới giữ được phần đầu; 123K token / 33 tool-use rồi return = mô-tả-ý-định | LỚP-1 ∩ #53 | Vai thứ 10 dính trong một phiên ⇒ #53 ở SE không phải sự cố, nó là NỀN — đúng cấu trúc LỚP-3 của hub ("lần đầu KHÔNG ĐẠT là mặc định") nhưng ở trục hạ cánh vật chứng. Datum mạnh nhất cho TC-04 trong cả gói |
🔴 Đ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.