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-119— 7 bước làm (G0-B1..B7). - Nơi 2 — thư chính
:121-125— 3 lệnh "kiểm xong chưa" (G0-K1..K3). - Nơi 3 — Phần C của khuôn
:251-269— 4 khoản danh mục kiểm (A0-1..A0-4). - Nơi 4 — phụ lục
:86-89— 4 ô 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 và :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-2phí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, commit3a6eb92) 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
3a6eb92có nă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.
- 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.
- 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.
- Chính cuốn sổ tự viết rằng loại thư này không thuộc về nó.
broadcasts/_index.md:7ghi: "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.gitvànode_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-LEDGERxuấ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:163liệ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.
- 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:7cho 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ốiINBOUNDcủ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. - 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ủaG0-B2. - 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.
- 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ườngto:, nên mọi phép phân loại theoto: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-140— 7 bước làm (G1-B1..B7). - Nơi 2 — phụ lục
:99-119— 5 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-146— 2 lệnh "kiểm xong chưa" (G1-K1..K2). - Nơi 4 — phụ lục
:132-137— 6 ô 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ẤT — vocab-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ƯA — governance-detectors.ps1 đã tách TOTAL ⟂ INFORM (vùng :65-72 và :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ÁCH — scripts/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.md là bả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:
- 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.
- 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.mdkhô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-trace↔wave-folder. - 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-22dà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 | 1 — kebab-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.ps1 và scripts/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 _index ⟂ COMMS-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 và 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.Stop → powershell.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 DUNG — vocab-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 0 ở scripts/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-B7 là hoã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ụngchứ không phảikhông áp dụng: §3.3 đã chứng minhvocab-alias-map.mdlà bảng dịch. Khaikhô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. Khaikhô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-B2lập vai giữ chuẩn — thêm vai thứ 27 vào bộ máy; (b)G1-B7siế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ôngcho 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:
- Chọn một chỗ ghi cho thư phát đại trà rồi sửa
broadcasts/_index.md:7cho 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ó. - 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ủaG0-B2. - 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. - 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.
- 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ó đọ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>. - 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.jsonkhoálead_self_audit.flag_classes, màhmw.js:36-40mô 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. 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ậnG1-B1phải sửa. Cần:grep -nE "đặt tên|naming|quy ước tên" docs/rules.md.- 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.
- 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 (CQRSCommand):56— cách đặt tên truy vấn (CQRSQuery):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.md là tiề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.md mà bổ 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:
- 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.
- 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.
- 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ọ con —
view-stale-*(4 lớp) ·view-residual-*(1) ·view-claim-*(1) — cộng vớigap-*(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ó đọ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.