[CLAUDE] Docs: vá 9 finding audit S143 + mở enum gap-incident-unrecorded
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m26s

Audit 3 lane (reviewer FAIL 1C/4M/4m/1nit + 2 vai H24 = 6 FLAG), lead tự
re-đo từng finding trước khi vá.

CRITICAL/MAJOR:
- Re-anchor 5 adap-report: sha wal: tiền-closeout (1a0fa59/a458102/96ab2679)
  dangling sau squash -> hub clone không resolve nổi. Đổi sang 2757e41.
  LUẬT: cite outward = commit SẼ SỐNG sau squash, không bao giờ wal:.
- Đính chính claim OK-reachable: phép đo tự huỷ trong cùng phiên (squash lật
  sang squash-benign). Sự thật mạnh hơn: cả 2 nhánh lành đã chạy runtime.
- TRIPLE 17/17/17 chọn enum dễ: README:225 (tự xưng "ĐỦ roster") còn 14 +
  "4 monitor"; README:27 ("Roster THẬT") còn 14. Cả 2 vá -> 17/7.
- TOTAL 46 "== baseline" sai: baseline ghi trong repo là 45. Tách claim-DELTA
  (bền) khỏi claim-TUYỆT-ĐỐI (phải neo commit+thời-điểm).

FLAG view-residual-asym: STATUS:450 + README:190 còn khai "NO Write/Edit" như
cơ-chế chặn -> sửa thành tuyên-bố ý-định (runtime vẫn cấp, 9/9 vai; nhân-chứng
reviewer đã Write+Edit thật).

FLAG gap-carry-dropped: HANDOFF carry 13 -> 14, trả [carry:session-model-adopt].
FLAG gap-decision-sunk: 3 mục "Chờ-anh" chìm 2 nhãn phiên -> lên NEXT anh (10)(11)(12).

Enum flag_classes 10 -> 11: +gap-incident-unrecorded (anh duyệt). Vai
lead-omission từ chối tự chế class và escalate đúng luật CLOSED-enum.

Bài học acceptance: AC4 grep theo SỐ nên 2 site liệt-kê-TÊN lọt lưới.
Lần sau đếm PHẦN TỬ rồi so canonical, đừng so hình-dạng chuỗi.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-07-22 13:40:49 +07:00
parent 3f4310f681
commit 36cefcca62
21 changed files with 653 additions and 54 deletions

View File

@ -9,9 +9,9 @@
**executed** — cả (A) đầu-đọc khoan-dung 3 dạng lẫn (B) đọc byte-safe đã nằm trong repo và **đã chạy thật 7/7** trên chính bộ thư đợt này.
## 3. evidence (đo thật)
- **(A) Đầu-đọc khoan-dung** (commit `1a0fa59`): `.claude/commands/check-email.md` **9 dòng** (bước 4b) + `.claude/commands/send-email.md` **4 dòng** (6c) — pin mẫu rút declared `content_sha256:\s*"?([0-9a-fA-F]{8,64})"?`, nhận cả 3 dạng (có-ngoặc · không-ngoặc · rút-gọn ≥8-hex). Grep `{8,64}` hiện ở **CẢ 2** command.
- **(A) Đầu-đọc khoan-dung** (commit `2757e41`): `.claude/commands/check-email.md` **9 dòng** (bước 4b) + `.claude/commands/send-email.md` **4 dòng** (6c) — pin mẫu rút declared `content_sha256:\s*"?([0-9a-fA-F]{8,64})"?`, nhận cả 3 dạng (có-ngoặc · không-ngoặc · rút-gọn ≥8-hex). Grep `{8,64}` hiện ở **CẢ 2** command.
- **🔴 CẤM quote-strict** ghi thẳng vào cả 2 file: mẫu `([0-9a-fA-F]+)` sẽ whiff hash-có-ngoặc → **false-tamper**. Đây không phải lo xa — S141 **suýt cắm cờ giả-mạo oan 3/3**.
- **Port script** (commit `1a0fa59`): `scripts/stamp_verify.py` **55 dòng**, mirror verbatim từ `AI_INFRA/scripts/stamp_verify.py`, có header-note *"mirror-of AI_INFRA — re-pull khi hub đổi §N canon"*. Cả 2 command ƯU TIÊN gọi script, regex-pin làm đường lui.
- **Port script** (commit `2757e41`): `scripts/stamp_verify.py` **55 dòng**, mirror verbatim từ `AI_INFRA/scripts/stamp_verify.py`, có header-note *"mirror-of AI_INFRA — re-pull khi hub đổi §N canon"*. Cả 2 command ƯU TIÊN gọi script, regex-pin làm đường lui.
- **Verify 3-dạng** (spec [n7]): thư quoted thật `6239dd40` **exit 0** + 2 file synthetic tạm (frontmatter hash **không-ngoặc** · hash **rút-gọn 8-hex**) đều verify OK rồi xoá.
- **Re-đo tươi @S143 — 7/7:** chạy `python scripts/stamp_verify.py` trên **toàn bộ 7 thư** đợt-9/10 ⇒ **exit 0 cả 7**, gồm 2 thư hash không-ngoặc (`9cd1a486`, `58e28bae`) và 5 thư hash có-ngoặc. Đây là bằng-chứng khoan-dung ăn thật, không phải happy-path 1 mẫu.
@ -26,4 +26,5 @@
**Đề-xuất KHUNG:** nếu hub giữ khuyến-nghị byte-safe, nên ghim **kèm bước strip BOM**, vì mọi dự-án đọc file JSON/YAML sau đó đều sẽ vấp đúng chỗ này.
*(Bằng-chứng: bắt được là nhờ fault-inject chứ không phải happy-path — chạy happy-path sẽ thấy "có flag = có răng" và ship luôn.)*
- **`stamp_verify.py` là bản mirror**, không phải nguồn: hub đổi §N canon mà SE quên re-pull thì 2 bên lệch **im lặng** — hiện **không có máy nào canh drift** giữa 2 bản, chỉ có header-note nhắc người.
- **Unpushed lúc ghi.**
- 🔴 **Neo bằng-chứng ĐÃ ĐỔI @S143 (reviewer-gate, class `bằng-chứng-tự-huỷ-sau-squash`):** bản đầu cite sha `wal:`-commit TIỀN-closeout (`1a0fa59`/`a458102`/`96ab2679`). Closeout-squash gộp chúng vào `2757e41` ⇒ các sha đó thành **dangling**: `cat-file -t` vẫn ra `commit` (sống nhờ reflog LOCAL) nhưng `merge-base --is-ancestor <sha> origin/main` = **exit 1****hub clone repo về sẽ KHÔNG resolve nổi**. Nội-dung thì nguyên vẹn trong `2757e41`**chết con-trỏ, không chết việc**. Đã re-anchor toàn bộ sang `2757e41`. **LUẬT:** cite trong outward = commit **SẼ SỐNG sau squash**, KHÔNG BAO GIỜ `wal:` (đối chứng: wave trước cite `7760cdf`/`da349fc` → sống hết).
-**Đã push**`2757e41` + `3f4310f` trên `origin/main` (thay câu khai chưa-đẩy ở bản đầu).

View File

@ -10,10 +10,10 @@
**executed-doc / verified-pending-first-real-closeout-gộp** — wording bất-biến đếm + annex baseline đã nằm trong file; nhưng annex CHỈ phát huy tác dụng khi gặp **closeout-gộp thật sinh SAU mốc**, ca đó **chưa xảy ra** kể từ khi land.
## 3. evidence (đo thật)
- **Annex phép-8** (commit `1a0fa59`): `.claude/commands/session-end.md` **14 dòng** — thêm 1 dòng tại `§L.b(j)(vi)`: baseline-ghi-bù khai-1-lần, cơ-chế force-fire bù closeout-gộp **tồn tại từ 2026-07-17** (`da349fc`, S135, re-đo 19:12:41+07); phép-8 **CHỈ tính FAIL** cho closeout **sinh SAU** mốc, closeout trước = baseline hợp-lệ ghi `n/a`, **KHÔNG đếm FAIL**; không lặp mỗi lần chạy. Grep `da349fc` = **1 hit** (đúng: khai-1-lần, không rải).
- **Bất-biến đếm** (commit `a458102`): `.claude/governance/.session-counter.json` `_tick_invariant_note` chép **verbatim** invariant hub (`dede7ec5` Δ-1): *mỗi LẦN-CHỐT +1; một cặp dừngnối tăng ĐÚNG +1, không +2, không +0*.
- **Annex phép-8** (commit `2757e41`): `.claude/commands/session-end.md` **14 dòng** — thêm 1 dòng tại `§L.b(j)(vi)`: baseline-ghi-bù khai-1-lần, cơ-chế force-fire bù closeout-gộp **tồn tại từ 2026-07-17** (`da349fc`, S135, re-đo 19:12:41+07); phép-8 **CHỈ tính FAIL** cho closeout **sinh SAU** mốc, closeout trước = baseline hợp-lệ ghi `n/a`, **KHÔNG đếm FAIL**; không lặp mỗi lần chạy. Grep `da349fc` = **1 hit** (đúng: khai-1-lần, không rải).
- **Bất-biến đếm** (commit `2757e41`): `.claude/governance/.session-counter.json` `_tick_invariant_note` chép **verbatim** invariant hub (`dede7ec5` Δ-1): *mỗi LẦN-CHỐT +1; một cặp dừngnối tăng ĐÚNG +1, không +2, không +0*.
- **Form SE khai tường-minh trong chính note đó:** SE dùng `tick-at-entry-gate idempotent-per-label` (hub Δ-2 recovery-gate +1 = **permitted form**) ⇒ NET **+1/nhãn-phiên** ≡ hub +1/cặp **trên cặp ĐÃ-ĐÓNG**; cặp đang-MỞ transient **+0** cho tới khi cổng-vào kế fire (hub bless `9a35405b` khối-1). Grep `transient` = **1 hit**.
- **Đo thật cơ-chế OR-guard @S143 (cặp `/pause` S142 → `/tiep` S143 = 1 cặp dừngnối):** `/pause` S142 tick **15→16**; `/tiep` S143 tick **16→17**. ⇒ toàn cặp **+1 mỗi lần-chốt**, và vì `/pause` **dời HEAD** (commit `1a0fa59`) nên nếu thiếu session-clause thì đây **đúng là ca +2** mà bản đính-chính cảnh báo. Guard sống-còn = **label-convention** (`/tiep` bắt buộc nhãn MỚI `S143`, cấm reuse `S142`) — nếu reuse, OR-guard NO-OP nhầm ngay cổng vào và thành **+0**.
- **Đo thật cơ-chế OR-guard @S143 (cặp `/pause` S142 → `/tiep` S143 = 1 cặp dừngnối):** `/pause` S142 tick **15→16**; `/tiep` S143 tick **16→17**. ⇒ toàn cặp **+1 mỗi lần-chốt**, và vì `/pause` **dời HEAD** (commit `wal: pause` của S142 — sha local đó nay đã bị closeout-squash gộp vào `2757e41`, xem §5) nên nếu thiếu session-clause thì đây **đúng là ca +2** mà bản đính-chính cảnh báo. Guard sống-còn = **label-convention** (`/tiep` bắt buộc nhãn MỚI `S143`, cấm reuse `S142`) — nếu reuse, OR-guard NO-OP nhầm ngay cổng vào và thành **+0**.
- **Design-note log-BOUNDED** đã chép: `history[]` append-unbounded **BY DESIGN***vắng dấu = chưa từng xảy ra* (ngữ-nghĩa an-toàn); nếu sau này thêm cap FIFO thì **BẮT BUỘC** xử eviction tường-minh (vắng-vì-bị-đẩy ≠ vắng-vì-chưa-xảy-ra).
## 4. tailored-gì + skip-gì-vì-sao
@ -24,4 +24,5 @@
- 🔴 **Annex chưa từng được kích-hoạt.** Nó chỉ có nghĩa khi có closeout-gộp **sinh sau** mốc `da349fc`; từ lúc land tới nay **chưa gặp ca nào** ⇒ nấc dừng ở `verified-pending-first-real-closeout-gộp`. Chưa ai được nói annex "đã chứng minh hiệu-quả".
- 🔴 **Bất-biến +1 dựa vào một luật mà MÁY KHÔNG CANH.** Toàn bộ tính đúng-đắn treo vào label-convention (`/tiep` phải dùng nhãn mới). Hiện **không có detector nào** bắt được ca reuse nhãn — nếu lead lỡ reuse, hệ-quả là **+0 im lặng**, và counter sẽ dưới-đếm mà dòng-nợ vẫn trông bình thường. Đây là rủi-ro **cùng class** với GAP-1 mà hub từng nêu (dưới-đếm ~37%/8-nhãn).
- **Con-số cadence 6/15/3 của SE = điểm khởi-đầu owner CỐ Ý chọn**, không phải chép vô-thức; nhưng hub đã **gỡ counter** phía mình (bookend 07-15) ⇒ **không còn mốc hub để so**, và delta hub hứa từ run-2 **sẽ không bao giờ có**. ⇒ **chưa ai được bán câu "đã chứng minh hiệu-quả"** cho bộ số này.
- **Unpushed lúc ghi.**
- 🔴 **Neo bằng-chứng ĐÃ ĐỔI @S143 (reviewer-gate, class `bằng-chứng-tự-huỷ-sau-squash`):** bản đầu cite sha `wal:`-commit TIỀN-closeout (`1a0fa59`/`a458102`/`96ab2679`). Closeout-squash gộp chúng vào `2757e41` ⇒ các sha đó thành **dangling**: `cat-file -t` vẫn ra `commit` (sống nhờ reflog LOCAL) nhưng `merge-base --is-ancestor <sha> origin/main` = **exit 1****hub clone repo về sẽ KHÔNG resolve nổi**. Nội-dung thì nguyên vẹn trong `2757e41`**chết con-trỏ, không chết việc**. Đã re-anchor toàn bộ sang `2757e41`. **LUẬT:** cite trong outward = commit **SẼ SỐNG sau squash**, KHÔNG BAO GIỜ `wal:` (đối chứng: wave trước cite `7760cdf`/`da349fc` → sống hết).
-**Đã push**`2757e41` + `3f4310f` trên `origin/main` (thay câu khai chưa-đẩy ở bản đầu).

View File

@ -9,7 +9,7 @@
**agreed** — SE đã quyết áp về hướng, nhưng **CHƯA chạm cơ-chế**. Thứ duy nhất chạm file trong wave này là **sửa draft prereq bị stale**, không phải wire. Wire bị chặn bởi owner-gate (xem §4) ⇒ **không được đọc thành executed**.
## 3. evidence (đo thật)
- **Draft prereq flip** (commit `1a0fa59`): `docs/governance/session-model-se-draft.md` **11 dòng** — §4 prereq (a) "mẫu-áp-dụng hub" → **✅ ĐÃ VỀ 2026-07-18** (`101e69d6` kit+manifest) · (b) "khuôn bộ-ba SUB" → **✅ ĐÃ VỀ 2026-07-18** (`58e28bae` khối B). Grep `ĐÃ VỀ` = **2 hit**, cite sha = **2**.
- **Draft prereq flip** (commit `2757e41`): `docs/governance/session-model-se-draft.md` **11 dòng** — §4 prereq (a) "mẫu-áp-dụng hub" → **✅ ĐÃ VỀ 2026-07-18** (`101e69d6` kit+manifest) · (b) "khuôn bộ-ba SUB" → **✅ ĐÃ VỀ 2026-07-18** (`58e28bae` khối B). Grep `ĐÃ VỀ` = **2 hit**, cite sha = **2**.
- **0 wire — đo chứ không khai suông:** ngoài chính file draft, **không file cơ-chế nào** của SE đổi theo manifest trong wave (không `.gitignore`, không đổi khuôn tên `runs/`, không thêm `session_ctx_kb`).
- **Đối chiếu 4 khoản máy-kiểm-được của manifest vs trạng-thái SE (đo tươi @S143):**
@ -32,4 +32,5 @@
- 🔴 **Rủi ro nếu wire ẩu:** SE đang có **2 hệ nhãn** — nhãn-phiên `S<nn>` (đang neo counter H24, label-convention là guard sống-còn) và nhãn phiên-LOGIC của manifest. Wire mà không chốt map `N ↔ L<mm>` trước sẽ **trộn 2 đồng-hồ**, đúng lỗi mà SE vừa cố tránh khi từ chối thêm cadence-key cho trio.
- **`session-start.md §2.1.9(h)` hiện map TẠM** "phiên-LOGIC" = nhãn `S<nn>` của SE, kèm caveat B1. Đây là **chỗ nối tạm**, sẽ phải đọc lại nếu adopt thật.
- **5 câu hỏi SE gửi hub vẫn treo** (`session_ctx_kb`=64? · map N↔L + folder-form · VC từng dòng · hook 4-path? · prereq unblock) — email `b9ef5ede` chưa có reply.
- **Unpushed lúc ghi.**
- 🔴 **Neo bằng-chứng ĐÃ ĐỔI @S143 (reviewer-gate, class `bằng-chứng-tự-huỷ-sau-squash`):** bản đầu cite sha `wal:`-commit TIỀN-closeout (`1a0fa59`/`a458102`/`96ab2679`). Closeout-squash gộp chúng vào `2757e41` ⇒ các sha đó thành **dangling**: `cat-file -t` vẫn ra `commit` (sống nhờ reflog LOCAL) nhưng `merge-base --is-ancestor <sha> origin/main` = **exit 1****hub clone repo về sẽ KHÔNG resolve nổi**. Nội-dung thì nguyên vẹn trong `2757e41`**chết con-trỏ, không chết việc**. Đã re-anchor toàn bộ sang `2757e41`. **LUẬT:** cite trong outward = commit **SẼ SỐNG sau squash**, KHÔNG BAO GIỜ `wal:` (đối chứng: wave trước cite `7760cdf`/`da349fc` → sống hết).
-**Đã push**`2757e41` + `3f4310f` trên `origin/main` (thay câu khai chưa-đẩy ở bản đầu).

View File

@ -9,7 +9,7 @@
**executed** cho khoản (2) carve-out ô3 + khoản (5) annex-dùng-chung + khoản (1)/(4) ACK — đã chạm file, và carve-out có **bằng-chứng-sống** trong repo. Khoản (3) DP-2 = **n-a có chủ đích** (SE chọn form khác, xem §4). Khoản (6) pointer = đã tiêu-thụ (2 việc trỏ tới đều adopt trong chính wave này).
## 3. evidence (đo thật)
- **Carve-out ô3** (commit `1a0fa59`): `docs/governance/error-ledger.md` **+20 dòng** khối Active-Guards. Nội dung ghi rõ **2 lưới đích danh** phải CÙNG sống thì nấc mới VALID: (a) `scripts/nhip-no-probe.ps1` in dòng-nợ ở **mọi** điểm dừng · (b) detector H25-closeout-ritual wired. **1 lưới chết → RE-EVAL nấc, tụt về chạy-vô-điều-kiện.** Basis cite `9a35405b` khối-2. Grep `carve-out` trong error-ledger = **5 hit**.
- **Carve-out ô3** (commit `2757e41`): `docs/governance/error-ledger.md` **+20 dòng** khối Active-Guards. Nội dung ghi rõ **2 lưới đích danh** phải CÙNG sống thì nấc mới VALID: (a) `scripts/nhip-no-probe.ps1` in dòng-nợ ở **mọi** điểm dừng · (b) detector H25-closeout-ritual wired. **1 lưới chết → RE-EVAL nấc, tụt về chạy-vô-điều-kiện.** Basis cite `9a35405b` khối-2. Grep `carve-out` trong error-ledger = **5 hit**.
- **Bằng-chứng-sống của carve-out (hub yêu cầu, SE có thật):** chuỗi S139→S140 — force-fire OVERDUE(light) 8/6 → owner gật → cặp H24 chạy → về 0/6. Nghi-thức đề-xuất-chạy KHÔNG nuốt mất nợ.
- **2 lưới re-đo tươi @S143 (cả hai CÒN SỐNG):** `nhip-no-probe.ps1` in `NHIP-NO: kiem light 3/6 deep 14/15 ok | tran-bo-nho 1 over-cap | run-chua-gom 0` · `governance-detectors.ps1` in khối `H25-closeout-ritual (GAP-2)` chấm 3 close-group gần nhất **[ok]×3**. ⇒ nấc `PASS-với-carve-out` **giữ hợp-lệ tại thời điểm ghi**.
- **+1 câu trio** (spec B4): carve-out ghi thêm rằng consent-gate của bộ-ba S141 thuộc **cùng CLASS** carve-out (đề-xuất-chạy + vết-skip WAL = lưới) ⇒ nấc trio cũng phải khai `PASS-với-carve-out`, không được khai PASS-trần.
@ -24,4 +24,5 @@
## 5. honest-caveat
- 🔴 **Carve-out đang được canh bằng NGƯỜI, không bằng MÁY.** Điều-kiện giữ nấc là "2 lưới còn sống", nhưng **không có detector nào canh chính điều-kiện đó**. Nếu một lưới chết lặng, nấc `PASS-với-carve-out` sẽ **tiếp tục được khai** mà không ai biết — đúng class `cấm-bằng-trí-nhớ`. @S143 em re-đo tay cả 2 lưới (kết quả ở §3) nhưng đó là **kỷ-luật, không phải cơ-chế**.
- **`n=1 hub` — SE không tự nâng thành bằng-chứng mạnh.** Hub khai rõ hướng DP-2 đến từ 1 mẫu phía hub và không mandate. SE chọn form khác nên **không thừa-hưởng** bằng-chứng đó; khuôn ①a của SE hiện có **1 lần chạy runtime nhánh OK-reachable** (@S143) + **3 ca fault-inject**, 2 nhánh còn lại **chưa gặp ca thật**.
- **Unpushed lúc ghi.**
- 🔴 **Neo bằng-chứng ĐÃ ĐỔI @S143 (reviewer-gate, class `bằng-chứng-tự-huỷ-sau-squash`):** bản đầu cite sha `wal:`-commit TIỀN-closeout (`1a0fa59`/`a458102`/`96ab2679`). Closeout-squash gộp chúng vào `2757e41` ⇒ các sha đó thành **dangling**: `cat-file -t` vẫn ra `commit` (sống nhờ reflog LOCAL) nhưng `merge-base --is-ancestor <sha> origin/main` = **exit 1****hub clone repo về sẽ KHÔNG resolve nổi**. Nội-dung thì nguyên vẹn trong `2757e41`**chết con-trỏ, không chết việc**. Đã re-anchor toàn bộ sang `2757e41`. **LUẬT:** cite trong outward = commit **SẼ SỐNG sau squash**, KHÔNG BAO GIỜ `wal:` (đối chứng: wave trước cite `7760cdf`/`da349fc` → sống hết).
-**Đã push**`2757e41` + `3f4310f` trên `origin/main` (thay câu khai chưa-đẩy ở bản đầu).

View File

@ -23,4 +23,5 @@
- 🔴 **"Đã test" ở đây là n-NHỎ, không phải đã-chứng-minh.** Bản thân hub hạ nhãn sang *"đã test n-nhỏ ở ít nhất hai dự-án, DẠNG ALIAS"* — SE **không** được đọc thành bảo-chứng chung. Đóng góp của SE trong đó là **n=1**.
- 🔴 **Full-id vẫn là lỗ hổng n=0 cho CẢ fleet.** Nếu sau này ai đó ghim full-id theo khuyến-nghị mà không đo, sẽ vào đúng vùng chưa-ai-thử. SE hiện **không có kế-hoạch** đo dạng full-id (fix#8a còn mở phía hub).
- **Phép đo của SE là point-in-time (2026-07-16).** Precedence là hành-vi **runtime của harness**, có thể đổi theo bản CLI mà không báo — kết-luận này **sẽ mục** nếu không re-đo định kỳ. Hiện việc re-đo gắn vào `spawn-model-audit`, **không có nhịp tự động**.
- **Unpushed lúc ghi.**
- 🔴 **Neo bằng-chứng ĐÃ ĐỔI @S143 (reviewer-gate, class `bằng-chứng-tự-huỷ-sau-squash`):** bản đầu cite sha `wal:`-commit TIỀN-closeout (`1a0fa59`/`a458102`/`96ab2679`). Closeout-squash gộp chúng vào `2757e41` ⇒ các sha đó thành **dangling**: `cat-file -t` vẫn ra `commit` (sống nhờ reflog LOCAL) nhưng `merge-base --is-ancestor <sha> origin/main` = **exit 1****hub clone repo về sẽ KHÔNG resolve nổi**. Nội-dung thì nguyên vẹn trong `2757e41`**chết con-trỏ, không chết việc**. Đã re-anchor toàn bộ sang `2757e41`. **LUẬT:** cite trong outward = commit **SẼ SỐNG sau squash**, KHÔNG BAO GIỜ `wal:` (đối chứng: wave trước cite `7760cdf`/`da349fc` → sống hết).
-**Đã push**`2757e41` + `3f4310f` trên `origin/main` (thay câu khai chưa-đẩy ở bản đầu).

View File

@ -22,4 +22,5 @@
**Nguyên nhân:** `NEXT em` chỉ ghi *"watch `broadcasts/inbox`"* — nhưng inbox là **thư mục repo MÌNH**, chỉ có thư **sau khi đã kéo**. Watch inbox **không bao giờ** phát hiện được thư chưa kéo. Đó là canh nhầm chỗ, và nó **im lặng** đúng theo thiết-kế.
**Hệ-quả:** carry `[carry:hub-review-wave-1807]` bị giữ mở oan qua nhiều phiên; các quyết-định phụ-thuộc nó (①a contract-fix, bộ-ba SUB) bị hoãn theo.
- 🟡 **Chưa có máy nào canh pull-lag.** Việc kéo thư hiện hoàn toàn dựa vào lead nhớ gõ `/check-email`. Không có detector/dòng-nợ nào nói *"đã N ngày chưa pull"*. Nếu hub không nhắc, lag còn kéo dài. **Đề-xuất (chưa làm, cần owner):** thêm 1 vế vào `nhip-no-probe.ps1` dạng *"lần pull gần nhất cách đây N ngày"* — cùng khuôn với các vế nợ đang có.
- **Unpushed lúc ghi.**
- 🔴 **Neo bằng-chứng ĐÃ ĐỔI @S143 (reviewer-gate, class `bằng-chứng-tự-huỷ-sau-squash`):** bản đầu cite sha `wal:`-commit TIỀN-closeout (`1a0fa59`/`a458102`/`96ab2679`). Closeout-squash gộp chúng vào `2757e41` ⇒ các sha đó thành **dangling**: `cat-file -t` vẫn ra `commit` (sống nhờ reflog LOCAL) nhưng `merge-base --is-ancestor <sha> origin/main` = **exit 1****hub clone repo về sẽ KHÔNG resolve nổi**. Nội-dung thì nguyên vẹn trong `2757e41`**chết con-trỏ, không chết việc**. Đã re-anchor toàn bộ sang `2757e41`. **LUẬT:** cite trong outward = commit **SẼ SỐNG sau squash**, KHÔNG BAO GIỜ `wal:` (đối chứng: wave trước cite `7760cdf`/`da349fc` → sống hết).
-**Đã push**`2757e41` + `3f4310f` trên `origin/main` (thay câu khai chưa-đẩy ở bản đầu).

View File

@ -9,14 +9,16 @@
**executed-file / verified-pending-restart** — khối (B) khuôn canonical bộ-ba đã thành 3 persona + 3 diary + wiring nhịp 2-đầu-phiên trên đĩa; khối (C) khoản ①(a) APPROVE đã thành contract v2 trong `.session-counter.json`. 🔴 **3 vai trio CHƯA spawn lần nào** — cần restart CLI + owner consent. **CẤM đọc thành `verified-runtime`.** `verified` = quyền hub.
## 3. evidence (đo thật)
- **3 persona** (commit `1a0fa59`): `.claude/agents/harness-eval.md` **69 dòng / 6.261 B** · `harness-refine.md` **66 dòng / 6.012 B** · `harness-audit.md` **58 dòng / 5.135 B**. Frontmatter cookie-cutter khớp `lead-view-auditor.md`: `model: opus` + `effort: max` + `memory: project` + `maxTurns: 18`, `tools:` **không liệt kê Write/Edit** (⚠️ xem caveat §5 — điều này KHÔNG chứng minh runtime chặn được ghi).
- **3 persona** (commit `2757e41`): `.claude/agents/harness-eval.md` **69 dòng / 6.261 B** · `harness-refine.md` **66 dòng / 6.012 B** · `harness-audit.md` **58 dòng / 5.135 B**. Frontmatter cookie-cutter khớp `lead-view-auditor.md`: `model: opus` + `effort: max` + `memory: project` + `maxTurns: 18`, `tools:` **không liệt kê Write/Edit** (⚠️ xem caveat §5 — điều này KHÔNG chứng minh runtime chặn được ghi).
- **3 diary seed**: `.claude/agent-memory/harness-{eval,refine,audit}/MEMORY.md` mỗi file **16 dòng**, non-empty, khai thẳng "S141 seed, chưa chạy lần nào".
- **TRIPLE 17/17/17** (đo lại tươi @S143): `ls .claude/agents/*.md | grep -v README` = **17** == `VALID_ROLES` trong `hmw.js` = **17** == enum `agents/README.md` = **17**.
- **TRIPLE 17/17/17** (đo lại tươi @S143): `ls .claude/agents/*.md | grep -v README` = **17** == `VALID_ROLES` trong `hmw.js` = **17** == enum `agents/README.md:236` = **17**. ⚠️ **ĐÍNH-CHÍNH (reviewer-gate @S143):** claim này ban đầu **chọn enum DỄ**. `agents/README.md`**HAI** enum, và cái còn lại — dòng `:225`, tự xưng *"VALID_ROLES (whitelist `hmw.js` — **ĐỦ roster**)"* — lúc đó vẫn liệt **14**, thiếu đúng 3 trio, kèm câu "**4** monitor" (phải 7). Cùng lớp: `:27` tự xưng *"Roster THẬT"* cũng còn 14. **Cả 2 site đã vá @S143.** Nguyên nhân lọt: acceptance AC4 của wave grep theo **con số** (`roster 14|14/14|14 folder|14 vai`) trong khi 2 site này **liệt kê TÊN, không chứa số nào** ⇒ 0 hit và bị đọc thành "sweep sạch".
- **Wiring nhịp:** `session-start.md` (**30 dòng**) thêm `§2.1.9` bộ-ba consent-gated TUẦN TỰ eval→refine→audit + vết-2-lớp [M4] (proposal-line in cả khi Light + vết `trio: skipped` vào WAL) · `session-end.md` (**14 dòng**) thêm `§L.b(k)` mirror + header `(a)→(k)`.
- **Contract ①(a)** (commit `a458102`, vòng-1): `.claude/governance/.session-counter.json` **11 dòng**`_contract.fail_loud_on_regress` v2 (2 trigger/2 verdict) + `_tick_invariant_note`. JSON `ConvertFrom-Json` **exit 0**; chứa `SQUASH-BENIGN` + `transient`.
- **Contract v2 chạy THẬT ngay phiên này:** cửa `/tiep` @S143 áp đúng 3-điều-kiện — counter không lùi (16=16) · `git merge-base --is-ancestor 96ab2679 HEAD` **exit 0**`OK-reachable` · `git cat-file -t` = `commit` ⇒ không fail-loud, không squash-benign, tick **16→17**. Đây là **lần đầu contract v2 được hành-quyết ở runtime** (nhánh OK-reachable; 2 nhánh kia mới chỉ chứng bằng fault-inject).
- **Contract ①(a)** (commit `2757e41`; nội-dung land ở vòng-1, sha vòng-1 gốc đã squash): `.claude/governance/.session-counter.json` **11 dòng**`_contract.fail_loud_on_regress` v2 (2 trigger/2 verdict) + `_tick_invariant_note`. JSON `ConvertFrom-Json` **exit 0**; chứa `SQUASH-BENIGN` + `transient`.
- **Contract v2 chạy THẬT ngay phiên này:** cửa `/tiep` @S143 áp đúng 3-điều-kiện — counter không lùi (16=16) · `git merge-base --is-ancestor 96ab2679 HEAD` **exit 0**`OK-reachable` · `git cat-file -t` = `commit` ⇒ không fail-loud, không squash-benign, tick **16→17**. Đây là **lần đầu contract v2 được hành-quyết ở runtime** (nhánh OK-reachable).
⚠️ **ĐÍNH-CHÍNH quan trọng (reviewer-gate @S143) — phép đo này TỰ HUỶ trong cùng phiên:** closeout-squash cùng phiên đã nhấc `96ab2679` khỏi lịch-sử, nên chạy lại **BÂY GIỜ** cho `exit 1`, và detector in `[trace] SQUASH-BENIGN … expected closeout-squash drift`. ⇒ ai đọc report rồi tự chạy lại sẽ thấy **ngược** với câu trên nếu không có ghi-chú này. **Sự thật đầy đủ còn MẠNH HƠN bản khai đầu:** trong CÙNG một phiên, contract v2 đã chạy runtime **cả hai nhánh lành**`OK-reachable` (lúc `/tiep`, tick 16→17) rồi `squash-benign` (sau closeout). Chỉ nhánh `object-missing`/`counter-lùi` là còn chưa gặp ca thật.
- **hmw.js** (**9 dòng**): `VALID_ROLES` +3 trio; `writeGuard` [n9] hoàn thiện enum read-only — thêm cả 4 monitor cũ (`tooling-auditor`, `harvest-curator`, `lead-view-auditor`, `lead-omission-auditor`, vốn thiếu sẵn = drift cũ) + 3 trio.
- **Detector suite:** TOTAL **46 == baseline 46** (wave thêm 0 flag), exit 0; `H25-role-notebook` đọc `roster=17 ; diaries-ok=17 ; flagged=0`.
- **Detector suite** (đo tại `2757e41`, exit 0): claim bền = **wave thêm 0 flag** — có chứng before/after trong `runs/2026-07-22-S142-adap-9-10-vong-2/sub-task-1.md` (`baseline=46 final=46` + Compare-Object 1 delta duy nhất = flag CŨ dời dòng 138→148). `H25-role-notebook` đọc `roster=17 ; diaries-ok=17 ; flagged=0`.
⚠️ **ĐÍNH-CHÍNH (reviewer-gate @S143):** bản đầu viết "TOTAL **46 == baseline 46**" — chữ "baseline" ở đó là **số sống lúc chạy**, KHÔNG phải baseline ghi trong repo. Baseline ghi gần nhất là **45** (`STATUS.md` S137 "TOTAL 46→45 = đúng 1 FP classified" · `HANDOFF.md` S138S139 "live TOTAL 45 giữ"). Con số đã đi **45 → 46 (chưa ai giải trình) → 47 (sau closeout S143)**. ⇒ **LUẬT rút ra:** số tuyệt-đối publish ra ngoài phải **neo commit + thời-điểm**; tách claim-DELTA (bền, có Compare-Object) khỏi claim-TUYỆT-ĐỐI (thối theo giờ, hub chạy lại sẽ ra số khác và đọc thành SE khai sai).
## 4. tailored-gì + skip-gì-vì-sao
- **Tailored (FORM SE, giữ FUNCTION-floor):** khuôn 5-câu của hub map vào topology SẴN CÓ của SE — 3 vai monitor `INFORM-only / propose-only`, **single-writer = lead** (đúng khuôn 4 monitor H1/H2/H24 đã chạy). Nhịp "2-đầu-phiên" gắn vào 2 lệnh vòng-đời sẵn (`session-start §2.1.9` · `session-end §L.b(k)`) — **0 lệnh mới**.
@ -26,6 +28,7 @@
## 5. honest-caveat
- 🔴 **Trio chưa spawn lần nào.** Toàn bộ nấc trên là **file-level**. Agent `.md` không hot-reload ⇒ phải restart CLI + owner consent mới có spawn-probe 3/3. Nếu first-run lộ sai contract, nấc phải hạ.
- 🔴 **"Chặn-bằng-thiếu-tool" KHÔNG có răng ở runtime — overclaim đã sửa (G-015).** Spec A1 chốt enforcement là *không liệt kê `Write/Edit` trong `tools:`*. Đo @S143: **6 vai read-only** (3 trio + 2×H24 + `reviewer`; `tooling-auditor`/`harvest-curator`/`investigator-codebase` cùng dạng) đều **không khai** `Write/Edit` trong frontmatter — **nhưng roster runtime vẫn cấp `Write, Edit`**, nối ở **cuối** danh sách tool. Đối chứng phân biệt: `implementer-backend` khai `Edit, Write` ở vị-trí 2-3 và runtime hiện **đúng thứ tự file** ⇒ 6 vai kia là **append thêm lúc chạy**, không phải đọc từ file. ⇒ Whitelist frontmatter = **tuyên-bố ý-định**, KHÔNG phải cơ-chế chặn. Backstop THẬT vẫn là **git-diff commit-gate** + single-writer lead (đúng bài `feedback_monitor_residual_write_containment`, nay mạnh hơn: không chỉ Bash-write mà Write/Edit được cấp thẳng). Cơ-chế vì sao harness append thì SE **chưa xác định** (giả-thuyết `memory: project` cần ghi diary — **chưa kiểm**, không khai thành sự thật).
- 🔴 **"Chặn-bằng-thiếu-tool" KHÔNG có răng ở runtime — overclaim đã sửa (G-015).** Spec A1 chốt enforcement là *không liệt kê `Write/Edit` trong `tools:`*. Đo @S143: **9 vai read-only** (3 trio + 2×H24 + `reviewer` + `tooling-auditor` + `harvest-curator` + `investigator-codebase`) đều **không khai** `Write/Edit` trong frontmatter — **nhưng roster runtime vẫn cấp `Write, Edit`**, nối ở **cuối** danh sách tool. *(Bản đầu khai "6 vai" = under-count; reviewer-gate đếm đủ 9.)* 🔴 **Nay có NHÂN-CHỨNG TRỰC-TIẾP, không còn là suy-luận từ vị-trí:** chính `reviewer` — frontmatter `tools:` **0** `Write`/`Edit`**đã dùng Write + Edit thật** để tạo `runs/2026-07-22-S143-closeout-audit/sub-reviewer-0.md` và sửa diary của nó (hiện trong `git status`). Vai bị cấm trên giấy đã ghi được, và git-diff bắt tại chỗ. Đối chứng phân biệt: `implementer-backend` khai `Edit, Write` ở vị-trí 2-3 và runtime hiện **đúng thứ tự file** ⇒ 6 vai kia là **append thêm lúc chạy**, không phải đọc từ file. ⇒ Whitelist frontmatter = **tuyên-bố ý-định**, KHÔNG phải cơ-chế chặn. Backstop THẬT vẫn là **git-diff commit-gate** + single-writer lead (đúng bài `feedback_monitor_residual_write_containment`, nay mạnh hơn: không chỉ Bash-write mà Write/Edit được cấp thẳng). Cơ-chế vì sao harness append thì SE **chưa xác định** (giả-thuyết `memory: project` cần ghi diary — **chưa kiểm**, không khai thành sự thật).
- **Ranh refine ⟂ lead-omission chờ ratify:** persona `harness-refine` đã ghi ranh sắc (LEAD session hot-feed/carry/work-state → NHƯỜNG `lead-omission-auditor`; refine CHỈ acts agent-memory corpus). Ranh này là **SE tự vạch**, chưa được hub/owner ratify.
- **Unpushed lúc ghi** (push gộp cuối closeout S142, thực thi @S143).
- 🔴 **Neo bằng-chứng ĐÃ ĐỔI @S143 (reviewer-gate, class `bằng-chứng-tự-huỷ-sau-squash`):** bản đầu cite sha `wal:`-commit TIỀN-closeout (`1a0fa59`/`a458102`/`96ab2679`). Closeout-squash gộp chúng vào `2757e41` ⇒ các sha đó thành **dangling**: `cat-file -t` vẫn ra `commit` (sống nhờ reflog LOCAL) nhưng `merge-base --is-ancestor <sha> origin/main` = **exit 1****hub clone repo về sẽ KHÔNG resolve nổi**. Nội-dung thì nguyên vẹn trong `2757e41`**chết con-trỏ, không chết việc**. Đã re-anchor toàn bộ sang `2757e41`. **LUẬT:** cite trong outward = commit **SẼ SỐNG sau squash**, KHÔNG BAO GIỜ `wal:` (đối chứng: wave trước cite `7760cdf`/`da349fc` → sống hết).
-**Đã push**`2757e41` + `3f4310f` trên `origin/main` (thay câu khai chưa-đẩy ở bản đầu).