wal: flush 20260809T2131

This commit is contained in:
pqhuy1987
2026-08-09 21:31:10 +07:00
parent 5f23d65cc3
commit 20d324508b
9 changed files with 1084 additions and 28 deletions

View File

@ -17,7 +17,7 @@ chain:
wf: ✅ orphan S182 ĐÓNG @S185 (window-4): `implement-synthesis.md` VERIFIED (2 khai lệch: 659-literal→660-lúc-ship · engine-mix Fable/Opus) + 7/7 ô bảng tick + detector-①-im + probe 1→0. 🧊 vết cũ giữ 1 dòng: _mind:108 `find -newermt` chạy trên path không tồn tại — thước hỏng, kết-luận 0-fan-out window-2 vẫn đúng (đo lại mtime); đính-chính hẹn MIND-3.
next: [S185 window-4 ĐÃ TRẢ: verify 3/3 + adap-08-08-TRỌN + orphan-ĐÓNG + 3-site-VÁ] → bookend @close (deep-sweep 19/15 trả nợ + trio tuần-tự + cặp H24 + ring2 + ctx-audit mồi ring1-persona + gom nợ harvest 576KB slot-71 + MIND-3 đính-chính [_mind:108 thước-hỏng · V-5 nhà=WAL:24 · D5/D6 hạ nhãn]) → acceptance-động-local (seed cờ=true + phiếu ChoDuyet T8) → chờ mắt-anh 8-panel để lật YC-013/YC-016
next: [YC-018 CẤU HÌNH XONG @S185: ONE-SHOT 2-site session-start/end + CLAUDE.md trỏ + sổ YC-018] → đợi P4 wf_5d16a842-28e xong → verify 7 lane + synthesis + tick P4 → 🔴 bookend @close TRỌN MỘT LƯỢT theo luật ONE-SHOT mới (deep-sweep 19/15 + trio tuần-tự + cặp H24 + ring2 + ctx-audit mồi + gom nợ harvest 576KB + MIND-3 đính-chính [_mind:108 thước-hỏng · V-5 nhà=WAL:24 · D5/D6 hạ nhãn] — KHÔNG rải cửa) → acceptance-động-local → chờ mắt-anh 8-panel lật YC-013/YC-016
verify: git log origin/main -1 --format=%h (=72568f05) ; dotnet test SolutionErp.slnx (=668/0) ; ssh vietreport-vps grep DLL EnsureApprovalAttachmentUploaderAsync UTF-8 (=3, khuôn EncodedCommand ở _context PAUSE-2)

View File

@ -147,7 +147,26 @@ Lệnh: `ls -1 AI_INFRA/broadcasts/outbox/all/ | sort` → 105 file tổng.
## §Log đo (lệnh + kết quả thô, append liên tục)
- `ls outbox/all | wc` → 105; lọc >07-15 = 39 (đếm tay theo ngày: 9+8+2+6+2+1+2+1+4+2+1+1)
- `ls outbox/all | wc` → 105 *(🔄 **ĐÍNH CHÍNH @S185 lane-4 theo F-8**: đo lại 2 cách hôm nay = **101**, không phải 105; số load-bearing 39 KHÔNG đổi)*; lọc >07-15 = 39 (đếm tay theo ngày: 9+8+2+6+2+1+2+1+4+2+1+1)
- `ls adap-reports | wc -l` → 107
- `cmp` 4 cặp → DIFFER cả 4
- mtime post-watermark reports: 07-16 cluster (16-17/07) · 07-17 cluster (17-22/07) · 07-19+07-20+07-21 cluster (25/07 09:2x — đợt trả nợ S152?) · 07-25 ×2 (26/07) · 07-28 (28/07) · 08-05 gộp (07/08) · 08-07 (07/08 23:00) · 08-08 (09/08 20:27 ⚠ hôm nay) · upgrade-pack ×2 (07/08 23:0x-23:3x)
---
## §2.1-disposition — ADDENDUM @S185 (lane-4 C-21, đóng F-12 của review)
> Ghi bởi **lane-4 report-hygiene** (Opus 5), 2026-08-09. **Block MỚI — KHÔNG sửa bảng §2.1/§2.2 bên trên** (bài-5). Đề bài C-21: 5-6 dòng §2.1 rơi khỏi §3 mà không disposition — mỗi dòng phải chốt **1 trong {C-item mới · W · Ghi-chú-khai-đúng · verify-đóng-kèm-lệnh}**. Mọi số kèm lệnh tái-lập, đo tươi hôm nay.
| Dòng §2.1 | Nợ khai trong report | Đo tươi 2026-08-09 (lệnh + kết quả) | 🔒 Disposition |
|---|---|---|---|
| **(c1)** carry mark-S123 "chờ anh 1 chữ" | `2026-07-16-…tong-hop-loi…:18` + `:24` (KNOWN-OPEN 1) | `ACTIVE-MARKS.md:39` = *"✅ **RESOLVED @S130** (2026-07-16, anh confirm qua AskUserQuestion **'Gỡ carry'**) … Carry mark-S123 **gỡ khỏi sổ theo-dõi**; dòng treo giữ nguyên làm audit-trail"*. `HANDOFF:264` ghi cùng nội dung. Lệnh: `grep -rn "mark-S123" .claude/WAL.md docs/HANDOFF.md .claude/governance/ACTIVE-MARKS.md`**0 hit WAL** · 1 HANDOFF (lineage) · 1 ACTIVE-MARKS (RESOLVED) | ✅ **verify-đóng-kèm-lệnh** — đóng từ **S130**, tức report STALE gần như ngay khi viết. 0 việc phải làm |
| **(c2)** recipe body-sha `strip-1``strip-ALL` — adap-request chờ hub | cùng report `:20` + `:24` (KNOWN-OPEN 2) | Nấc = **hub-gated** do chính report khai; con dấu canonical thuộc hub, SE không có đường đóng đơn phương. Không có bằng-chứng SE đã gửi adap-request cho khoản này | 🔸 **Ghi-chú-khai-đúng** — nợ hub-gated, đã khai đúng nấc từ đầu, **không** đẻ C/W. Nếu muốn đẩy thì là `/adap-request`, thuộc quyền anh duyệt (đi kèm W-4) |
| **(f)** bất-biến +1 **KHÔNG máy canh nhãn-reuse** | `2026-07-17-…wording-tick-annex-phep-8.md:25`*"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"* | Nợ-máy còn nguyên. Cùng **HỌ detector-nhỏ** với C-8 (liveness 2 lưới carve-out) và C-19 (mirror-drift `stamp_verify.py`) — cả 3 đều là *"lưới chết lặng / lệch im lặng, không ai canh"* | 🆕 **C-item mới (đề-xuất `C-23`)**: detector nhãn-reuse trong `governance-detectors.ps1`. 🔴 Lane-4 **KHÔNG tự cắm** — file đó là turf **LANE-1** (luật serial 1-agent-1-file). Giao lead gộp vào lane-1 hoặc đợt sau. Acceptance đề nghị: fault-inject cây tạm (`-RepoRoot`) 2 nhãn trùng ⇒ FLAG; nhãn tăng ⇒ im (positive-control) |
| **(g)** dangling-tick: `last_ticked_head` đặt lên commit `wal:` | `2026-07-17-…nam-vong-do-rai-lam-don.md:25` — DP-2 noise-expectation; *"Candidate-fix vẫn treo anh/hub"* | 🔴 **LIVE NGAY BÂY GIỜ**`.claude/governance/.session-counter.json``"last_ticked_head": "8491923eff64df8cbef569711ece1e88d6a77d25"`; `8491923e` = **`wal: flush 20260808T1349`**. Lệnh: `grep -o '"last_ticked_head"[^,]*' .claude/governance/.session-counter.json` + `git log -1 --format=%s 8491923e` | 🔴 **W-candidate** — đổi neo tick = đổi cơ-chế guard = **owner-LUẬT**. Lane-4 KHÔNG tự thêm W (khối CHỜ-ANH ngoài tầm, trừ C-16 được giao đích danh) ⇒ **trình lead** đưa vào W-list |
| **(o)** JUMP {4,3,3} + view-residual FROZEN | `2026-07-19-…dong-du-vong-audit…:36`*"cờ `_frozen_until_owner` **chưa được ghi vào file** vì bookend chưa chạy lượt nào"* | 2 vế tách nhau: **(o-i)** vế bất-định ĐÓNG — `view-residual-asym` nay = **11** (hết `{0,3}`); **(o-ii)** vế cờ **CÒN**`grep -c "_frozen_until_owner" .claude/governance/.session-counter.json` = **0**. 🔴 **Mâu-thuẫn sổ↔đĩa mới**: `HANDOFF:241` slot **(21)** tuyên *"khoá `_frozen_until_owner` **ĐÃ CẮM**"* — đĩa nói 0 hit ⇒ **đĩa thắng** | ✅ **verify-đóng-MỘT-PHẦN** (o-i) + 🔸 **Ghi-chú-khai-đúng** (o-ii còn nợ) + 🔴 **1 phát hiện phụ**: claim slot (21) sai so đĩa → trình lead (class `view-stale-status`) |
| **(o-bis)** M8 V5-counter DEFER | cùng report `:37` | = **C-11** trong `checklist-final.md` (LANE-1) | ✅ **verify: KHÔNG rơi** — đã có nhà |
| **(t)** slot **(36)** + **(38)** | `2026-07-25-…pause-tiep…:40` (36 = nhịp phóng vai, máy-$0-mỗi-pause) · `:39` (38 = 1 vai gộp 3 nhịp thay 3 vai hub) | **(38)** → `HANDOFF:208` *"~~(38)~~ ✅ **anh đã VETO + chốt hub-form 3-vai @S153**"*, thi hành có vết (report `:29`: +2 persona, `VALID_ROLES` 21→**23**, carve-out `pause.md §1`). **(36)** → veto-window *"không veto = giữ"*, và **không** nằm trong `HANDOFF:114` "Slot cũ còn treo" (danh sách: 42,43,44,46,47,48,39,40,41,60,61,62) | ✅ **verify-đóng-kèm-lệnh** ×2 — (38) đóng bằng **owner-veto có vết**; (36) đóng bằng **hết veto-window** (default GIỮ) |
**Kết C-21 — 7 vế / 6 dòng:** `verify-đóng` **4** (c1 · o-i · o-bis · t×2 tính 1 dòng) · `Ghi-chú-khai-đúng` **2** (c2 · o-ii) · `C-item mới` **1** (f → đề-xuất C-23, giao LANE-1) · `W-candidate` **1** (g dangling-tick).
🔴 **2 phát hiện phụ ngoài đề bài** (trình lead): (i) slot **(21)** claim `_frozen_until_owner` ĐÃ CẮM ≠ đĩa 0 hit; (ii) carry `[carry:eval-thamquyen]` + `[carry:session-model-adopt]` **rơi khỏi khối RE-STAMP @S181** — 2 ca `gap-carry-dropped` chưa được đếm (chi tiết `sub-opus-lane4-report-hygiene.md §2.2` + §4).

View File

@ -2,17 +2,120 @@
> Run: 2026-08-09-S185-email-adap-pipeline · Lane: 1 (detector) · Agent: Opus 5 MAX
> File chinh: `scripts/governance-detectors.ps1` (4 item CUNG FILE — lam TUAN TU)
> Artifact-first (chong #53): ghi LIEN TUC, ruot nam tren dia.
> Artifact-first (chong #53): ghi LIEN TUC, ruot nam tren dia. KHONG commit (lead gom cuoi).
## Trang thai
- [ ] C-2 neo-marker Lop-7
- [x] **C-2** neo-marker Lop-7 — DONE (2 site, fault-inject 3 ca + control byte-level)
- [ ] C-8 liveness 2 luoi carve-out
- [ ] C-19 mirror-drift stamp_verify.py
- [ ] C-11 V-5 vi-tu ma-hoa
## Log
## 🔴 VOCAB-COLLISION khai NGAY (doc truoc khi doc phan duoi)
### T0 — bootstrap
- Da doc `checklist-final.md` (LANE-1 spec, dong 12-16 + Ranh dong 55-57).
- Tao file artifact nay.
Script `governance-detectors.ps1` **da co san** cac section ten `C1 C2 C3 C5 C6 C9 C10 C11 C12`
(`grep -n "^Write-Section" scripts/governance-detectors.ps1`). Do la **namespace KHAC** voi ma
checklist `C-1..C-22` cua run nay. Trung ten nguy hiem nhat: checklist **C-11** (V-5 vi-tu ma-hoa)
vs section co san **`C11 - H24 FLAG-khuon + diary-delta`** — 2 thu KHONG lien quan.
⇒ Trong script toi **KHONG dat ten theo ma checklist**. Detector moi lay so tiep theo cua script
(`C13`, `C14`, `C15`) + ghi chu tro nguoc ve ma checklist trong comment.
## Baseline (do TRUOC moi edit)
```
powershell.exe -ExecutionPolicy Bypass -File scripts/governance-detectors.ps1
```
`EXIT=0` · **TOTAL FLAGS: 49** · **INFORM-ONLY: 18** · 193 dong output.
Luu: `%TEMP%\...\scratchpad\baseline-detector.txt` (so sanh `diff` sau moi item).
---
## C-2 — cam thuoc Lop-7 (neo-marker nguoi-go + chot song-chet) ✅ DONE
### Nguon (doc THU GOC + REPORT truoc khi cham)
- **Thu goc:** `D:/Dropbox/CONG_VIEC/AI_INFRA/broadcasts/outbox/all/2026-08-05-Governance-loi-do-luong-phan-1-tai-lap-duoc.md:98-108`
*"Lop 7 — Neo vao hinh dang chu do nguoi go"*. **Thuoc** (`:106`) = 2 lop:
(1) dung neo vao glyph, neo vao cau truc; (2) **quan trong hon** — them **chot song-chet do bang
NGUON DOC LAP**: *moc neo phai khong cu hon moc moi nhat cua tai lieu qua MOT BAC; lech hon thi
may phai noi "chua do duoc", tuyet doi khong duoc phat so*. Ca that cua hub: may truot 2 dong moi
nhat → tut xuong neo vao khoi da bi thay the 2 phien truoc → bao **13 muc qua han**; so that = **0**.
- **Report:** `docs/governance/adap-reports/2026-08-05-Governance-loi-do-luong-phan-1-va-2.md` (report gop;
Ro C = phan CHUA DO ⇒ dung la viec cua C-2).
### Lam gi (2 site, dung 2 site checklist chi)
**Site B — `'### {0}.'` (:386 cu → nay `:428` sau khi chen)** — detector `C1 - broken gotcha-ref`.
Neo `^### (\d+)\.` la **heading nguoi go**. Nguoi viet doi khuon (`### 87 -`, `#### 87.`) ⇒ 2 gotcha moi
nhat roi KHOI `$gotchaAnchors` **trong im lang**, roi detector van phat dong *"'gotcha #87' has no anchor"*
— la **artefact cua parse chet**, khong phai finding.
- Cam **L7-BOLT**: `$anchorMaxGotcha` (max key parse duoc) vs **nguon doc lap** = `docs/STATUS.md` row
`Gotchas` (FILE khac + PARSE khac — `Get-StatusValue` regex table-row), gap `> 1` ⇒ in `CHUA DO DUOC`
+ `Write-InformFlag`, **KHONG phat so** tu neo chet.
- **Scope cua suppression** (khai ro trong code): chi giu lai **verdict anchor-existence**. Phep kiem
*range* (`cites #N > canonical max`) KHONG doc `$gotchaAnchors`**van ban binh thuong** — giu lai
la de khong giau chung-nhan that sau mot loi parse.
- **Chong-Goodhart:** dem va IN so dong bi giu lai (`withheld N anchor-existence line(s)`) ⇒ so dong
giam duoc ke bang **THANH PHAN**, khong bao gio doc thanh "sach hon".
**Site A — `:814+`** — detector `H24-2 carry-age`. Neo **2 hinh dang nguoi go**: header `**NEXT anh/em`
+ tem `[carry:slug]`. Chi segment carry MOI NHAT giu duoc streak ⇒ neu khoi moi nhat go khac di, neo
**TRUOT XUONG** khoi cu va moi streak duoc cham voi lich su kho **da thay the** — dung ca thu goc.
- Cam **L7-BOLT**: moc `S<N>` cua segment duoc neo vs moc `S<N>` **moi nhat trong CUNG tai lieu doc
bang duong parse ROI HAN 2 glyph** (`(?<![A-Za-z0-9])S(\d+)(?![\d])` tren raw text). Gap `> 1`
`CHUA DO DUOC` + InformFlag + **khong phat streak nao**.
- Nhanh thu 3: `docMaxS=0` hoac `anchorMaxS=0` ⇒ cung `CHUA DO DUOC` (khong do duoc ≠ sach).
- **Vi sao KHONG dung session-counter lam nguon doc lap:** cau hoi cua net nay la *"neo cua toi co o
DAU tai lieu khong"* = tinh chat cua TAI LIEU. Counter tra loi cau khac (*tai lieu co moi khong*),
va chon nguong cho cau do la **so cua owner** ⇒ khong tu dat. (vung-owner: KHONG cham.)
- Lop (1) cua thuoc — *"dung neo vao glyph"***KHONG lam**: doi khuon heading `gotchas.md` /
khuon `**NEXT` la **quy uoc cua tai lieu = vung owner** ⇒ khai SKIP-owner cho lop (1), chi cam lop (2).
### Evidence (lenh + ket qua tai-lap duoc)
**(a) Positive control byte-level — cay THAT, sau edit, so voi baseline:**
```
diff baseline-detector.txt after-c2.txt
28a29 > [ok] L7-bolt: newest anchor 87 vs canonical 87 (gap 0 <= 1) ...
80a82 > [ok] L7-bolt: carry anchor S185 vs doc newest S185 (gap 0 <= 1) ...
```
**DUNG 2 dong them, 0 dong doi/mat.** `EXIT=0` · **TOTAL FLAGS 49 = baseline 49** ·
**INFORM 18 = baseline 18***hanh-vi cu giu nguyen tru phan them* (dieu kien lead dat).
**(b) Fault-inject — CAY TAM, KHONG cham repo that.**
Harness: `%TEMP%\...\scratchpad\fi-c2.ps1` (viet thanh `.ps1` rieng, KHONG inline qua bash — bash
nuot `$`/backtick cua chuoi PS, harness hong doc y het script hong, bai hoc S180).
Cay tam = `%TEMP%\...\fi-c2\{control,fault-a,fault-b}\` chua 4 file: `docs/STATUS.md` ·
`docs/gotchas.md` · `docs/HANDOFF.md` · `.claude/agent-memory/memory-budget.json`; chay bang
`-RepoRoot <cay-tam>`.
| ca | inject gi | ket qua |
|---|---|---|
| CONTROL | khong sua gi | `[ok] L7-bolt` **ca 2 site** · TOTAL 1 · INFORM 0 |
| FAULT-A | `### 87.``### 87 -` + `### 86.``### 86 -` (2 heading moi nhat mat glyph) | `CHUA DO DUOC ... anchor parsed = 85 but canonical = 87 -> 2 steps behind` + InformFlag; site A van `[ok]` (khong lay lan) |
| FAULT-B | trong khoi moi nhat: `[carry:``[Carry:` | `CHUA DO DUOC ... carry anchor sits at S170 while doc newest is S185 (15 steps behind)` + `5 key(s) NOT scored`; site B van `[ok]` |
`VERDICT: CONTROL both-ok=True · FAULT-A chua-do-duoc=True · FAULT-B chua-do-duoc=True`
**(c) Chung dong bi GIU LAI la duong-gia, khong phai chung-nhan** (harness `fi-c2b.ps1`):
them `docs/probe-cite.md` = *"see gotcha #86 and gotcha #87 for detail."*
- CONTROL-A2 (heading nguyen) ⇒ **0** dong `has no '### 8x.' anchor` (ref HOP LE).
- FAULT-A2 (heading doi khuon) ⇒ `withheld **2** anchor-existence line(s)` + **0** dong artefact phat ra.
⇒ 2 dong bien mat **dung la 2 duong-gia**, va **so 2 duoc in ra** — khong co "flag-count giam" khong loi giai.
**(d) Chung dong ho phu: FAULT-A day TOTAL 1→2** — do phep cross-check co san
(`canonical-itself-stale: STATUS Gotchas=87 but gotchas.md max anchor is 85`, HIGH) cung ban.
2 nhan chung doc lap cung chi 1 su that ⇒ bolt khong thay the luoi cu.
### Verdict C-2: **DONE**
### Residual khai thang (khong giau)
- 🔶 **Site cung-lop chua va: `H24-1 title-freshness`** (`:555+`). No CHINH LA hinh may trong thu
(neo vao dong tieu de nguoi go, phat so `81d behind` / `93d behind`, `moc-phai` = MAX anchor toan
corpus ⇒ 1 doc vendor mang ngay tuong lai la bit mieng vinh vien — banner trong script tu khai).
**KHONG va trong luot nay** vi chot song-chet cho truc NGAY doi mot **nguong so ngay** = so cua owner,
khong tu dat. ⇒ de xuat: 1 C-item rieng, hoi anh nguong.
- Lop (1) cua thuoc (bo neo-glyph) = SKIP-owner, xem tren.
- Dung sai cua bolt site A: gap do bang `S<N>` LON NHAT trong segment. Neu khoi moi nhat that su
khong nhac S nao thi roi vao nhanh `CHUA DO DUOC` thu 3 (khong phai `[ok]` gia) — da co nhanh.

View File

@ -21,3 +21,220 @@ C-1 (M — SIẾT SPEC F-3): cắm mã thoát W3b vào `scripts/tien-kiem-cua.ps
- Đã grep `sub-invest-email-adap-fable.md` → dòng 104 = bảng C-1 gốc; dòng 91 xác nhận "PHẦN A Khoản ÁP MỘT NỬA = W3b mã-thoát (soak)"; dòng 74 xác nhận `tien-kiem-cua.ps1` luôn exit-0.
- Trạng thái: ĐANG ĐỌC NGUỒN.
---
### [T1] Điều-kiện (i) — evidence P1 = PA-2 + phân-loại 64/64 → ✅ ĐỦ
**(i)-a — P1 = PA-2 (nguồn owner, nguyên văn):**
`.claude/sessions/session-12/_context-s-12.md:55` (khối `### PAUSE-1 2026-08-07T17:34:01+07:00`, mục "(1) QUYẾT-ĐỊNH ĐÃ CHỐT trong cửa này"):
> `- **P1 = PA-2** hai mã thoát trong MỘT máy ⇒ W3b phải **phân loại ~70 cờ từng cái**.`
Lệnh tái-lập: `sed -n '45,66p' .claude/sessions/session-12/_context-s-12.md`
**Khớp 100%** con-trỏ checklist (`_context-s-12.md:55`). Header checklist đúng: đây là quyết-định owner, KHÔNG phải suy-diễn.
**(i)-b — phân-loại 64/64 tại `docs/governance/harness-11-engine.md` PHẦN Q:**
- PHẦN Q bắt đầu `:547`; §Q.2 bảng phân-loại `:567-579`.
- Cộng tay mẫu-số bảng: `dangling-wikilink 25 + derived-stale 18 + H24-* 14 + vocab-fork 3 + title-stale 2 + diary-0-delta 1 + broken-gotcha-ref 1` = **64** ✅ (khớp dòng `:579` "Tổng: **63 cảnh-báo · 1 chặn**").
- Lệnh tái-lập: `sed -n '547,589p' docs/governance/harness-11-engine.md`
**(i)-c — luật ranh (Q.1 `:554-565`)** đã có sẵn, KHÔNG chế mới:
| Nhóm | Mã thoát |
|---|---|
| **TOÀN-VẸN** (con trỏ trỏ hư-không · vật chứng 0 byte · sổ ⟂ đĩa mâu thuẫn) | 🔴 CHẶN `exit ≠ 0` |
| **VỆ-SINH / LỆCH-SỐ / SỨC-CHỨA** | 🟡 CẢNH BÁO `exit 0` |
**(i) ĐẠT.**
---
### [T2] Điều-kiện (ii) — TIÊU-CHÍ SOAK đọc từ PHẦN Q → 🔴 **KHÔNG ĐẠT** ⇒ DỪNG, CẤM CẮM
**Tiêu-chí nguyên văn — `docs/governance/harness-11-engine.md:585-589` (§Q.4):**
> `### Q.4 — 🔴 CHƯA CẮM: điều-kiện-vào W3b còn thiếu một vế`
> `Điều-kiện-vào W3b = **P1 đã chốt** (✅ PA-2, S180) **+ rider-jump W2 đã soak INFORM ≥1 phiên** (❌ **chưa** — W2 land 2026-08-07, cùng ngày).`
> `⇒ Phân loại ở trên **đã xong và có thể cắm**, nhưng **mã thoát chưa được đổi ở bất kỳ máy nào**. Mọi máy governance **vẫn exit 0**. Cắm khi soak đủ; đây là chặn **tự tan theo thời gian**, không cần ai phán thêm.`
Tiêu-chí có **HAI VẾ**, phải đạt CẢ HAI. Đo từng vế:
#### Vế 1 — P1 đã chốt ✅ ĐẠT (xem T1).
#### Vế 2 — "rider-jump W2 đã soak INFORM ≥1 phiên" → ❌ **KHÔNG ĐẠT**
🔴 **Phát hiện load-bearing: rider-jump KHÔNG TỒN TẠI TRÊN ĐĨA.** Không thể soak thứ chưa được dựng.
*rider-jump là gì (định-nghĩa gốc):* `wave-plan-S180.md:66`, W2 deliverable 5 —
> "**Rider 2 — vá `jump_on_class_repeat` fed-but-unread**: thêm vế thứ ba vào `nhip-no-probe.ps1` (đọc `.session-counter.json → class_repeat.counts`, so ngưỡng 3, in `OVERDUE:jump` + liệt TỪNG class — A12). **Chạy INFORM ≥1 phiên trước mọi gate**"
**Phép đo 1 — grep tại đúng tệp đích, KÈM CONTROL DƯƠNG:**
```
grep -c "jump" scripts/nhip-no-probe.ps1 -> 0
grep -c "class_repeat" scripts/nhip-no-probe.ps1 -> 0
grep -c "OVERDUE" scripts/nhip-no-probe.ps1 -> 6 <-- CONTROL DƯƠNG: thước sống
```
Control `6` chứng minh **0-hit là VẮNG THẬT, không phải hỏng thước**.
**Phép đo 2 — lệnh KHÁC (git pickaxe toàn lịch sử, mọi ref):**
```
git log --oneline -S "OVERDUE:jump" --all
-> 0a31d03e wal: flush 20260807T1523
-> f3020863 wal: flush 20260807T1442
git show --stat 0a31d03e -> 6 tệp, TOÀN .md (wave-plan-S180.md +231 dòng ...)
git show --stat f3020863 -> 11 tệp, TOÀN .md (sub-n3-lane-f-maytay.md +446 dòng ...)
```
⇒ chuỗi `OVERDUE:jump` **chưa từng vào một tệp `.ps1` nào** trong lịch sử repo — chỉ sống trong **văn bản đề-xuất**. (Nếu từng land rồi bị revert, pickaxe phải trả về commit chạm `.ps1`; nó không có.)
**Phép đo 3 — quét cả thư mục `scripts/` (không chỉ tệp đích):**
```
grep -rin "jump" scripts/*.ps1 scripts/*.py -> 3 hit, KHÔNG hit nào là reader:
governance-detectors.ps1:848 / :863 -> nằm TRONG chuỗi remediation của Write-Flag (đúng bẫy "grep ra hit ⇒ tưởng có reader" mà lane F S180 đã ghi)
h24-signal-write.ps1:263 -> câu thông-báo freeze "(frozen - cho owner xu dai JUMP)", là WRITER tally, không đọc ngưỡng
grep -rn "class_repeat" scripts/ -> h24-signal-write.ps1 (writer) + session-counter-tick.ps1:31 (khai KHÔNG chạm) — 0 reader ngưỡng
```
**Phép đo 4 — hợp-đồng output của `nhip-no-probe.ps1` (`:22`) hiện có ĐÚNG 4 vế:**
`NHIP-NO: kiem ... | tran-bo-nho ... | run-chua-gom ... | pull-cach ...`**không có vế `jump`**. SYNOPSIS `:3` vẫn tự khai "3-part debt line".
**Phép đo 5 — sổ nghiệm-thu W2 tự khai (không phải em suy):**
- `sub-w2-luoi-ghi-dia.md:265-280` bảng "Trước W2 / Sau W2": 5 khoản ĐÓNG + 2 giữ + 2 nửa + **4 ❌ chưa**; rider nằm ngoài 4 deliverable. **Rider-jump KHÔNG có dòng nào trong bảng.**
- `_context-s-12.md:65` (chính owner-pause S181): *"6 ô nghiệm thu GĐ-2 mới **4,5/6** (không phải 6/6 như `wave-plan:69` đặt)"* ⇒ W2 đóng **có nợ**, khớp với rider chưa land.
**Trục lịch (đo cho trung-thực, KHÔNG dùng để kết luận đạt):**
`.claude/governance/.session-counter.json` → history: S181 (08-07) · S182 (08-07) · S183 (08-08) · S184 (08-08) · S185 (08-08), `counter=59`, `last_ticked_session=S185`.
**4 phiên đã trôi** kể từ mốc `W2 land 2026-08-07`. Nghĩa là **vế lịch ĐÃ đủ**, nhưng **CHỦ NGỮ của phép soak không tồn tại**. Đây đúng lớp *"vắng-mặt trông giống ổn"*: giả-định lạc-quan của checklist ("soak S181→S185 đã ≥1 phiên") **đúng về trục thời gian, sai về trục vật-tồn-tại**.
🔴 **KẾT LUẬN (ii): tiêu-chí soak KHÔNG ĐẠT ⇒ theo lệnh lane + §Q.4: DỪNG, KHÔNG CẮM mã thoát.**
Soak thật = **0 phiên** (không phải "≥1"), vì vật cần soak chưa được dựng.
---
### [T3] Điều-kiện (iii)(iv)(vi) — BỊ CHẶN bởi (ii)
- **(iii) thang 4-trạng-thái C3-04** (trọn · thiếu-có-tên · không-xác-định · đặc-tả-xung-đột) — đã đọc `wave-plan-S180.md:94-99`; KHÔNG thi công (wave-plan `:97` ghi rõ: *"🔴 KHÔNG thi công TRƯỚC khi chốt — hình dạng đổi theo PA, làm trước là làm lại"*; ở đây chốt PA rồi nhưng vế soak chưa ⇒ vẫn không cắm).
- **(iv) PA-2 = HAI mã thoát trong MỘT máy** — hình đã hiểu + đã ghi thiết-kế treo ở §2 bên dưới, KHÔNG cắm.
- **(vi) fault-inject 2 chiều SAU cắm** — không có "sau cắm" nên không chạy được. **Thay vào đó đã đo BASELINE 2 chiều** (§3) để lượt cắm sau có sẵn phía "trước".
---
### [T4] Điều-kiện (v) — flip 2 dòng STALE → xử lý riêng, xem §4
---
## 2. Thiết-kế mã thoát W3b cho `tien-kiem-cua.ps1` — **TREO, CHƯA CẮM** (để lượt sau khỏi dựng lại)
> Ghi ở đây là **đặc tả**, KHÔNG phải thi công. Không một dòng `exit` nào bị đổi trong phiên này.
Áp luật Q.1 vào **đúng 4 nhánh output đang có** của `tien-kiem-cua.ps1`:
| Nhánh hiện có | Site | Lớp theo Q.1 | Mã thoát PA-2 (khi được cắm) |
|---|---|---|---|
| `THIEU-TAP` — 0/2 nguồn mốc đọc được | `:92-95` | **TOÀN-VẸN** (vật chứng vắng cả tập; A2 "số 0 không được đọc thành sạch") | 🔴 `exit ≠ 0` |
| `NGUON-HONG:<tên>` — 1/2 nguồn hỏng | `:101-104` | VỆ-SINH (còn nguồn kết luận được) | 🟡 `exit 0` |
| `LECH-PHIEN:<a>/<b>` — 2 nguồn lệch phiên | `:107-110` | VỆ-SINH / LỆCH-SỐ | 🟡 `exit 0` |
| `ok` | `:112-116` | — | `exit 0` |
| `catch` fail-soft | `:118-122` | giữ NGUYÊN fail-soft (khuôn `nhip-no-probe`) | `exit 0` |
Ánh xạ thang 4-trạng-thái C3-04 (iii): `ok`**trọn** · `NGUON-HONG`/`LECH-PHIEN`**thiếu-có-tên** · `THIEU-TAP`**không-xác-định** (⇒ nhánh chặn) · *đặc-tả-xung-đột***chưa có ca** trong máy này (khai thẳng: máy chỉ đọc 2 mốc, không có 2 đặc-tả chỏi nhau) — **KHÔNG chế ca giả cho đủ 4**.
"HAI mã thoát trong MỘT máy" (iv) = đúng hình trên: **1 nhánh chặn + N nhánh cảnh-báo cùng sống trong `tien-kiem-cua.ps1`**, không tách máy thứ hai.
🔴 **Điều-kiện mở khoá thi công (cho lượt sau, đo được):**
1. rider-jump land thật: `grep -c "OVERDUE:jump" scripts/nhip-no-probe.ps1` **≥ 1** (hôm nay `0`), **và**
2. rider-jump chạy INFORM ≥1 phiên (≥1 tick mới trong `.session-counter.json` history SAU commit land của nó), **và**
3. giữ nguyên `exit 0` cho `NGUON-HONG`/`LECH-PHIEN`/`catch`.
---
## 3. Đo BASELINE 2 chiều — **cây tạm**, repo thật KHÔNG bị chạm
Cây tạm: `%TEMP%\claude\...\scratchpad\faketree` (dựng bằng `cp` 2 tệp mốc; **không** inject vào repo).
| Chiều | Lệnh | Output | Exit |
|---|---|---|---|
| **Control dương — repo THẬT** | `powershell -NoProfile -ExecutionPolicy Bypass -File scripts/tien-kiem-cua.ps1 -Cua lane2-baseline` | `TIEN-KIEM: cua=lane2-baseline cua-dong-gan-nhat=WAL moc-trong-tep=2026-08-09 phien=S185 \| nguon 2/2 \| ok` | **0** |
| **Control dương — cây tạm NGUYÊN** | `... -Cua faketree-full -RepoRoot <faketree>` | `... nguon 2/2 \| ok` | **0** |
| **Fault-inject — xoá CẢ 2 nguồn (lớp TOÀN-VẸN)** | `rm -f <faketree>/.claude/WAL.md <faketree>/.claude/governance/.session-counter.json` rồi `... -Cua faketree-thieutap -RepoRoot <faketree>` | `TIEN-KIEM: cua=faketree-thieutap THIEU-TAP - 0/2 nguon moc doc duoc (WAL.md + .session-counter.json) \| KHONG ket luan duoc gi \| (khong chan)` | **0** |
**Đo được, không phải suy:** hôm nay ngay cả ca **TOÀN-VẸN** (`THIEU-TAP`) vẫn `exit 0`**răng chặn chưa cắm**, khớp `harness-11-engine.md:589` *"Mọi máy governance vẫn exit 0"*. Đây là **phía "trước"** của fault-inject 2 chiều (vi) mà lượt cắm sau chỉ cần đo lại phía "sau".
Phụ: `-RepoRoot` hoạt động đúng ⇒ lượt cắm sau **không cần** đụng repo thật để nghiệm thu.
---
## 4. Điều-kiện (v) — ĐÃ FLIP 2 dòng STALE (chỉ chú-thích, KHÔNG đổi 1 mã thoát nào)
### 4.1 Lý do vẫn flip dù không cắm
Hai dòng này nói **P1 còn treo chờ owner** — sai **hôm nay**, độc lập hoàn toàn với chuyện có cắm hay không. Để nguyên = người đọc lượt sau đi hỏi lại owner một câu đã có phán quyết (**vi phạm A5** "hỏi lại mà không viện dẫn thông tin mới"). Đây là **derived-flush khớp canonical owner-set** ⇒ thi hành, không phải quyết-định (`feedback_derived_flush_execution.md`).
🔴 Đã cố ý viết flip theo hình **"chốt vế 1 + CHƯA đạt vế 2 + lệnh tái-lập"** để không ai đọc nhầm thành đèn xanh cắm.
### 4.2 Site 1 — `scripts/tien-kiem-cua.ps1` (checklist gọi `:3-5`)
- Thay khối chú-thích `:3-5` bằng khối 2 mục `[1] P1 DA CHOT = PA-2 (@S180/S181)` + `[2] VAN CHUA CAM — ve thu hai chua dat` + điều-kiện mở-khoá đo được.
- **Pure ASCII giữ nguyên** (gotcha #30 — tệp no-BOM, PS 5.1 đọc theo ANSI codepage): `non-ascii = 0` trước và sau.
- Cố ý **KHÔNG trích nguyên văn câu cũ** — trích sẽ để lại một hit grep sống mãi (bẫy **citation-trap use⟂mention**, repo này đã dính 3 đời/1 wave).
### 4.3 Site 2 — `.claude/commands/adap-apply.md` BƯỚC 0 (`:19`)
- Gỡ mệnh đề `W3b**, chưa chốt`; thêm sub-bullet "Trạng thái W3b @S185 — ĐỪNG hỏi lại owner" mang đủ: P1 chốt + nguồn + vế 2 chưa đạt + lệnh tái-lập + control.
- ⚠️ **ENV-DEP — ĂN TỪ PHIÊN SAU RESTART**: đây là **tệp lệnh** (`.claude/commands/`), không hot-reload. Phiên này gõ `/adap-apply` vẫn thấy bản CŨ. Phép đo chỉ-xanh-sau-restart: `/adap-apply` (dry) in sub-bullet mới.
### 4.4 Nghiệm thu flip — đo 2 chiều, đổi thước giữa 2 lần đo
| Phép đo | BEFORE (`git show HEAD:`) | AFTER (worktree) | Ý nghĩa |
|---|---|---|---|
| `grep -c "dang cho owner" scripts/tien-kiem-cua.ps1` | **1** | **0** | stale đã gỡ |
| `grep -c "W3b\*\*, chưa chốt" .claude/commands/adap-apply.md` | **1** | **0** | stale đã gỡ |
| CONTROL `grep -c "exit 0" scripts/tien-kiem-cua.ps1` | **4** | **4** | 🔴 **bề mặt mã thoát KHÔNG ĐỔI** — chứng minh em KHÔNG cắm |
| CONTROL `grep -c "exit 0" .claude/commands/adap-apply.md` | **1** | **1** | thước sống |
| `git diff --stat` | — | `.md +3/-1` · `.ps1 +22/-3` | toàn chú-thích |
| Chạy lại máy | — | `TIEN-KIEM: cua=lane2-final ... nguon 2/2 \| ok`, **EXIT=0** | hành vi y nguyên |
🔴 **Ghi nhận một phép đo HỎNG đã tự bắt được:** lần đầu em kiểm site-2 bằng `git show ... \| Select-String` trong PowerShell 5.1 → trả **0 hit ở CẢ bản BEFORE** ⇒ "sạch" giả (console codepage làm mojibake dấu tiếng Việt). Đã **đo lại bằng thước khác** (`bash grep`, UTF-8) mới ra `1 → 0` thật. Đúng lớp *"phép trích RỖNG đọc thành sạch"* — control-âm cứu phép đo.
---
## 5. CHỐT LANE-2
### 5.1 Bảng disposition TỪNG điều-kiện (không gộp số tổng)
| ĐK | Nội dung | Verdict | Bằng chứng |
|---|---|---|---|
| (i) | evidence P1=PA-2 + phân-loại 64/64 | ✅ **ĐẠT** | `_context-s-12.md:55` · `harness-11-engine.md:547-589`, cộng bảng Q.2 = 64 |
| (ii) | đọc tiêu-chí soak PHẦN Q; không đạt ⇒ dừng | ✅ **ĐÃ THỰC HIỆN** → kết quả 🔴 **KHÔNG ĐẠT** | `harness-11-engine.md:587` 2 vế; 5 phép đo §T2 |
| (iii) | thang 4-trạng-thái C3-04 | ⛔ **BỊ CHẶN bởi (ii)** — đã đặc-tả treo §2, KHÔNG cắm | §2 bảng ánh xạ |
| (iv) | PA-2 = 2 mã thoát trong 1 máy | ⛔ **BỊ CHẶN bởi (ii)** — hình đã chốt trên giấy §2 | §2 |
| (v) | flip 2 dòng stale CÙNG lượt | ✅ **XONG** (cả 2, cùng lượt) | §4.4 bảng 2 chiều |
| (vi) | fault-inject 2 chiều SAU cắm | ⛔ **BỊ CHẶN bởi (ii)** — đã đo **phía TRƯỚC** trên cây tạm | §3 |
**C-1 = PARTIAL** (2/6 đạt trọn · 1/6 thực hiện-và-ra-kết-quả-DỪNG · 3/6 bị chặn hợp lệ). **KHÔNG cắm mã thoát** — đúng lệnh (ii).
### 5.2 Vùng-owner: KHÔNG chạm
Không đổi policy · không đổi số-nhịp · không đổi schema · không đổi enum `_sealed_P3B_S181` · không đụng nội dung ACTIVE-MARKS · không đổi một mã thoát nào (control `exit 0` 4→4). Chỉ sửa chú-thích.
### 5.3 🔴 FINDING trả LEAD (không tự vá — ngoài scope lane + FUNCTION-FLOOR)
**F-L2-1 — `harness-11-engine.md:587` mang một tiền-đề LẠC-QUAN chưa ai kiểm.**
Câu `(❌ chưa — W2 land 2026-08-07, cùng ngày)` quy nguyên nhân **cho trục THỜI GIAN** ("cùng ngày nên chưa đủ 1 phiên"), hàm ý rider-jump **đã tồn tại**. Đo @S185:**chưa từng được dựng**. Hệ quả nguy: đến ngày lịch đủ, người đọc PHẦN Q sẽ kết luận "soak xong ⇒ cắm được" trong khi vật cần soak vẫn chưa có — **đúng cơ chế "chặn tự tan theo thời gian"**`:589` mô tả, nhưng tan **sai lý do**.
*Đề xuất (CHƯA áp — PHẦN Q là 🔴 FUNCTION-FLOOR + ngoài scope lane-2):* đổi vế trong ngoặc thành `(❌ chưa — rider-jump CHƯA LAND: grep -c "OVERDUE:jump" scripts/nhip-no-probe.ps1 = 0, control "OVERDUE" = 6 @S185)` để điều-kiện **tự tan theo VẬT CHỨNG**, không theo lịch.
**F-L2-2 — rider-jump W2 là nợ chưa có chủ.**
`wave-plan-S180.md:66` giao rider-2; bảng nghiệm-thu `sub-w2-luoi-ghi-dia.md:265-280` **không có dòng nào** cho nó (chỉ có rider-6 `secrets_sweep` ❌ và rider `B-10` ❌); `_context-s-12.md:58` vẫn tuyên **"W2 ĐÓNG"** dù `:65` tự khai `4,5/6`. ⇒ ca **"nhãn đã-đóng hẹp hơn phạm vi thi hành"** (LỚP-8 lead ghi @S180) tái diễn: rider rơi khỏi cả bảng nghiệm thu lẫn nhãn đóng. **W3b bị khoá sau một khoản không ai đang cầm** ⇒ đề nghị lead cấp một mục W/C có tên cho rider-jump, nếu không W3b treo vô hạn.
**F-L2-3 (nhẹ, INFORM)**`scripts/nhip-no-probe.ps1:3` SYNOPSIS vẫn tự khai *"3-part debt line"* trong khi hợp-đồng output `:22` đã **4 vế** (thêm `pull-cach` @S143). Lệch nhãn-vs-thân, không ảnh hưởng hành vi.
### 5.4 Điều-kiện MỞ KHOÁ cho lượt cắm sau (copy nguyên, đo được)
```
1) grep -c "OVERDUE:jump" scripts/nhip-no-probe.ps1 # phai >= 1 (hom nay 0)
2) grep -c "OVERDUE" scripts/nhip-no-probe.ps1 # control duong, phai > 0 (hom nay 6)
3) rider-jump da chay INFORM >= 1 phien:
>= 1 tick moi trong .claude/governance/.session-counter.json history SAU commit land cua no
4) chi khi 1+2+3 xanh moi cam theo dac-ta §2; nghiem thu = fault-inject 2 chieu tren cay tam -RepoRoot
```
### 5.5 Ranh đã tuân
đọc thư gốc/nguồn trước khi chạm ✅ · không chạm vùng-owner ✅ · fault-inject **chỉ trên cây tạm** `%TEMP%\...\faketree`, repo thật 0 inject ✅ · mọi số kèm lệnh tái-lập ✅ · ENV-DEP đã khai (§4.3) ✅ · **KHÔNG commit/push** ✅ · **KHÔNG store_memory** ✅.
Tệp em chạm: `scripts/tien-kiem-cua.ps1` · `.claude/commands/adap-apply.md` · artifact này. Các tệp `M` khác trong `git status` là của lane khác — em không đụng.
**END — sub-opus-lane2-tienkiem**

View File

@ -4,12 +4,184 @@
> Artifact-first (chống #53): file này ghi LIÊN TỤC per-item. Return = con-trỏ.
> Ranh: đọc THƯ GỐC + REPORT trước khi chạm · vùng-owner ⇒ DỪNG + khai · fault-inject trên cây tạm · mọi số kèm lệnh tái-lập · edit file lệnh/persona ⇒ khai ENV-DEP · KHÔNG commit/push · KHÔNG store_memory.
## 0. Trạng thái chạy
## 0. Nguồn đã đọc TRƯỚC khi chạm (ranh 1)
| Thời điểm | Việc |
| Item | THƯ GỐC | REPORT |
|---|---|---|
| C-3 | `AI_INFRA/broadcasts/outbox/all/2026-07-20-Governance-3-khoan-title-tier-posture-home-distill-params.md` (Khoản 1 `:19-27`) ✅ đọc trọn | `docs/governance/adap-reports/2026-07-20-…-3-khoan-….md` ✅ đọc trọn (K1 = `agreed`) |
| C-4 | `…/2026-07-19-Agent-ensemble-cost-lens-khan-hiem-va-routing.md` (khoản ③ `:39-46` + nấc adopt `:50`) ✅ | `docs/governance/adap-reports/2026-07-19-Agent-ensemble-cost-lens-….md` ✅ (§3b: ③ CHƯA codify; §4: "gap thật, không phải project-fit") |
| C-17 | `…/2026-07-17-Governance-master-checklist-hai-tang-moi-cua-phien.md` ✅ | `docs/governance/adap-reports/2026-07-17-…-master-checklist-….md:26` ✅ (vocab-nit) |
---
## 1. C-17 — vocab-alias-map "sàn-5" → **SKIP-khai (đã đóng từ S139 bằng nhánh RENAME, owner quyết + hub ACK)**
### 1.1 Tiền-đề của C-17 sai HAI lớp (đo từ đĩa, không đọc lại checklist)
**Lớp 1 — "file CHƯA tồn tại": SAI.**
```bash
git ls-files | grep -i vocab # → docs/governance/vocab-alias-map.md
git log --diff-filter=A -1 --format="%h %ad" --date=short -- docs/governance/vocab-alias-map.md
# → 881783c3 2026-07-01
wc -c docs/governance/vocab-alias-map.md # → 8020
```
File **TỒN TẠI, git-tracked, tạo 2026-07-01** (commit `881783c3` "S96 monthly drift audit"), **8.020 B**, đã có **3 entry** (`run-trace↔wave-folder` · `Ngân sách PRO↔Dự trù PRO` · `worker-tier-pin↔all-inherit↔two-tier`). Nó còn được `naming-standard.md` **L1** trỏ tới làm **nguồn duy nhất** của danh sách 5 vùng đóng-băng ⇒ đây là doc governance đang SỐNG, không phải file trống chờ tạo.
*(Nguồn sai: `sub-review-checklist-fable.md:73` F-4 ghi "chưa tồn tại trên đĩa (git grep chỉ ra mention)" — phép `git grep` soi NỘI-DUNG nên không thấy tên tệp; lớp lỗi `feedback_absence_looks_like_clean` — phép trích RỖNG đọc thành "không có".)*
**Lớp 2 — "token sàn-5 còn 2 nghĩa": SAI, va-chạm đã được xử bằng RENAME @S139.**
| Bằng chứng | Nội dung |
|---|---|
| bắt đầu | tạo artifact, đọc checklist-final.md |
| `.claude/commands/session-end.md` khối `🚩 Sàn-5 — hậu-kiểm CỜ vs NỘI-DUNG (H22, adopt S122…)` | nghĩa H22 **GIỮ** tên |
| cùng file, khối `🔢 Luật đánh-số chờ-anh (điểm sàn #5 master-checklist cadd24ae, S138 — **rename S139 tránh trùng token "Sàn-5" H22 ở trên, quyết anh + L3 nit-1**)` | nghĩa S138 **ĐÃ NHƯỜNG** tên — ghi chú rename nằm ngay TRONG file |
| `broadcasts/outbox/ai_infra/2026-07-18-se-to-ai_infra-owner-quyet-4-khoan-xin-hub-review.md` §Khoản 3 | *"owner đồng-ý rename, ĐÃ làm local … bản đến-sau nhường tên, hết đụng vĩnh-viễn, **không cần alias-map**"* |
| `broadcasts/inbox/ai_infra/2026-07-18-ai_infra-to-se-reply-tong-bo-ba-harness-sub-4-khoan.md` | *"③ rename 'sàn-5' — **ACK**, đúng form-autonomy"* |
| `docs/HANDOFF.md` (khối Prev S138S139) + `docs/STATUS.md` (S138S139) | *"3 rename=ĐÃ-làm"* / *"nit-1 sàn-5 → ĐÃ rename 'Luật đánh-số chờ-anh'"* |
## 1. Ghi chép per-item
Lệnh đối chứng (kèm **control dương** để chứng thước còn sống):
```bash
grep -rn "Luật đánh-số chờ-anh" .claude/commands/ # control DƯƠNG → 1 hit (rename đã land)
git grep -n -- "sàn-5" -- .claude/commands/ # → 0 hit (token biến mất khỏi lớp lệnh)
git grep -c -- "sàn-5" # → 19 file, TOÀN BỘ là vùng đóng-băng
# (runs/ · agent-memory · broadcasts · adap-reports · STATUS/HANDOFF lineage)
```
(đang chạy...)
### 1.2 Vì sao KHÔNG làm nhánh alias-map (3 lý do độc lập, mỗi lý do đủ để dừng)
1. **Đụng vùng-owner (ranh 2).** Anh đã CHỌN nhánh (rename) và nhánh đó đã thi hành + hub ACK. Ghi entry alias-map bây giờ = **mở lại một quyết-định owner đã đóng**, và mâu thuẫn trực tiếp câu SE đã gửi hub *"không cần alias-map"*. ⇒ DỪNG + khai, đúng luật.
2. **Sai sự thật.** Alias-map entry đòi **2 tên còn sống cùng lúc**. Sau rename chỉ còn **1** tên `Sàn-5` (H22). Ghi vào = tạo doc mô tả một va-chạm không còn tồn tại — đúng lớp *lời-hứa-doc ≠ hành-vi thật*.
3. **Ngoài phạm-vi tự khai của chính tệp.** `vocab-alias-map.md` **Phạm vi** (khối mở đầu): *"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**"* — "sàn-5" là **trùng-mặt-chữ khác nghĩa** (homonym), tức loại tệp này **cố ý loại trừ**. Muốn nhét vào phải **nới phạm-vi tệp** = quyết-định riêng, không phải "1 entry additive" như C-17 mô tả.
### 1.3 Residual THẬT còn lại (KHÔNG tự sửa — bàn giao, tránh 2 agent cùng file)
- 🔶 `docs/governance/adap-reports/2026-07-17-…-master-checklist-….md` dòng vocab-nit vẫn ghi ***"(L3, LOW, **chờ owner**) … đề-xuất rename bản mới hoặc đăng-ký vocab-alias-map.md"*** — **STALE** (owner đã quyết + đã thi hành @S139). Cùng CLASS với C-14.
🔴 **KHÔNG sửa ở lane này:** file đó là đích của **C-18 (LANE-5)** (*"addendum report master-checklist 07-17"*). Ranh "tránh 2 agent cùng file" thắng. ⇒ **bàn giao LANE-5/lead**: khi viết addendum C-18, thêm 1 dòng flip vocab-nit kèm 4 evidence ở §1.1 bảng trên.
- 🔶 `checklist-final.md:24` mang tiền-đề sai ("file CHƯA tồn tại") — lead tự đính chính khi tổng hợp.
### 1.4 Phát hiện tặng kèm (đo lúc soi, 0 chi phí)
Tệp `vocab-alias-map.md` cuối bài tự đặt 1 nghĩa-vụ: *"Cần thêm `docs/governance/vocab-alias-map.md` vào `$ExcludeExact` … **Đây là bước bắt buộc khi commit file**"* → kiểm lời-hứa-đã-land hay chưa:
```bash
grep -n -A6 '\$ExcludeExact\s*=' scripts/governance-detectors.ps1
# :120 governance-detectors.ps1 ← control dương 1
# :121 harness-11-engine.md ← control dương 2 (tệp thư nói "đã loại trừ sẵn")
# :122 vocab-alias-map.md ← ✅ ĐÃ LAND
```
**KHÔNG phải nợ.** Ghi lại để lần sau khỏi mở lại (đối lập ca `rename-ledger.md``naming-standard.md` trỏ tới nhưng **không tồn tại** — nợ đó đã có chủ ở W1/W3, tôi không đụng).
**VERDICT C-17 = `SKIP-khai` (skip-owner + skip-đã-đóng).** 0 file bị sửa. Không đốt slot chờ-anh: không có gì để hỏi — anh đã trả lời từ 07-18.
---
## 2. C-3 — K1 masthead sweep: `agreed` → **executed**
### 2.1 Floor lấy từ thư gốc (`3-khoan:19-27`)
- **Luật:** *"sau khi sửa body doc NÀO trong một lượt sweep → **đọc lại dòng-1 + masthead của chính doc đó** trước khi tuyên sweep xong"*.
- **Root-cause (hub ghi là "đáng giá hơn cái lỗi"):** sweep quét theo **danh mục nơi TRỎ TỚI** doc, nhưng không quét **cách doc tự mô tả chính nó**; tiêu-đề *"không nằm trong danh mục của ai cả"* ⇒ tầng sống sót lâu nhất. Ca nặng nhất ở hub sống qua **2 lượt sweep**, 3 ca cùng hình trong 3 phiên liền.
- **Phép thử hub giao:** grep dòng `#` đầu của doc governance/policy đang active, đối chiếu trạng-thái hiện-hành.
### 2.2 Baseline TRƯỚC khi sửa (đo tươi 2026-08-09, lệnh khác cả invest lẫn review)
```bash
grep -rli "masthead" --include="*.md" --include="*.ps1" --include="*.py" --include="*.js" .
```
**13 tệp**, phân loại: 10 × `.claude/workflows/runs/**` (vết chạy) + 2 × `broadcasts/inbox/**` (thư gốc) + 1 × `docs/governance/adap-reports/2026-07-20-…` (chính report). ⇒ **0 rule-file** — khớp claim invest/review.
Chống **mù-biến-thể-chữ** (caveat report `:29` tự khai phép đo chỉ soi token `masthead`) — grep biến thể `dòng-1|dòng 1|tiêu-đề``sweep|quét|masthead` ngoài `runs/`+`broadcasts/`: **0 hit khớp nghĩa** (1 hit `ring1-audit/MEMORY.md:63`*"sweep theo DÒNG"* — khái niệm khác, không phải luật masthead). ⇒ baseline **0** đứng cho **cả 4 biến thể**, không chỉ 1 token.
### 2.3 Chọn nhà (bậc-2 — chọn nhánh + khai)
**Chọn `docs/governance/naming-standard.md`, thêm section MỚI `§12-bis`.** Lý do:
| Tiêu chí | Phán |
|---|---|
| Ứng-viên checklist đề | đúng tệp này |
| Thuộc lane-3 (`docs/governance/`) | ✅ |
| Va-chạm lane khác | **0** — L1 giữ `governance-detectors.ps1`, L2 giữ `harness-11-engine.md §Q`+`tien-kiem-cua.ps1`, L4/L5 giữ `adap-reports`+`HANDOFF`. `naming-standard.md` **không lane nào khác chạm** (L5 chỉ ĐỌC nó ở `:107`) |
| Ăn khớp nội dung | §12 = *"số chỗ phải sửa ĐỒNG THỜI"* liệt theo danh mục nơi TRỎ TỚI; masthead = đúng cái **chỗ không danh mục nào liệt**. §12-bis nằm ngay sau §12 là chỗ của nó |
| Nhánh bị loại | `docs/rules.md §6.4` (ngoài dirs lane-3) · `harness-11-engine.md` (**LANE-2 đang chạm**) · thêm `L5` vào `§0` (heading tự khai *"Năm luật nền"* ⇒ thêm luật thứ 6 **tự đẻ masthead-drift**, đúng cái bệnh đang vá — loại vì tự mâu thuẫn) |
**Vị trí chèn = SAU `§12`, TRƯỚC `§13`.** An toàn toạ-độ: (i) `grep -rE "naming-standard\.md:[0-9]+"` → mọi neo số-dòng đều **≤ :107** (`:10` `:107` `:170` `:278`) — chèn ở ~:206 **không lão-hoá** neo nào ở trên; (ii) `:278` (PHỤ LỤC B) sẽ trôi — nhưng neo đó nằm trong `runs/**` **đóng băng** và đã được `sub-w3-nghi-thuc.md` khai là con-trỏ tới `rename-ledger.md` **không tồn tại** (nợ có chủ, không phải của tôi); (iii) LANE-5 đang cite `naming-standard.md:107`**không đổi**.
### 2.4 Chạy phép thử K1 lần đầu (21 tệp) — có ca dương THẬT
```bash
for f in docs/governance/*.md docs/rules.md docs/STATUS.md docs/HANDOFF.md CLAUDE.md; do
printf "%-52s | %s\n" "$f" "$(grep -m1 '^#' "$f")"; done
```
| Tệp | Dòng `#` đầu | Phán |
|---|---|---|
| `docs/governance/ctx-soft-memory-se-draft.md` | *"Ctx soft-memory — SE-form **DRAFT** …"* | 🔴 **DƯƠNG THẬT** — thân chính nó (khối `> **Trạng thái:**`) tuyên *"✅ RATIFIED + ĐÃ WIRE @S153 (OWNER-VETO)"* và còn tự chẩn đoán lớp bệnh *"wired-but-declared-unwired … ghost-wire chiều ngược"*. Thân ĐÃ vá, **masthead sống sót** — đúng y hình hub mô tả |
| `docs/governance/session-model-se-draft.md` | *"(DRAFT v0.1 — HẠ-TẦNG đã wire, NGHI-THỨC chưa chuyển)"* | ⚪ **KHÔNG tính ca masthead** — masthead **KHỚP** thân (`> ⏳ CHƯA … 0 nghi-thức chuyển per-L` @S146). Nó có stale hay không thuộc **C-20/F-11** (đối-chiếu hub-reply 07-22). Không đụng |
| 19 tệp còn lại | masthead thuần-mô-tả, không mang trạng-thái | ⚪ sạch |
**1 dương / 21.** Ca dương này là **derived-flush** (thân = owner-set `RATIFIED @S153 OWNER-VETO`; masthead = bản dẫn xuất lệch) ⇒ theo `feedback_derived_flush_execution`**execution, không cần gate**. Đã flush **giữ vết** 🧊.
### 2.5 Đã sửa
1. `docs/governance/naming-standard.md`**+§12-bis** (mới, additive; 0 heading cũ bị đổi).
2. `docs/governance/ctx-soft-memory-se-draft.md`**dòng 1**: `DRAFT` → trạng-thái thật + 🧊 giữ lineage (áp chính luật vừa ký, cùng lượt).
### 2.6 Acceptance (checklist đòi: *grep masthead-rule ra ≥1 hit ngoài adap-reports*)
```bash
grep -rli "masthead" --include="*.md" . | grep -v "workflows/runs/" | grep -v "^./broadcasts/" | grep -v "adap-reports"
```
- TRƯỚC: **0**
- SAU: **1**`docs/governance/naming-standard.md` ✅ ĐẠT
*(kết quả thật ghi ở §4 sau khi land)*
---
## 3. C-4 — codify pattern "lead suggest 1 dòng non-blocking rồi chạy luôn"
### 3.1 Floor từ thư gốc (`cost-lens:39-46` + nấc adopt `:50`)
- Hub thử **2 cực rồi chốt giữa**: cực-1 *nén CỨNG heuristic thành rule máy (lead auto-route)* → owner **RÚT** (*"mất tự-chủ"* + đóng cửa việc lead bắt case heuristic sai); cực-2 *lead im, owner tự nhớ* → owner **cũng không chọn** (*"đôi khi tao đánh giá sai"*).
- **Chốt giữa (nguyên văn ý):** lệnh gõ **đích-danh** của owner = **kênh cứng** (thực thi, không bàn); owner giao việc **không chỉ-định** chế-độ ⇒ lead đánh giá + **suggest đúng 1 dòng non-blocking** (*"việc này ảo/thật làm tốt hơn — vì …"*) **rồi chạy luôn** — không ai treo chờ ai.
- `:50`: **"Khoản ③ áp được cho MỌI nhà"** (kể cả nhà 1-chế-độ) — dùng cho **bất-kỳ lựa-chọn vận-hành nào lead làm thay owner được nhưng owner muốn giữ mắt nhìn**. Không floor, form tự quyết.
### 3.2 Baseline (đo tươi)
```bash
grep -rn -iE "suggest.{0,12}(1|một).{0,4}dòng|1.dòng.{0,4}non-blocking|non-blocking.{0,20}(suggest|gợi.ý)" \
--include="*.md" docs .claude CLAUDE.md | grep -v "workflows/runs/"
```
**2 hit, cả 2 nằm trong CHÍNH report** `2026-07-19-…cost-lens….md:26``:32` (mention, tự khai *"CHƯA có vết codify"* / *"gap thật, không phải project-fit"*). ⇒ **0 codify**, khớp claim.
### 3.3 Chọn nhà (bậc-2 — chọn nhánh + khai)
**Chọn `CLAUDE.md` (khối operating-posture), thêm blockquote MỚI ngay dưới khối `🎛️`** — KHÔNG sửa 6 dòng khối `🎛️` sẵn có.
| Nhánh | Phán |
|---|---|
| `.claude/commands/fable-real.md` (ứng-viên 2) | ❌ **sai nhà về ngữ nghĩa**: file đó chỉ chạy khi anh **đã gõ lệnh đích-danh** = đúng ca *kênh cứng*, tức ca pattern **không áp dụng**. Nó còn dạy nhánh **BLOCKING** ngược lại (*"Thiếu/sai vai → hỏi lại anh 1 dòng, KHÔNG tự chọn"*). Codify ở đó = chôn luật ở nhánh không bao giờ chạy nó |
| `docs/governance/harness-11-engine.md` (implement-home tự nhiên) | ❌ **LANE-2 đang chạm §Q** — ranh "2 agent cùng file". Loại vì va-chạm, không vì nội dung |
| **`CLAUDE.md`** | ✅ Pattern là **hành-vi mặc-định của lead ở MỌI phiên** ⇒ đúng định nghĩa **operating-posture** của chính khoản-2 thư `3-khoan:31-41` mà SE **đã adopt**`CLAUDE.md:23-28`. Đặt nơi khác = tái tạo đúng lỗ `implement-home ⟂ discoverability-home` mà report cost-lens `§5` đã tự khai (*"anh chủ dự án không nhìn thấy khoản này ở đâu cả"*). Pattern **không có wire máy** ⇒ implement-home ≡ discoverability-home, 1 nhà là đủ, không đẻ nguồn-đôi |
### 3.4 Vùng-owner? — cân, rồi khai (KHÔNG im lặng)
Đã cân 3 tín hiệu ngược trước khi chạm:
- `naming-standard.md` PHỤ LỤC B **N-1**: *"W1 **bị cấm sửa** `CLAUDE.md`; bề mặt nạp mỗi lượt, sửa phải gom restart — **cần chủ dự án gật**"*. → Đọc đúng phạm vi: đó là (a) **ranh lane W1** của wave S180, và (b) nói về ca **sửa một KHUÔN đang sai 59,7% đĩa** (đổi quy-ước sẵn có). Việc ở đây là **THÊM** một pattern mềm, **không** đổi khuôn/số/policy-cứng nào.
- Ranh vùng-owner của run này liệt: *policy · số-nhịp · schema · enum-sealed `_sealed_P3B_S181` · ACTIVE-MARKS*. Edit này **không chạm** cái nào (0 con số, 0 nhịp, 0 mark).
- Thư gốc tự khai **KHÔNG floor** (4 lần) ⇒ đây là **form SE tự chọn**, không phải luật ngoại nhập.
**Kết:** bậc-2 (đảo ngược được bằng xoá 1 blockquote), lead-checklist đã chỉ đích danh tệp này. **Làm + khai + trao anh cần gạt 1 dòng** (§3.6). Chính edit này **tự dogfood** pattern nó ghi: suggest 1 dòng → chạy → anh đọc thấy, muốn thì gạt.
### 3.5 ENV-DEP (ranh 5)
🔴 `CLAUDE.md` được nạp vào context **ở đầu phiên**. Bản trong context phiên NÀY là bản **trước** edit ⇒ **ăn từ phiên sau** (no hot-reload). Phiên này vẫn vận hành theo bản cũ — đúng lớp ENV-DEP đã biết (cùng họ với edit `.claude/commands/*.md` / persona).
### 3.6 Trao anh 1 dòng gạt (non-blocking, đúng tinh thần chính khoản ③)
> *Đã thêm pattern suggest-1-dòng vào `CLAUDE.md` (khối posture) vì thư `cost-lens` khoản ③ nói áp được cho mọi nhà và report SE đã tự khai đây là gap thật, không phải project-fit. Anh không thích thì xoá 1 blockquote — 0 phụ thuộc.*
---
## 4. Kết quả land + acceptance đo SAU (điền khi xong)
(đang chạy…)

View File

@ -1,23 +1,98 @@
# sub-opus-lane4-report-hygiene — LANE-4 (YC-017, S185)
> Agent: Opus 5 (1M) · lane report-hygiene · item: **C-14, C-20, C-15, C-16, C-21** (5 item)
> Ràng: serial nội-lane (C-14 + C-15 cùng đụng `docs/HANDOFF.md`) · addendum = block MỚI giữ dòng cũ (bài-5) · HANDOFF:6 lật TỪNG CÂU có evidence · KHÔNG commit/push · KHÔNG store_memory.
> Ràng: serial nội-lane (C-14 + C-15 + C-16 cùng đụng `docs/HANDOFF.md`) · addendum = block MỚI giữ dòng cũ (bài-5) · HANDOFF:6 lật TỪNG CÂU có evidence · KHÔNG commit/push · KHÔNG store_memory.
> Artifact-first: file này ghi LIÊN TỤC per-item. Ruột nằm ở đây, return chỉ là con-trỏ.
---
## §0 — Trạng thái (cập nhật liên tục)
## §0 — Trạng thái
| Item | Trạng thái | Ghi chú |
| Item | Trạng thái | Ghi chú 1 dòng |
|---|---|---|
| C-14 | ⏳ đang đọc nguồn | addendum report 08-07 + flip HANDOFF:6 từng câu |
| C-20 | ⏳ chờ | report session-model-manifest 07-17 `agreed`→? |
| C-15 | ⏳ chờ | carry `[carry:ctx-t9-dogfood]` đóng từng vế |
| C-16 | ⏳ chờ | locate bảng 2-cột thẩm-quyền |
| C-21 | ⏳ chờ | disposition 5 dòng §2.1 rơi |
| C-14 | ✅ evidence ĐỦ → thi công | 4/4 câu HANDOFF:6 CÓ phán quyết (khác giả-thiết lead "P3/VK-5 chưa") |
| C-20 | ⏳ evidence đang đo | VC-1/2/3 = điều-kiện (c) — chưa thấy owner duyệt tường minh |
| C-15 | ⏳ evidence đang đo | carry 5 vế |
| C-16 | **LOCATE XONG + phát hiện phụ** | nhà thật = `sub-apply-L5-evalcuaeval.md:37,41,59,115`; **đã từng là slot (22) + `[carry:eval-thamquyen]` — carry RƠI khỏi re-stamp S179/S181** |
| C-21 | ⏳ 4/6 dòng đã đo | (c1) đóng từ S130 · (g) LIVE · (o) một phần · (t) đóng |
---
## §1 — Log đọc nguồn (trước khi chạm)
## §1 — C-14 · addendum report 08-07 + flip HANDOFF:6 TỪNG CÂU
(đang ghi)
### 1.1 Nguồn đã đọc TRƯỚC khi chạm (ranh cứng)
| Nguồn | Đường dẫn | Đã đọc |
|---|---|---|
| THƯ GỐC | `D:/Dropbox/CONG_VIEC/AI_INFRA/broadcasts/outbox/all/2026-08-07-Governance-nghi-thuc-hai-dau-nhip-thua-va-luu-nguyen-van.md` (11.749 B, mtime 08-07 17:36) | ✅ (qua report + owner-decisions trích nguyên văn; nội dung điều-kiện-3 đối chiếu 2 nguồn) |
| REPORT | `docs/governance/adap-reports/2026-08-07-Governance-nghi-thuc-hai-dau-nhip-thua-va-luu-nguyen-van.md` (4.248 B) | ✅ trọn 41 dòng |
| Sổ quyết-định | `.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/owner-decisions-07-08-2026-dot-2.md` | ✅ trọn 49 dòng |
| Ngữ cảnh đợt-1 | `.claude/sessions/session-12/_context-s-12.md` PAUSE-1 (`:47`) | ✅ |
### 1.2 Vế A — dòng "CHƯA GHÉP" trong report 08-07 = STALE
- Vị trí: report `:12` cột "SE làm" — nguyên văn *"🔴 **CHƯA GHÉP** — chủ dự án gật P5 là gật **3 bậc**, chưa gật phần ghép này"* + `:20` *"**Skip:** điều kiện 3 ghép vào bậc-2 — chờ chủ dự án phán riêng"*.
- Bằng-chứng ĐÃ GHÉP (2 nguồn độc-lập, đo tươi 2026-08-09):
1. `.claude/governance/ACTIVE-MARKS.md:65` — bậc-2 nguyên khối chứa **"+ Điều-kiện-3 (ghép @S181, anh gật)"**.
Lệnh tái-lập: `grep -n "Điều-kiện-3" .claude/governance/ACTIVE-MARKS.md`**1 hit @:65**.
2. `owner-decisions-07-08-2026-dot-2.md:47`*"✅ **P5 (d) — ĐÃ GHÉP @S181** (anh gật câu 2). Điều-kiện-3 nay là một vế **trong bậc-2** của `ACTIVE-MARKS §LT3`."*
- ⇒ Xử: **addendum block MỚI ở cuối report**, GIỮ NGUYÊN `:12``:20` làm vết (bài-5 thư 08-08 "giữ ảnh chụp").
### 1.3 Vế B — HANDOFF:6, đối chiếu TỪNG CÂU (không lật cả cụm — ctx-verifier cờ #9)
| Câu | Nội dung | Phán quyết? | Evidence đích danh | Xử |
|---|---|---|---|---|
| **(1)** | duyệt `bao-cao-cuoi.md` → gửi hub? | ✅ CÓ | `adap-reports/upgrade-pack-phased-bao-cao-cuoi.md:3` *"CHỦ DỰ ÁN ĐÃ DUYỆT @S181 — nguyên văn **'1,2,3,4 -> OK'**"* + `:4` đường dẫn thư đã gửi · file THẬT tồn tại `broadcasts/outbox/ai_infra/2026-08-07-se-to-ai_infra-upgrade-pack-phased-bao-cao-cuoi.md` **7.231 B mtime 08-07 23:36** · dấu `ACTIVE-MARKS.md:27` `RC-pqhuy1987-07-08-2026-21-42-10` Active-High anh-confirm S181 | **LẬT** — 3 lớp bằng-chứng (chữ owner + vật gửi + con dấu) |
| **(2)** | ghép điều-kiện-3 vào bậc-2 | ✅ CÓ | `ACTIVE-MARKS.md:65` + `owner-decisions…dot-2.md:47` (xem §1.2) | **LẬT** |
| **(3)** | P3 = forward-only hay hồi-tố? | ✅ CÓ | `owner-decisions…dot-2.md:48` *"✅ **P3 (a) — CHỐT FORWARD-ONLY @S181** (anh trả 'OK' cho câu nêu rõ *'lead đang đọc vậy'*)"* + *"Muốn hồi-tố về sau thì cần một lệnh **tường minh**, không suy từ 'OK'"* | **LẬT + GIỮ CAVEAT** (nền = "OK" cho câu lead-đóng-khung; đường đảo còn mở) |
| **(4)** | VK-5 nhập khối chính hay phụ lục? | ✅ CÓ | `owner-decisions…dot-2.md:49` *"✅ **VK-5 — CHỐT GIỮ PHỤ LỤC @S181**"* + lý-lẽ chống-bẫy-A1 | **LẬT + GIỮ CAVEAT** (cùng dạng nền "OK") |
🔴 **Đính chính giả-thiết của checklist-final:** C-14 dự đoán *"câu chưa (P3-forward-only? VK-5?) GIỮ"*. Đo đĩa thì **cả 4 đều có phán quyết** — nhưng **KHÔNG đồng-hạng**: (1)(2) nền = **chữ owner trực-tiếp + vật chứng ngoài** (thư đã gửi / dấu RC / dòng luật đã ghép); (3)(4) nền = **"OK" trả cho câu do lead đóng khung**, chính sổ quyết-định tự khai đường đảo. ⇒ lật cả 4 nhưng **ghi 2 hạng nền khác nhau**, đúng cảnh báo ctx-verifier #9 "4 câu không đồng-trạng-thái" (khác-trạng-thái ở **hạng bằng-chứng**, không phải ở có/không).
---
## §2 — C-16 · locate bảng 2-cột thẩm-quyền {owner-SỐ · owner-LUẬT}
### 2.1 Nhà THẬT (locate xong — invest báo "0 hit error-ledger" là đúng, nhà nằm chỗ khác)
**`.claude/workflows/runs/2026-07-25-S149-adap-backlog/sub-apply-L5-evalcuaeval.md`**
- `:37` — luật: *"🔒 **2 cột thẩm-quyền ĐỂ TRỐNG — owner điền.** … *'AI không tự quyết hai cột sau'* — thư `:24` verbatim"*
- `:41` — header bảng **A** (7 thước độc-lập A1-A7): `… | Verdict | 🔒 owner-SỐ | 🔒 owner-LUẬT |`
- `:59` — header bảng **B** (11 check trong `governance-detectors.ps1`, B1-B11)
- `:115` — ô owner-LUẬT cụ-thể của **B11**: *"Phải owner chốt: baseline mới **43** có được ratify không, hay giữ **46** và chỉ đổi nhãn?"*
Con-trỏ phụ (nhất quán): `docs/governance/adap-reports/2026-07-21-…eval-cua-eval.md:14` (*"verified-pending (owner) — 🔒 ĐỂ TRỐNG có chủ-đích"*) và `:80`.
Thư gốc: `AI_INFRA/broadcasts/outbox/all/2026-07-21-Governance-eval-quality-audit-ra-thuoc-eval-cua-eval.md` — dòng verbatim *"…phân loại thẩm quyền {AI-tự-sửa · chủ-dự-án-quyết-SỐ (ngưỡng, target) · chủ-dự-án-quyết-LUẬT (bỏ check, đổi cơ chế, thêm gate)} — **AI không tự quyết hai cột sau**"*.
Lệnh tái-lập: `rg -n "owner-LUẬT" .claude/workflows/runs/2026-07-25-S149-adap-backlog/` → 3 hit (`:41` `:59` `:115`).
### 2.2 🔴 Phát hiện phụ (ngoài đề bài) — câu này ĐÃ từng lên bề mặt owner rồi RƠI
- `docs/HANDOFF.md:241` (segment S150, 🧊 BẤT BIẾN theo tiering) chứa **slot (22)**: *"⚑ **2 cột thẩm-quyền eval 🔒** (owner-SỐ ⟂ owner-LUẬT — bảng eval-của-eval `runs/2026-07-25-S149-adap-backlog/sub-apply-L5-evalcuaeval.md:37,41,59,115`) `[carry:eval-thamquyen]`"*.
- Tức **nhà thật đã được ghi đúng từ @S150**, kèm slug carry riêng.
- Nhưng đo hôm nay: `[carry:eval-thamquyen]` **KHÔNG có trong khối RE-STAMP @S181** (`HANDOFF:9`, 23 slug) lẫn khối `Carry @S179` (`:78`+`:80`, 14+7 slug).
Lệnh: `grep -c "carry:eval-thamquyen" docs/HANDOFF.md`**1** (chỉ hit @`:241` segment cũ; control-dương `carry:ctx-t9-dogfood` = **6 hit**, có mặt ở cả `:9``:78`).
- ⇒ Đây là một ca **`gap-carry-dropped` chưa được đếm** — đúng class mà `HANDOFF:8` tự tuyên *"re-stamp carry rơi 4 kỳ liên tiếp… nghi-thức này không có răng"*. Việc C-16 hoá ra không phải "chưa locate" mà là **"đã locate, rồi rơi khỏi bề mặt"**.
- **Slot số:** GIỮ **(22)** — KHÔNG mint số mới. Dãy slot là MỘT chuỗi liên tục (1)…(75); mint (76) cho cùng một câu = đẻ **2 số cho 1 việc**, và tái-dụng/đổi số là đúng lớp lỗi `slot-index tái-dụng xoá IM-LẶNG`. Re-surface = kéo (22) lên khối hiện-hành, ghi rõ lineage.
---
## §3 — C-21 · disposition 5-6 dòng §2.1 rơi (đo tươi 2026-08-09)
| Dòng | Nợ khai trong report | Đo tươi hôm nay (lệnh + kết quả) | Disposition |
|---|---|---|---|
| **(c1)** carry mark-S123 "chờ anh 1 chữ" | `adap-reports/2026-07-16-…tong-hop-loi…:18,24` | `ACTIVE-MARKS.md:39` = *"✅ **RESOLVED @S130** (2026-07-16, anh confirm qua AskUserQuestion **'Gỡ carry'**)… Carry mark-S123 **gỡ khỏi sổ theo-dõi**"*; `HANDOFF:264` xác nhận cùng nội dung. Lệnh: `grep -rn "mark-S123" .claude/WAL.md docs/HANDOFF.md .claude/governance/ACTIVE-MARKS.md` → 0 hit ở WAL, 1 ở HANDOFF (lineage), 1 ở ACTIVE-MARKS (RESOLVED) | **verify-đóng-kèm-lệnh** — đóng từ S130, report viết cùng ngày nên STALE ngay khi mực chưa khô |
| **(c2)** recipe body-sha strip-1 ⟂ strip-ALL, adap-request chờ hub | cùng report `:20,24` | Nấc **KNOWN-OPEN chờ-HUB** do chính report khai; SE không có đường đóng đơn phương (hub sở hữu canonical con dấu) | **Ghi-chú-khai-đúng** — nợ hub-gated, đã khai đúng nấc, không đẻ C/W |
| **(f)** bất-biến +1 KHÔNG máy canh nhãn-reuse | `2026-07-17-…wording-tick-annex-phep-8.md:25`*"Hiện **không có detector nào** bắt được ca reuse nhãn… hệ-quả là **+0 im lặng**"* | Nợ-máy còn nguyên (không thấy detector nhãn-reuse). Cùng HỌ với C-8 (liveness 2 lưới) và C-19 (mirror-drift) đang ở LANE-1 | **C-item mới (đề-xuất)** — gộp họ "detector nhỏ" với C-8/C-19; 🔴 lane-4 KHÔNG tự cắm (file `governance-detectors.ps1` là turf LANE-1, cấm 2 agent cùng file) |
| **(g)** dangling-tick `last_ticked_head` lên commit `wal:` | `2026-07-17-…nam-vong-do-rai-lam-don.md:25` — DP-2 noise-expectation | 🔴 **LIVE NGAY BÂY GIỜ**: `.claude/governance/.session-counter.json``"last_ticked_head": "8491923eff64df8cbef569711ece1e88d6a77d25"`, mà `8491923e` = commit **`wal: flush 20260808T1349`** (git log HEAD). Đúng hình DP-2 mô tả. Candidate-fix report ghi *"vẫn treo anh/hub"* | **W-candidate** (owner/hub-gated: đổi neo tick = đổi cơ-chế guard = owner-LUẬT). 🔴 Lane-4 **KHÔNG** tự thêm W (khối CHỜ-ANH Opus không chạm ngoài C-16) — trình lead |
| **(o)** JUMP {4,3,3} + view-residual FROZEN | `2026-07-19-…dong-du-vong-audit…:36`*"cờ `_frozen_until_owner` **chưa được ghi vào file**"* | Đo tươi: `grep -c "_frozen_until_owner" .claude/governance/.session-counter.json` = **0** → cờ VẪN chưa có trong file (nợ còn). NHƯNG `class_repeat._jump_state_S149` CÓ trong file, và vế bất-định đã hết: `view-residual-asym` nay = **11** (không còn {0,3}). Đối chiếu `HANDOFF:241` slot **(21)** ghi *"khoá `_frozen_until_owner` ĐÃ CẮM"***2 nguồn nói ngược nhau, đĩa thắng: chưa cắm** | **verify-đóng-MỘT-PHẦN + Ghi-chú-khai-đúng**: vế "bất-định {0,3}" ĐÓNG (số nay xác định = 11); vế "cờ frozen chưa ghi" **CÒN**, và phát sinh **mâu-thuẫn sổ ↔ đĩa** (slot (21) claim ĐÃ CẮM ≠ đĩa 0 hit) → trình lead |
| **(o-bis)** M8 V5-counter DEFER | cùng report `:37` | = **C-11** trong checklist-final (LANE-1) — đã có nhà | **verify-đóng: đã route** (không rơi) |
| **(t)** slot (36)(38) | `2026-07-25-…pause-tiep…:39,40` — (38) vai-gộp-3-nhịp · (36) nhịp phóng vai máy-$0-mỗi-pause | `HANDOFF:208`: *"~~(38)~~ ✅ **anh đã VETO + chốt hub-form 3-vai @S153**"* (report `:29` cũng ghi OWNER-VETO, đã thi hành: +2 persona, VALID_ROLES 21→23). (36) = veto-window *"không veto = giữ"*, và **không** nằm trong `HANDOFF:114` "Slot cũ còn treo" | **verify-đóng-kèm-lệnh** — (38) đóng bằng owner-veto có vết; (36) đóng bằng hết-veto-window (default GIỮ) |
**Kết C-21:** 6 dòng / 7 vế → **verify-đóng 4** · **Ghi-chú-khai-đúng 1** · **C-item mới 1** (họ detector, giao LANE-1/lead) · **W-candidate 1** ((g) dangling-tick) + **1 mâu-thuẫn sổ↔đĩa mới** ((o) slot 21).
---
## §4 — C-20 (đang đo) · §5 — C-15 (đang đo)
(ghi tiếp bên dưới)

View File

@ -13,3 +13,159 @@
(ruột từng item ghi bên dưới, append liên tục)
---
# C-5 — phép bác Lớp 2 · 4 · 9 (thư 08-05 phần "chưa đo")
**Nguồn thư gốc:** `D:/Dropbox/CONG_VIEC/AI_INFRA/broadcasts/outbox/all/2026-08-05-Governance-loi-do-luong-phan-1-tai-lap-duoc.md` — Lớp 2 `:28-38` · Lớp 4 `:56-66` · Lớp 9 `:126-136`.
**Report đích:** `docs/governance/adap-reports/2026-08-05-Governance-loi-do-luong-phan-1-va-2.md` (dòng `:51` khai "Lớp 2·4·9 — chưa chạy phép bác").
## L2 — "Cái chốt kiểm-chứng đã bị tiêu thụ"
**Phép bác của thư (`:38`):** *"Tìm mọi câu dạng 'nếu X không xảy ra thì máy đã hỏng', rồi chạy lại đúng phép đo trong câu đó hôm nay. Câu nào vẫn còn nghĩa thì tốt; chúng tôi đoán bạn sẽ tìm thấy ít nhất một câu đã hết hạn."*
**Vị-từ SE tự đặt (khai trước, ship số sau — chống Lớp 3):** *chốt kiểm-chứng* = câu trong doc/script **neo vào một GIÁ-TRỊ ĐO ĐƯỢC LÚC VIẾT** (số / tỷ-lệ / số-dòng) và dùng giá-trị đó để bảo-chứng máy còn sống. Loại trừ: bản-ghi lịch-sử (session-log, HANDOFF slot đã đóng) — chúng không đóng vai bảo-chứng.
**Lệnh gom ứng-viên:** `grep -rnE "(hỏng THƯỚC|thước hỏng|máy đã chết|thì máy|control (dương|âm)|positive-control)" --include="*.md" --include="*.ps1" docs .claude scripts | grep -v agent-memory/archive` → 50 hit thô, lọc theo vị-từ còn **5 chốt SỐNG**.
| # | Chốt (file:line) | Số neo LÚC VIẾT | Đo lại 2026-08-09 | Kết |
|---|---|---|---|---|
| L2-1 | `scripts/naming-scan.ps1:317` in `$script:Total` **sống**`:318-321` + `:196` giải-thích **cứng** | "Tap do: **231** ten" · "goc 231 … **=> 233** sau W1" | máy in `mau so TONG: **256**` trong **CÙNG một lượt chạy****hở 23 tên không giải-thích** | 🔴 **HẾT HẠN** |
| L2-2 | `docs/governance/naming-standard.md:107` "MÁY: `detectors:1102` + `:1771` (cùng regex, HAI bản sao) + `memory-selfimprove-audit.ps1:298` ⇒ đổi họ = sửa **3 chỗ**" | neo 3 **số dòng** (viết 08-07) | regex `'^(sub-.+\|.+-return)\.md$'` nay ở **`:1109`** + **`:1778`** (trôi **+7**); selfimprove ở `:299` (+1). Mệnh-đề "3 chỗ" **còn đúng**, **toạ-độ SAI cả 3** | 🔴 **HẾT HẠN (toạ-độ)** — mệnh-đề sống |
| L2-3 | `scripts/naming-scan.ps1:8-11` (hợp-đồng máy, khoản 1) "bat gate ma chua soak => **8-12 lop no ton** keu cung luc" | 812 | chạy máy hôm nay: **LECH 8/256**, rải **4 nhóm**. Đọc "lớp"=**cờ** ⇒ 8 ∈ [8,12] ✅ · đọc "lớp"=**nhóm** ⇒ 4 ∉ [8,12] ❌ | 🔶 **HAI CÁCH ĐỌC** (chính là Lớp 3 tái diễn *bên trong* phép bác Lớp 2) |
| L2-4 | `scripts/naming-scan.ps1:25-26` (khoản 5) "3 script .ps1: **0/0/0** byte ngoài ASCII, **control-duong** trên 1 tệp .md tiếng Việt = **58**" | 0/0/0 + control 58 | 5/5 script đo lại = **0 non-ASCII** ✅ (mở rộng vẫn giữ). Control: naming-standard.md = **9.238 byte** ngoài ASCII / **127** điểm-mã phân-biệt — **không** tái-lập được số 58 ở cả 2 đơn-vị | 🔶 **chức-năng CÒN** (control ≠ 0 ⇒ thước sống) · **hiệu-chuẩn HẾT HẠN** |
| L2-5 | `docs/governance/so-yeu-cau-chu-du-an.md:69` "Đo @S180: **0 hit** toàn kho (control dương cùng phép, chuỗi *điểm dừng* = **5 tệp** ⇒ lệnh chạy được, rỗng là rỗng thật)" | control 5 tệp | `grep -rl "điểm dừng" --include="*.md" .` = **70 tệp**; khối `PN-` vẫn **1 hit** (chính dòng mồi, không phải bản ghi) | 🔶 **chức-năng CÒN** · **hiệu-chuẩn lệch 14×** |
**Lệnh tái-lập (từng dòng):**
```
# L2-1
powershell -NoProfile -File scripts/naming-scan.ps1 | grep -E "mau so TONG|goc 231|=> 233"
grep -n "231\|233\|mau so TONG" scripts/naming-scan.ps1
# L2-2
grep -nE "\^\(sub-\.\+\|\.\+-return\)" scripts/governance-detectors.ps1 # -> 1109, 1778
sed -n '107,108p' docs/governance/naming-standard.md
# L2-3
powershell -NoProfile -File scripts/naming-scan.ps1 | grep -E "^ LECH"
# L2-4
powershell -NoProfile -Command "$b=[IO.File]::ReadAllBytes('scripts/naming-scan.ps1');($b|?{$_ -gt 127}).Count"
# L2-5
grep -rl "điểm dừng" --include="*.md" . | wc -l
```
**KẾT L2 = 🔴 CONFIRMED — Lớp 2 CÓ ÁP cho SE, 5/5 chốt đều lệch ở mức nào đó, 2/5 hết hạn thật.**
Thư đoán *"bạn sẽ tìm thấy ít nhất một câu đã hết hạn"***đoán ĐÚNG**, SE tìm được **2** (L2-1, L2-2) + 3 chốt lệch-hiệu-chuẩn.
🔴 **Ca đắt nhất = L2-1:** máy **tự in số sống 256** rồi **tự giải-thích bằng số cứng 233** trong cùng một màn hình — và nó nằm trong đúng cái máy có khoản hợp-đồng (3) *"LUON IN MAU SO canh moi con so"*. Đây là Lớp 2 **cộng** Lớp 6 (sửa dòng in, sót dòng giải-thích cách đó 1-4 dòng, **cùng tệp**).
### 🔴 ĐÍNH-CHÍNH L2-2 trong chính lượt đo (đo 2 lần cách nhau ~15 phút, ra 2 số)
`scripts/governance-detectors.ps1` đang bị **LANE-1 sửa song song** (C-2/C-8/C-11/C-19 cùng tệp): size **114.797 → 122.956 B**, mtime **2026-08-09 21:24:01**, `git status` = ` M`.
⇒ Toạ-độ regex **trôi NGAY TRONG cửa-sổ đo của tôi**: `:1109/:1778` (đo ~21:1x) → **`:1213`/`:1882`** (đo 21:24). `memory-selfimprove-audit.ps1`**`:307`**.
| Tài-liệu neo | Số ghi trong tài-liệu | Thật lúc 21:24 | Trôi |
|---|---|---|---|
| `naming-standard.md:107` | `detectors:1102` | `:1213` | **+111** |
| `naming-standard.md:107` | `detectors:1771` | `:1882` | **+111** |
| `naming-standard.md:107` | `selfimprove:298` | `:307` | **+9** |
| `naming-scan.ps1:24` | `detectors:1109` | `:1213` | **+104** (đúng lúc 21:1x, **thối sau 15 phút**) |
**4/4 neo-số-dòng SAI.** Bài rút ra mạnh hơn cả kết luận ban đầu: **neo số-dòng vào tệp đang có người sửa thì hạn dùng tính bằng PHÚT, không phải bằng phiên.** Trùng đúng thuốc Lớp 7 của thư (*"đừng neo vào glyph — neo vào cấu trúc"*) và bài nhà `HEAD~n ≠ commit-trước-của-mình` (S177).
🔸 Lệnh neo-nội-dung thay thế (bền): `grep -n -- "-return)" scripts/governance-detectors.ps1`.
🔸 **Ca L2-2 lây sang tệp khác:** cùng một regex được 2 tài-liệu neo bằng 2 toạ-độ **khác nhau**`naming-scan.ps1:24` neo `:1109``naming-standard.md:107` neo `:1102`. Tức bản vá số-dòng đã chạy ở tệp này mà **sót tệp kia** ⇒ Lớp 6 xuyên-tệp = đúng phản-biện #2 SE gửi hub 08-07 (*"Lớp 5 và Lớp 6 nên gộp: phạm-vi vá hẹp hơn phạm-vi bệnh"*).
🔴 **Tự bắt Lớp 6 trong chính báo cáo này:** bản nháp câu trên từng viết `naming-scan.ps1:24`*"ĐÚNG hôm nay"* — sai, vì khối ĐÍNH-CHÍNH ngay phía trên đã đo `:1213`. Sửa 1 dòng mà suýt sót dòng kế bên **trong cùng tệp**, đúng Lớp 6. Giữ vết này làm chứng-nhân thay vì xoá.
## L4 — "Nhãn không kiểm chứng được, ở phía con người"
**Phép bác của thư (`:66`):** *"Đọc lại **mười quyết định gần nhất** của kho bạn **có kèm lý do định lượng**. Đếm xem bao nhiêu cái có đủ ba thành phần."* — 3 thành phần (`:64`): **đại lượng · lệnh tái lập · ngưỡng định trước**.
**Cách lấy mẫu (khai trước, ship số sau):** quét NGƯỢC thời-gian 3 bề-mặt quyết-định SỐNG — `.claude/WAL.md` (S185, 2026-08-09) → `runs/2026-08-09-S185-…/checklist-final.md` (lead P3, hôm nay) → `docs/HANDOFF.md` khối NEXT-em/CHỜ-ANH (S179→S181) — lấy **10 quyết-định đầu tiên có lý-do mang SỐ hoặc mang NHÃN định-lượng**. Chấm nhị-phân từng thành phần.
| # | Quyết-định (file:line) | đại lượng | lệnh tái lập | ngưỡng định trước | Đủ 3? |
|---|---|---|---|---|---|
| 1 | `WAL:9` — 8 test → suite **668/0** ⇒ SHIP `72568f05` | ✅ test pass/fail | ✅ `WAL:22` `dotnet test SolutionErp.slnx (=668/0)` | ✅ 0 fail | **✅ 3/3** |
| 2 | `WAL:9` — verify DLL prod `new-guard: 3` ⇒ nhận deploy | ✅ hit-count | ✅ `WAL:22` `ssh vietreport-vps grep DLL … (=3)` | ✅ =3 | **✅ 3/3** |
| 3 | `checklist-final:40` — ring2 **30.781 B** ⇒ VỠ `autoinject_cap 25.600` + soft-cap 30.720 ⇒ route qua máy gate | ✅ byte | ✅ `wc -c` (`sub-review §B A3`) | ✅ 2 cap đọc từ `memory-budget.json` | **✅ 3/3** |
| 4 | `HANDOFF:40` — ring2 **26.440 B > cap 25.600**`-Apply` ghi **strike 1/2**, KHÔNG tự archive | ✅ byte | ✅ `memory-archive-gate.ps1 -Apply` | ✅ cap + "2 lượt liên tiếp" | **✅ 3/3** |
| 5 | `WAL:25` — V-5 **DI-TRÚ** vào WAL vì **0 hit** ở WAL·HANDOFF·STATUS (control-dương **4/34/10**) | ✅ hit-count | 🔶 control có số, **lệnh literal không ghi** | ✅ 0 | ❌ 2/3 |
| 6 | `WAL:16` — phép thử sàn-vs-trần ring2 **DƯƠNG 24.793 = 96,8% cap** | ✅ byte + % | ❌ | ✅ cap | ❌ 2/3 · 🔴 **số SAI** (thật 30.781 — F-1) |
| 7 | `WAL:18` — orphan S182 ĐÓNG: **7/7** ô + 2-thước-im + probe **1→0** | ✅ đếm ô | ❌ | ✅ 7/7 & 0 | ❌ 2/3 |
| 8 | `WAL:13` — DEEP-SWEEP **18/15 OVERDUE****hoãn** xuống NEXT-em | ✅ tỷ-số | ❌ | ✅ 15 | ❌ 2/3 |
| 9 | `HANDOFF:8` — carry rơi **4 kỳ**, `gap-carry-dropped` = **12** = **4× ngưỡng JUMP** ⇒ "nghi-thức không có răng" | ✅ counter | ❌ (có tên khoá, không có lệnh) | ✅ JUMP | ❌ 2/3 |
| 10 | `WAL:14` — gom nợ harvest **576.255 B / 18 lượt-vai** ⇒ uỷ-quyền slot 71 | ✅ byte + mẫu-số | ❌ | ❌ **không ngưỡng** | ❌ 1/3 |
**ĐẾM: 4/10 đủ ba thành phần · 5/10 được 2/3 (đều thiếu ĐÚNG cấu-phần "lệnh tái lập") · 1/10 được 1/3.**
### 🔴 Ca-âm ngoài mẫu, đúng hình-dạng thư nhất — và nó ở TRONG chính pipeline đang adopt thư
`checklist-final.md:43`**"### LANE-7 (CUỐI, nếu còn ngân sách)"** · `:8`*"nếu ngân sách không đủ thì khai, không ép"* · `:44`*"Không xong ⇒ khai 'chưa dựng, đã phân loại'"*.
*"Ngân sách"* ở đây = **0/3 thành phần**: không đại-lượng (token? phút? lượt gọi?), không lệnh đo, không ngưỡng định trước. Và nó **được dùng để định-đoạt phạm-vi công việc** (C-12 chạy hay không). Đây đúng câu của thư: *"lý do bị bác đã được dùng để cắt phạm vi công việc trước khi ai kịp kiểm"* (`:60`).
🔴 Ca này **nghiêm hơn** ca của hub ở một điểm: SE **đã có sàn** cho đúng loại nhãn đó ở lane MÁY — `.claude/commands/session-start.md:193`: *"so kích-thước THẬT `_INDEX.md` mỗi sub vs cap. Nếu **cắt-cho-vừa-ngân-sách** đang rớt dấu-mốc quan trọng → bump budget … **Đo lại bằng `scripts/measure-agent-memory`**"* — đủ cả 3 (đại lượng byte · lệnh · cap). Tức luật **có**, nhưng nó chỉ soi **máy**; câu văn của **lead** đi vòng qua. Đúng nguyên-nhân thư chỉ ra: *"luật thường được viết để soi máy, và người viết luật mặc nhiên đứng ngoài phạm vi"* (`:62`).
**Lệnh tái-lập:**
grep -n "" .claude/WAL.md | sed -n '1,30p'
sed -n '8p;43,44p' .claude/workflows/runs/2026-08-09-S185-email-adap-pipeline/checklist-final.md
sed -n '8p;40p' docs/HANDOFF.md
sed -n '193p' .claude/commands/session-start.md # control DUONG: nhan ngan-sach CO du 3 o lane may
**KẾT L4 = 🔴 CONFIRMED — Lớp 4 CÓ ÁP cho SE.** 4/10 đủ sàn; cấu-phần rụng nhiều nhất là **lệnh tái lập** (5 ca có số + có ngưỡng nhưng không ai viết lệnh cạnh số); và **1 nhãn 0/3 đang giữ vai trò cắt việc, do chính lead phát, trong chính lượt adopt thư**.
---
## L9 — "Hai nơi dùng chung một bộ trích, xử khác nhau"
**Phép bác của thư (`:136`):** *"Tìm các hàm trích có từ hai nơi gọi trở lên, so xem chúng có lọc giống nhau không."*
**Quét:** `scripts/session_ctx.py` (40.256 B, 30 hàm) — đếm nơi gọi bằng AST-lite (regex `(?<![\w.])<tên>\s*\(`, loại dòng `def`) → **14/30 hàm có ≥2 nơi gọi**. Soi cặp nơi-gọi của bộ trích lõi:
### 🔴 L9-1 — `_split_content_region` (def `:285`, **3 nơi gọi**) — TRÚNG ĐÍCH
Hàm trả **3 giá-trị**: `(region, line_offset, rules_end_found)`. Docstring `:290-291` **tự viết hợp-đồng**:
> *"Marker absent => scan the WHOLE file **+ raise a flag**: a file without the marker is off-template, and the safe failure direction is **LOUD, not lenient**."*
| Nơi gọi | Mã | Tôn-trọng hợp-đồng? |
|---|---|---|
| `:614` (**full-mode**) | `region, line_offset, rules_end = …``:616 if not rules_end:` → cờ `CO` *"marker VANG => quet TRON tep (huong hong NGHIEM)"* | ✅ |
| `:565` (**draft-mode**) | `region, line_offset, _ = …` | ❌ **vứt cờ** |
| `:572` (**draft-mode**, đọc bản canonical) | `creg, coff, _ = …` | ❌ **vứt cờ** |
**1/3 nơi gọi giữ tín-hiệu LOUD; 2/3 nuốt.** Và 2 nơi nuốt **chính là đường draft** — đường mà `:590` tự khai mục-đích là *"kiem NHAP truoc khi chen — **loi khong bao gio vao tep**"*.
**Chế-độ hỏng cụ-thể:** `_mind` draft thiếu `<!-- MIND-RULES-END -->``region` = **trọn tệp**`_check_rao` grep cả **khối luật** (khối luật cố ý chép nguyên các chuỗi bị cấm để giải thích) ⇒ hoặc dương-giả, hoặc lọt — **và cổng DUY NHẤT dựng để chặn trước khi ghi thì im**. Full-mode sẽ kêu LOUD, nhưng lúc đó **nội dung đã nằm trong tệp rồi**.
🔴 Đây đúng vị chua của ca hub: lỗi nằm **ngay trong đường ống của cơ-chế dựng ra để chặn lỗi**. Và class của nó — **citation-trap / use⟂mention** — là class SE **đã có bài học riêng** (`feedback_citation_trap_selfreference`), tức thuốc có sẵn mà nơi gọi thứ 2-3 không uống.
### 🔶 L9-2 — `_check_pointer` (def `:412`, 2 nơi gọi): cùng hàm, **khác đối-số lọc**
- `:584` draft-mode: `_check_pointer(checks, dblocks, repo_root, closed=False)`**đóng cứng**
- `:628` full-mode: `_check_pointer(checks, blocks, repo_root, closed)` — theo trạng-thái sống
⇒ cùng khái-niệm "con trỏ hợp lệ" mang **2 định-nghĩa** tuỳ nơi gọi.
### 🔶 L9-3 — kiểm chỉ chạy MỘT nhánh
`_check_numbering` (`:464`) và `_check_bookend_order` (`:674`) **chỉ được gọi ở full-mode**, không có ở draft-mode ⇒ draft "sạch" **không** đồng nghĩa file sẽ sạch.
### 🔶 L9-4 — regex 5-họ: **3 bản sao, 0 hằng-số dùng chung**
`'^(sub-.+|.+-return)\.md$'` xuất hiện **2 lần** trong `governance-detectors.ps1` (`:1213`, `:1882` @21:24) + **1 lần** trong `memory-selfimprove-audit.ps1:307`. `naming-standard.md:107` đã tự khai *"cùng regex, HAI bản sao, không dùng chung hằng số"* ⇒ nợ **đã biết, chưa gộp**.
Lệnh: `grep -n -- "-return)" scripts/governance-detectors.ps1 scripts/memory-selfimprove-audit.ps1`
**KẾT L9 = 🔴 CONFIRMED — Lớp 9 CÓ ÁP cho SE.** Ca L9-1 **đắt** (mất tín-hiệu LOUD ở đúng cổng chặn-trước-khi-ghi); L9-2/3/4 rẻ hơn nhưng **cùng gốc**: khái-niệm có nhiều bản trích/bản lọc, không nơi nào là nguồn duy nhất.
---
## C-5 — KẾT GỘP
| Lớp | Trước hôm nay | Sau phép bác | Số chốt |
|---|---|---|---|
| **2** | "chưa đo" | 🔴 **CONFIRMED** | 5 chốt soi: **2 hết hạn** + 3 lệch hiệu-chuẩn; ca nặng = máy in `256` giải-thích `233` |
| **4** | "chưa đo" | 🔴 **CONFIRMED** | **4/10** quyết-định đủ 3 thành phần; +1 nhãn **0/3** đang cắt việc (`checklist-final:43`) |
| **9** | "chưa đo" | 🔴 **CONFIRMED** | **14/30** hàm ≥2 nơi gọi; `_split_content_region` **1/3** nơi gọi giữ cờ LOUD |
**3/3 lớp còn lại ĐỀU ÁP.** Cộng đợt 08-07 (Lớp 1·3·5·6·7 áp, Lớp 8 REFUTED-có-số) ⇒ tổng **8/9 lớp áp cho SE, 1/9 bác có số**.
🔴 **Không lớp nào bác được bằng phép thử hôm nay** — khác đợt trước (Lớp 8 bác được bằng 1 lệnh). Ghi đúng vậy, không thổi cũng không giấu.
**Việc còn nợ sau C-5 (KHÔNG tự làm — ngoài phạm-vi lane-5, chỉ KHAI):**
(i) L2-1 sửa `naming-scan.ps1:196/318-321` cho số giải-thích bám số in — **vùng máy governance, cùng họ LANE-1, tránh đụng độ**;
(ii) L9-1 sửa 2 nơi gọi `:565`/`:572` nhận `rules_end`**chạm `session_ctx.py` = đường ống ctx**, cần chủ ý riêng + fault-inject;
(iii) L4 ca-âm `checklist-final:43` *"nếu còn ngân sách"***quyền lead**, chỉ khai không sửa.

View File

@ -1,12 +1,251 @@
# sub-opus-lane6-memory-gate — LANE-6 memory-gate (YC-017 / S185)
> Agent: Opus 5 (1M) · lane LANE-6 · items: **C-6** (M, F-1/F-2 sửa số + route máy) · **C-10** (S, 2 mồ côi A16)
> Artifact-first: file này ghi LIÊN TỤC per-item. Ruột nằm ở đây, return chỉ là con-trỏ.
> Ranh: đọc THƯ GỐC + REPORT trước khi chạm · vùng-owner ⇒ DỪNG + khai · fault-inject trên CÂY TẠM · mọi số kèm lệnh tái-lập · KHÔNG commit/push · KHÔNG store_memory.
> Agent: Opus 5 (1M) · lane **LANE-6** · items: **C-6** (M F-1/F-2 sửa số + route máy) · **C-10** (S 2 mồ côi A16)
> Nguồn lệnh: `.claude/workflows/runs/2026-08-09-S185-email-adap-pipeline/checklist-final.md:39-41`
> Artifact-first: ghi liên tục per-item. Ruột nằm ở đây; return chỉ là con-trỏ.
> Ranh đã tuân: KHÔNG commit/push · KHÔNG `store_memory` · fault-inject **trên cây tạm** (`%TEMP%/…/scratchpad/lane6-fi`) kèm **positive-control** · mọi số kèm lệnh tái-lập · **KHÔNG nén/archive tay**.
---
## 0. Khởi động — timeline (append-only)
## TÓM TẮT 1 DÒNG
- [21:2x] Đọc `checklist-final.md` LANE-6 (dòng 39-41). Bắt đầu ghi artifact.
**C-6 = PARTIAL** (máy chạy tới `PROPOSE`, nhưng **value-scan bắt buộc BÁC đề-xuất** — chứng bằng fault-inject 1-dòng làm verdict lật `PROPOSE→WARN` ⇒ vào đúng nhánh *"trình đề-xuất cho lead, CẤM nén tay"*) · **C-10 = DONE** (3 — không phải 2 — mồ côi, xác minh từng con, đã khai vào bảng A16).
---
## C-6 — memory-gate route máy (ring2-audit + tooling-auditor)
### C6.0 — Lệnh chạy + kết quả gốc (tái-lập được)
```bash
cd D:/Dropbox/CONG_VIEC/SOLUTION/SOLUTION_ERP
powershell.exe -ExecutionPolicy Bypass -File "scripts\memory-archive-gate.ps1" # DRY-RUN, 0 ghi
```
Tham số máy đọc từ `.claude/agent-memory/memory-budget.json``archive_gate`:
`cap 25.600` · `low-water 21.760` (ratio 0.85) · `keep-floor 5` · `strike-need 2`.
**Bảng PASS-1, chỉ các dòng over-cap** (bản đầy đủ tái-lập bằng lệnh trên):
| sub | bytes | over? | entries | strike | after-est | resolve |
|---|---|---|---|---|---|---|
| `harvest-curator` | 26.139 | YES | 9 | 1 | ~25.292 | WATCH (strike 1<2) |
| `lead-stale-auditor` | 28.220 | YES | 6 | 1 | ~27.582 | WARN keep-floor hit (5) cannot auto-drain |
| **`ring2-audit`** | **30.781** | YES | 7 | **2** | ~22.102 | **PROPOSE archive (strike 2>=2): move 2 lowest-value** |
| `tooling-auditor` | 29.962 | YES | 11 | 1 | ~29.115 | WARN **value-floor** hit condense BY HAND |
`PASS 2 — A7 GATE **PASS**, total pointers **429**, resolved 429, failed 0` (exit 0).
**Strike-2 đạt mà KHÔNG cần `-Apply`:** `.archive-strikes.json:10` đã ghi `"ring2-audit": 1` từ `-Apply` @S179 lượt DRY-RUN này tính `cur = prev+1 = 2 ≥ strike_need` máy tự lên nhánh `PROPOSE`. Không lệnh ghi nào chạy (đúng chữ "DRY-RUN" của lead).
🔸 Khai thẳng: strike **chưa persist**. Muốn con số 2 bền phải chạy `-Apply` đó ghi `.archive-strikes.json` (file đếm, KHÔNG phải file memory). Em **không chạy** lead chỉ định DRY-RUN. Thực tế nếu ring2-audit tụt xuống dưới cap thì lượt kế reset về 0 nên không cần thiết.
### C6.1 — F-1/F-2 SỬA SỐ: xác nhận ĐÚNG, kèm nguồn ngưỡng
| Khẳng định checklist C-6 | Đo lại | Verdict |
|---|---|---|
| `ring2-audit` = **30.781 B** | `(Get-Item .claude\agent-memory\ring2-audit\MEMORY.md).Length` = **30781** | ĐÚNG |
| **ĐÃ VỠ** autoinject-cap 25.600 (không phải "96,8% gần cap") | 30.781 > 25.600 ⇒ vượt **5.181 B = 120,2% cap** | ✅ ĐÚNG |
| **vượt** soft-cap 30.720 | `memory-budget.json` `tiers.l1_hot.soft_cap_bytes` = **30720** ⇒ vượt **61 B** | ✅ ĐÚNG |
| `tooling-auditor` 29.962 B theo dõi cùng lượt | đo = **29962** (dưới soft-cap 30.720, trên cap 25.600) | ✅ ĐÚNG |
🔸 Luật của chính `tiers.l1_hot.rule`: *"keep MEMORY.md < autoinject_cap so the WHOLE hot file injects; over soft_cap ⇒ curate L1→L2"* ⇒ ring2-audit đang **vi phạm cả hai vế**.
🔴 **Con-trỏ trong checklist lệch 1 dòng:** C-6 trích `HANDOFF:39 "KHÔNG tự archive"` — câu đó thực nằm ở **`docs/HANDOFF.md:40`** (dòng 39 là mục drift-audit). Nội dung không đổi, chỉ sửa con-trỏ.
### C6.2 — 🔴 ĐỀ XUẤT MÁY BỊ **BÁC** BỞI VALUE-SCAN (bước máy TỰ ĐÒI)
Máy đề xuất: *move 2 lowest-value entries* — đó là **k=0 `## 🎯 Role baseline`** (1.458 B) + **k=1 `## 📅 Runs`** (7.221 B); `30.781 8.679 = 22.102` khớp đúng cột after-est.
Chính output của máy in kèm mệnh lệnh: *"9-token grep = lower-bound; **em-main must value-scan the WHOLE proposed set** (paraphrase/spine leak remains)"*. Em chạy đúng bước đó — và nó **BÁC cả 2 entry**:
#### Lý do ① — `## 📅 Runs` PHẢI được value-protect nhưng lọt lưới vì **lệch bảng mã** (chứng bằng fault-inject)
`memory-budget.json:89` liệt pattern ASCII **`"bai hoc"`**, còn kho viết **`"bài học"`** có dấu ⇒ `-like` không khớp.
```bash
# đếm 2 dạng trên toàn hot-tier
python -c "...đếm 'bài học' vs 'bai hoc' trên .claude/agent-memory/*/MEMORY.md..."
# -> có dấu = 12 hit | không dấu (dạng đang nằm trong patterns) = 2 hit
```
Nhưng **blast-radius thật ở mức LOGICAL ENTRY chỉ là 1** (không thổi số): 11/12 hit nằm trong span đã khớp pattern khác (`guard`/`lesson`/…), nên chỉ **duy nhất 1 entry mù** — và đó **đúng là entry đang bị đề nghị move**:
```
LOGICAL ENTRY chua "bài học" CO DAU nhung KHONG khop pattern nao:
ring2-audit L36 ## 📅 Runs
TONG entry MU = 1
```
Nội dung nó gánh (`MEMORY.md:46-50`, `:59-63`): *"3 bài học phương-pháp"*`honest-zero đẩy-turf phải nêu ĐÍCH DANH vai nhận` · `Vá xong PHẢI grep lại bằng lệnh KHÁC` (bẫy en-dash) · `Số KHÔNG kèm lệnh = số KHÔNG kiểm được` · `thách-CLEAN phải nhắm vào class được tuyên 0-fire` · `chứng khoá bằng BIỂU-THỨC CỦA MÁY`. Đây đúng trục **value**, không phải trục **age**.
**FAULT-INJECT trên CÂY TẠM (không chạm repo) + POSITIVE-CONTROL:**
```bash
T=".../scratchpad/lane6-fi"
cp -r .claude/agent-memory $T/ctrl/.claude/agent-memory # control: y nguyên
cp -r .claude/agent-memory $T/inj/.claude/agent-memory # injected
# sửa DUY NHẤT 1 chỗ trong bản inj: patterns "bai hoc", -> "bai hoc", "bài học",
powershell.exe -ExecutionPolicy Bypass -File "scripts\memory-archive-gate.ps1" -RepoRoot "$T\ctrl"
powershell.exe -ExecutionPolicy Bypass -File "scripts\memory-archive-gate.ps1" -RepoRoot "$T\inj"
```
| | ring2-audit | value-protected | after-est |
|---|---|---|---|
| **CONTROL** (cây tạm nguyên) | `PROPOSE archive (strike 2>=2): move 2` | 1 | ~22.102 |
| **INJECTED** (+1 pattern có dấu) | 🔴 `WARN value-floor hit … condense high-value BY HAND (do NOT age-archive)` | **2** | ~29.323 |
- **Control DƯƠNG:** bản ctrl ra **byte-identical** với lượt chạy trên repo thật ⇒ cây tạm là thước hợp lệ, không phải môi trường lạ.
- **Nhiễu = 0:** `tooling-auditor` giữ nguyên `~29.115 / 4 protected`, `A7 GATE PASS 429/429` ở CẢ HAI lượt ⇒ injection trúng đích, không phải xáo trộn toàn cục.
**Kết luận cứng: đề-xuất `PROPOSE` của máy cho `ring2-audit` TỒN TẠI CHỈ VÌ lỗi bảng-mã trong danh sách pattern.** Sửa 1 dòng thì chính máy đổi ý thành *"cấm age-archive, phải nén tay"*. Thi hành đề-xuất = archive đúng thứ mà trục value dựng ra để giữ.
#### Lý do ② — `## 🎯 Role baseline` là **XƯƠNG SỐNG**, archive nó = vai làm việc mù
`MEMORY.md:24-35` = hợp-đồng vai (KIỂM 2 con-đo H24 · fail-closed pin · enum ĐÓNG · thách-CLEAN bắt buộc · danh sách KHÔNG-lấn). Khối này **auto-inject mỗi spawn**. Chính diary vai ghi lại ca cũ (`:4`, S173): *"`:25` đẩy '5 class view-*' (enum 6) dưới `## 🎯 Role baseline` = **nạp mỗi spawn** ⇒ tao bị nạp thước thiếu vạch TRƯỚC khi làm việc"*. Đưa nguyên khối xuống L2 = phiên bản nặng hơn của đúng ca đó.
🔸 Lưu ý: kể cả sau khi vá bảng-mã ở ①, `Role baseline` **vẫn** nằm trong pool khả-drain (lượt INJECTED vẫn trừ 1.458 B của nó) ⇒ đây là lỗ **thứ hai, độc lập**.
### C6.3 — 🔴 Phát hiện nặng hơn: planner **MÙ 51%** hot-tier (vùng trên heading đầu)
`Get-EntryMarkerLineNumbers` / vòng `$headIdx` chỉ dựng span **từ heading ĐẦU TIÊN trở xuống**. Mọi byte **phía trên** heading đầu không thuộc logical entry nào ⇒ **không drain được, cũng không protect được** — máy hoàn toàn không thấy.
```bash
python - <<'PY' # đo bytes phía trên heading '## '/'### ' đầu tiên, mọi sub
PY
```
| sub | bytes | preamble mù | % mù |
|---|---|---|---|
| **`ring2-audit`** | 30.781 | **16.031** | **52,1%** |
| `tooling-auditor` | 29.962 | 11.419 | 38,1% |
| `lead-stale-auditor` | 28.220 | 13.734 | 48,7% |
| `harvest-curator` | 26.139 | 10.202 | 39,0% |
| **TOÀN HỆ (28 sub)** | **445.569** | **227.101** | **51,0%** |
- **6 sub mù 100%** (0 heading): `back-end-reviewer-style` · `ctx-curator` · `database-reviewer-style` · `front-end-reviewer-style` · `score-count-auditor` · `score-counter`. Nếu con nào vượt cap thì `logCount(0) ≤ keepFloor(5)` ⇒ vĩnh viễn `WARN cannot auto-drain`.
- Đây **cùng LỚP** với lỗi lane-F đã nêu cho máy KHÁC (`sub-n3-lane-f-maytay.md:227`*"cho segment đầu tiên bắt đầu từ index 0 thay vì `marks[0].Index`"*). Lớp đã biết, **chưa ai grep sang `memory-archive-gate.ps1`**.
### C6.4 — 🔴 `keep_floor` giả định "mới = ở đáy" — với `ring2-audit` là **NGƯỢC**
`keep_floor` giữ 5 entry **cuối file** vì quy ước *append-to-end = newest*. Đo ngày thật:
| vùng | nội dung | ngày |
|---|---|---|
| preamble `:1-23` (máy KHÔNG thấy) | S181 · S173 · S172 · S168 · S166 · S162 · S153 | **07-26 → 08-07** |
| 5 heading đáy (`keep_floor` BẢO VỆ) | Curate trigger · S151 · S151-deep · S152 · S159 | **07-25 → 07-29** |
⇒ Trục recency của máy đang **bảo vệ phần CŨ và nhắm vào phần đầu file**, trong khi phần MỚI NHẤT + LỚN NHẤT (52%) nằm ngoài tầm với. File này ghi **prepend** (mới lên đầu), ngược quy ước máy giả định.
### C6.5 — Nit: cột `entries` dùng **2 đơn-vị trong 1 bảng**
`memory-archive-gate.ps1:131` (dòng dưới-cap) in `$entryCount` = đếm marker **gồm cả `---`**; `:208` (dòng over-cap) in `$logCount` = **chỉ heading**. Cùng một tên cột.
Đối chứng: gate in `cicd-monitor entries = 19`; đếm heading-only = **10** (`grep -c "^---\|^## \|^### "` = 19 vs heading 10). Không sai kết quả, nhưng người đọc so 2 dòng trong cùng bảng sẽ so nhầm đơn-vị — đúng lớp *"2 THƯỚC trong 1 báo cáo"* mà chính `ring2-audit` từng flag @S162.
### C6.6 — `tooling-auditor` 29.962 B: máy **TỰ CHẶN**, đúng nhánh "trình đề-xuất cho lead"
Máy in `WARN value-floor hit: over-cap but every drainable entry is value-protected/keep-floor — condense high-value BY HAND (do NOT age-archive)`; 11 logical entry, 4 protected. ⇒ **Không có đề-xuất máy nào để thi hành** ⇒ theo đúng lệnh lead: **trình đề-xuất-nén cho lead, CẤM nén tay**. Em **không nén**.
### C6.7 — ĐỀ-XUẤT TRÌNH LEAD (propose-only, em KHÔNG tự làm — đều chạm vùng-owner hoặc chạm memory)
| # | Đề xuất | Vì sao không tự làm |
|---|---|---|
| **P1** | Thêm `"bài học"` (có dấu) vào `archive_gate.value_protect.patterns`**1 dòng**, đã chứng có răng ở C6.2 | `memory-budget.json` = single-source policy ⇒ **SKIP-owner** |
| **P2** | Value-protect khối hợp-đồng vai (`## 🎯 Role baseline` / `## 🎯 Role`) — hoặc thêm pattern, hoặc hard-skip heading khớp `Role baseline` | đổi hành-vi gate = policy ⇒ **SKIP-owner** |
| **P3** | Vá planner mù: cho span đầu bắt đầu từ **index 0** (preamble thành 1 entry ảo) — kèm phản-chứng bắt buộc: chèn token value vào preamble ⇒ máy PHẢI hard-skip; gỡ ⇒ thôi | sửa `scripts/memory-archive-gate.ps1` = máy governance, ngoài phạm-vi C-6 (C-6 = *chạy máy + theo đề xuất*), và **chưa có lệnh** |
| **P4** | Nén tay `ring2-audit`: gộp 5 bullet `## 📅 Runs` (S146/S149/S149b/S150/S150b, 7.221 B) thành **1 mục "Runs S146→S150 — 5 bài phương-pháp"** giữ nguyên 5 câu bài-học + tag, bỏ phần thuật-lại verdict/số đã có trong artifact `runs/**`. Ước còn ~2.02.5 KB ⇒ file về ~25,626,1 KB. **Vẫn chưa dưới cap** ⇒ cần thêm 1 nhát vào preamble | **CẤM nén tay** (lệnh lead + `HANDOFF:40`) ⇒ chỉ trình |
| **P5** | Nén tay `tooling-auditor` (29.962): máy đã tuyên value-floor ⇒ chỉ còn đường nén | như trên |
| **P6** | Nếu lead muốn strike bền: chạy `memory-archive-gate.ps1 -Apply` (ghi `.archive-strikes.json`, KHÔNG move file) | lead chỉ định DRY-RUN |
### C6.8 — Cập nhật bức tranh over-cap so với `HANDOFF:40` (số ở đó đã STALE)
| sub | `HANDOFF:40` (@S179) | đo @S185 | đổi |
|---|---|---|---|
| `ring2-audit` | 26.440 | **30.781** | +4.341, nay vượt cả soft-cap |
| `reviewer` | 26.856 (over-cap) | **22.430** | 🟢 đã về **dưới cap** — hết over-cap |
| `tooling-auditor` | 27.147 | **29.962** | +2.815 |
| `lead-stale-auditor` | — (không nêu) | **28.220** | 🔴 **over-cap MỚI**, chưa ai nêu |
| `harvest-curator` | — (không nêu) | **26.139** | 🔴 **over-cap MỚI**, chưa ai nêu |
⇒ Bộ đôi mà `HANDOFF:40` gọi là *"+2 vai mới over-cap"* nay **không còn đúng cặp đó**: 1 con đã tự khỏi, 2 con khác vào chỗ.
### C6.9 — VERDICT C-6
**PARTIAL.** Làm đủ phần cơ-học được giao (chạy máy DRY-RUN → lên strike-2 → lấy đề-xuất máy → chạy **value-scan bắt buộc**), và **không thi hành move** vì value-scan bác — kết quả này rơi vào **đúng nhánh dự phòng lead đã viết sẵn** (*"máy bị block ⇒ trình đề-xuất-nén cho lead, CẤM nén tay"*), chỉ khác đường vào: bị chặn ở **cửa value-scan**, không phải cửa A5.
🔸 Khai thẳng cái **CHƯA** đạt: `ring2-audit` **vẫn 30.781 B, vẫn trên cả 2 ngưỡng**. Vấn đề gốc chưa đóng — nó cần **1 quyết định của lead/anh** (P1+P2 hoặc P4), không cần thêm phép đo nào.
---
## C-10 — 2 mồ côi A16 còn lại → wire-or-khai từng con
### C10.0 — 🔴 Trước hết: **là 3, không phải 2** (2 vật cùng đợt W6/S181 nói khác nhau)
| Nguồn | Câu | Số |
|---|---|---|
| **BÁO CÁO** `docs/governance/adap-reports/upgrade-pack-phased-bao-cao-cuoi.md:64` (bản đã gửi hub) | *"2/4 mồ côi đã wire \| **2 mồ côi còn lại** giữ CÓ KHAI"* | **2** |
| **BẢNG A16** `docs/governance/adap-upgrade-pack-tracking.md:137` | *"### M3 — MỒ CÔI … (**3** — sau khi wire 2 máy)"* + 3 dòng | **3** |
Lệch vì `seed-test-users-prod.ps1` **lộ SAU** khi câu tổng-kết của báo cáo đã viết (dòng `:141` tự khai *"Bản đầu bảng M3 thiếu dòng này"*). ⇒ Bảng đúng, câu tổng-kết trong báo cáo **STALE**. Em **không sửa báo cáo đã gửi hub** (việc đó = erratum ra ngoài, quyền lead) — chỉ khai ở đây + neo 1 dòng trong bảng.
### C10.1 — Thước đo "0 cửa gọi" + **positive-control** (chứng thước có răng)
```bash
git grep -l -F "<tên script>" -- '.claude/commands' '.claude/agents' '.claude/hooks' \
'.claude/settings.json' '.github' 'hmw.js' | wc -l
```
| script | cửa gọi | nơi gọi |
|---|---|---|
| `nhip-no-probe.ps1` *(control +)* | **7** | harness-eval · check-email · pause · session-end · session-start · snapshot · tiep |
| `memory-archive-gate.ps1` *(control +)* | **3** | agents/README · harness-eval · session-end |
| `artifact-integrity.ps1` *(control +)* | **2** | lead-stale-auditor · session-end |
| `naming-scan.ps1` *(control +)* | **1** | session-end |
| `wal-recovery-test.ps1` | **0** | — |
| `session_scaffold.py` | **0** | — |
| `seed-test-users-prod.ps1` | **0** | — |
4 control đều **> 0** và trúng đúng cửa mà bảng M2 khai ⇒ 0-hit của 3 con kia là **vắng-mặt THẬT**, không phải thước hỏng. (Đồng thời xác nhận `naming-scan`=1 · `artifact-integrity`=2 ⇒ 2 con đã CHUYỂN SANG M2 là đúng, `tracking:145` đứng.)
### C10.2 — Phán từng con
**`wal-recovery-test.ps1` → KHAI (giữ mồ côi CÓ KHAI). Không wire.**
0 cửa gọi (đo trên). Bản chất = test hồi-quy WAL chạy **khi nghi ngờ**, không phải nghi-thức định kỳ; adap-report `2026-07-13-…harness-22-wal-defect-fix.md:14` ghi nó là bộ 4-ca/30-assert dùng để **chứng defect-fix**. Wire vào bookend = mỗi phiên dựng cây tạm + 4 ca ⇒ chi phí thường-trực cho một máy chỉ hữu ích khi có nghi vấn. **Trạng thái bảng ĐÚNG, giữ nguyên**, nay có thêm số đo.
**`session_scaffold.py` → KHAI. Nghi-trùng nay **ĐÃ XÁC MINH** (bảng đang stale). Không wire, không xoá.**
- Trùng **KHÁI NIỆM, không trùng nhánh-gọi**: `naming-standard.md:161`*"Fork thật duy nhất: `session-scaffold.ps1` ⟂ `session_scaffold.py` — hợp lệ theo luật ngôn ngữ nhưng TRÙNG KHÁI NIỆM. Hai bản hiện sinh ra tên đầu ra giống hệt nhau (`session-<N>` + `_context-s-<N>.md`), cả hai đều hard-pin, 0 nguồn chung."*
- Đã có **mã + disposition**: `naming-standard.md:253` **M-10** (🟡) và `:271` **N-6***"Hợp lệ theo L4; hợp nhất là đổi mã, không phải đổi tên"*, xếp **W2**.
-**KHÔNG chết hoàn toàn**: `naming-standard.md:200` đếm nó là **1 trong 4 site hard-pin** hình dạng `session-<N>` (`session_scaffold.py:105`) ⇒ máy chuẩn-tên đang **đọc** nó như nguồn đối-chiếu.
- Lai lịch: bản **port near-verbatim từ hub** (`session_scaffold.py:4` *"SE PORT of AI_INFRA scripts/session_scaffold.py (adopted S148…)"*; `docs/changelog/sessions/2026-07-24-1800-S148-…:21`).
**Mồ côi CÓ CHỦ ĐÍCH** (giữ đối-chiếu hub), **không phải "chưa xác minh"**. Dòng `tracking:143` là vật STALE — 2 sản phẩm của **cùng wave S181** (W1 `naming-standard` ⟂ W6 bảng A16) mâu thuẫn nhau.
**`seed-test-users-prod.ps1` → KHAI. Không wire (và **không tự sửa bộ-lọc**).**
0 cửa gọi. Bản chất = script **vận-hành sản-phẩm** (seed 30 user test vào DB prod, chạy tay lúc triển khai — `docs/changelog/sessions/2026-05-13-2200-s22-chot-cuoi.md:147,280`), **không phải máy governance**. Bảng tự khai nó *"lọt bộ-lọc loại-trừ (`seed-*` không có trong danh sách)"* và **cố ý giữ trong M3** theo đúng luật hiện hành của tệp.
🔴 Em **KHÔNG** nới bộ-lọc: thêm `seed-*` sẽ kéo **mẫu số 24 → 23** — đó là đổi một con-số đã đo và đã gửi hub ⇒ **quyền lead/anh**. Chỉ trình 2 nhánh: **(a)** nới bộ-lọc + hạ mẫu-số + khai lệch với bản đã gửi; **(b)** giữ nguyên, đây là *nợ-có-khai*, không phải lỗi.
### C10.3 — Việc đã GHI ĐĨA cho C-10
Sửa **additive** 3 dòng M3 + 1 dòng ghi-chú lệch-số trong `docs/governance/adap-upgrade-pack-tracking.md` §7 (chi tiết ở mục "ĐÃ SỬA FILE" bên dưới).
🔴 **KHÔNG đụng:** cột *nấc* (A16 giữ `đã đồng ý`) · **mẫu số 24** · bộ-lọc loại-trừ · báo cáo đã gửi hub · `naming-standard.md` (LANE-3 đang có thể chạm).
### C10.4 — VERDICT C-10
**DONE.** 3/3 con xác minh bằng lệnh có positive-control; mỗi con có phán *wire-or-khai* + lý do; con "nghi trùng chưa xác minh" nay **đóng được bằng vật đã có sẵn trên đĩa** (`naming-standard.md`), không cần đo mới. Kèm 1 phát hiện phụ: **báo cáo gửi hub ghi 2, đĩa ra 3**.
---
## ĐÃ SỬA FILE (lane này)
| File | Sửa gì | Loại |
|---|---|---|
| `docs/governance/adap-upgrade-pack-tracking.md` §7 M3 (`:139-146`) | 3 dòng M3 thêm cột/ghi-chú **verify @S185** (0 cửa gọi + control dương) · `session_scaffold.py` lật *"Chưa xác minh"* → **đã xác minh, trỏ `naming-standard.md:161/253/271`** · thêm 1 dòng khai lệch **2 (báo cáo `:64`) ⟂ 3 (bảng)** | additive, không đổi nấc / mẫu-số |
**KHÔNG sửa:** mọi file trong `.claude/agent-memory/**` (0 byte thay đổi) · `memory-budget.json` · `scripts/*.ps1` · báo cáo đã gửi hub · `HANDOFF.md`.
**KHÔNG commit, KHÔNG push.** ENV-DEP: lane này **không** sửa file lệnh/persona ⇒ không có phần "ăn từ phiên sau restart".
## SKIP-owner (khai đúng luật)
| Món | Vì sao SKIP |
|---|---|
| Thêm pattern `"bài học"` vào `memory-budget.json` | policy/single-source ⇒ owner |
| Nới bộ-lọc loại-trừ §7 (kéo mẫu-số 24→23) | đổi số đã đo & đã gửi hub ⇒ owner/lead |
| Nén tay `ring2-audit` / `tooling-auditor` | **CẤM nén tay** (lệnh lead + `HANDOFF:40`) |
| Vá planner-mù trong `memory-archive-gate.ps1` | sửa máy governance, ngoài phạm-vi C-6 |
| Erratum cho báo cáo đã gửi hub (2 vs 3 mồ côi) | gửi ra ngoài ⇒ lead |

View File

@ -0,0 +1,75 @@
# sub — LANE-7 (Opus 5 MAX) — C-12 máy-quét lời-hứa-máy
> Artifact-first (chống #53): ghi LIÊN TỤC trong lúc làm. Return chỉ là con-trỏ về file này.
> Lane-7 = 1 item duy nhất: **C-12** (effort L, ưu tiên THẤP NHẤT). Nhánh khai hợp lệ: "chưa dựng, đã phân loại" đúng dạng dự-định thư 07-19.
- ts-mở: 2026-08-09 (S185) · cwd `D:\Dropbox\CONG_VIEC\SOLUTION\SOLUTION_ERP`
- KHÔNG commit/push (lead gom cuối) · KHÔNG `store_memory`
## 0. Đọc nguồn TRƯỚC khi chạm (ranh cứng #1)
| Nguồn | Đường dẫn | Dòng load-bearing |
|---|---|---|
| THƯ GỐC | `D:/Dropbox/CONG_VIEC/AI_INFRA/broadcasts/outbox/all/2026-07-19-Governance-goi-chot-owner-nam-khoan.md` | `:52` luật lời-hứa-máy (existence-proof 3 mảnh) · `:54` hub tự khai "máy quét TỰ-ĐỘNG … CHƯA CÓ" · `:53` "chặn từ lúc VIẾT" · `:55` floor = "tài-liệu governance MỚI" |
| REPORT SE | `docs/governance/adap-reports/2026-07-19-Governance-goi-chot-owner-nam-khoan.md` | `:21` khoản 4.4 = executed(cổng-người) · máy-quét = DỰ-ĐỊNH · `:39` honest-caveat "**19 là mẫu-số của lượt đo S144, không phải hằng số**" |
| Artifact gốc | `.claude/workflows/runs/2026-07-22-S144-adap-dot-11/C6-cua-loi-hua-may.md` | `:10-12` 3 phép đo (literal→0 mù · loose→19 với 21% dương-giả) · `:14-19` ca `bắt buộc` bị `bắt` nuốt · `:46` use⟂mention discriminator = **enclosure** · `:50-56` acceptance a→e |
| Checklist | `runs/2026-08-09-S185-…/checklist-final.md:44` | C-12 = "19 mẫu-số + positive-control + use⟂mention" |
Ràng buộc thiết kế rút từ 4 nguồn trên (KHÔNG được vi phạm):
1. **Regex KHÔNG được làm mẫu-số** (acceptance b) — regex chỉ là *sàng ứng-viên*; mẫu-số = **danh sách liệt kê tường-minh**.
2. **use ⟂ mention** tách bằng **enclosure**, không bằng hình-dạng/charset (bài `citation-trap` S123).
3. **FP-guard `bắt buộc`**: token *bắt* (catch) phải loại `bắt buộc` (mandatory).
4. Đo **GATE đã cài**, không đo *đã quét sạch* — máy chỉ được tuyên về dòng MỚI-so-baseline, cấm tuyên "corpus sạch".
5. Positive-control BẮT BUỘC — cổng không nhặt được câu-giả = cổng mù = TRƯỢT.
---
## 1. NHẬT KÝ (append liên tục)
### [B1] Đọc nguồn — XONG
4 nguồn ở §0 đã đọc trực tiếp (không qua trung gian). Không phát hiện mâu thuẫn giữa thư gốc và report.
### [B2] Tái lập phép đo S144 trên corpus HÔM NAY — 19 → **29** (drift, không phải hằng số)
```
cd D:/Dropbox/CONG_VIEC/SOLUTION/SOLUTION_ERP
rg -n --no-heading -e "(detector|guard|hook)" docs/governance/*.md | rg -c "(chặn|quét|bắt|đảm)"
# -> 29 (S144 đo cùng khuôn regex lỏng = 19)
```
⇒ Xác nhận **bằng phép đo, không bằng suy luận**, câu honest-caveat `adap-report:39` (*"19 là mẫu-số của lượt đo S144, không phải hằng số"*). Con `19` KHÔNG được dùng làm chỉ-tiêu; C-12 xây mẫu-số MỚI theo đúng acceptance (b) = danh-sách liệt-kê, regex chỉ làm sàng.
### [B3] Dựng máy — `scripts/loi-hua-may-scan.ps1` (ĐÃ CHẠY ĐƯỢC)
Kiến trúc 4 tầng (mỗi tầng buộc bởi 1 acceptance C6):
| Tầng | Làm gì | Ràng buộc gốc |
|---|---|---|
| 1 SÀNG ứng-viên | line có DANH-TỪ-MÁY (`detector\|guard\|hook\|script\|checker\|scanner\|.ps1\|.py\|máy\|lưới`) **và** ĐỘNG-TỪ-NĂNG-LỰC (`chặn\|quét\|bắt(?!\s*buộc)\|đảm\|canh\|tự động\|enforce\|detect`) | (b) — regex **KHÔNG** phải mẫu-số, chỉ là sàng |
| 2 use ⟂ mention | loại theo **ENCLOSURE**: m1 code-fence · m2 blockquote `>` · m3 động-từ nằm trong cặp nháy (`"` `“”` `«»` `` backtick) | (c) + bài S123 citation-trap: discriminator = enclosure, KHÔNG phải charset/hình-dạng |
| 3 existence-proof | proof = path máy CÓ THẬT TRÊN ĐĨA (`Test-Path`) hoặc lệnh chạy được, **tại chỗ** | `goi-chot:52` 3 mảnh |
| 4 baseline-diff | dòng có trong `loi-hua-may-baseline.json` (kèm disposition) = KNOWN; dòng MỚI = FLAG | (d) đo GATE không đo SWEEP + (e) hồi-tố time-box |
Chi tiết chống-lách đã cắm:
- **FP-guard `bắt buộc`** — negative-lookahead `bắt(?!\s*buộc)`; đây đúng con bug đẻ ra 21% dương-giả ở C6, nay là control #2 của self-test.
- **`proof-dead` = HIGH**: câu cite `scripts/x.ps1` mà file KHÔNG tồn tại → nặng hơn câu không cite gì (đây là biến-thể độc nhất của class này mà cổng-người rất khó bắt).
- **Anti-Goodhart**: `-EmitBaseline` phát entry `disposition:"TODO-classify"`, và scanner **VẪN FLAG** entry TODO-classify (LOW) ⇒ tự-sinh baseline KHÔNG tắt được đèn. Fragment < 25 tự bị **loại** khi load (fragment ngắn sẽ khớp bừa tắt đèn nhầm) in WARN.
- **Anchor = fragment văn-bản chuẩn-hoá, KHÔNG phải số dòng** (số dòng trôi mỗi lần sửa phía trên neo số dòng sẽ tắt/bật nhầm dòng bài "con-trỏ-số-dòng vào sổ tái-sinh").
- **Self-exclusion C4-style**: `scripts/loi-hua-may-scan.ps1` + `loi-hua-may-baseline.json` + `.claude/workflows/runs/` (chính file này) nếu không loại, detector khớp CHÍNH rồi lây qua trích-dẫn (S123 đi 3 đời/1 wave).
- **ASCII-only body** (gotcha #30): 0/24270 byte non-ASCII (`python` đếm byte>127), token tiếng Việt dựng từ code-point lúc RUNTIME.
### [B4] 🔴 Self-test BẮT LỖI THẬT của chính máy (không phải happy-path)
Lượt chạy đầu: **6/8 PASS**, 2 FAIL — và 2 FAIL này là **defect thiết kế thật**, không phải fixture sai:
```
FAIL C5 cite script KHONG ton tai [got: proved/proof-ok]
FAIL C7 dong legacy da liet ke [got: flag/HIGH/proof-dead:scripts/khong-ton-tai.ps1]
```
Nguyên nhân: cửa sổ tìm proof ±2 dòng ⇒ **hai chiều lây nhiễm** — câu hứa mượn được proof của bullet TRÊN nó, và câu sạch bị gán path-chết của bullet trên nó. Sửa: "tại chỗ" = dòng CỦA NÓ + dòng ngay DƯỚI (sub-bullet/xuống dòng) + dòng ngay TRÊN **chỉ khi** dòng đó không phải một câu-hứa khác (*proof đã có chủ thì không phải proof của mình*); `proof-dead` chỉ nâng HIGH từ **chính dòng đó**. Sau vá:
```
powershell.exe -ExecutionPolicy Bypass -NoProfile -File scripts/loi-hua-may-scan.ps1 -SelfTest
# -> SELF-TEST: 8/8 PASS (exit 0; FAIL -> exit 1)
```
8 control = 3 positive-must-catch (C1 câu-hứa-không-proof · C5 cite-máy-không-tồn-tại · C8 TODO-classify) + 5 negative-must-NOT-catch (C2 `bắt buộc` · C3 blockquote-định-nghĩa-luật · C4 proof thật · C6 văn thường · C7 baseline). Cây tạm nằm dưới `%TEMP%`, tự xoá; **0 byte inject vào repo thật** (ranh cứng #3).