Files
solution-erp/.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/sub-n3-lane-a-gd01.md
2026-08-07 14:42:12 +07:00

56 KiB

N3 — LANE A / 6: GĐ-0 (Tiếp nhận + bản đồ áp dụng) · GĐ-1 (Nền chuẩn đặt tên)

  • Phiên: S180 · Vai: reviewer (/fable-clone reviewer) · Ngày: 2026-08-07
  • Chế độ: read-only, propose-only. Ngoài tệp này KHÔNG ghi/sửa tệp nào khác.
  • Ghi đĩa liên tục (chống #53): mỗi khoản chốt xong append ngay, không đợi cuối.

§0 — Nguồn đã đọc TRỰC TIẾP (không qua tóm tắt)

Món Đường dẫn Byte Phần đã đọc
Thư chính broadcasts/inbox/ai_infra/2026-08-04-Governance-upgrade-pack-phased-thu-chinh.md 33.156 dòng 24-178 (gồm §Khai-trạng-thái · §Bảng-bệnh · §Luật-chung · §GĐ-0 :109-126 · §GĐ-1 :130-147)
Phụ lục spec+bẫy …-phu-luc-spec-pitfall.md 46.416 dòng 20-164 (gồm §Chín-lớp-lỗi · §GĐ-0 :64-89 · §GĐ-1 :93-137)
Khuôn+checklist …-khuon-fit-map-report-checklist.md 30.502 Phần A :29-59 · Phần C :228-385
Luật chấm điểm …-luat-cham-diem.md 9.970 (món 4 — chỉ dùng để đếm "bốn món", không thuộc lăng kính lane A)

Vật tham chiếu trong run-folder: sub-invest-fitmap-S180.md (48.433 B) · sub-review-n2-S180.md (22.418 B) · spec-adap-upgrade-pack-phased-07-08-2026.md (7.550 B) · run.md (10.603 B).


§1 — GĐ-0: bóc TỪNG KHOẢN (18 khoản, không gộp)

Hub đòi GĐ-0 ở bốn nơi khác nhau, và bốn nơi đó không trùng khít nhau. Tôi liệt cả bốn, đánh số riêng từng nơi, rồi mới nói chỗ chồng lấn. Gộp bốn nơi thành một danh sách là chính cái làm rơi khoản.

  • Nơi 1 — thư chính :112-1197 bước làm (G0-B1..B7).
  • Nơi 2 — thư chính :121-1253 lệnh "kiểm xong chưa" (G0-K1..K3).
  • Nơi 3 — Phần C của khuôn :251-2694 khoản danh mục kiểm (A0-1..A0-4).
  • Nơi 4 — phụ lục :86-894 ô nghiệm thu (G0-N1..N4).

1.1 — Bảy bước làm (thư chính :112-119)

# Hub đòi gì SE: đã có / thiếu / ngược Bằng chứng file:line
G0-B1 Kéo cả bốn món về kho bạn ĐÃ CÓ — 4/4 tệp trên đĩa, cùng một commit broadcasts/inbox/ai_infra/2026-08-04-Governance-upgrade-pack-phased-{thu-chinh,phu-luc-spec-pitfall,khuon-fit-map-report-checklist,luat-cham-diem}.md; git log -1 --format=%ci -- <mỗi tệp> → cả 4 ra 2026-08-05 10:18:34 +0700, commit 3a6eb92
G0-B2 Tính lại mã băm nội dung từng món, so với giá trị hub công bố, ghi kết quả so ĐÃ CÓ NHƯNG ĐẶT SAI CHỖ — phép so đã chạy và đạt 4/4, nhưng kết quả chỉ nằm trong một tệp lane của phiên này, không nằm ở sổ nào sống lâu hơn phiên Kết quả: sub-invest-fitmap-S180.md:32 ("Hash verify 4/4 OK canonical bằng máy có sẵn scripts/stamp_verify.py (exit=0)"). Giá trị hub công bố nằm ngay trong frontmatter từng thư: 43db2cf0 · 49287ce7 · 98e31fad · c24699f0. Sổ đáng lẽ giữ kết quả này là broadcasts/_index.md — nó có sẵn cột sha256(12) và cột verify (broadcasts/_index.md:13) nhưng không có dòng nào cho 4 món
G0-B3 Ghi đĩa ngay bốn món vào một chỗ cố định, và ghi lại đường dẫn ĐÃ CÓ — chỗ cố định là broadcasts/inbox/ai_infra/; đường dẫn được ghi lại ở spec-…-07-08-2026.md:3:13-19 spec-adap-upgrade-pack-phased-07-08-2026.md:3
G0-B4 Dựng tệp theo dõi tiến độ theo từng giai đoạn, liệt kê từng khoản của danh mục kiểm THIẾU — không có tệp nào liệt đủ 14 khoản A0-1..A0-4 · A1..A10 · A11..A16 để tick dần Phép tìm: grep -rl "A0-1" --include="*.md" .claude/ docs/ → chỉ ra tệp trong run-folder S180, không ra tệp theo dõi. docs/governance/ không có tệp nào tên theo dõi/tracking (ls docs/governance/ = 12 mục, không mục nào là sổ theo dõi gói này)
G0-B5 Ghi một dòng "đã nhận" vào sổ liên lạc phía bạn, kèm ngày THIẾU — và thiếu rộng hơn nhiều so với 4 món (chi tiết ở §2, đây là khoản mà lane brief gọi là "A0-3 hụt") broadcasts/_index.md — 0 dòng cho cả 4 món; control-dương grep -c "harness-22" broadcasts/_index.md = 3 ⇒ thước còn sống, im lặng là im lặng thật
G0-B6 Lập bản đồ áp dụng bảy dòng, mỗi dòng chọn đúng một trong ba CÓ BẢN NHÁP, CHƯA CÓ TỆP RỜI — bảng bảy dòng đã tồn tại nhưng nằm bên trong một tệp điều tra, không phải một tệp bản đồ độc lập Bảng: sub-invest-fitmap-S180.md:220-228 (dòng :220 là dòng tiêu đề, :222-228 là bảy dòng GĐ-0..GĐ-6). Hệ quả đo được: lệnh tự kiểm của hub `grep -c '^
G0-B7 Gửi báo cáo tiếp nhận kèm bản đồ áp dụng, qua hộp thư đi hướng tới hub; ghi tệp vào kho của bạn THIẾU — chưa có báo cáo nào ls broadcasts/outbox/ai_infra/ = 47 tệp, tệp mới nhất đề ngày 2026-07-26; không tệp nào mang chữ upgrade-pack. Control-dương: cùng lệnh ls trả 47 tệp ⇒ thư mục đọc được, không phải lỗi đường dẫn

1.2 — Ba lệnh "kiểm xong chưa" (thư chính :121-125)

# Lệnh hub đưa SE chạy được chưa Kết quả thật
G0-K1 `grep -c '^ GĐ-[0-6]' <bản-đồ>` phải ra 7 CHƯA — vì chưa có tệp bản đồ rời (xem G0-B6)
G0-K2 ls <bốn đường dẫn> phải đủ bốn tệp ĐẠT 4/4 tệp tồn tại, byte lần lượt 33.156 · 46.416 · 30.502 · 9.970 (tổng 120.044)
G0-K3 <lệnh mã băm> phải khớp giá trị đã ghi ĐẠT, nhưng chỉ khớp qua đúng một máy python scripts/stamp_verify.py broadcasts/inbox/ai_infra/2026-08-04-Governance-upgrade-pack-phased-*.md → exit=0, 4/4 khớp (sub-invest-fitmap-S180.md:32). 🔴 Cảnh báo kế thừa từ N1: phép băm tự chế cho MISMATCH cả bốn — nghĩa là ai chạy lệnh băm thông thường sẽ kết luận nhầm là bị sửa nội dung. Bất kỳ tài liệu nào của SE nhắc tới G0-K3 phải dán kèm đúng lệnh này, không được ghi chung chung là "đã băm"

1.3 — Bốn khoản danh mục kiểm Phần C (khuon-…:251-269)

# Khoản SE Ghi chú đo được
A0-1 Bốn món trên đĩa kèm mã băm ĐÃ CÓ MỘT NỬA Vế "trên đĩa" đạt (G0-B1). Vế "bạn ghi lại mã băm" chưa có chỗ ghi thường trực (G0-B2)
A0-2 Tệp theo dõi tiến độ, số khoản khớp số khoản của danh mục THIẾU = G0-B4. Danh mục có 14 khoản đánh số (A0-1 A0-2 A0-3 A0-4 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16 — tức 4 + 10 + 6 = 20 khoản, tôi đếm lại từ khuon-…:373-375 chứ không lấy con số cũ)
A0-3 Một dòng "đã nhận" trong sổ liên lạc, tìm được bằng một lệnh tìm kiếm THIẾU = G0-B5, phân tích đầy đủ ở §2
A0-4 Bản đồ áp dụng bảy dòng, không ô quyết định nào trống CÓ NHÁP, CHƯA ĐẠT KHUÔN = G0-B6; thêm một khiếm khuyết riêng ở §5 (ô quyết định trộn giá trị)

🔴 Đính chính ngay trong bảng của chính tôi: ở dòng A0-2 phía trên tôi vừa viết "14 khoản" rồi đếm lại ra 20. Tôi giữ cả hai con số và giữ luôn vết sửa, vì đây đúng lớp lỗi mà hub gọi tên: số chép tay trong văn xuôi trôi (LỚP-5). Con số đúng là 20, dẫn được từ khuon-…:373-375: bốn khoản Phần 0, mười khoản Phần 1, sáu khoản Phần 2. Tệp theo dõi của SE khi dựng phải có đúng 20 dòng, không phải 14.

1.4 — Bốn ô nghiệm thu phụ lục (phu-luc-…:86-89)

# Ô nghiệm thu SE đạt?
G0-N1 Bốn tệp trên đĩa, mã băm tính lại khớp ĐẠT (bằng máy canonical, xem G0-K3)
G0-N2 Tệp theo dõi tồn tại, số khoản khớp KHÔNG ĐẠT — tệp không tồn tại
G0-N3 Sổ liên lạc có dòng "đã nhận" kèm ngày KHÔNG ĐẠT
G0-N4 Bản đồ áp dụng đủ bảy dòng, không dòng nào trống ĐẠT về số dòng, CHƯA ĐẠT về hình thức ô (§5)

Tổng kết GĐ-0: 18 khoản đã liệt. ĐÃ CÓ 6 (G0-B1, G0-B3, G0-K2, G0-K3, A0-1 nửa vế, G0-N1) · THIẾU 9 (G0-B4, G0-B5, G0-B7, G0-K1, A0-2, A0-3, G0-N2, G0-N3, và vế ghi-lại-băm của G0-B2) · CÓ NHƯNG SAI KHUÔN 3 (G0-B6, A0-4, G0-N4). Không khoản nào NGƯỢC — SE không làm điều gì trái với GĐ-0, chỉ chưa làm.


§2 — Khoản A0-3 ("đã nhận" trong sổ liên lạc): lỗ thật rộng gấp năm lần cách nó đang được kể

Đây là câu hỏi số 5 của lane. Câu trả lời ngắn: đúng, đây là khoản A0-3 của GĐ-0 (đồng thời là bước G0-B5 và ô nghiệm thu G0-N3). Câu trả lời dài quan trọng hơn, vì cách khoản này đang được mô tả — "bốn thư nằm trong hộp thư hai ngày"nhỏ hơn lỗ thật rất nhiều, và vá theo mô tả đó sẽ để lại đúng cái lỗ cũ.

2.1 — Hai con số, và mỗi bên đang đếm cái gì

Tôi đo hai lần bằng hai phép độc lập, và hai phép ra cùng một con số, nên con số này đứng được.

  • Phép 1 — đếm dòng trong sổ. Tách sổ theo hai khối rồi đếm dòng dữ liệu: khối nhận có 45 dòng, khối gửi có 47 dòng. Cộng hai khối cùng hai dòng tiêu đề ra 94, khớp với grep -cE "^\| " broadcasts/_index.md = 94.
  • Phép 2 — đối chiếu ngược từ đĩa. Duyệt từng tệp trong broadcasts/inbox/*/, lấy tên tệp bỏ đuôi, tìm chuỗi đó trong sổ: 69 tệp trên đĩa · 45 tệp có dòng · 24 tệp không có dòng.

Hai phép gặp nhau ở con số 45. Vậy lỗ thật là 24 lá thư, không phải 4. Và lá cũ nhất trong 24 lá đó đề ngày 2026-07-13, tức là đã nằm im 25 ngày, không phải 2 ngày.

Nói rõ mỗi bên đếm gì, vì đây là chỗ dễ cãi nhau vô ích:

  • "4 thư · 2 ngày" đếm riêng bộ bốn món của gói này, tính từ lúc chúng hạ cánh xuống đĩa (2026-08-05 10:18:34, commit 3a6eb92) tới hôm nay (2026-08-07). Con số này đúng trong phạm vi của nó.
  • "24 thư · 25 ngày" đếm mọi thư trong hộp thư chưa có dòng trong sổ. Con số này cũng đúng, và nó mới là phạm vi mà khoản A0-3 nói tới, vì A0-3 đòi sổ liên lạc làm được việc của sổ liên lạc.
  • Bẫy đơn vị thứ ba, tôi tự dẫm rồi tự bắt: cùng commit 3a6eb92năm tệp cùng thời điểm sửa đổi, không phải bốn — lá thứ năm là 2026-07-28-Governance-day-wake-probe-first-resume.md. Nếu ai đo bằng thời điểm sửa đổi tệp thì sẽ ra 5; đo bằng "món của gói" thì ra 4.

2.2 — Vì sao lỗ này lại tồn tại: luật lane có hai chỗ ghi

Đây mới là nguyên nhân, và nó không phải là "quên". Tôi phân loại 69 tệp theo trường to: trong phần đầu tệp:

Loại thư (to:) Có dòng trong sổ Không có dòng Tổng
se — thư gửi đích danh 23 0 23
all-fit — thư phát đại trà 22 20 42
all — thư phát đại trà 0 1 1
(không có dòng to:) 0 3 3
Tổng 45 24 69

Đọc bảng này ra được ba điều, và điều thứ ba là điều đắt nhất.

  1. Lane thư gửi đích danh sạch tuyệt đối: 23 trên 23. Đây là control dương mạnh nhất tôi có — nó chứng minh kỷ luật ghi sổ của SE có tồn tại và có chạy, nên 24 lá kia không phải do lười.
  2. Lane thư phát đại trà rò gần một nửa: 22 vào sổ, 21 không. Cùng một loại thư, hai số phận khác nhau.
  3. Chính cuốn sổ tự viết rằng loại thư này không thuộc về nó. broadcasts/_index.md:7 ghi: "Fan-out adap broadcast (≠ email directed) → outbox/all/ (pull /adap-apply), track ở COMMS-LEDGER OUT — KHÔNG ở index này". Nghĩa là theo luật của chính SE, 21 lá phát đại trà không sai khi vắng mặt. Nhưng 22 lá cùng loại lại có mặt, ghi đầy đủ ai_infra → se, processed, dấu — ví dụ broadcasts/_index.md:27, :28, :30, :34, :39. Vậy luật nói một đằng, cuốn sổ làm một nẻo, hai mươi hai lần.

2.3 — Cuốn sổ mà luật trỏ tới không tồn tại trong kho SE

Đây là phát hiện nặng nhất của §2, và nó biến khoản này từ "quên ghi" thành "không có chỗ để ghi".

Luật ở _index.md:7 bảo đi ghi ở COMMS-LEDGER. Tôi tìm:

  • find . -iname "*COMMS*" (loại .gitnode_modules) → không có tệp nào.
  • Control dương cho chính phép tìm đó: cùng lệnh find . -iname "*ledger*" → ra 4 tệp (.claude/governance/reinject-ledger.md, .claude/workflows/runs/_ledger.md, docs/governance/error-ledger.md, và một tệp nhật ký phiên). Vậy lệnh chạy được, thư mục đọc được; kết quả rỗng là rỗng thật.
  • Mọi lần chữ COMMS-LEDGER xuất hiện trong kho SE đều đang nói về kho của hub, không phải kho SE. Bằng chứng rõ nhất: .claude/workflows/runs/2026-07-25-S152-h24-open-bookend/sub-lead-stale-close-S152.md:163 liệt ba tệp của hub, trong đó có docs/governance/COMMS-LEDGER.md — tức là tệp ấy nằm ở AI_INFRA.

21 lá thư phát đại trà đang không có sổ nào nhận chúng. Sổ A từ chối chúng bằng văn bản, sổ B không tồn tại. Đây đúng cái mà GĐ-1 mục (i) gọi tên: "Cho phép hai chỗ đặt là cho phép hai chỗ tìm, và tới lúc cần thì ai cũng tìm chỗ còn lại." Ở SE thì tệ hơn một bậc: chỗ còn lại không có.

2.4 — Khoản này đã từng bị xử là báo động giả, và cách xử đó nay không còn đứng vững

Ngày 2026-07-26, phiên S153 đã gặp đúng câu hỏi này và kết luận là dương giả: "F-4 _index inbound = dương-giả (19 thư fan-out outbox/all, header :7 khai track ở COMMS-LEDGER)".claude/workflows/runs/2026-07-26-S153-bookend-close/bookend-close-synthesis.md:25, và vòng kiểm độc lập ghi nhận không chấm lại ở sub-ring1-close-S153.md:161.

Kết luận đó hợp lệ tại thời điểm đó trong phạm vi câu hỏi lúc đó ("sổ này có thiếu dòng không?"). Nhưng nó không trả lời câu hỏi mà A0-3 đặt ra bây giờ ("bạn có tìm được dòng đã nhận bằng một lệnh tìm kiếm không?"). Hai câu hỏi khác nhau, nên hai kết luận không mâu thuẫn nhau — nhưng ai đem kết luận cũ ra dùng cho câu hỏi mới sẽ đóng nhầm một khoản đang hở. Thêm nữa, con số đã trôi từ 19 lên 21 trong mười hai ngày, nên ngay cả trong phạm vi cũ thì lỗ vẫn đang lớn dần.

Cùng cuốn sổ còn mang sẵn một vết tự thú của đúng lớp lỗi này ở phần cuối tệp: "Reconcile S123 — hai dòng đầu là email S122 đã gửi nhưng chưa từng được log … _index là sổ mà hub và audit đọc; email gửi mà không log thì hub không biết có nó." Lớp lỗi đã được đặt tên, đã được vá một lần ở chiều gửi, và đang tái diễn ở chiều nhận.

2.5 — Vá thế nào cho đúng khuôn

Bốn việc, làm đúng thứ tự này. Việc 1 và 2 là bắt buộc để đóng A0-3; việc 3 là thứ ngăn nó tái phát; việc 4 là thứ hub sẽ soi.

  1. Chọn một chỗ, bỏ chữ "hoặc". Quyết định thư phát đại trà nhận vào thì ghi ở đâu, rồi sửa luật ở broadcasts/_index.md:7 cho khớp với thực tế. Có hai đường đi được, và đường thứ nhất rẻ hơn nhiều: (a) mở phạm vi khối INBOUND của _index để nhận cả thư phát đại trà — cách này hợp thức hóa 22 dòng đã tồn tại thay vì phải gỡ chúng ra; (b) dựng một cuốn sổ thứ hai trong kho SE và đồng thời gỡ 22 dòng kia khỏi _index. Chọn (b) mà quên vế gỡ là tạo ra đúng tình trạng hai chỗ ghi mà GĐ-1 cấm.
  2. Bù đủ 24 dòng, không bù 4. Bù 4 dòng cho riêng gói này rồi tuyên đã xong A0-3 là để lại 20 lỗ và làm cuốn sổ tiếp tục nói dối. Mỗi dòng cần: ngày nhận · mã định danh · ai_infra → se · nấc hiện tại · mã băm · dấu đối chiếu. Riêng bốn món của gói, mã băm lấy từ phần đầu tệp (43db2cf0 · 49287ce7 · 98e31fad · c24699f0) và dấu đối chiếu lấy từ kết quả scripts/stamp_verify.py — như vậy một việc đóng luôn hai khoản, vì đây cũng chính là chỗ ghi thường trực còn thiếu của G0-B2.
  3. Cắm một phép đối chiếu ngược chạy được. Phép ở §2.1 (duyệt tệp trên đĩa, tìm tên trong sổ, in ra danh sách vắng mặt) là một vị từ máy kiểm hoàn chỉnh cho A0-3 — nó đọc hai nguồn (đĩa và sổ) đúng như GĐ-2 mục (ii) đòi, thay vì chỉ đọc sổ, mà đọc sổ thì là tự soi mình. Chạy nó ở cửa đóng phiên là bắt được ngay lá thư kế tiếp bị rơi.
  4. Ba lá không có dòng to: phải xử riêng, đừng gộp. 2026-07-20-Governance-auto-toan-vong-distill-2-tang.md, 2026-07-21-Governance-eval-quality-audit-ra-thuoc-eval-cua-eval.md, 2026-07-25-Governance-model-default-opus-5-max.md — cả ba thiếu trường to:, nên mọi phép phân loại theo to: sẽ bỏ rơi chúng trong im lặng. Đây là ca "vắng mặt trông giống ổn": chúng không rơi vào bất kỳ nhánh nào của luật lane, kể cả sau khi luật được sửa.

Một hệ quả cần nói thẳng: cả bốn món đều mang to: all-fit, nghĩa là chúng là thư phát đại trà. Vậy trước khi bù dòng cho chúng, việc 1 phải xong — nếu không thì bù dòng chính là hành vi vi phạm luật đang có hiệu lực ở _index.md:7, và ta lại thêm 4 vào con số 22.


§3 — GĐ-1: bóc TỪNG KHOẢN (24 khoản) — trục nặng nhất

Hub đòi GĐ-1 ở bốn nơi, giống GĐ-0. Tôi liệt riêng từng nơi.

  • Nơi 1 — thư chính :133-1407 bước làm (G1-B1..B7).
  • Nơi 2 — phụ lục :99-1195 mục sàn chức năng (G1-S(i)..S(v)) trong đó mục (iii) tự nở thành 6 bước giao thức di trú (G1-M1..M6).
  • Nơi 3 — thư chính :142-1462 lệnh "kiểm xong chưa" (G1-K1..K2).
  • Nơi 4 — phụ lục :132-1376 ô nghiệm thu (G1-N1..N6).

Tổng 24 khoản (7 + 5 + 6 + 2 + 6, trừ đi 2 chỗ trùng khít giữa nơi 1 và nơi 2 mà tôi ghi rõ bên dưới).

3.1 — Bảy bước làm (thư chính :133-140)

# Hub đòi SE Bằng chứng
G1-B1 Một văn bản chuẩn đặt tên duy nhất, phủ đủ sáu nhóm tên, kèm luật lane đơn trị cho sổ THIẾU HẲN — không có văn bản nào đóng vai chuẩn đặt tên Ứng viên gần nhất là docs/governance/vocab-alias-map.md; phân tích ở §3.3 cho thấy nó không phải chuẩn. Ứng viên thứ hai là docs/rules.md, nhưng nó là quy ước viết mã (Clean Architecture · React · DB · Git), không phủ tên vai / thư mục lượt chạy / tệp mốc phiên. Ngoài ra §2.3 đã chứng minh luật lane đơn trị đang VỠ ở đúng cuốn sổ liên lạc
G1-B2 Một vai giữ chuẩn, quyền hẹp, chia hai lớp an toàn ⟂ nguy hiểm THIẾU — không vai nào trong 26 vai mang nhiệm vụ này ls .claude/agents/*.md = 26 tệp (bỏ README.md); không tệp nào có tên hay trục liên quan tới giữ chuẩn tên. Control dương: cùng thư mục có ring1-audit/ring2-audit/ring4-audit là các vai-kiểm chuyên trách, chứng minh SE biết cách dựng vai hẹp — nên đây là thiếu chứ không phải không làm được. 🔴 Việc lập vai mới vượt khung, phải hỏi anh
G1-B3 Sổ đổi tên chỉ-thêm-không-xoá, có cột "đã quét những đâu" ghi đúng lệnh đã chạy và số hit thật THIẾU vocab-alias-map.md có tính chất append-only và single-writer (:6) nhưng không có cột "đã quét những đâu" — 73 dòng, bảng thuộc tính chỉ gồm Canonical · Alias · lý do. Không có ô nào chứa lệnh đã chạy hay số hit
G1-B4 Máy soi tên, cắm vào cổng ở chế độ báo-cáo-thôi trước CÓ MỘT PHẦN, KHÔNG PHẢI MÁY SOI TÊN scripts/governance-detectors.ps1 có kiểm C3 vocab-fork — nhưng nó soi từ ngữ trong văn bản, không soi tên tệp/thư mục/vai. Đây là hai việc khác nhau, và đây chính là chỗ dễ tuyên nhầm là "đã có". Chế độ báo-cáo-thôi thì SE đã có sẵn ở mức toàn cục (doctrine exit-0)
G1-B5 Đối chứng hai chiều cộng phản chứng trên khu thử, chép cả hai kết quả vào báo cáo KHÔNG ĐO ĐƯỢC — chưa có máy soi tên để đối chứng Vị từ thay thế theo thư chính:146: hai tệp đầu tiên (chuẩn + sổ đổi tên) tồn tại → cả hai đều chưa tồn tại, nên khai chưa làm chứ không phải không đo được
G1-B6 Ghi vào chuẩn: luật giữ nguyên tên cũ + giao thức di trú sáu bước THIẾU VĂN BẢN, NHƯNG TINH THẦN ĐÃ CÓ RẢI RÁC vocab-alias-map.md:14-20 liệt 5 vùng đóng băng tuyệt đối không viết lại (docs/changelog/sessions/**, docs/_archive/**, docs/governance/adap-reports/**, .claude/workflows/runs/**, broadcasts/**) và :22 giải thích "không được sửa ngược quá khứ". Đây đúng là luật giữ-nguyên-tên-cũ của hub, chỉ chưa được gọi tên và chưa nằm trong một chuẩn
G1-B7 Khi đủ số phiên sạch nhà bạn tự đặt, siết máy soi sang chế độ lái mã thoát CHƯA TỚI LƯỢT — phụ thuộc G1-B4. 🔴 Thêm nữa, việc siết bất kỳ máy nào sang lái mã thoát đụng thẳng vào doctrine exit-0 của SE, là xung đột đã được N1 xếp loại vượt khung scripts/governance-detectors.ps1 vùng :1941+

3.2 — Năm mục sàn chức năng + sáu bước di trú (phụ lục :99-119)

# Mục SE
G1-S(i) Một văn bản chuẩn + luật lane đơn trị, bỏ chữ "hoặc" THIẾU (trùng G1-B1) — và §2.3 là ca vỡ lane có thật, đo được
G1-S(ii) Vai giữ chuẩn, hai lớp quyền THIẾU (trùng G1-B2)
G1-S(iii) Giao thức di trú sáu bước THIẾU — bung thành G1-M1..M6 bên dưới
G1-S(iv) Giữ nguyên tên cũ, tuyệt đối ĐÃ CÓ VỀ THỰC CHẤTvocab-alias-map.md:14-22; thiếu việc ghi thành luật trong một chuẩn
G1-S(v) Máy soi tên ở cổng, phân biệt rạch ròi con số lái mã thoát ⟂ con số chỉ để báo cáo VẾ SAU ĐÃ CÓ, VẾ TRƯỚC CHƯAgovernance-detectors.ps1 đã tách TOTALINFORM (vùng :65-72:1941+), đúng tinh thần hub. Nhưng chưa có máy soi tên
G1-M1 Ký chuẩn chưa — không có chuẩn để ký
G1-M2 Kiểm kê mọi chỗ máy đang đọc tên — quét kịch bản, bài kiểm, tệp lệnh CHÍNH TÔI VỪA LÀM MỘT PHẦN, XEM §3.4 — nhưng chưa ai chép nó vào sổ nào
G1-M3 Cho bộ phân tích đọc được cả tên cũ lẫn tên mới trước đã CÓ MỘT TIỀN LỆ ĐÚNG SÁCHscripts/session_ctx.py:351-358 đếm song song hai họ _pause-<i>.md (khuôn hub, từ S148) và pause-*.md (cũ, tới S147), và tự ghi chú rằng dấu gạch dưới đứng đầu khiến hai phép đếm không thể trùng nhau. Đây là mẫu để nhân rộng
G1-M4 Tên mới chỉ áp từ nay về sau tinh thần đã có (G1-S(iv)), chưa thành luật
G1-M5 Đối chứng hai chiều + phản chứng chưa (trùng G1-B5)
G1-M6 Bật chế độ nghiêm sau một số phiên sạch do nhà bạn đặt chưa (trùng G1-B7)

3.3 — Trả lời dứt khoát: vocab-alias-map.mdbảng dịch, KHÔNG phải chuẩn duy nhất

Câu hỏi này phải trả lời rõ vì nếu trả lời sai theo chiều lạc quan thì SE sẽ khai không áp dụng cho GĐ-1, và cả gói sẽ đứng trên một nền không có thật.

Tệp tự nhận là "nguồn duy nhất (single source)" ngay ở dòng :3. Nhưng đọc tiếp chính dòng đó và dòng :8 thì phạm vi tự thu hẹp lại:

  • :3 — mục đích là "ghi lại các cặp thuật ngữ ĐỒNG NGHĨA … một khái niệm nhưng đang tồn tại dưới hai cái tên", phục vụ đợt rà trôi-nghĩa hằng tháng, để khi kiểm C3 giơ cờ thì người rà tra xem đâu là từ chuẩn.
  • :8"Chỉ ghi các cặp thật sự là MỘT khái niệm hai tên (fork-để-hợp-nhất). KHÔNG ghi các từ trùng-mặt-chữ nhưng khác nghĩa".

Nghĩa là nó ghi lại các cặp đã lỡ sinh ra, chứ không quy định cách đặt tên mới. Ba phép thử cho ra cùng một kết luận:

  1. Phép thử tiên đoán. Đưa cho nó một vai mới chưa từng có tên: nó không nói được vai đó phải tên thế nào. Một chuẩn thì nói được.
  2. Phép thử phủ sóng. Hub đòi chuẩn phủ sáu nhóm tên: tên vai · nhãn hiển thị các lớp kiểm · thư mục lượt chạy · tệp mốc phiên · nhãn tác vụ · tên các cuốn sổ. vocab-alias-map.md không có mục nào cho bất kỳ nhóm nào trong sáu nhóm đó; nó có các mục theo cặp từ, ví dụ mục 1 là run-tracewave-folder.
  3. Phép thử hướng. Chuẩn nhìn về phía trước (tên sau này phải thế nào). Bảng dịch nhìn về phía sau (tên cũ ứng với tên nào). vocab-alias-map.md:14-22 dành hẳn một khối để nói vì sao tên cũ phải còn mãi — đó là ngôn ngữ của bảng dịch.

Kết luận: vocab-alias-map.md là một bảng dịch tốt và là vật liệu đầu vào quý cho chuẩn (nó đã giải quyết sẵn mục (iv) giữ-nguyên-tên-cũ và đã có kỷ luật một-người-ghi). Nhưng nó không phải chuẩn duy nhất mà GĐ-1 đòi. SE KHÔNG khai không áp dụng cho GĐ-1 được.

3.4 — Đếm họ tên đang cùng sống, và kiểm kê đoạn máy đang đọc tên

Đây là phép đo của khoản G1-M2, và cũng là thứ quyết định TC-11 ("không được rớt bất kỳ đoạn máy nào đang đọc tên cũ").

Tám nhóm tên, mười chín họ, sáu nhóm đang đa họ.

# Nhóm tên Số họ đang sống Đo bằng gì
1 Tên vai 1kebab-case .claude/agents/*.md bỏ README = 26 · .claude/agent-memory/*/ = 26 · hmw.js VALID_ROLES = 26. Đối chiếu hai chiều bằng comm: rỗng cả hai phía ⇒ ba nguồn khớp tuyệt đối. 🟢 Đây là nhóm sạch nhất, và là bằng chứng SE giữ được đơn trị khi có máy chặn
2 Tên lệnh 1 hình thức (kebab-case), có 1 ngoại lệ ngôn ngữ ls .claude/commands/ = 19; 18 tên tiếng Anh, riêng tiep.md tiếng Việt. Không phải lỗi, nhưng chuẩn phải nói rõ ngoại lệ này là cố ý
3 Thư mục lượt chạy 2 ls -d .claude/workflows/runs/*/ = 88. Khớp YYYY-MM-DD-S<n>-<slug> = 70; không khớp = 18, tất cả theo họ YYYY-MM-DD-<chủ-đề> (2026-06-18-h10-implement, 2026-06-18-harness-audit-invest, 2026-06-18-mig54-pe-review, 2026-07-11-h21-mtv3-adopt, 2026-07-13-pe-negative-quote, …)
4 Nhãn tác vụ (tệp con trong lượt chạy) ≥3 Tổng .md trong runs/*/ = 706. Bắt đầu bằng sub- = 402. Không phải sub- và không phải run.md = 219, gồm ít nhất ba kiểu: <x>-synthesis.md, <x>-return.md, và tên tự do (C14-disposition-per-khoan.md, W0-evidence-15-07-2026.md, cicd-verify-<mã>.md)
5 Nhật ký phiên 5 ls docs/changelog/sessions/ = 159. (a) YYYY-MM-DD-HHMM-S<n>- = 19 · (b) YYYY-MM-DD-S<n>- = 78 · (c) YYYY-MM-DD-s<n>- chữ s thường = 13 · (d) YYYY-MM-DD-HHMM-<slug> không có số phiên = 45 · (e) YYYY-MM-DD-<slug> trần = 4. Tổng cộng 19+78+13+45+4 = 159 — nhưng tôi phải trừ tay một trùng: 2026-06-11-S57bis-… rơi vào cả (b) lẫn phép lọc (e) vì hậu tố bis, nên bảng thô cộng ra 160 và tôi đã đối chiếu lại để chốt 159
6 Tệp mốc phiên 2 scripts/session_ctx.py:351-358 khai thẳng: khuôn hub _pause-<i>.md (từ S148) và họ cũ pause-*.md (tới S147) cùng sống, đếm tách. Cùng thư mục còn _mind-s-<N>.md, _context-s-<N>.md, _snapshot-<k>.md, _tiep-<i>.md
7 Kịch bản 3 ls scripts/ = 53 mục. kebab-case = 45 · snake_case (toàn bộ là .py) = 5 · có tiền tố phiên hoặc kế hoạch (s59-, s85-, s89-, s91-, plan-b-, plan-ca-, plan-t5-, …) = 16 (giao với hai nhóm trên). 🔴 Ca đắt nhất nằm ngay đây: scripts/session-scaffold.ps1scripts/session_scaffold.py là cùng một khái niệm, hai tên, hai quy ước — đúng định nghĩa fork mà nhóm 1 đã tránh được
8 Tên cuốn sổ 2 docs/governance/ có họ HOA-GẠCH (BROADCAST-OUT-SOLUTION-ERP-2026-05-29.md, RAG-AUDIT-RESPONSE-2026-05-29.md) và họ kebab thường (vocab-alias-map.md, error-ledger.md, harness-11-engine.md, fable-real-runbook.md, session-model-se-draft.md, ctx-soft-memory-se-draft.md). Cộng thêm ca _indexCOMMS-LEDGER ở §2.3

Một hệ quả phải nói ra, vì nó là bằng chứng cứng nhất rằng SE chưa có chuẩn: CLAUDE.md ở gốc kho ghi quy ước nhật ký phiên là docs/changelog/sessions/YYYY-MM-DD-HHMM-{topic}.md. Đối chiếu với nhóm 5: nếu đọc chặt, quy ước đó chỉ khớp họ (d) = 45/159; nếu đọc rộng (coi S<n> là một phần của {topic}) thì khớp họ (a) và (d) = 64/159. Cả hai cách đọc đều cho ra: quy ước duy nhất đang được ghi thành văn trong kho khớp với chưa tới một nửa số tệp thật, và họ đông nhất (b, 78 tệp) thì không khớp cách nào. Văn bản nói một đằng, đĩa làm một nẻo, và không ai bị chặn.

Mười một đoạn máy đang đọc tên — rớt một đoạn là vỡ. Tôi quét kịch bản, tệp lệnh và hook bằng mẫu tìm tên tệp/thư mục; danh sách dưới đây là từng tệp một, không nén thành khoảng.

# Đoạn máy Đọc tên gì Hậu quả nếu đổi tên mà quên nó
1 .claude/workflows/hmw.js:22-55 VALID_ROLES 26 tên vai, dạng chuỗi cứng :173-185 khai rõ: vai ngoài danh sách = DỪNG HẲN, không fail mềm. Đổi tên vai mà quên đây thì fan-out chết ngay tại chỗ — may là nó ồn ào, không im lặng
2 scripts/governance-detectors.ps1:1102 `^(sub-.+ .+-return).md$`
3 scripts/governance-detectors.ps1:1105-1106 suy vai từ tên tệp, ba nấc tham lam: ^sub-(.+)-\d+\.md$ rồi ^sub-(.+)\.md$ Suy sai vai ⇒ vai bị coi là chưa từng chạy ⇒ cờ sai. Chính tệp tự ghi ở :1068 rằng đây là lớp lỗi đã gặp từ S122
4 scripts/governance-detectors.ps1:1679 tên tệp phải chứa lead-stale, lead-gap, hoặc ring2-audit Đổi tên ba vai đó ⇒ luật khuôn-cờ ngừng áp mà cổng vẫn xanh
5 scripts/governance-detectors.ps1:1716 sub-h24-audit-*.md như trên
6 scripts/governance-detectors.ps1:1050 đường dẫn docs/changelog/sessions/ Đổi chỗ nhật ký phiên ⇒ phép kiểm đóng phiên mất một chân
7 scripts/governance-detectors.ps1:1605,1633 .claude/sessions/session-<N>/_context-s-<N>.md Đây đúng loại tệp mà hub gọi là máy neo đường dẫn cố định (phu-luc:119) — chuẩn phải ghi rõ loại này giữ tên, để thời điểm sống trong tiêu đề bên trong
8 scripts/session_ctx.py:110,133,351-358,530 _snapshot-*, session-{N}, _pause-*pause-*, _context-s-%d.md Đã xử lý đúng sách (đọc được cả hai họ). Nhưng nó phụ thuộc vào dấu gạch dưới đứng đầu để không đếm trùng — đổi quy ước tiền tố là hỏng thầm
9 scripts/session-scaffold.ps1 scripts/session_scaffold.py sinh ra tên tệp mốc phiên Hai bản, hai quy ước tên — sửa một bản quên bản kia là đẻ ra họ thứ ba
10 scripts/closeout-sentinel.ps1 · scripts/mfe-eval.ps1 · scripts/applied-eval-nokey.ps1 · scripts/crystallized-backfill.ps1 · scripts/memory-selfimprove-audit.ps1 đều lọt lưới quét mẫu-tên (đã liệt từng tệp, không gộp) CHƯA ĐO chi tiết từng dòng — cần chạy grep -nE "sub-|_mind|_context|session-|runs" <từng tệp> để lấy đúng số dòng. Tôi khai thiếu chứ không đoán
11 .claude/hooks/wal-flush.ps1 bản thân nó được neo bằng tên trong .claude/settings.json (hooks.Stoppowershell.exe … -File .claude/hooks/wal-flush.ps1) Đổi tên tệp hook mà quên sửa cấu hình ⇒ hook im lặng không chạy, và không có gì báo

Thêm một đoạn máy nữa, từ lane D, cùng gốc bệnh: scripts/spawn-model-audit.ps1 chọn phiên bằng vị từ Test-Path subagents\workflows. Đó là một vị từ dựa trên tên đường dẫn, nên nó thuộc đúng nhóm này: phiên nào sinh vai bằng công cụ Task sẽ không có thư mục ấy, máy mù trọn phiên mà vẫn in TOTAL FLAGS: 0. Hai chỗ chung một gốc: lấy sự tồn tại của một cái tên làm bằng chứng cho sự tồn tại của một sự kiện. Chuẩn đặt tên nếu viết đúng phải cấm hẳn lối suy này, và máy soi tên phải in kèm mẫu số để "không hit" không bị đọc thành "sạch".

3.5 — Hai lệnh kiểm và sáu ô nghiệm thu của GĐ-1

# Khoản SE
G1-K1 test -f <chuẩn> && test -f <sổ đổi tên> && echo OK TRƯỢT — cả hai tệp đều chưa tồn tại
G1-K2 <máy soi tên>; echo exit=$? phải bằng 0 và in kèm mẫu số mỗi luật KHÔNG ĐO ĐƯỢC — chưa có máy soi tên. Vị từ thay thế của hub là sự tồn tại của hai tệp đầu, và hai tệp đó cũng chưa có, nên khai chưa làm
G1-N1 Văn bản chuẩn tồn tại, phủ sáu nhóm tên, có luật lane đơn trị trượt
G1-N2 Vai giữ chuẩn tồn tại, quyền mô tả theo hai lớp trượt
G1-N3 Sổ đổi tên tồn tại, chỉ-thêm-không-xoá, có cột "đã quét những đâu" trượt — vocab-alias-map.md đạt vế append-only, thiếu vế cột
G1-N4 Máy soi tên chạy được, mã thoát 0, in kèm mẫu số trượt
G1-N5 Đối chứng hai chiều đạt; phản chứng làm máy báo trượt
G1-N6 Luật giữ-nguyên-tên-cũ được ghi thành văn ĐẠT VỀ NỘI DUNGvocab-alias-map.md:14-22; chưa đạt về chỗ đặt (phải nằm trong chuẩn)

Tổng kết GĐ-1: 24 khoản. ĐÃ CÓ 3 (G1-S(iv)/G1-N6 luật giữ tên cũ · vế tách số-lái-mã-thoát của G1-S(v) · tiền lệ đọc-hai-họ G1-M3). THIẾU 20. NGƯỢC 1 — xem ngay dưới.

🔴 Khoản NGƯỢC duy nhất của cả hai giai đoạn: G1-B7. Hub bảo "siết máy soi tên sang chế độ lái mã thoát" sau vài phiên sạch. SE có doctrine luôn trả mã thoát 0scripts/governance-detectors.ps1 (vùng :1941+, N1 ghi nhận câu tự khai "Exit 0 always"). Đây không phải SE làm sai — đây là hai triết lý cổng khác nhau, và N1 đã xếp nó là xung đột vượt khung duy nhất của cả gói. Với riêng GĐ-1, hệ quả là: SE làm được G1-B4 (máy soi ở chế độ báo-cáo-thôi) nhưng không được tự quyết G1-B7. Đề nghị khai G1-B7hoãn, điều kiện gỡ = anh và AI_INFRA chốt triết lý cổng — chứ không khai đã áp.


§4 — Bẫy hub đã giẫm ở GĐ-0/GĐ-1: SE có nguy cơ giẫm lại không?

Trả lời từng bẫy, có bằng chứng, không gộp. Ba bẫy GĐ-0 (phu-luc:80-82) và sáu bẫy GĐ-1 (phu-luc:123-128).

Bẫy GĐ-0

Bẫy Nguy cơ ở SE Căn cứ
Nhận mà không ghi đĩa ngay 🟢 THẤP Bốn món đã trên đĩa và băm đã khớp 4/4. SE làm đúng bẫy này
Ghi đĩa mà quên tệp theo dõi 🔴 CAO — đang giẫm ngay lúc này A0-2 thiếu (§1.3). Tiến độ gói đang được theo dõi trong run.md của một lượt chạy, mà lượt chạy thì kết thúc theo phiên
Bỏ trống dòng nào đó của bản đồ áp dụng 🟡 TRUNG BÌNH — biến thể khác Bảy dòng đều có chữ, không dòng nào trống. Nhưng ba dòng trộn hai quyết định vào một ô (§5), mà hub nói dòng đọc-không-ra-quyết-định thì lượt kiểm buộc phải xử như quên

Bẫy GĐ-1

Bẫy Nguy cơ ở SE Căn cứ
Bẫy 1 — bom hẹn giờ theo NGÀY 🔴 CAO Đây là bẫy nguy hiểm nhất cho SE, vì nó khớp chính xác hình dạng của nhóm 5. Nếu chuẩn viết "nhật ký phiên từ nay đặt theo YYYY-MM-DD-HHMM-S<n>-<slug>" rồi ai đó viết một bài kiểm khẳng định "kho sạch", bài kiểm sẽ xanh hôm nay và đỏ vào ngày quy ước có hiệu lực mà không ai chạm vào mã. Vá theo hub: tập giá trị hợp lệ phải chứa cả năm họ đang sống, và bài kiểm chạy trên đồ gá cô lập, không khẳng định trên cây tệp sống
Bẫy 2 — cổng là khoá duy nhất thì cấm khoá ngầm 🟡 TRUNG BÌNH SE có tiền lệ tốt: governance-detectors.ps1 đã tách phần lái mã thoát khỏi phần chỉ báo cáo. Nhưng nếu cắm thêm máy soi tên vào cùng cổng đóng phiên thì rủi ro một lượt dò hỏng nuốt mất kết luận chính là có thật
Bẫy 3 — bài kiểm vá đè lên chính đối tượng đang kiểm 🟡 TRUNG BÌNH Chưa có bài kiểm nào để mà vá đè. Cần nêu trước để lượt thi công không tự cấp tín chỉ
Bẫy 4 — máy soi trả không-hit trên kho toàn tên cũ được miễn trừ thì KHÔNG chứng minh máy còn sống 🔴 RẤT CAO — SE là ca sách giáo khoa Theo G1-S(iv), năm vùng đóng băng được miễn trừ vĩnh viễn, và ba trong năm vùng đó (sessions/, runs/, broadcasts/) chính là nơi chứa phần lớn tên đang lệch. Một máy soi tên áp về-phía-trước sẽ trả "không hit" ngay ngày đầu vì gần như mọi thứ đều được miễn, và con số 0 đó không chứng minh gì cả. Bắt buộc: đối chứng trên khu thử, và in mẫu số
Bẫy 5 — mẫu số quá nhỏ làm "không hit" gần như vô nghĩa 🔴 RẤT CAO — hệ quả trực tiếp của bẫy 4 Luật áp về-phía-trước nghĩa là ngày đầu mẫu số bằng 0 hoặc gần 0. Mọi con số hit phải in kèm mẫu số, không có ngoại lệ
Bẫy 6 — số bài kiểm đo giữa chừng không phải kết luận cổng 🟡 TRUNG BÌNH Phiên này có sáu lane cùng ghi vào một thư mục lượt chạy. Bất kỳ con số nào đếm tệp trong runs/2026-08-07-S180-…/ đo ở giữa đều là con số của một trạng thái không tồn tại. Tôi tự áp luật này: mọi con số trong tệp lane này đều đo trên vùng ngoài thư mục lượt chạy, trừ ô G0-B6/G0-K1 mà tôi đã ghi rõ là đang trỏ vào tệp điều tra

§5 — Ô fit-map đúng cho GĐ-0 và GĐ-1

N2 bắt lỗi F-03: ba trên bảy ô quyết định đang trộn giá trị, trong khi Phần A (khuon-…:31) bắt "mỗi dòng chọn một trong ba". Tôi kiểm lại bảng ở sub-invest-fitmap-S180.md:222-228 và xác nhận ba ô trộn nằm ở GĐ-3, GĐ-4, GĐ-5 — cụ thể :225 "áp dụng MỘT PHẦN — phần cổng-mã-lỗi HOÃN", :226 "áp dụng — sổ TRƯỚC, chấm điểm CHỜ ANH GẬT wire", :227 "áp dụng phần THIẾU nhỏ; phần lõi khai đã có tương đương". Hai ô thuộc lane tôi thì không nằm trong ba ô đó — nhưng cả hai vẫn cần chỉnh, vì lý do khác.

GĐ-0 → áp dụng

Đây là giá trị đúng, và nó là giá trị duy nhất khả dĩ: không áp dụng đòi lý do kiểm được về một cơ chế tương đương, mà §1 cho thấy chín khoản đang thiếu; hoãn thì vô nghĩa vì GĐ-0 là điều kiện tồn tại của mọi phép kiểm về sau, hoãn nó là hoãn cả gói.

Ô hiện tại ở :222 ghi **áp dụng**đã đúng. Cần chỉnh một chỗ: phần chữ "đang làm dở phiên này; còn: dòng đã-nhận _index, fit-map file rời, tệp theo dõi A0..A16, adap-report" liệt bốn việc còn nợ, trong khi §1 đếm được chín khoản thiếu và ba khoản sai khuôn. Chưa kể A0..A16 viết dưới dạng khoảng, đúng cái mà khoản A12 cấm ("liệt kê từng mục, cấm nén thành khoảng"). Đề nghị: giữ nguyên ô quyết định, viết lại ô lý do thành danh sách từng khoản.

GĐ-1 → áp dụng

Ô hiện tại ở :223 ghi **áp dụng** (tailored). Giá trị đúng, nhưng ô cần làm sạch.

  • Vì sao là áp dụng chứ không phải không áp dụng: §3.3 đã chứng minh vocab-alias-map.md là bảng dịch. Khai không áp dụng đòi "lý do kiểm được" — mà lý do khả dĩ duy nhất ("nhà tôi đã có chuẩn riêng, tệp ở đây, máy soi ở kia") thì SE không dán được đường dẫn nào vào cả hai chỗ trống. Khai không áp dụng ở đây là khai sai.
  • Vì sao không phải hoãn: hoãn đòi điều kiện gỡ "có thể xảy ra và nhận biết được". Việc dựng chuẩn không chờ ai — nó chỉ chờ chính SE viết. Không có điều kiện gỡ nào thật cả.
  • Chỉnh hình thức: bỏ chữ (tailored) khỏi ô quyết định, đẩy sang ô lý do. Ô quyết định phải đọc được bằng máy và bằng mắt là đúng một trong ba chữ. Việc may đo theo nhà mình là mặc định của cả gói (phu-luc:26), nói lại trong ô quyết định vừa thừa vừa tạo ra giá trị thứ tư trên thực tế.
  • Chỉnh nội dung: ô lý do hiện ghi "vai-giữ-chuẩn = chờ anh (VƯỢT-KHUNG (d))". Đúng, và nên tách rõ thành hai khoản vượt khung riêng biệt, vì chúng cần hai quyết định khác nhau của anh: (a) G1-B2 lập vai giữ chuẩn — thêm vai thứ 27 vào bộ máy; (b) G1-B7 siết máy soi sang lái mã thoát — đụng doctrine exit-0. Gộp hai cái vào một dấu ngoặc là để anh phải đoán mình đang duyệt cái nào.

Về đường thoát "nấc đã đồng ý": không cần dùng ở lane này. Đường thoát đó hợp cho GĐ-3/4/5 nơi SE thật sự chỉ adopt một phần. Với GĐ-0 và GĐ-1 thì SE adopt trọn sàn chức năng; hai khoản vượt khung không làm giảm phạm vi adopt, chúng chỉ chặn nấcđã thi công cho tới khi anh chốt. Ghi chúng vào cột lý do là đủ, không cần đổi giá trị ô quyết định.


§6 — Chặn wave đầu: điều gì phải xong trước

Anh đã chốt OD-2: đi đúng thứ tự GĐ-0 → GĐ-6, cấm nhảy cóc. Vậy wave đầu tiên là GĐ-0, và câu hỏi thật là: GĐ-0 xong thì GĐ-1 có chạy được không, và GĐ-1 có chặn phần còn lại không.

Trả lời ngắn: GĐ-1 KHÔNG chặn GĐ-2 tới GĐ-5 nếu nó đạt nấc đã thi công; nhưng SE KHÔNG được phép khai không áp dụng để đi vòng. Luật điều kiện vào (thu-chinh:101) cho hai đường: giai đoạn trước ở nấc đã thi công, hoặc khai không áp dụng kèm lý do tương đương kiểm được. §3.3 đã đóng đường thứ hai. Nên SE bắt buộc phải thi công GĐ-1 — đó chính là nghĩa của "chốt mở khoá".

Bốn việc phải xong trước khi wave đầu tiên (GĐ-0) được coi là đóng:

  1. Chọn một chỗ ghi cho thư phát đại trà rồi sửa broadcasts/_index.md:7 cho khớp thực tế — §2.5 việc 1. Đây phải là việc đầu tiên, vì việc 2 phụ thuộc nó.
  2. Bù đủ 24 dòng "đã nhận", mỗi dòng kèm ngày và mã băm; riêng bốn món dùng kết quả scripts/stamp_verify.py để đóng luôn vế ghi-lại-băm của G0-B2.
  3. Dựng tệp theo dõi 20 khoản (A0-1 · A0-2 · A0-3 · A0-4 · A1 · A2 · A3 · A4 · A5 · A6 · A7 · A8 · A9 · A10 · A11 · A12 · A13 · A14 · A15 · A16) ở một chỗ sống lâu hơn phiên — không để trong thư mục lượt chạy.
  4. Tách bảng bảy dòng ra một tệp bản đồ riêng, làm sạch ô quyết định theo §5, để lệnh grep -c '^| GĐ-[0-6]' chạy được trên đúng tệp của nó chứ không phải trên tệp điều tra 48 KB.

Việc thứ năm, nằm ngoài wave nhưng phải bắt đầu ngay vì nó cần anh: hai khoản vượt khung của GĐ-1 (G1-B2 vai giữ chuẩn · G1-B7 siết cổng). Nếu hỏi anh ở cuối wave GĐ-1 thì wave đó treo; hỏi ngay từ wave GĐ-0 thì tới lúc thi công GĐ-1 đã có câu trả lời. Đây là thứ duy nhất trong lane này có thể làm song song mà không vi phạm OD-2, vì hỏi không phải là thi công.

Một cảnh báo về thứ tự bên trong GĐ-1: hub xếp bước kiểm kê máy đọc tên (G1-M2) ở bước 2 của giao thức di trú, tức là sau khi ký chuẩn. Với SE thì phải làm ngược lại — §3.4 cho thấy có ít nhất mười một đoạn máy đang đọc tên, và ba trong số đó suy vai từ tên tệp bằng biểu thức tham lam. Viết chuẩn mà chưa biết máy nào đang đọc gì thì sẽ viết ra một chuẩn không thể áp mà không làm vỡ thứ gì đó. Kiểm kê trước, ký chuẩn sau. Đây là chỗ SE nên làm khác hub và khai rõ là làm khác ở mục 6 của khuôn báo cáo.


§7 — Khai thẳng những chỗ tôi CHƯA ĐO

Theo luật bằng chứng của gói, tôi liệt từng chỗ chứ không im lặng.

  1. Năm kịch bản ở dòng 10 của bảng §3.4 (closeout-sentinel.ps1 · mfe-eval.ps1 · applied-eval-nokey.ps1 · crystallized-backfill.ps1 · memory-selfimprove-audit.ps1) — mới biết chúng đọc mẫu tên, chưa biết đọc mẫu nào ở dòng nào. Cần: grep -nE "sub-|_mind|_context|session-|runs/|agent-memory" scripts/<từng-tệp>.
  2. Nhóm tên thứ hai của hub — "nhãn hiển thị các lớp kiểm" — tôi chưa đo. Ứng viên là tập lớp cờ đóng ở .claude/agent-memory/memory-budget.json khoá lead_self_audit.flag_classes, mà hmw.js:36-40 mô tả là 11 lớp, vai không tự chế lớp. Cần đọc thẳng tệp cấu hình để đếm họ tên thật.
  3. docs/rules.md — tôi loại nó khỏi ứng viên "chuẩn đặt tên" dựa trên mô tả phạm vi, chưa đọc toàn văn. Nếu trong đó có một mục đặt tên mà tôi bỏ sót thì kết luận G1-B1 phải sửa. Cần: grep -nE "đặt tên|naming|quy ước tên" docs/rules.md.
  4. Sáu mươi chín tệp trong hộp thư — tôi đối chiếu bằng cách tìm tên tệp trong sổ. Phép này bắt được vắng mặt, nhưng không bắt được dòng có mà sai (ví dụ ngày sai, mã băm sai). Số 24 là cận dưới của lỗ, không phải con số cuối cùng.
  5. Tôi không chạy lại phép băm bốn món. Tôi dùng lại kết quả của N1 ở sub-invest-fitmap-S180.md:32. Nếu N1 sai thì tôi sai theo. Lệnh tái lập đã dán ở G0-K3 để ai cũng kiểm lại được.

§8 — Hai khoản CHƯA ĐO ở §7 nay đã đo xong, và một trong hai đẻ ra lỗi mới

8.1 — Khoản §7.3: docs/rules.md — kết luận G1-B1 giữ nguyên, nay có bằng chứng thay vì suy đoán

grep -nE "đặt tên|naming|quy ước tên|Naming" docs/rules.md ra bốn vị trí, và cả bốn đều là quy ước đặt tên trong mã nguồn:

  • :47 — cách đặt tên lệnh (CQRS Command)
  • :56 — cách đặt tên truy vấn (CQRS Query)
  • :165 — §3.7 cách đặt tên thành phần React
  • :203 — cách đặt tên bản chuyển đổi cơ sở dữ liệu (PascalCase, ví dụ AddMasterData)

Control dương cho chính phép tìm: grep -c '^##' docs/rules.md = 70 đề mục ⇒ tệp đọc được và lớn thật, bốn hit là bốn hit thật chứ không phải lệnh hỏng.

Không vị trí nào chạm vào sáu nhóm tên hub đòi (tên vai · nhãn hiển thị các lớp kiểm · thư mục lượt chạy · tệp mốc phiên · nhãn tác vụ · tên các cuốn sổ). Vậy docs/rules.md phủ tầng mã nguồn, còn GĐ-1 đòi tầng bộ máy vận hành — hai tầng rời nhau. Kết luận G1-B1 THIẾU HẲN đứng vững, và nay đứng trên phép đo chứ không trên phỏng đoán.

🔸 Một hệ quả có ích cho lượt thi công: docs/rules.mdtiền lệ về hình thức — SE đã biết viết quy ước đặt tên thành văn, chỉ là chưa làm cho tầng bộ máy. Chuẩn của GĐ-1 nên nói rõ ngay dòng đầu rằng nó không thay docs/rules.mdbổ sung tầng còn thiếu, nếu không thì lại đẻ ra đúng cái "hai chỗ tìm" mà mục (i) cấm.

8.2 — Khoản §7.2: nhãn hiển thị các lớp kiểm — đo xong, và bắt được một con số đã trôi

Đọc thẳng .claude/agent-memory/memory-budget.json, khoá lead_self_audit.flag_classes. Kết quả: 12 lớp, liệt từng lớp, không nén thành khoảng:

view-stale-count · view-stale-status · view-stale-header · view-stale-role-desc · view-residual-asym · gap-carry-dropped · gap-carry-aged · gap-owner-specifics · gap-decision-sunk · gap-underfill · gap-incident-unrecorded · view-claim-broader-than-sample

🔴 Lỗi mới, đo được, mức TRUNG BÌNH: .claude/workflows/hmw.js (khối chú thích ngay dưới mục lead-stale-auditor / lead-gap-auditor, vùng dòng 36-40) viết nguyên văn "11 class: 5 view-* + 6 gap-*". Thực tế trên đĩa là 12 lớp = 6 view-* + 6 gap-*. Lớp thứ mười hai là view-claim-broader-than-sample, và nó được thêm vào cuối mảng, ngoài cụm view-* đang đứng liền nhau — nên người đọc lướt sẽ đếm ra 5 và tưởng chú thích đúng.

Đây đúng LỚP-5 mà hub đặt tên ("số chép tay trong văn xuôi trôi … một đại lượng = một con số, neo LỆNH thay vì chép số"), và cũng đúng luật mà SE đã tự rút ra từ trước là cấm chép số đếm vào chú thích. Ba điểm đáng nói:

  1. Chú thích đó tự nhận là mô tả một tập ĐÓNG ("vai KHÔNG tự chế class"). Một tập đóng mà bản mô tả sai số phần tử thì người đọc không có cách nào biết mình đang thiếu lớp nào.
  2. Không máy nào bắt được cái này — con số nằm trong chú thích, không nằm trong mã chạy, nên chương trình vẫn chạy đúng với 12 lớp thật.
  3. Nó thuộc đúng lăng kính lane này: đây là nhóm tên thứ hai trong sáu nhóm hub đòi, và ngay bên trong nhóm ấy đã có ba họ conview-stale-* (4 lớp) · view-residual-* (1) · view-claim-* (1) — cộng với gap-* (6). Nghĩa là con số họ tên ở §3.4 phải cộng thêm nhóm này.

Cập nhật §3.4: nhóm tên thứ 2 của hub (nhãn hiển thị các lớp kiểm) có 2 họ chính (view-*gap-*) và 4 họ con nếu tính tới nấc thứ hai. Vậy bảng tám nhóm ở §3.4 nay thành chín nhóm, tổng họ tăng từ 19 lên 21, và số nhóm đang đa họ tăng từ 6 lên 7.

Đề nghị vá (propose-only, không tự sửa): bỏ hẳn con số khỏi chú thích trong hmw.js, thay bằng câu trỏ khoá cấu hình — "tập lớp cờ = khoá lead_self_audit.flag_classes trong .claude/agent-memory/memory-budget.json; đếm bằng lệnh, đừng chép số". Đây cũng chính là luật B1 mà kho này đã áp cho các con số khác.

8.3 — Ba khoản còn lại của §7 vẫn CHƯA ĐO

Không đo được trong lượt này, khai để không ai tưởng đã phủ hết: (1) năm kịch bản ở dòng 10 bảng §3.4 — mới biết đọc mẫu tên, chưa biết mẫu nào ở dòng nào · (2) phép đối chiếu hộp thư chỉ bắt vắng mặt, chưa bắt dòng có mà sai, nên 24 là cận dưới · (3) phép băm bốn món dùng lại kết quả N1, tôi không chạy lại.