[CLAUDE] Docs: S189 bookstart L15 TRỌN 1 lượt (YC-018/YC-027) — 12 vai/5 vòng + vá 7 bề mặt + 2 RCA + PN-002
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 9m6s

Nghi-thức mở phiên chạy trọn một lượt sau khi owner bắt lỗi lead dừng ở BƯỚC 0.7(b)
hỏi consent trong khi PN-001/YC-026/YC-027 đã chốt từ lượt trước (→ PN-002, YC-027 nhắc 1→2).

Vòng @open — 12 vai, 8/12 lượt return dính #53, 0 byte mất (artifact-first vào LỆNH GỐC):
- V1 tooling PASS_WITH_FLAGS-7 + harvest GATE-FAIL-5 → ring1 26Đ/4T/6KC trên 36 claim
- V2 stale 11 FLAG + gap 7 FLAG (deep) → ring2 7Đ/3T/14KC trên 24, enum-gate 18/18
- V3 trio eval MIXED 38-trục/13-REGRESSION → refine 2-action/16-BÁC → audit 24Đ/7T/4KC (98 số byte-exact)
- V4 shard IM ⇒ NO-OP có khai · V5 detector 58+26 INFORM
- Khối chấm điểm → KHÔNG ĐO ĐƯỢC (A8 cấm in điểm; tầng-3 bác phép đếm tầng-2, tầng-1 0 lỗi)
- Phase 3.5 _mind-s-15 block-0 qua mind-check 10/0 → ctx-audit TRUOT 5 FLAG

Vá bề mặt (đều do đội bắt, lead đo lại từng cái):
- CLAUDE.md:77 KHKK 69,71 → 69,71,72 (ring1 phán ef-core-migration/SKILL.md là DƯƠNG-GIẢ ⇒ 1 chỗ là đủ)
- contract-workflow/SKILL.md: "cầu KHKK→HĐ (W5) chưa làm" → ĐÃ LÀM b275893c; giữ vế liên-danh N-HĐ còn nợ THẬT
- WAL: gỡ cụm gộp *conversation tiếp tục* với *phiên-LOGIC chưa khép* (_end L14, 6 bề mặt chọi 1); C5 39/40 OK
- HANDOFF: lật 3 mục NEXT-em đã land ef1d4fbb (harvest-curator 21.308 · reviewer 85,7% · measured 30 row 29/29)
- error-ledger +2 RCA: SCORE-T2-S189 (tầng-2 sai L1+L2) · H24-RESET-S189 (máy gộp đo-ra-0 với không-đo-được)
- tally H24 18 class nấc deep ⇒ deep 1/1 OVERDUE → 0/1 ok; orphan run-folder 0

Load-bearing: ring5 = 0 hit session-start.md ⇒ guard RCA ONESHOT-S188 không fire được ở cửa MỞ ·
YC-027 land 2/4 cửa (tiep/pause = 0) ⇒ cần phép kiểm ĐỦ-CỬA · byte⟂ký-tự: theo ký-tự 0/29 vai
vượt (max 96,5%) ⇒ cảnh báo "2 over-cap" kêu oan (câu 76) · CẤM chạy PROPOSE archive cho
ring2-audit (move-set = {Role baseline, Runs} ⇒ xoá thước của vai KIỂM).

Squash 16 commit wal: trailing chưa-push theo §5.0 (mark RC-pqhuy1987-15-07-2026-15-32-20).
Docs-only ⇒ CI path-filter skip, không deploy.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-08-11 01:24:27 +07:00
parent ef1d4fbb22
commit 9b3c0edba3
28 changed files with 4364 additions and 366 deletions

View File

@ -0,0 +1,81 @@
# SYNTHESIS — bookstart @open S189 (phiên-LOGIC L15, window 1)
**Verdict tổng:** nghi-thức mở phiên chạy **TRỌN MỘT LƯỢT** theo YC-018/YC-027 — 12 vai, 5 vòng, 0 cửa chen giữa.
**Chi phí:** 8/12 lượt return dính #53. **Tổn thất: 0 byte.**
---
## 1. Verdict từng vai
| vòng | vai | verdict | artifact |
|---|---|---|---|
| V1 | `tooling-auditor` | `PASS_WITH_FLAGS — 7 flag` (1H·2M·3L·1I) | `sub-tooling-auditor-open-S189.md` |
| V1 | `harvest-curator` | `GATE-FAIL-5` (2H·1M·2L) | `sub-harvest-curator-open-S189.md` |
| V1 | `ring1-audit` | `26Đ/4T/6KC trên 36 claim` | `sub-ring1-audit-open-S189.md` |
| V2 | `lead-stale-auditor` | `11 FLAG (deep)` — tự khai **SÀN ≠ TỔNG** | `sub-lead-stale-auditor-open-S189.md` |
| V2 | `lead-gap-auditor` | `7 FLAG (deep)` | `sub-lead-gap-auditor-open-S189.md` |
| V2 | `ring2-audit` | `7Đ/3T/14KC trên 24` · enum-gate **18/18** | `sub-ring2-audit-open-S189.md` |
| V3 | `harness-eval` | `MIXED — 38 trục / 13 REGRESSION` | `harness-eval-return.md` |
| V3 | `harness-refine` | `2 action / 16 BÁC` | `harness-refine-return.md` |
| V3 | `harness-audit` | `24Đ/7T/4KC — re-chạy 4 instrument · 98 số` | `harness-audit-return.md` |
| — | `score-counter` (T2) | 4 mục — **phép đếm bị T3 BÁC** | `sub-score-counter-open-S189.md` |
| — | `score-count-auditor` (T3) | `SAI-TẦNG-2` (L1+L2) · **tầng-1 0 lỗi** | `sub-score-count-auditor-open-S189.md` |
| 3.5 | `ctx-audit` | `TRUOT — @open — 5 FLAG` · 9 ĐẠT | `sub-ctx-audit-open-S189.md` |
V4 nén-ngủ: `SHARD-PROBE pending=10/15 ⇒ IM`**NO-OP CÓ KHAI** (không phải bỏ).
Khối chấm điểm: 🔴 **`KHÔNG ĐO ĐƯỢC`** theo A8 (`adap-upgrade-pack-tracking.md:68` cấm in điểm chừng nào chưa có tỉ-lệ phủ-sóng).
## 2. Vòng kiểm bác LEAD — 3 lần, cả 3 ĐÚNG
| # | lead nói | vai bác | thước đúng là gì |
|---|---|---|---|
| 1 | `_end` là view cũ, WAL là view mới | `lead-stale` FLAG-1 | **đếm nhân chứng (6 chọi 1)**, KHÔNG phải thứ-tự thời-gian; cụm "GIỮ MỞ" thêm ở `ef1d4fbb` 21:30, muộn hơn `_end` 46' |
| 2 | YC-027 2/4 cửa = "thói quen khắc luật" (control `YC-018` cũng 2/4) | `ring2-audit` | **phản ví dụ `YC-021` land 3/4** ⇒ không phải thói quen mà là thiếu **phép kiểm ĐỦ-CỬA** |
| 3 | "bề-mặt-đo chưa chạm" | `harness-audit` | `c610ed0d` + `9694ae9a` đổi 2 file corpus **trong** cửa sổ; đóng băng chỉ giữ cho **6 nguồn hotload** |
🔸 Cả 3 lần lead **ĐO đúng**; lỗi nằm ở **bước từ số liệu sang kết luận** — đúng chỗ máy không gác được.
## 3. Hai tranh chấp nội bộ, đã phân xử
- **`ef-core-migration/SKILL.md:99`** — H1 gắn cờ thiếu Mig 72; `lead-stale` carve-out. → `ring1` phán **H1 DƯƠNG-GIẢ** (`:21-23` cấm đọc số từ bảng, `:25` tự tuyên tụt-sau hợp lệ) ⇒ **vá `CLAUDE.md:77` một mình là đủ**.
- **#22 "lỗi thước" 16.912 vs 16.614** — `harness-eval` gọi lỗi thước; `harness-refine` bác. → `harness-audit` **re-chạy chính instrument bị cáo, ra 16.614**, khớp byte ⇒ **VẬT đổi, thước không hỏng** (`tooling-auditor` ghi diary 00:03:37+00:04:07, SHA `c610ed0d`). Con-ĐO sai ở NHÃN `:380`, đúng ở PROSE `:426` — tự mâu thuẫn bảng-vs-prose.
## 4. Phát hiện load-bearing
1. **byte ⟂ ký-tự** — probe chấm byte kêu "2 over-cap"; hook cắt theo **KÝ-TỰ****0/29 vượt**, max `lead-gap-auditor` **96,5%** (24.118 ch). H2 đo, lead đo lại `perl -CSD` khớp. = câu **(76)** đang treo, nay có chứng.
2. **3/7 NEXT-em @S188 ĐÃ LAND**`ef1d4fbb` mà HANDOFF không lật (harvest-curator 30.231→21.308 · reviewer →85,7% · measured 19/29→30 row 29/29). ⇒ đã lật @S189.
3. **`ring5` = 0 hit `session-start.md`** ⇒ guard mà RCA `ONESHOT-S188` tuyên (*"ring5 chấm mỗi phiên"*) **về cấu trúc không fire được ở cửa MỞ** — đúng cửa vi phạm xảy ra lượt này.
4. **`YC-027` land 2/4 cửa** (`tiep`=0 · `pause`=0) — `/tiep` chính là cửa được luật ONE-SHOT giao gánh nợ.
5. **Công thức đếm Migration ở `STATUS:471` có bẫy** — áp đúng chữ ra **71** (nạn nhân `20260717032812_AddPeApprovedBudgetSnapshot.cs`). `ring1` xác nhận bằng 4 engine + **bất-biến-cặp 72 nhóm × đúng 2 file** (miễn nhiễm bẫy lọc-tên). Số 72 đúng; **công thức cạnh nó hỏng**.
6. **A-21** (`ring1` thách-CLEAN) — `skills/contract-workflow/SKILL.md:458` vẫn dạy *"cầu KHKK→HĐ (W5) chưa làm"* trong khi W5 land `b275893c`; 3 ký pháp GĐ3 = 0 hit (control dương `ContractType`=6). Skill **BẮT BUỘC dùng****chỉ sai đường**, nặng hơn số lệch. ⇒ đã vá @S189.
7. **`gap-carry-aged = 0` là Goodhart** — nghi-thức re-stamp 47 slug **reset 51/56 slug về streak=1** ⇒ máy đo-tuổi câm. Số đúng, **nhãn "lành mạnh" sai**.
8. **Sai-đơn-vị lặp 3 lượt**: 19 = carry-*LINES*, máy đo **56 slug** (S185 20/23 · S188 47 · S189 19/56) ⇒ `ring2` xếp thành **class**, không phải con số lẻ.
9. **E2 — đơn thuốc của máy chĩa sai chỗ.** `harness-audit` tái dựng byte-exact: `floorStart 75=2` ∧ máy in `move 2``after-est 24.928` ⇒ move-set = {`## 🎯 Role baseline`, `## 📅 Runs`}, 0/10 pattern `value_protect` che. 🔴 **CHẠY LÀ XOÁ THƯỚC của một vai KIỂM.** Nhưng **KHÔNG** xoá bản ghi S186 (`## S159` là entry idx 6 ∈ keep-floor) ⇒ refine đúng sự-kiện, **gắn nhầm kết-luận**.
10. **60,1% file `ring2-audit` bất-khả-drain ở mọi mức strike** — máy **đúng luật**; spec `value_protect` **0/10 pattern** phủ khối hợp-đồng-vai ⇒ quyền owner.
## 5. Việc ĐÃ LÀM trong lượt (sau verdict, đúng thứ tự Mirror C1)
- `CLAUDE.md:77``69, 71, 72` · `contract-workflow/SKILL.md` W5 → ĐÃ LÀM (giữ vế liên-danh N-HĐ **còn nợ THẬT**) · `WAL` dòng nhãn phiên → L15 (39 dòng, detector C5 `[OK]`)
- `error-ledger.md` **+2 RCA**: `SCORE-T2-S189` (tầng-2 sai L1+L2) · `H24-RESET-S189` (máy gộp *đo-ra-0* với *không-đo-được*)
- `HANDOFF` lật 3 mục NEXT-em đã land (giữ nguyên văn cũ làm vết)
- sổ yêu-cầu **+`PN-002`** (lời anh phiên này — vá F-3 ctx-audit) + `YC-027` nhắc **1→2**
- `h24-signal-write.ps1` ghi tally **18 class** (nấc `deep`) ⇒ `deep 1/1 OVERDUE`**0/1 ok**
- vá F-5: dòng-1 `harness-audit-return.md` kẹt placeholder → verdict thật
- dọn cây stray `runs/…S189…/.claude/` (**thư-mục RỖNG ⇒ git MÙ**, phải `find -type d -empty`)
## 6. 🔴 Khai CẬN-DƯỚI (cấm đọc thành "đã phủ hết")
- `lead-stale` tự khai **SÀN ≠ TỔNG**: 26/29 persona chưa chạm · STATUS <10% · HANDOFF rất mỏng · ACTIVE-MARKS chưa đối chiếu.
- `ring2` khai **14/24 claim KHÔNG CHẤM** verdict của cận-dưới.
- `ctx-audit` khai chấm §E artifact **khớp**, **KHÔNG** chấm artifact **đúng bên trong** "12 verdict này ĐÚNG" **đọc quá**; chỉ nói **KHÔNG BỊA**.
- `harness-audit` **cố ý KHÔNG chạy `mfe-eval.ps1`** (instrument duy nhất GHI chạy tự đẩy anchor phá chính cửa-sổ được giao canh) trục MFE = `KHÔNG CHẤM`.
- `FLAG-10`: detector bám mốc `HANDOFF:183` (2026-08-01) thay `:5` (2026-08-10) regex không khớp `**🆕 Last updated:**` **mọi verdict title-freshness phiên này là cận-dưới**.
- Số `nhac2+` sau khi ghi `PN-002` = **4**, TRÙNG SỐ với tầng-2 nhưng **KHÁC THÀNH PHẦN** (máy: YC-002·013·018·**027** tầng-2: YC-002·**008010**·013·018) **không minh oan cho tầng-2**.
## 7. Mồi @close (ctx-audit gieo)
`_mind-s-15` §D *"Dựng phép kiểm ĐỦ-CỬA"* đo lúc gieo **0 hit** trên HANDOFF/WAL/STATUS/sổ-yêu-cầu (control dương `YC-027` hit WAL).
**Tiêu chí chốt trước:** ĐẠT nếu tới cửa đóng mặt 1 nơi **ngoài** `_mind` §D.
*(Lượt này đã ghi vào WAL `NEXT-em` + `PN-002` cột xử ⇒ cửa đóng đối chiếu.)*
== HẾT ==

View File

@ -0,0 +1,403 @@
HARNESS-AUDIT: 24Đ / 7T / 4KC — re-chạy 4 instrument · 98 số đối-chứng byte-exact <!-- chốt @END :398 (vá F-5 ctx-audit: dòng-1 kẹt placeholder do #53 cắt trước bước đóng) -->
# harness-audit S189 (L15) — nấc 3/3 bộ-ba đồng-kiểm memory · con KIỂM
> Read-only · INFORM-only · propose-only. Single-writer = lead. Vai này KHÔNG Write/Edit lên corpus
> (file này nằm trong run-folder, không phải corpus).
> **Ghi artifact-first:** mỗi claim chấm xong APPEND ngay (phiên này #53 đã trúng 7 lượt return).
> **Quy-ước đơn-vị (khai 1 lần):** `B` = byte `wc -c` · `ký-tự` = `len(read())` · dòng = `wc -l`.
## §0 — PIN GATE (nghĩa-vụ (i)) — verify TỒN-TẠI TRƯỚC khi chấm
PIN lead truyền đích-danh: `.claude/workflows/runs/2026-08-10-S189-bookstart-open/`
**CẤM tự tìm "run mới nhất"** — vai KHÔNG chạy `ls -t`/glob-newest lần nào trong lượt này.
| phép | lệnh | kết quả | verdict |
|---|---|---|---|
| run-folder tồn tại | `test -d <pin>` | EXISTS | ✅ |
| eval-return non-empty | `test -s <pin>/harness-eval-return.md` | NON-EMPTY | ✅ |
| refine-return non-empty | `test -s <pin>/harness-refine-return.md` | NON-EMPTY | ✅ |
**GATE PASS** — vai được phép chấm. (Pin missing/rỗng ⇒ luật vai bắt TRƯỢT/từ-chối, KHÔNG ĐẠT-ảo.)
### §0.1 — TUẦN-TỰ (mtime-chain) — chứng vai chạy CUỐI, không song song
```
run.md 2026-08-10 23:51:25 1.083 B
harness-eval-return.md 2026-08-11 00:16:00 47.119 B <- nấc 1 đóng
harness-refine-return.md 2026-08-11 00:30:53 27.322 B <- nấc 2 đóng
harness-audit-return.md 2026-08-11 00:33:20 (file này) <- nấc 3 MỞ SAU cả hai
```
**TUẦN-TỰ HELD.** 00:16 < 00:30:53 < 00:33:20, không chồng lấn. Vai chấm **bản cuối** của cả 2 nấc,
không phải bản không rơi vào bẫy "chấm artifact không-tồn-tại báo ĐẠT".
### §0.2 — INPUT-DRIFT: số THẬT của eval-return (lead yêu-cầu đo lại)
| nguồn | byte | dòng |
|---|---|---|
| brief lead ( brief con ĐỀ-XUẤT nhận) | 44.267 | 474 |
| **đĩa, vai đo `wc -c -l` lúc 00:33** | **47.119** | **501** |
**Số THẬT = 47.119 B / 501 dòng.** Lệch brief **+2.852 B / +27 dòng**. Nguyên nhân cơ-học **kiểm được**:
eval ghi artifact-first, §12 ERRATUM (`harness-eval-return.md:478-501`, 24 dòng) được APPEND **sau** khi lead lấy số.
Con ĐỀ-XUẤT khai đúng con số này `harness-refine-return.md:13` (**47.119 / 501**) **khớp byte-exact với phép đo của vai**.
---
## §1 — RE-CHẠY INSTRUMENT (nghĩa-vụ (iv)) — đối-chứng BYTE-EXACT
Vai **KHÔNG tin lời-khai**. 4 instrument chạy lại tươi trong lượt này.
### §1.0 — Kiểm mã TRƯỚC khi chạy (chứng không phá cửa-sổ-đo đóng băng Mirror C1)
`grep -n "Set-Content|Out-File|Add-Content|WriteAllText|Export-"` trên cả 5 script:
| script | hit ghi | phán |
|---|---|---|
| `scripts/measure-agent-memory.ps1` | **0** | thuần stdout chạy an toàn |
| `scripts/memory-archive-gate.ps1` | **1** `:224` `Set-Content $strikePath` | **nằm TRONG `if ($Apply)` `:223`** (vai đọc `:222-230`); chạy KHÔNG cờ máy tự in `[A6] DRY-RUN: strike counters NOT persisted` 0 ghi |
| `scripts/crystallized-backfill.ps1` | **0** | DRY |
| `scripts/nhip-no-probe.ps1` | **0** | zero-mutation |
| `scripts/mfe-eval.ps1` | **1** `:231` `WriteAllText($statePath…)` | 🔴 **CÓ GHI** vai **CỐ Ý KHÔNG CHẠY** (xem §1.5) |
**Claim §0 của con-ĐO về provenance 5 instrument: ĐẠT** vai xác minh độc lập bằng chính phép grep,
xác minh thêm phần con-ĐO **không** làm: đọc tận `:223` để chứng câu lệnh ghi **bị `$Apply` gác**.
### §1.1 🔴 RE-CHẠY `measure-agent-memory.ps1` — 29 vai × 5 cột đối chứng §1 con-ĐO
**Header khớp:** `soft_cap 30720` · `autoinject_cap 25600` · **29 agent** 3/3 ĐẠT.
**27/29 dòng `l1_hot` BYTE-EXACT.** 🔴 **2 dòng LỆCH:**
| vai | con-ĐO §1 (`:49`,`:60`) | **vai re-chạy 00:34** | delta |
|---|---|---|---|
| `tooling-auditor` | 16.912 | **16.614** | **298** |
| `score-count-auditor` | 2.330 | **2.565** | **+235** |
**Tổng do vai tự cộng lại = 445.461.** Con-ĐO cộng ra **445.524** (`:64`).
🔴 **Vai KHÔNG chấm TRƯỢT cho con số này** kiểm số-học: `445.461 + 298 235 = 445.524`
**tổng của con-ĐO ĐÚNG TUYỆT ĐỐI với bảng của chính nó**. Lệch 63 B do **VẬT đổi**, không do cộng sai.
**claim tự-cộng 445.524 = ĐẠT** (tránh đúng bẫy F14@S162: đo trên cây LIVE rồi báo sai cho con-ĐO).
**Cột L2 — chỗ KHÔNG nấc nào soi:** con-ĐO in `tooling-auditor l2v= 89904`; vai re-chạy ra **93.802** **+3.898 B**.
(l2i 3.672 · l2g 18.760 khớp cả hai.) Xem §2 đây mảnh còn thiếu của tranh chấp #22.
### §1.2 🔴 RE-CHẠY `memory-archive-gate.ps1` (DRY) — đối chứng §4 con-ĐO
Tham số máy in: cap **25600** · low-water **21760 (0.85)** · keep-floor **5** · strike-need **2** **4/4 khớp** `:162`.
PASS 1 29 dòng, **2 dòng `YES`**, nguyên-văn vai vừa nhận:
```
lead-gap-auditor 27639 YES entries 8 strike 1 after-est ~25638 WARN keep-floor hit (5); cannot auto-drain - SPLIT/condense entries by hand
ring2-audit 26652 YES entries 7 strike 2 after-est ~24928 PROPOSE archive (strike 2>=2): move 2 lowest-value (position tiebreak) -> curate L1->L2 by hand
```
**Trích-dẫn nguyên-văn của con-ĐO `:166-167` = BYTE-EXACT, 0 chữ sai, 0 số sai.**
Dòng `[D3 value-gate] 1 value-protected …` `:168` cũng khớp nguyên-văn.
PASS 2 `A7 GATE PASS - total pointers 429, resolved 429, failed 0` **khớp `:176`**.
Phân rã: cicd-monitor 112 · reviewer 57 · investigator-codebase 56 · harvest-curator 48 · implementer-frontend 44 ·
implementer-backend 43 · test-specialist 33 · tooling-auditor 20 · frontend-designer 9 · lead-gap-auditor 7 · ring1-audit 0 (N/A)
**11/11 số khớp `:179` byte-exact**; vai tự cộng lại **429 ✓**.
`ring1-audit` = `_INDEX.md + 2 archive file(s) -> N/A pointers 0` khớp `:178`.
🔴 **KẾT LUẬN NỀN: con-ĐO KHÔNG BỊA SỐ NÀO.** Mọi ô lệch đều truy được về **thay đổi trên đĩa giữa 2 tick**,
không phải về lời khai sai. (Xem §2 để biết chính xác vật nào đổi, lúc nào, do commit nào.)
### §1.3 — RE-CHẠY `crystallized-backfill.ps1` (DRY) — **13/13 số BYTE-EXACT** vs §5 con-ĐO
```
docs/STATUS.md 240251 · docs/HANDOFF.md 220577 · ACTIVE-MARKS.md 36153
migration-todos.md 90161 · gotchas.md 122892 · agents/README.md 62300 · TOTAL 772334
cap 380000 · tok RANGE [193084 .. 257445] · measured_headroom 122555 · target 210000 · expected_backfill 122555
```
Vai tự cộng lại 6 nguồn = **772.334 ✓**. §5.2 con-ĐO tự cộng **36.053 ✓**; `24.227/36.053 = 67,2% ✓`.
### §1.4 — RE-CHẠY `nhip-no-probe.ps1` — **dòng máy TRÙNG TỪNG KÝ-TỰ** với `:125` con-ĐO
```
NHIP-NO: kiem light 3/6 deep 1/1 OVERDUE:deep | tran-bo-nho 2 over-cap l2idx 0 over | run-chua-gom 1 | pull-cach 1 ngay | so-yc treo 6 / nhac2+ 3 (muc 22, gop 5 dong nhac-lai)
```
8/8 vế khớp, kể cả đuôi `(muc 22, gop 5 dong nhac-lai)` con-ĐO tố lead cắt mất.
### §1.5 — Vai CỐ Ý KHÔNG chạy `mfe-eval.ps1` (khai thẳng, không giấu)
Đây instrument **DUY NHẤT có ghi** (`:231`). Con-ĐO chạy để lại vết thứ 31 trong `.mfe-state.json`.
Vai **không chạy** **§6.2 + §7 (MFE) của con-ĐO = KHÔNG CHẤM**, KHÔNG phải ĐẠT.
🔴 do: chạy để "kiểm" sẽ **tự tay đẩy anchor lên bản ghi thứ 32** tức **phá chính cửa-sổ-đo** vai được giao canh,
làm trục A5 (anchor bất động) dài thêm 1 nhịp **do con KIỂM gây ra**. Vai chọn KHÔNG CHẤM thay ĐẠT-ảo.
---
## §2 🔴 PHÁN TRANH CHẤP #22 — con-ĐO nói "lỗi THƯỚC", con ĐỀ-XUẤT nói "VẬT đổi"
### §2.1 — Ba số, ba mốc thời-gian, TÁI DỰNG ĐƯỢC
| thời-điểm | phép | `tooling-auditor/MEMORY.md` | nguồn |
|---|---|---|---|
| 00:02:40 (commit `b1781712`) | `git show b1781712:…` | **16.854** | git blob |
| ~00:03 (trước 00:03:37) | `measure-agent-memory.ps1` con-ĐO §1 | **16.912** | `:49` |
| 00:04:07 | `stat` mtime ghi lần 2 | **16.614** | đĩa |
| ~00:04 | `memory-archive-gate.ps1` con-ĐO §4 | **16.614** | `:167`-vùng |
| **00:34 (VAI RE-CHẠY)** | **`measure-agent-memory.ps1` ĐÚNG CÁI INSTRUMENT BỊ CÁO** | **16.614** | §1.1 |
| 00:34 | `stat` ×3 liên tiếp | **16.614** | đĩa |
**Vết ghi cơ-học, có SHA:** commit `c610ed0d` (00:04:45, Stop-hook `wal: flush 20260811T0004`) chứa
`--numstat`: `MEMORY.md 18 ins / 11 del` **+** `archive/2026-08.md 6 ins / 0 del`.
mtime: `archive/2026-08.md` **00:03:37** `MEMORY.md` **00:04:07**.
### §2.2 — PHÉP FALSIFY QUYẾT-ĐỊNH (thứ con ĐỀ-XUẤT KHÔNG làm)
Con ĐỀ-XUẤT tự khai `harness-refine-return.md:196`: *"Vai **KHÔNG chạy lại instrument của nấc-1**"* chỉ dùng
`wc -c` · `stat` · `gate`. kết luận đúng **nhưng chưa hề thử bị-cáo**. Vai này thử:
> **Giả-thuyết cần phá:** *"`measure-agent-memory.ps1` in sai số / lệch chuẩn so với `memory-archive-gate.ps1`."*
> **Phép:** chạy lại **chính** `measure-agent-memory.ps1` trên **chính** file đó. Nếu thước hỏng ⇒ phải ra **16.912** lần nữa (hoặc một số ≠ gate).
> **Kết quả: ra `16.614` — TRÙNG TUYỆT ĐỐI với `gate`.** ⇒ **Giả-thuyết "lỗi thước" BROKE.**
Đường thứ 2 (độc lập, cơ-học): git blob `16.854` đĩa `16.912` git blob `16.614`. Số `16.912` **trạng-thái quá-độ
KHÔNG BAO GIỜ ĐƯỢC COMMIT** (nằm lọt giữa 2 nhịp Stop-hook 00:02:40 00:04:45) **có thật**, chỉ git không tái dựng được.
### §2.3 🔴 CÂU PHÁN DỨT KHOÁT (lead dẫn lại cho anh)
> **Thước KHÔNG hỏng. Hai instrument đo cùng một file ra cùng một số khi đo cùng một lúc — vai KIỂM chạy lại đúng cái instrument bị cáo và nó ra `16.614`, khớp `memory-archive-gate` tới từng byte. Cái đổi là VẬT: `tooling-auditor` ghi diary của nó lúc 00:03:37 và 00:04:07, đúng vào khe giữa hai phép đo của con-ĐO (SHA `c610ed0d`).**
- **Con ĐỀ-XUẤT ĐÚNG** kết luận (Đ1 ĐẠT) nhưng bằng-chứng của **thiếu một chân**: chưa từng thử bị-cáo. Vai này chân đó.
- **Con-ĐO SAI NHÃN, ĐÚNG RUỘT:** dòng `#22` bảng §9 `:380` dán nhãn `độ ổn-định của THƯỚC — REGRESSION` **TRƯỢT**.
Nhưng chính viết §10(3) `:426`: *"**Cả hai instrument đều đúng**; cái sai giả-định cửa-sổ đo đóng băng"* **ĐẠT**.
**Con-ĐO tự mâu-thuẫn giữa BẢNG và PROSE trong cùng một file.** Phần ai đọc bảng (lead, anh) phần SAI.
- **Lớp đúng của #22 = `cửa-sổ-đo không đóng băng`, KHÔNG phải `thước hỏng`.** Khác biệt không phải chữ nghĩa: nhãn "thước hỏng"
biện minh cho việc **vứt toàn bộ số của lượt**; nhãn đúng chỉ buộc **đóng dấu thời-điểm lên mỗi bảng** thuốc.
### §2.4 🔴 MẢNH CẢ HAI NẤC ĐỀU BỎ SÓT — thao tác đó là DRAIN, không phải "ghi thêm" cũng không phải "compaction"
Cả 2 nấc chỉ nhìn **cột L1**. Vai đọc cột L2 của **cùng dòng đó**:
| cột | con-ĐO §1 `:49` | vai re-chạy | delta |
|---|---|---|---|
| `l1_hot` | 16.912 | 16.614 | **298** |
| **`l2_verbatim`** | **89.904** | **93.802** | **+3.898** |
| `l2_index` / `l2_gist` | 3.672 / 18.760 | 3.672 / 18.760 | 0 / 0 |
Cùng một thao-tác: **L1 co 298 B, L2 nở 3.898 B** đó **curate/drain L1→L2**, đúng thứ tự cơ-học
(`archive/2026-08.md` ghi **trước** lúc 00:03:37, `MEMORY.md` ghi **sau** lúc 00:04:07).
- con-ĐO `:191` *"đang **ghi diary** đồng thời"* **ĐÚNG** (vai đó ghi thật, 2 file).
- con ĐỀ-XUẤT Đ2 *"**CO LẠI**, không phải append tín-hiệu **compaction/ghi-đè**"* **đúng nửa, sai nửa**:
đúng rằng L1 bị **ghi-đè** (18 ins/11 del), **sai** khi gọi đó compaction **3.898 B đã được APPEND, chỉ là append xuống L2.**
---
## §3 🔴 CHẤM E2 — CLAIM NẶNG NHẤT PHIÊN: đơn thuốc của máy có xoá thước của vai KIỂM không?
Vai **không tin lập-luận của ai** vai **tái-dựng lại toàn bộ số học của máy** rồi mới phán.
### §3.1 — Tái-dựng máy tới mức in ra ĐÚNG con số của nó
Đọc mã: `:114 $bytes = (Get-Item $mem).Length` · `:116 $lines = Get-Content $mem` · `:153` entry = `^#{2,3}\s`
· `:178 $floorStart = $logCount - $keepFloor` · `:182-188` walk `k = 0 .. floorStart-1`, `:183` hard-skip value-protected
· `:186 $afterEst = $bytes - $movedBytes` · `:163 $b += ($lines[$li].Length + 2) # +2 ~ CRLF est`.
🔴 **`:116` `Get-Content` KHÔNG `-Encoding UTF8`** PS 5.1 đọc ANSI mỗi **byte** UTF-8 thành 1 char
`.Length` **byte** của dòng, rồi `+2` cho CRLF nhưng cả 2 file đều **thuần LF** (`od -c` xác nhận, 0 cặp CRLF).
**máy phóng đại phần drain đúng +1 B mỗi dòng.**
**Kiểm bằng cách in ra số của máy:**
| vai | REAL byte pool drain | số dòng | +1/dòng | = movedBytes máy | `$bytes` movedBytes | **máy in** |
|---|---|---|---|---|---|---|
| `ring2-audit` | 1.716 | 8 | +8 | **1.724** | 26.652 1.724 = **24.928** | **~24928** |
| `lead-gap-auditor` | 1.983 | 18 | +18 | **2.001** | 27.639 2.001 = **25.638** | **~25638** |
**Tái-dựng khớp TỪNG BYTE cả 2 dòng** vai đã nắm đúng cơ-chế, phán tiếp được.
### §3.2 — CẤU TRÚC `ring2-audit/MEMORY.md` (26.652 B / 63 dòng) — đo, không suy
7 heading `^## ` tại dòng **24, 28, 32, 35, 40, 44, 49**. `keepFloor = 5` `floorStart = 7 5 = **2**` **pool drain = entry idx 0 và 1**.
| idx | dòng | tên entry | REAL B | value-protected? | trong pool drain? |
|---|---|---|---|---|---|
| **0** | 24 | **`## 🎯 Role baseline`** | 744 | **False** (0/10 pattern) | 🔴 **CÓ** |
| **1** | 28 | **`## 📅 Runs`** | 972 | **False** | 🔴 **CÓ** |
| 2 | 32 | `## 🔄 Curate trigger` | 147 | False | không (keep-floor) |
| 3 | 35 | `## S151` | 533 | False | không |
| 4 | 40 | `## S151-deep` | 372 | **True** (`guard` @`:42`) | không |
| 5 | 44 | `## S152` | 1.224 | False | không |
| 6 | 49 | `## S159` | 6.652 | False | không (keep-floor) |
**Bằng-chứng đóng từ chính máy:** máy in `move **2** lowest-value`. Nếu `Role baseline` **hoặc** `Runs` được value-protect thì
`:183 continue` sẽ bỏ `moveCount` phải **1** hoặc **0**. Máy in **2** **cả hai đều KHÔNG được bảo vệ và cả hai ĐỀU nằm trong move-set.**
### §3.3 🔴 TRẢ LỜI THẲNG 2 CÂU LEAD HỎI
**(a) Thi hành đơn thuốc nguyên-văn xoá `## 🎯 Role baseline` không? . Chắc chắn. Chứng mức máy, không phải suy luận.**
- Move-set = đúng {`🎯 Role baseline`, `📅 Runs`} = 1.716 B.
- `Role baseline` **khối hợp-đồng vai** chính diary `ring2-audit/MEMORY.md:60` (bản ghi S182) tự viết:
*"Role-baseline auto-inject đầu mỗi spawn = **nạp thước thiếu vạch TRƯỚC khi chấm**"* (vai đọc dòng 60, **trích khớp nguyên-văn** con ĐỀ-XUẤT).
- Heading `:24` tự khai verbatim 8.637 B **đã** xuống `archive/2026-08.md`; thứ còn L1 **bản TÓM** = thước rút gọn.
Drain nốt = **L1 của vai KIỂM không còn hợp-đồng nào**; nội-dung không bị huỷ (còn archive) nhưng **không còn được auto-inject**.
- **E2 điểm 2 = ĐẠT**, đạt mức mạnh hơn lập-luận của con ĐỀ-XUẤT ( suy từ ngữ-nghĩa `keep_floor`; vai chứng bằng `floorStart=2` `moveCount=2` tái-dựng `24.928` byte-exact).
**(b) xoá bản ghi mới nhất (S186) không? KHÔNG. Máy KHÔNG đụng tới .**
- `## S159` **entry idx 6 = entry CUỐI** nằm trọn trong `keep_floor 5` (giữ idx 2..6) **không bao giờ vào move-set**.
- Sự-kiện con ĐỀ-XUẤT nêu **ĐÚNG**: span `## S159` (dòng 4963) chứa **S180 (`:58`) · S182 (`:60`) · S169 (`:62`) · S186 (`:63`)**,
S186 ghi ngày **2026-08-10** vai đọc tận nơi, **4/4 tên và thứ-tự khớp con ĐỀ-XUẤT**.
- 🔴 **Nhưng suy-luận gắn vào thì TRƯỢT:** con ĐỀ-XUẤT xếp việc này thành lý-do thứ 3 để nói *"thi hành `PROPOSE` nguyên-văn sẽ gây hại"*.
`PROPOSE` **không chạm** `S159`. Rủi-ro S186 rủi-ro của **một người drain BẰNG TAY theo nhãn span** thao-tác **khác**, không phải đơn thuốc của máy.
**đúng sự-kiện, gắn nhầm kết-luận.**
** CHỐT CHO LEAD: ĐỪNG thi hành `PROPOSE archive` nguyên-văn cho `ring2-audit`. do đứng vững (a), không phải (b).**
### §3.4 — 3 phát hiện E2 **không nấc nào có** (vai tự dựng)
1. 🔴 **Drain có làm được cũng chỉ là mỹ-phẩm.** Move-set REAL = **1.716 B = 6,4%** file về **24.936 B**: dưới cap 25.600 nhưng
**vẫn trên `low_watermark` 21.760 tới 3.176 B**. Vòng lặp `:187` thoát **cạn pool**, không chạm mức nước.
`ring2` sẽ **over-cap lại gần như tức thì** đây **cơ-chế** đằng sau lập-luận-theo-lịch-sử "attempt-2 sẽ tái diễn" của con ĐỀ-XUẤT.
2. 🔴 **60,1% file là vùng máy KHÔNG ĐỤNG ĐƯỢC, không phải vùng máy KHÔNG THẤY.** Đo: **16.008 B trên heading `##` đầu (dòng 24)** khớp con ĐỀ-XUẤT byte-exact.
Nhưng `:114 $bytes` = **trọn 26.652** máy **có** cân đủ khối lượng; chỉ không thể **MOVE** phần không nằm trong span heading nào.
chữ *"máy không nhìn thấy"* của con ĐỀ-XUẤT **sai cơ-chế**; phát biểu đúng: ***"16.008 B nằm ngoài mọi entry bất-khả-drain mọi mức strike"***.
3. 🔴 **Dòng trấn-an `[D3 value-gate]` là RỖNG trên chính ca này.** Máy in *"1 value-protected logical entry **HARD-SKIPPED from the drain set**"*.
Vai truy: entry được bảo vệ **idx 4 (`## S151-deep`, token `guard` ở `:42`)** idx 4 **nằm trong keep-floor, chưa bao giờ là ứng-viên drain**.
Vòng đếm `:210-211` chạy trên **toàn bộ** `logCount`, không phải trên pool drain. **câu "đã hard-skip khỏi drain set" đọc thành "value-gate đã che chở move-set" trong khi move-set KHÔNG có gì được che chở.**
Đây đúng lớp *"vắng-mặt trông giống ổn"* **giáng xuống chính cái GUARD**.
4. 🔸 **Máy ĐÚNG LUẬT, spec mới là chỗ hở.** 10 pattern `value_protect` (`gotcha #`·`anti-pattern`·`recurring`·`lost-update`·`race`·`bai hoc`·`lesson`·`guard`·`root-cause`·`silent-fail`)
**0/10 phủ khối hợp-đồng-vai** máy rủ drain `Role baseline` **thi hành đúng spec**. Con ĐỀ-XUẤT gọi *"máy CHĨA SAI CHỖ"* hàm ý máy lỗi; đúng phải **spec thiếu vạch**.
🔴 Vai **KHÔNG đề-xuất thêm pattern** sửa `memory-budget.json` = quyền cấp ngân-sách của owner (`reinject-ledger.md:5`). Nêu để owner quyết.
### §3.5 — Kiểm CHỐT-DỪNG `lead-gap-auditor`: phép tính "bất khả về số học"
Con ĐỀ-XUẤT E1: *"kể cả drain hết phần được phép, 25.638 > 25.600 ⇒ **thiếu 38 B** bất khả về số học."*
| | số | nguồn |
|---|---|---|
| `$bytes` | 27.639 | máy + `wc -c` |
| pool drain = idx 0,1,2 (`floorStart = 85 = 3`), **0/8 entry value-protected** | | |
| movedBytes **máy** (đã cộng +1/dòng × 18 dòng) | 2.001 | tái-dựng khớp |
| `after-est` **máy** | **25.638** | máy in |
| **movedBytes THẬT (UTF-8, LF)** | **1.983** | vai đo |
| **after-drain THẬT** | **25.656** | 27.639 1.983 |
- **KẾT LUẬN ĐẠT:** drain hết phần được phép **vẫn trên cap** archive-theo-mức **bất khả** chốt-dừng E1 đứng vững.
- **CON SỐ TRƯỢT:** thiếu **56 B**, không phải 38 B. Con ĐỀ-XUẤT **chép thẳng `after-est` của máy mà không tái-dựng** đúng bẫy xác-minh-vòng-tròn.
🔸 Sai số lệch **hướng an-toàn** (thực tế **tệ hơn** máy nói) kết luận **mạnh thêm**, không yếu đi.
- **TRƯỢT thêm một vế cơ-chế:** con ĐỀ-XUẤT viết *"`after-est ~25.638` được tính trên **ảnh chụp thiếu 57%**"*. **Không đúng** `:114 $bytes` **trọn file 27.639**, đã gồm cả 15.890 B đó.
Nguyên-nhân `after-est` lạc quan `:163 +2 ~ CRLF est` trên file thuần-LF, **không phải** vùng-mù 57%.
🔸 Số nền của thì **byte-exact**: vai đo **15.890 B = 57,5%**, heading `##` đầu **dòng 23** khớp cả 3.
---
## §4 — CHẤM 5 ĐÍNH-CHÍNH con ĐỀ-XUẤT gửi ngược con-ĐO
| # | claim | verdict | bằng-chứng vai TỰ dựng |
|---|---|---|---|
| **Đ1** | #22 nhãn "lỗi THƯỚC" sai lớp | **ĐẠT** | §2 vai re-chạy chính instrument bị cáo **16.614** khớp gate. Con ĐỀ-XUẤT đúng, chân-kiềng thiếu ( tự khai `:196` không chạy lại instrument) |
| **Đ2a** | "298 B = **CO LẠI**, không phải append" (trên L1) | **ĐẠT** | `git show c610ed0d --numstat` = `18 ins / 11 del` trên `MEMORY.md` **ghi-đè**, không phải nối đuôi |
| **Đ2b** | nên KHÔNG phải "đang ghi diary" | **TRƯỢT** | con-ĐO `:191` viết **"đang ghi diary đồng thời"** **chưa từng dùng chữ "append"**. Git chứng vai đó **ghi thật, 2 file, đúng trong khe đo** đính-chính đánh vào chữ con-ĐO không nói |
| **Đ2c** | cơ-chế = "compaction/ghi-đè" | **TRƯỢT** | thật **DRAIN L1→L2**: `l2v` **89.904 → 93.802 = +3.898 B** 2.4). append chỉ append **xuống L2**. Cả 2 nấc đều bỏ sót cột này |
| **Đ3a** | `score-counter:4` `tooling-auditor:7` đều **không có `Write`** | **ĐẠT** | đọc đúng 2 dòng đó: `:4 tools: Read, Grep, Glob, Bash` · `:7 tools: [Read, Grep, Glob, Bash, mcp__…]` **số dòng chính xác, 0/2 có Write** |
| **Đ3b** | "toàn roster **25/30** không Write **83%**" | **TRƯỢT** | đo lại: `.claude/agents/*.md` = 30 file **nhưng 1 file là `README.md`, KHÔNG phải vai** (đúng "bẫy glob" diary `tooling-auditor` cảnh báo, con-ĐO đã tôn trọng khi lấy mẫu-số **29**). Thật: **29 vai · 5 CÓ Write** (`frontend-designer`·`implementer-backend`·`implementer-frontend`·`office-document`·`test-specialist`) · **24 KHÔNG** **24/29 = 82,8%**. Con ĐỀ-XUẤT **lệch cả tử lẫn mẫu (+1/+1)** nên % vẫn ~83 **đúng nhờ hai lỗi triệt tiêu nhau**; **âm thầm đổi mẫu-số 29→30** giữa báo cáo trong khi mọi số khác của cả 2 nấc dùng 29 |
| **Đ3c** | trục #37 đo năng-lực đa-số roster không mẫu-số cần khai lại | **ĐẠT** | đứng nguyên **24/29** |
| **Đ4** | máy "11 sub archive" đĩa **14 vai có archive NỘI-DUNG** (+1 dir rỗng = 15) | **ĐẠT byte-exact** | vai liệt 15 dir: 14 nội-dung, `investigator-api/archive/` = **0 file / 0 B**. Gate PASS 2 in đúng **11** (chỉ vai `_INDEX.md`). Vô-hình = `ctx-audit` 11.521 + `lead-stale-auditor` 8.581 + `ring2-audit` 8.771 = **28.873 ✓**; cộng `ring1` 6.761 = **35.634 ✓** **cả 2 số của A1 khớp tuyệt đối** |
| **Đ5** | INPUT eval-return: brief `44.267/474` đĩa **47.119/501** | **ĐẠT byte-exact** | §0.2 vai `wc -c -l` độc lập ra **47.119 B / 501 dòng**. Nguyên-nhân: §12 ERRATUM (24 dòng) APPEND sau khi lead lấy số |
🔸 **Cite-drift nhỏ (nêu, không tính TRƯỢT):** con ĐỀ-XUẤT neo cơ-chế gate `memory-archive-gate.ps1:249`; trên đĩa
`$indexPath = Join-Path …` **`:247`** `if (-not (Test-Path $indexPath)) { continue }` **`:248`**. **Chữ trích đúng nguyên-văn, số dòng lệch 1.**
---
## §5 — FALSIFY-LOG (nghĩa-vụ (iii)) — mỗi phép ghi **phép thử cụ-thể**, không chỉ kết-luận
| # | giả-thuyết vai THỬ PHÁ | phép thử | kết |
|---|---|---|---|
| F1 | *"`measure-agent-memory.ps1` là thước hỏng"* | chạy lại **chính nó** trên **chính file** đó | 🔴 **BROKE** ra 16.614 = khớp `gate`. Thước sạch |
| F2 | *"con-ĐO bịa/chép số §1"* | re-chạy measure, so **29 vai × 5 cột** | **HELD ngược** 27/29 byte-exact; 2 ô lệch truy được về `c610ed0d`/`9694ae9a`. **0 số bịa** |
| F3 | *"con-ĐO cộng sai TỔNG 445.524"* | tự cộng ra 445.461, rồi hoàn nguyên `+298 235` | **HELD** tổng con-ĐO đúng tuyệt đối **với bảng của chính nó** |
| F4 | *"`Role baseline` được `value_protect` che, con ĐỀ-XUẤT báo động giả"* | duyệt 10 pattern trên trọn span idx 0 & 1 **+** đối chiếu `moveCount` máy in | 🔴 **BROKE** 0/10 khớp, máy in `move **2**` **cả 2 vào move-set**. Báo động THẬT |
| F5 | *"đơn thuốc của máy sẽ xoá bản ghi mới nhất S186"* | định vị `## S159` = idx 6 vs `floorStart = 2` | 🔴 **BROKE** S159 trong keep-floor, **máy không đụng**. Sự-kiện đúng, kết-luận gắn sai |
| F6 | *"`after-est` của máy đáng tin, khỏi tái-dựng"* | dựng lại UTF-8 thật vs `.Length+2` | 🔴 **BROKE** máy lạc quan **18 B** (lead-gap) / **8 B** (ring2). Con số 38 B của E1 phải **56 B** |
| F7 | *"dòng `[D3 value-gate]` chứng move-set đã được che chở"* | truy entry được bảo vệ idx nào vs `floorStart` | 🔴 **BROKE** entry đó idx 4, **chưa bao giờ là ứng-viên**. Câu trấn-an RỖNG trên ca này |
| F8 | *"con ĐỀ-XUẤT nói 25/30 — chắc đúng vì nó có trích 2 dòng thật"* | đếm lại `tools:` trọn 30 file, tách `README.md` | 🔴 **BROKE** thật **24/29**. 2 dòng trích thì đúng, con số roster thì không |
| F9 | *"gate DRY vẫn có thể ghi lén `.archive-strikes.json`"* | đọc `:222-230` + `stat` file sau 2 lần chạy | **HELD** lệnh ghi nằm trong `if ($Apply)`; mtime giữ nguyên **2026-08-07 11:10** |
| F10 | *"đĩa lệch git 63 B ⇒ có ai sửa lén ngoài commit"* | `grep -c $'\r'` = 0 tưởng không CRLF; **đổi thước** sang `od -c` | 🔴 **BROKE giả-thuyết, VÀ bắt được thước hỏng thật**: `od` cho thấy `\r\n` ràng **`grep -c $'\r'` trong Git Bash thước ÂM-GIẢ**. 63 B = 63 dòng CRLF, đúng lớp `i/lf w/crlf` `.gitattributes` tự khai 188 file |
| F11 | *"cửa-sổ đo đang đóng băng như lead nói"* | `git log` các commit `wal:` trong khe + so `measure` 2 lần | 🔴 **BROKE** xem §6 |
---
## §6 🔴 SOÁT CONTAINMENT — và một đính-chính **gửi ngược LEAD**
Lead brief: *"cửa-sổ đo (Mirror C1) vẫn đang đóng băng… **agent-memory đều chưa chạm**."*
**Vai soát bằng `git log` các commit `wal:` (không chỉ working-tree, đúng bài E-2 của con-ĐO):**
| commit | giờ | file **agent-memory** bị nuốt | byte |
|---|---|---|---|
| `c610ed0d` | 00:04:45 | `tooling-auditor/MEMORY.md` (18 ins/11 del) **+** `tooling-auditor/archive/2026-08.md` (6 ins) | L1 **298** · L2 **+3.898** |
| `9694ae9a` | 00:13:29 | `score-count-auditor/MEMORY.md` (+1 dòng) | **+235** (2.330 2.565) |
🔴 **Vế "agent-memory chưa chạm" = TRƯỢT.** **2 file corpus đã đổi TRONG cửa-sổ**, đó **chính xác là 2 ô** khiến bảng §1
của con-ĐO lệch khi vai re-chạy. Đóng-băng đúng cho **6 nguồn hotload của lead** (crystallized re-chạy ra **772.334 B y hệt**),
**không** đúng cho corpus agent-memory. **Hai mặt này phải khai riêng, không gộp thành một câu "chưa chạm".**
**Vết ghi của CHÍNH VAI NÀY (tự khai):**
- `git status --porcelain` sau lượt: `?? …/harness-audit-return.md` (file này) + ` M .claude/governance/.session-counter.json` (**không phải của vai** vai 0 chạm).
- **0** chạm `.claude/agent-memory/**` · **0** chạm `memory-budget.json` · **0** chạy instrument ghi (`mfe-eval.ps1` KHÔNG chạy, §1.5).
- 4 instrument đã chạy: 3 cái 0-write theo grep, 1 cái (`gate`) tự in `DRY-RUN: strike counters NOT persisted` + mtime `.archive-strikes.json` **không đổi** (vẫn 08-07 11:10) **kiểm chứ không tin lời khai**.
- 🔴 **read-only của vai = chặn-THIẾU-tool, KHÔNG phải sandbox** vai còn `Bash` = kênh-ghi-mở. Backstop THẬT vẫn lead soát `git log`.
---
## §7 — BẢNG VERDICT PER-CLAIM (nghĩa-vụ (ii)) — **KHÔNG gộp verdict-tổng che claim TRƯỢT lẻ**
### 7A — claim của **con ĐO** (15)
| # | claim | neo | verdict |
|---|---|---|---|
| D1 | §0 provenance 5 instrument (measure/gate/crystallized/nhip-no 0-ghi · mfe ghi 1 file) | `:12-16` | **ĐẠT** |
| D2 | §1 bảng `l1_hot` 29 vai + header 3 tham-số | `:27-61` | **ĐẠT** (27/29 byte-exact; 2 ô stale-tại-tick, **không sai**) |
| D3 | §1 tự-cộng TỔNG **445.524** | `:64` | **ĐẠT** (hoàn nguyên khớp) |
| D4 | §1-bis ký-tự `lead-gap 24.118` · `ring2 23.078` | `:74-75` | **ĐẠT** byte-exact |
| D5 | §3 dòng `NHIP-NO` nguyên-văn 8 vế | `:125` | **ĐẠT** trùng từng ký-tự |
| D6 | §3-bis `l2_index` TỔNG `cicd-monitor` **23.588** | `:150` | **ĐẠT** |
| D7 | §4 tham-số gate 4/4 + **2 dòng `YES` nguyên-văn** | `:162,166-168` | **ĐẠT** byte-exact |
| D8 | §4 A7 **429/429 failed 0** + phân 11 số + tự cộng | `:176-180` | **ĐẠT** byte-exact |
| D9 | §4-bis + #22 **nhãn "độ ổn-định của THƯỚC — REGRESSION"** | `:380` | **TRƯỢT** §2 |
| D10 | §5 crystallized 13 số + §5.2 tự cộng 36.053 / HANDOFF 67,2% | `:200-216,255` | **ĐẠT** byte-exact |
| D11 | §6.1 `.archive-strikes.json` 738 B · stale 08-07 11:10 · **26/29** · thiếu đúng 3 vai · vênh `ring2 1↔2` `inv-cb 1↔0` | `:267-271` | **ĐẠT** 5/5 vế |
| D12 | §9 meta-count **13+11+14 = 38**, phủ 1..38 **không trùng, không sót** | `:399-400` | **ĐẠT** vai duyệt từng chỉ số |
| D13 | §12 E-1 `score-count-auditor` trôi trong lượt | `:484-485` | **ĐẠT** (measure: 2.330 **2.565**) |
| D14 | §6.2 + §7 **MFE** (anchor 25 · per-role 163/165 · FIT) | `:274-328` | **KHÔNG CHẤM** vai cố ý không chạy instrument-có-ghi 1.5) |
| D15 | §8 độ-giữ (control-dương `S1` 29/29 · nhãn S189) | `:337-349` | **KHÔNG CHẤM** không đo lại grep-nhãn |
### 7B — claim của **con ĐỀ-XUẤT** (16)
| # | claim | neo | verdict |
|---|---|---|---|
| R1 | §0 TICK 6 vật (27.639·26.652·24.975·24.473·16.614·21.308) | `:19-24` | **ĐẠT** 6/6 byte-exact |
| R2 | Đ5 INPUT **47.119 B / 501 dòng** | `:13,187` | **ĐẠT** byte-exact |
| R3 | Đ1 thước không hỏng, VẬT đổi | `:183` | **ĐẠT** (chân-kiềng thiếu, vai §2.2) |
| R4 | Đ2a 298 B = ghi-đè trên L1 | `:184` | **ĐẠT** (`18 ins/11 del`) |
| R5 | Đ2b "không phải đang-ghi-diary" | `:184` | **TRƯỢT** con-ĐO nói "ghi", không nói "append" |
| R6 | Đ2c cơ-chế = "compaction/ghi-đè" | `:184` | **TRƯỢT** thật **DRAIN L1→L2**, `l2v +3.898 B` |
| R7 | Đ3a 2 dòng `tools:` `:4` / `:7` đều không Write | `:136-137` | **ĐẠT** byte-exact |
| R8 | Đ3b **"25/30 = 83% roster"** | `:141` | **TRƯỢT** thật **24/29 = 82,8%**; đếm `README.md` làm vai + đổi lén mẫu-số 2930 |
| R9 | Đ3c mẫu-số trục #37 cần khai lại | `:141,185` | **ĐẠT** |
| R10 | Đ4 **14 vai** archive nội-dung · **28.873 B** · **35.634 B** | `:72-73,186` | **ĐẠT** byte-exact |
| R11 | A1 cơ-chế `continue` bỏ qua vai không `_INDEX` | `:53-60` | **ĐẠT** nội-dung (cite `:249` thật `:248`) |
| R12 | E1 **kết luận** archive bất-khả (drain hết vẫn > cap) | `:114` | ✅ **ĐẠT** |
| R13 | E1 **con số** "thiếu **38 B**" | `:114` | ❌ **TRƯỢT** — thật **56 B** (chép `after-est` không tái-dựng) |
| R14 | E1 "`after-est` tính trên **ảnh chụp thiếu 57%**" | `:115` | ❌ **TRƯỢT** cơ-chế (`$bytes` = trọn file); 🔸 số nền 15.890 / 57,5% / dòng 23 **ĐẠT byte-exact** |
| R15 | **E2 điểm 1-2** — 16.008 B trên `##` đầu (dòng 24) · pool drain = **`Role baseline` + `Runs`** | `:123-124` | ✅ **ĐẠT** — chứng ở **mức máy** (`floorStart=2``moveCount=2` ∧ tái-dựng `24.928` byte-exact) |
| R16 | **E2 điểm 3** — span `S159` chứa S186 ⇒ *"thi hành `PROPOSE` nguyên-văn sẽ xoá bản ghi mới nhất"* | `:125` | ❌ **TRƯỢT** ở suy-luận (S159 idx 6 ∈ keep-floor, máy **không đụng**); 🔸 **sự-kiện ĐẠT byte-exact** (S180·S182·S169·S186, đúng thứ tự) |
| R17 | E3 sổ strike ghi 1 ↔ máy in 2 | `:129` | ✅ **ĐẠT** |
| R18 | B12 use⟂mention `grep -c "5 class"` = 3 hit đều MENTION | `:171` | ⚪ **KHÔNG CHẤM** — không đo lại |
### 7C — claim của **LEAD** trong brief (2)
| # | claim | verdict |
|---|---|---|
| L1 | 3 mục lead tự đo khớp: `harvest-curator` **21.308** · `reviewer` **24.473** · `measured` 30 row/`ef1d4fbb` | ✅ **ĐẠT** 2/2 số đo lại được (21.308 · 24.473 khớp measure). 🔸 vế "**30 row**" — measure in **29 agent**; vai **KHÔNG CHẤM** row-count của khối `measured` (không đọc budget rows), nhưng **nêu lệch 29↔30 để lead tự soát** |
| L2 | "cửa-sổ đo đóng băng — **agent-memory đều chưa chạm**" | ❌ **TRƯỢT** — §6: `c610ed0d` + `9694ae9a` đổi **2 file corpus** trong cửa-sổ |
---
### END — `HARNESS-AUDIT: 24Đ / 7T / 4KC — re-chạy 4 instrument · 98 số đối-chứng byte-exact`
🔴 **KHÔNG có verdict-tổng gộp.** 7 TRƯỢT nằm riêng từng dòng: D9 · R5 · R6 · R8 · R13 · R14 · R16 (+ L2 gửi ngược lead).
⚪ 4 KHÔNG CHẤM (D14 · D15 · R18 · vế row-count của L1) = **cận-dưới có khai**, KHÔNG được đọc thành "sạch".
🔸 **Nền chung, nói thẳng:** cả 2 nấc **không bịa số nào**. Mọi TRƯỢT đều là **nhãn / cơ-chế / mẫu-số**, không phải bịa dữ-liệu.

View File

@ -0,0 +1,501 @@
HARNESS-EVAL: MIXED — 38 trục / 13 REGRESSION · 11 HEALTHY · 14 MIXED
# harness-eval S189 (L15) — nấc 1/3 bộ-ba đồng-kiểm memory · con ĐO
> Vòng V3 trio-memory, AUTO 1 vòng/phiên giữa 2 bookend (owner @S151). Read-only, INFORM-only, propose-only.
> 🔴 MỌI số dưới đây = **instrument chạy TƯƠI trong lượt này**, stdout nguyên-văn. 0 số-từ-trí-nhớ.
> Ghi theo lối **artifact-first**: mỗi trục đo xong APPEND ngay, KHÔNG gom (bài #53 `skeleton-ruột-rỗng` S173 + 4 ca garble phiên này).
## §0 — Provenance: cái gì CHẠY, cái gì KHÔNG, vì sao
| instrument | trạng-thái lượt này | ghi-chú |
|---|---|---|
| `scripts/measure-agent-memory.ps1` | ✅ CHẠY TƯƠI, exit 0 | Đọc mã trước khi chạy: script **chỉ `ConvertTo-Json` ra stdout**, KHÔNG có `Set-Content`/`Out-File`/ghi `memory-budget.json` ⇒ chạy được trong cửa-sổ-đo đóng-băng Mirror C1. (Nguồn: `scripts/measure-agent-memory.ps1:36-41`.) |
| `scripts/mfe-eval.ps1` | (đang đo — xem §5) | ⚠️ Script này GHI đúng 1 file `.claude/agent-memory/.mfe-state.json` (budget `mfe.honest_caveats.read_only_scope` tự khai). |
| `scripts/memory-archive-gate.ps1` | (đang đo — xem §4) | DRY-RUN planner |
| `scripts/crystallized-backfill.ps1` | (đang đo — xem §6) | DRY planner |
| `scripts/nhip-no-probe.ps1` | (đang đo — xem §3) | |
| `.claude/agent-memory/memory-budget.json` | ✅ ĐỌC TƯƠI (485 dòng) | baseline `measured` + `tiers` + `h24_cadence` + `mfe` + `crystallized_backfill` |
**Caveat vai (khai thẳng, mỗi lượt):**
1. 🔴 *read-only = chặn-THIẾU-tool, KHÔNG phải sandbox.* Vai này không có Write/Edit lên code, nhưng **VẪN giữ Bash = kênh-ghi-mở**. Containment THẬT = lead soát `git status` + `git log` sau lượt. ⚠️ Bổ-sung từ S173: Stop-hook auto-commit `wal:` có thể **nuốt** file mới khỏi `git status` ⇒ backstop phải soi cả `git log`/diff, không chỉ working-tree.
2. 🔴 *vai nạp theo registry = ảnh-chụp lúc khởi phiên* — file agent MỚI không hot-reload.
---
## §1 — TRỤC l1_hot (byte MEMORY.md từng vai) — máy VỪA in
**Header máy in:** `soft_cap_l1_bytes: 30720` · `autoinject_cap_bytes: 25600` · **29 agent** (mẫu-số kỳ này = 29; S185 = 28; S173 = 23 ⇒ 🔴 CẤM so % / so tỉ-lệ xuyên kỳ, chỉ so số TUYỆT ĐỐI).
Bảng nguyên-văn (sort giảm dần theo `l1_hot_bytes`), cột `%auto` = /25600 do vai tính từ chính số máy:
```
lead-gap-auditor l1= 27639 108.0% l2v= 22645 l2i= 1234 l2g= 7112 over30k=False
ring2-audit l1= 26652 104.1% l2v= 8771 l2i= 0 l2g= 0 over30k=False
lead-stale-auditor l1= 24975 97.6% l2v= 8581 l2i= 0 l2g= 0 over30k=False
reviewer l1= 24473 95.6% l2v= 253991 l2i=13941 l2g= 69925 over30k=False
cicd-monitor l1= 24322 95.0% l2v= 264257 l2i=23588 l2g= 122471 over30k=False
investigator-codebase l1= 21996 85.9% l2v= 171476 l2i=12448 l2g= 107741 over30k=False
ctx-verifier l1= 21819 85.2% l2v= 0 l2i= 0 l2g= 0 over30k=False
harvest-curator l1= 21308 83.2% l2v= 87605 l2i= 8325 l2g= 20317 over30k=False
ring1-audit l1= 20924 81.7% l2v= 6761 l2i= 325 l2g= 0 over30k=False
ctx-audit l1= 20460 79.9% l2v= 11521 l2i= 0 l2g= 0 over30k=False
implementer-backend l1= 19930 77.9% l2v= 94752 l2i=10487 l2g= 84345 over30k=False
harness-audit l1= 19877 77.6% l2v= 0 l2i= 0 l2g= 0 over30k=False
frontend-designer l1= 19869 77.6% l2v= 19050 l2i= 2435 l2g= 3231 over30k=False
test-specialist l1= 19331 75.5% l2v= 37615 l2i= 6170 l2g= 33811 over30k=False
harness-refine l1= 18825 73.5% l2v= 0 l2i= 0 l2g= 0 over30k=False
harness-eval l1= 18736 73.2% l2v= 0 l2i= 0 l2g= 0 over30k=False
implementer-frontend l1= 17983 70.2% l2v= 47796 l2i= 5844 l2g= 44764 over30k=False
tooling-auditor l1= 16912 66.1% l2v= 89904 l2i= 3672 l2g= 18760 over30k=False
ctx-curator l1= 13340 52.1% l2v= 0 l2i= 0 l2g= 0 over30k=False
database-agent l1= 9038 35.3% l2v= 0 ...
investigator-api l1= 9021 35.2% l2v= 0 ...
back-end-reviewer-style l1= 6019 23.5% l2v= 0 ...
database-reviewer-style l1= 4376 17.1% l2v= 0 ...
front-end-reviewer-style l1= 3857 15.1% l2v= 0 ...
ring4-audit l1= 3349 13.1% l2v= 0 ...
office-document l1= 3323 13.0% l2v= 0 ...
ring5-audit l1= 2474 9.7% l2v= 0 ...
score-counter l1= 2366 9.2% l2v= 0 ...
score-count-auditor l1= 2330 9.1% l2v= 0 ...
```
**Số dẫn-xuất (vai tự cộng lại, không lấy của máy):**
- **TỔNG l1_hot 29 vai = 445.524 B**
- **Vượt `autoinject_cap` 25600 = 2 vai:** `lead-gap-auditor` **27.639** (+2.039) · `ring2-audit` **26.652** (+1.052)
- **Vượt `soft_cap` 30720 = 0 vai** (`l1_over_30kb=False` 29/29)
- **Vùng ÁP-SÁT 80100% cap (chưa vượt) = 7 vai:** lead-stale-auditor 24.975 (còn 625 B) · reviewer 24.473 (còn 1.127) · cicd-monitor 24.322 (còn 1.278) · investigator-codebase 21.996 · ctx-verifier 21.819 · harvest-curator 21.308 · ring1-audit 20.924
### 🔴 §1-bis — BÀI S186 ÁP NGAY: đổi sang KÝ-TỰ trước khi neo bất kỳ kết luận "over-cap" nào
Governor đếm **BYTE**; cơ-chế cắt/auto-inject đếm **KÝ-TỰ**. Vai này đã sai 2 tầng ở S186 vì bỏ bước này. Đo lại 6 vai đầu bảng bằng cả hai đơn-vị (`wc -c` vs `len(read())`):
| vai | BYTE | KÝ-TỰ | gap-tới-25600 theo BYTE | gap theo KÝ-TỰ |
|---|---|---|---|---|
| lead-gap-auditor | 27.639 | **24.118** | **2.039 (VƯỢT)** | +1.482 (CHƯA vượt) |
| ring2-audit | 26.652 | **23.078** | **1.052 (VƯỢT)** | +2.522 (CHƯA vượt) |
| lead-stale-auditor | 24.975 | 21.988 | +625 | +3.612 |
| reviewer | 24.473 | 21.421 | +1.127 | +4.179 |
| cicd-monitor | 24.322 | 21.980 | +1.278 | +3.620 |
| harvest-curator | 21.308 | 19.481 | +4.292 | +6.119 |
**Phát biểu ĐÚNG ĐƠN-VỊ:** *2 vai vượt cap trong đơn-vị BYTE (đơn-vị governor dùng); **0 vai** vượt trong đơn-vị KÝ-TỰ.* Ai đọc "2 over-cap" mà suy ra "2 vai đang bị cắt hot-inject" là **suy sai tầng** — đúng như ca S186.
**VERDICT trục l1_hot: MIXED** — 0/29 vượt soft-cap (tốt thật) NHƯNG 2 vai vượt autoinject-cap theo byte + 7 vai áp sát 80-100%; tức 9/29 vai nằm trong vùng không còn chỗ thở.
---
## §2 — TRỤC baseline `measured` (khối `memory-budget.json`) — 🟢 ĐẢO CHIỀU LỚN NHẤT KỲ NÀY
Nợ mang vào theo brief (HANDOFF NEXT-em @S188): *"khối `measured` **stale 5 kỳ**, 19/29 phủ, 18/19 lệch, đỉnh 13,14×"*.
Vai này ĐO LẠI bằng cách so **từng row** `measured[*].l1_hot` với số máy VỪA in ở §1:
```
measured rows = 29 machine agents = 29
in measured not on disk: [] on disk not in measured: []
KHOP 27/29 row (byte-exact)
LECH harness-refine base=18046 now=18825 delta= +779 (+4,3%)
LECH ring1-audit base=27394 now=20924 delta= -6.470 (-23,6%)
tong lech = 2/29
```
- **Độ phủ 19/29 → 29/29** (`_note` khối: *"S188 2026-08-10 FRESH re-sync bang MAY (measure-agent-memory.ps1 -> transcribe, KHONG hand-edit) — tra no E3"*). ⇒ **Nợ E3 ĐÃ LAND THẬT**, không phải lời hứa.
- **Độ lệch 18/19 → 2/29**; đỉnh lệch **13,14× → 23,6%**.
- 🔴 **Caveat CHỐNG-GOODHART (bắt buộc đọc kèm):** con số đẹp này **một phần là tautology** — baseline vừa được ghi từ chính máy này vài giờ trước, khớp là đương nhiên. Datum có giá-trị nằm ở chỗ khác: **2 row đã trôi CHỈ trong ~3 giờ** kể từ lúc re-sync (`harness-refine` ghi thêm, `ring1-audit` bị drain 6.470). ⇒ **Chu-kỳ bán-rã của baseline này ngắn hơn một phiên.** Đây đúng bài S153 *"bản chụp instrument có hạn dùng ngắn hơn một phiên"*, nay đo được trên chính khối baseline.
**VERDICT trục baseline `measured`: HEALTHY** (đảo từ REGRESSION-4-kỳ-liên-tiếp) — kèm caveat bán-rã ở trên.
---
## §2-bis — 2 nợ đích-danh trong brief: ĐO LẠI, CẢ HAI ĐỀU LỆCH SO VỚI BRIEF
Brief (HANDOFF NEXT-em @S188) mang sang 2 con số. Vai này KHÔNG chép mù — đo lại bằng `measure-agent-memory.ps1` + `wc -c` + `stat`:
| nợ theo brief | số brief | **số máy VỪA in** | phán |
|---|---|---|---|
| `harvest-curator/MEMORY.md` "30.231 B, vượt đường-cắt ~25.000 tới 2.298" | 30.231 B | **21.308 B** | 🔴 **BRIEF STALE — nợ ĐÃ ĐÓNG.** Nay **DƯỚI** đường-cắt 25.000 tới **3.692 B**. Cả 2 số trong chính câu brief cũng không tự khớp nhau (30.231 25.000 = 5.231 ≠ 2.298). Bằng-chứng đóng: `archive/2026-07.md` mtime **2026-08-10 21:01:07**, `MEMORY.md` mtime **21:02:03** ⇒ có drain L1→L2 tại closeout S188. |
| `reviewer/MEMORY.md` "còn 485 ký-tự là chạm" | 485 | **1.127 B** tới cap 25.600 · **527 B** tới đường-cắt 25.000 · **4.179 KÝ-TỰ** tới 25.600 | ⚠️ **Lệch + LẪN ĐƠN-VỊ.** Không có phép đo nào hôm nay ra 485. Con số 485 chỉ tái dựng được nếu hiểu là *BYTE tới đường-cắt 25.000* tại thời điểm reviewer = 24.515 B; nay 24.473 B (42 B) ⇒ nhãn "ký-tự" là **sai đơn-vị**, đúng phải là "byte". |
**VERDICT trục nợ-mang-sang: MIXED** — 1 nợ đã đóng thật (tin tốt), 1 nhãn sai đơn-vị (cùng lớp lỗi S186).
---
## §3 — TRỤC nhịp-nợ (`nhip-no-probe.ps1`) — 🔴 2/6 VẾ CỦA LEAD ĐÃ TRÔI TRONG PHIÊN
**Dòng máy VỪA in (nguyên-văn, exit 0):**
```
NHIP-NO: kiem light 3/6 deep 1/1 OVERDUE:deep | tran-bo-nho 2 over-cap l2idx 0 over | run-chua-gom 1 | pull-cach 1 ngay | so-yc treo 6 / nhac2+ 3 (muc 22, gop 5 dong nhac-lai)
```
**Đối chứng với dòng lead đưa trong brief:**
| vế | lead đo | **máy VỪA in** | phán |
|---|---|---|---|
| kiem light | 3/6 | 3/6 | KHỚP |
| kiem deep | 1/1 OVERDUE:deep | 1/1 OVERDUE:deep | KHỚP |
| tran-bo-nho | 2 over-cap | 2 over-cap | KHỚP (= `lead-gap-auditor` + `ring2-audit`, §1) |
| l2idx | 0 over | 0 over | KHỚP — 🔴 nhưng xem §3-bis, đây là số ĐÚNG-MÀ-VÔ-CẢM |
| **run-chua-gom** | **0** | **1** | 🔴 **LỆCH** |
| **pull-cach** | **0 ngay** | **1 ngay** | 🔴 **LỆCH** |
| so-yc | treo 6 / nhac2+ 3 | treo 6 / nhac2+ 3 `(muc 22, gop 5 dong nhac-lai)` | KHỚP số; lead **cắt mất đuôi** `(muc 22, gop 5 dong nhac-lai)` |
**Cả 2 lệch đều GIẢI THÍCH ĐƯỢC bằng cơ-chế, không phải ai đo sai:**
- `run-chua-gom 0→1`: probe đếm run-folder chưa có `*-synthesis.md` non-empty (`nhip-no-probe.ps1:156-182`). Folder `2026-08-10-S189-bookstart-open/` tạo lúc **23:51**, chưa có synthesis ⇒ **chính phiên này tự sinh flag cho mình**. Tái-hiện đúng ca S173.
- `pull-cach 0→1 ngay`: probe tính `[datetime]::Now.Date - newest.Date` (`:208`) ⇒ **đồng hồ qua nửa đêm** (lead đo ngày 08-10, vai đo 00:0x ngày **08-11**) ⇒ +1 ngày mà **không có gì thay đổi trên đĩa**.
-**Bài S159 lặp lần thứ ba:** *số đo trước/sau một tick là hai số khác nhau.* Nay có thêm biến-thể: **tick LỊCH** (nửa đêm) chứ không chỉ tick counter.
### §3-bis — `l2idx 0 over` là số ĐÚNG nhưng CHE một trạng-thái vượt cap
`measure-agent-memory` in `cicd-monitor l2_index = 23588` với `tiers.l2_index.cap_bytes = 20480`**115,2% cap**. Probe vẫn in `0 over``split_rule_S167` cố ý chỉ đo **file MAIN**. Đo tách 2 file:
```
_INDEX.md 9.682 B <- MAIN (file có cap) = 47,3% cap 20480 -> ĐÚNG là 0 over
_INDEX-2026-H1.md 13.906 B <- rotated, cold tier, KHÔNG cap (by design)
TỔNG trục l2_index 23.588 B = 115,2% cap
```
🔴 Đây **KHÔNG phải bug** — budget khai tường minh *"Probe deliberately measures MAIN file only - by design, do not 'fix' it"*. Nhưng nó là **hình-dạng-output đọc thành sạch** (lớp lỗi S172): một dòng `0 over` không nói được rằng trục này đang mang 23.588 B. Vai chỉ NÊU, không đề-xuất.
**VERDICT trục nhịp-nợ: MIXED**`OVERDUE:deep` đang bật (deep_every=1 ⇒ mọi bookend phải chạy deep, đây là thiết-kế owner @S185 chứ không phải nợ tích tụ) · 2 vế lệch do tick · 1 vế đúng-mà-vô-cảm.
---
## §4 — TRỤC archive-gate (strike) + A7 integrity — `memory-archive-gate.ps1` DRY
Xác minh chế-độ trước khi chạy: script có `param(... [switch]$Apply = $false)`, strike chỉ persist dưới `-Apply` (`:222-224`). Vai chạy **KHÔNG cờ** ⇒ máy tự in `mode: DRY-RUN (no writes at all)`**0 ghi**.
**Tham số máy in:** cap `25600` · low-water `21760` (ratio 0.85) · keep-floor `5` · strike-need `2`.
**PASS 1 — over-cap planner, 29 dòng, 2 dòng `YES`:**
```
lead-gap-auditor 27639 YES entries 8 strike 1 after-est ~25638 WARN keep-floor hit (5); cannot auto-drain - SPLIT/condense entries by hand
ring2-audit 26652 YES entries 7 strike 2 after-est ~24928 PROPOSE archive (strike 2>=2): move 2 lowest-value (position tiebreak) -> curate L1->L2 by hand
[D3 value-gate] 1 value-protected logical entr(y/ies) HARD-SKIPPED from the drain set ... 9-token grep = lower-bound
```
- 27/29 dòng `no` / strike 0 / resolve `ok`.
- 🔴 **`lead-gap-auditor` là ca ĐÁNG CHÚ Ý NHẤT của trục này:** máy tự khai `after-est ~25638` — tức **kể cả drain xong vẫn còn 25.638 > cap 25.600**, và lý do là **keep-floor 5 chặn**: `cannot auto-drain`. Đây là trạng-thái **máy tự tuyên bố không tự giải được**, khác hẳn `ring2-audit` (drain xuống ~24.928 là dưới cap).
- `ring2-audit` **strike 2 ≥ threshold 2** ⇒ đã đủ điều-kiện PROPOSE. (Khớp datum H17 spec-audit lead đưa: `GAP:MED ring2-audit 26.652B > cap 25.600`**số byte KHỚP TUYỆT ĐỐI** với máy của vai.)
**PASS 2 — A7 archive-integrity:**
```
A7 GATE PASS - total pointers 429, resolved 429, failed 0
```
11 sub có archive; 10 `PASS`, 1 `N/A` (`ring1-audit`: `_INDEX.md + 2 archive file(s) -> N/A pointers 0`).
Phân rã nguyên-văn: cicd-monitor 112 · reviewer 57 · investigator-codebase 56 · harvest-curator 48 · implementer-frontend 44 · implementer-backend 43 · test-specialist 33 · tooling-auditor 20 · frontend-designer 9 · lead-gap-auditor 7 · ring1-audit 0.
Vai tự cộng lại: 112+57+56+48+44+43+33+20+9+7+0 = **429 ✓** (khớp tổng máy in — đúng lớp lỗi meta-count từng ngã S151/S153/S159/S173).
**VERDICT trục archive-gate: MIXED** — A7 **HEALTHY tuyệt đối** (429/429, 0 hỏng, giữ nguyên mức S173/S185); strike-lane **REGRESSION**: 2 vai over-cap, trong đó 1 vai máy tự khai **không thể tự drain về dưới cap**.
### 🔴 §4-bis — HAI INSTRUMENT, CÙNG MỘT FILE, HAI SỐ KHÁC NHAU, CÙNG MỘT LƯỢT
| nguồn | `tooling-auditor/MEMORY.md` |
|---|---|
| `measure-agent-memory.ps1` (chạy ~00:03) | **16.912 B** |
| `memory-archive-gate.ps1` (chạy ~00:04) | **16.614 B** |
| `stat` ngay sau đó, 3 lần liên tiếp | **16.614 B**, mtime **2026-08-11 00:04:07** |
Chênh **298 B**. `mtime` nằm **GIỮA** hai lần chạy ⇒ vai `tooling-auditor` đang **ghi diary đồng thời** trong lúc vai này đo (run-folder có `sub-tooling-auditor-open-S189.md` mtime 00:02).
**Không ai sai số.** Nhưng nó chứng: **cửa-sổ-đo trong một bookend KHÔNG đóng băng**; một bảng số của vai này là ảnh chụp tại thời-điểm, không phải trạng-thái phiên. Bổ-sung cụ-thể cho S153 *"bản chụp instrument có hạn dùng ngắn hơn một phiên"* → nay đo được **hạn dùng ngắn hơn một PHÚT**.
🔴 Hệ quả cho người đọc số của vai: số §1 (`tooling-auditor 16.912`) là số **CŨ HƠN** số §4 (`16.614`). Vai KHÔNG sửa lại §1 — giữ nguyên-văn cả hai và khai chênh, vì sửa là đánh mất chính datum này.
---
## §5 — TRỤC crystallized headroom (`crystallized-backfill.ps1`) — 🔴 CHUỖI LẦN ĐẦU **KHÔNG GIẢM**
**stdout máy VỪA in (exit 0, nguyên-văn phần số):**
```
source bytes state
docs/STATUS.md 240251 ok
docs/HANDOFF.md 220577 ok
.claude/governance/ACTIVE-MARKS.md 36153 ok
docs/changelog/migration-todos.md 90161 ok
docs/gotchas.md 122892 ok
.claude/agents/README.md 62300 ok
TOTAL 772334
Tran tong (live cap) : 380000 tok
hotload measured : 772334 bytes
tok RANGE [low..high] : [193084 .. 257445] tok (bytes/4 .. bytes/3.0)
measured_headroom : 122555 tok (cap - tok_high, worst-case)
target (owner) : 210000 tok
expected_backfill : 122555 tok (min(target,headroom)=headroom => headroom binds (target exceeds room))
precondition MET (target>0 AND headroom>0)
```
Vai tự cộng lại 6 nguồn: 240.251+220.577+36.153+90.161+122.892+62.300 = **772.334 ✓** (khớp TOTAL máy in).
### §5.1 — CHUỖI MỐC: **liệt MỌI mốc TRƯỚC khi trừ bất kỳ đạo-hàm nào** (luật do erratum S173 của chính vai này đẻ ra)
Dựng bằng `grep -rn "measured_headroom" .claude/ docs/`**KHÔNG lấy từ trí-nhớ**, không tin danh-sách kỳ trước:
| # | mốc | headroom (tok) | nguồn trên đĩa |
|---|---|---|---|
| 1 | S144 07-22 | 199.759 | `2026-07-22-S144-trio-first-run/harness-eval-return.md:63` |
| 2 | S152 07-25 | 184.502 | `2026-07-25-S152-h24-open-bookend/machine-baseline.md:17` |
| 3 | S153 07-26 | 181.228 | `2026-07-26-S153-bookend-open/harness-eval-return.md:25` |
| 4 | S154 07-26 | 176.696 | `2026-07-26-S154-bookend-open/harness-eval-return.md:163` |
| 5 | S159 07-29 | 172.247 | `2026-07-29-S159-bookend-open/harness-eval-return.md:35` |
| 6 | S162 07-30 | 165.767 | `2026-07-30-S162-bookend-close/harness-eval-return.md` |
| 7 | S163 07-30 | 160.924 | `2026-07-30-S163-bookend-open/run.md:31` |
| 8 | S169 08-01 | 152.968 | `2026-08-01-S169-bookend-open/harness-eval-return.md:146` |
| 8b | S169 08-01 *(phép đo thứ 2 cùng phiên)* | **153.117** | `…S169…/sub-lead-gap-open-S169.md:144` (hotload 680.648 vs 681.096 ⇒ **2 số máy lệch 149 tok trong CÙNG phiên**) |
| 9 | S173 08-05 | 148.183 | `2026-08-05-S173-bookend-open/harness-eval-return.md:105` |
| 10 | S185 08-09 | 134.573 | `2026-08-09-S185-bookend-close/script-arm-output.md:399` |
| 11 | S188 08-10 @eval | 125.828 | `2026-08-10-S188-bookend-close/harness-eval-return.md:32` |
| 12 | S188 08-10 @audit-tick (~1,5h sau) | 122.555 | `2026-08-10-S188-bookend-close/harness-audit-return.md:52` |
| **13** | **S189 08-11 (MÁY VỪA IN)** | **122.555** | lượt này |
**Đạo-hàm — chỉ tính SAU khi đã liệt đủ 13 mốc:**
- **Bước kỳ này = 122.555 122.555 = 0.** 🔴 **LẦN ĐẦU trong toàn chuỗi 13 mốc, bước không âm.** Trước đó: 0 lần đảo chiều, 0 lần đứng yên.
- So mốc S188 **@eval** (125.828): **3.273**. ⇒ **Chọn mốc nào ra hai câu chuyện khác nhau** — vai in CẢ HAI, không chọn hộ.
- Toàn chuỗi S144→S189: **77.204 tok** qua 20 ngày.
- 🔴 **KHÔNG phán nguyên-nhân** (đó là việc con ĐỀ-XUẤT). Chỉ nêu dữ-kiện cơ-học: `hotload measured` **772.334 B = y hệt** giá trị suy ra từ mốc 12 ⇒ 6 file nguồn **không đổi byte nào** từ 21:xx hôm qua tới giờ. Đứng-yên này là **trạng-thái**, không phải cải-thiện.
### §5.2 — Phân rã nguồn phình (so mốc S185 có số per-file trên đĩa)
| nguồn | S185 (`…S185…/harness-eval-return.md:22`) | **S189 máy vừa in** | delta |
|---|---|---|---|
| docs/HANDOFF.md | 196.350 | **220.577** | **+24.227** |
| docs/STATUS.md | 234.644 | **240.251** | +5.607 |
| docs/gotchas.md | 120.260 | **122.892** | +2.632 |
| docs/changelog/migration-todos.md | 88.151 | **90.161** | +2.010 |
| .claude/agents/README.md | 60.723 | **62.300** | +1.577 |
| .claude/governance/ACTIVE-MARKS.md | 36.153 | **36.153** | **0** |
| **TỔNG** | 736.281 | **772.334** | **+36.053** |
Vai tự cộng: 24.227+5.607+2.632+2.010+1.577+0 = **36.053 ✓**. **HANDOFF một mình gánh 24.227/36.053 = 67,2%** phần phình (S188 đo 66% — cùng hướng, độc-lập).
### §5.3 — Khoảng cách target
`target (owner) = 210.000` vs `measured_headroom = 122.555`**thiếu 87.445 tok**. Chuỗi thiếu-hụt: S173 61.817 · S185 75.427 · S188 84.172 · **S189 87.445**.
`expected_backfill` = **122.555** với chú-thích máy `headroom binds (target exceeds room)` ⇒ precondition **MET vì headroom>0**, KHÔNG phải vì đủ target. Đây đúng nội-dung carry `underfill-mau-so`.
**VERDICT trục crystallized: REGRESSION** — headroom 122.555 < target 210.000 (thiếu 87.445, sâu nhất toàn chuỗi); bước kỳ này = 0 nhưng đó do 6 file nguồn chưa bị chạm, **không đủ để lật verdict**. 🔴 In `HEALTHY` cạnh một chuỗi 13 mốc chưa từng đảo chiều sẽ Goodhart-flip.
---
## §6 — TRỤC state-file của instrument (ĐỌC, không chạy) — 2 sổ đếm đang ĐÓNG BĂNG
### §6.1 `.claude/agent-memory/.archive-strikes.json` — mtime **2026-08-07 11:10**, 738 B
- **Stale 4 ngày** (nay 08-11) trong khi `memory-archive-gate` đã chạy nhiều lượt chế-độ DRY (DRY **không persist**, `:229`).
- **Phủ 26 row / 29 vai.** 🔴 **Thiếu đúng 3 vai:** `ring5-audit` · `score-counter` · `score-count-auditor`.
- **Nội dung file:** `ring2-audit: 1` · `investigator-codebase: 1` · 24 row còn lại `0`.
- 🔴 **VÊNH với máy vừa in (§4):** gate in `ring2-audit strike **2**` (file ghi 1) `investigator-codebase strike **0**` (file ghi **1**). Giải thích cơ-học: DRY hiển thị **giá-trị dự-kiến** (over-cap +1; dưới cap reset 0) nhưng **không ghi xuống**. Con số `1` của `investigator-codebase` **strike THỪA còn sót từ kỳ nó từng over-cap**; nay 21.996 B (dưới cap) sổ vẫn giữ 1.
- **Sổ strike và máy strike đang kể hai chuyện khác nhau, và không lượt nào hoà giải được vì chưa ai chạy `-Apply`.**
### §6.2 `.claude/agent-memory/.mfe-state.json` — mtime **2026-08-10 21:10**, 5.690 B
- `strikes_total: **25**` · `rca_entries: 16` · `warn_baseline: **25**` · `at: 2026-08-10`.
- **`history` 30 bản ghi**; vai đọc từng dòng: **`strikes_total = 25` CẢ 30/30 bản ghi**, trải từ `2026-07-25 23:55` `2026-08-10 21:10` = **16 ngày**.
- `rca_entries` nhúc nhích đúng **1 lần**: 14 16 tại `2026-07-30 16:37`, rồi đứng im 16 cho tới nay.
- **Anchor 25 bất động qua 30 lần chạy / 16 ngày**, `warn_baseline` cũng = 25 **latch cảnh-báo Goodhart không bao giờ có thể kích** khi số không đổi. Đây trục **đúng-mà-vô-cảm** thứ ba trong lượt này (cùng lớp `l2idx 0 over` §3-bis).
**VERDICT trục state-file: REGRESSION** 2/2 sổ đếm đóng băng; 1 sổ thiếu 3 vai mâu thuẫn với chính máy sinh ra .
---
## §7 — TRỤC MFE (`mfe-eval.ps1`) — FIT / anchor / per-role-pct
🔴 **KHAI GHI TRƯỚC KHI ĐƯA SỐ:** `mfe-eval.ps1` instrument **DUY NHẤT trong 5 cái có GHI** ghi đúng 1 file `.claude/agent-memory/.mfe-state.json` (budget `mfe.honest_caveats.read_only_scope` tự khai: *"MFE WRITES exactly one file … 'READ-ONLY' is scoped to token_governor … it is NOT the claim 'writes nothing'"*). Vai này **CÓ chạy** (khác S185 nơi vai cố ý bỏ) 2 lý-do: (a) brief yêu-cầu đích danh; (b) hai kỳ S168/S172 khai `N/A` đã bị `harness-audit` chứng **sai loại** (script chạy được suốt, chỉ không ai gọi) chôn mất datum per-role. **Lượt này để lại đúng 1 vết ghi trên đĩa; lead soát `git status`/`git log` sẽ thấy `.mfe-state.json`.**
**stdout máy VỪA in (exit 0, `=== MFE … 2026-08-11 ===`):**
**(a) Mẫu-số LEAD:**
```
marks(Active+High)=11 AS-classes=15 net-extra-guards=5 net-extra-recurring-gotchas=7
=> DENOMINATOR = 38 items (raw before dedup: marks 11 + AS 15 + guards 16 + recurring 8)
```
Vai tự cộng: 11+15+5+7 = **38 ✓**.
**(b) Coverage-FIT:**
```
span bytes=30945 => ~7736 - 10315 tok / cap 380000 tok = 2.71% worst-case
FIT = PASS (worst-case fits; headroom huge - must-remember set is tiny vs cap)
```
**(c) Goodhart anchor:**
```
error-ledger: strikes_total=25 RCA_entries=16 AS-classes=15
(rule: if strikes rise across runs while coverage stays high -> the score lies. warn-baseline=25 last_run_strikes=25)
```
🔴 `warn-baseline = last_run_strikes = 25` **latch cảnh-báo về mặt số-học không thể kích** (điều-kiện strikes *tăng*). Khớp §6.2: 30/30 bản ghi history đều 25 qua 16 ngày. **Anchor này đang đo một đại-lượng đứng yên** trục "đúng-mà-vô-cảm" thứ trong lượt.
**(d) age-band:** `marks with parseable date=11; >30d old but still Active=6 -> KEPT (status-driven, age-blind)` **đúng thiết-kế** (mark RC-10-29-11: age = FLAG, không phải cut).
**(e) per-role coverage 29 dòng, khớp roster 29:**
```
cicd-monitor 10/10=100% ctx-audit 10/10=100% ctx-curator 6/6=100% ctx-verifier 7/7=100%
database-agent 7/7=100% frontend-designer 2/2=100% harness-audit 5/5=100% harness-eval 5/5=100%
harness-refine 5/5=100% harvest-curator 7/7=100% investigator-api 7/7=100% investigator-codebase 8/8=100%
lead-gap-auditor 6/6=100% lead-stale-auditor 6/6=100% office-document 6/6=100% reviewer 8/8=100%
ring1-audit 5/5=100% ring2-audit 5/5=100% ring4-audit 5/5=100% test-specialist 6/6=100%
tooling-auditor 8/8=100%
implementer-backend 17/18 = 94%
implementer-frontend 12/13 = 92%
N/A x6: back-end-reviewer-style · database-reviewer-style · front-end-reviewer-style · ring5-audit · score-count-auditor · score-counter
("no numbered anti-pattern / NEVER block in role-file to extract")
```
Vai tự cộng lại: **23 vai có số** (21 vai = 100%, 2 vai < 100%) + **6 vai N/A** = **29 ✓**. Tổng gộp tử/mẫu = **163/165 = 98,8%**.
🔴 **6 vai N/A KHÔNG phải "sạch" — là NGOÀI TẦM ĐO.** Mẫu-số của chúng = 0 role-file không block anti-pattern đánh số để trích; nghĩa 6/29 vai (20,7% roster) **không có bất kỳ phép đo retention nào**, kể cả xấu. Cùng lớp với `l2idx 0 over` 3-bis) anchor 25 7c): **vắng-mặt trông giống ổn**.
🔸 `[SUB-WORKFLOW]` máy tự khai `N/A by design` (fan-out agent ephemeral, không diary) cái N/A này **hợp-lệ**, khác 6 cái trên.
**VERDICT trục MFE: MIXED** FIT PASS + 21/23 vai 100% (thật sự tốt) NHƯNG anchor đứng yên không kích được + 6/29 vai ngoài tầm đo.
---
## §8 — TRỤC ĐỘ-GIỮ (retention / nhãn phiên trên 29 diary)
🔴 **CONTROL-DƯƠNG CHẠY TRƯỚC khi dám báo bất kỳ số thấp nào** (luật cứng sau ca S172 suýt phát REGRESSION giả glob sai):
| phép | kết quả | vai trò |
|---|---|---|
| tổng diary | **29** | mẫu-số |
| `grep -l "S1"` | **29/29** | **CONTROL-DƯƠNG ĐẠT** glob đúng, corpus không rỗng |
| `grep -l "S185"` | 15/29 | control-dương thứ 2 |
| `grep -l "S188"` | 13/29 | control-dương thứ 3 |
| **`grep -l "S189"`** | **1/29** | số cần đo |
- Diary DUY NHẤT mang nhãn `S189` = **`tooling-auditor/MEMORY.md`**.
- **Phép đo thứ 2 độc-lập (mtime, không dựa vào nhãn):** 13/29 diary mtime > `2026-08-10 20:00`. Nhưng **12/13 rơi vào cửa-sổ 20:3021:05 = closeout S188**, chỉ **1/13 thuộc phiên này** (`tooling-auditor` 00:04:07).
- **Vai spawn trong phiên S189 = 2** (run-folder có `sub-tooling-auditor-open-S189.md` + `sub-score-counter-open-S189.md`). Trong đó:
- `tooling-auditor` → diary mtime **2026-08-11 00:04****CÓ tự ghi**
- `score-counter` → diary mtime **2026-08-08 12:20**, 2.366 B ⇒ **KHÔNG ghi** (và 2.366 B đúng bằng con số `measured` seed @S181 kèm chú *"SO 0 = CHUA DO"*) ⇒ vai này đã chạy 2 lần mà diary chưa từng nhúc nhích.
-**1/2 vai spawn tự ghi.** Khác các kỳ trước (S173: 0/4; S186: gap NHÃN chứ không gap GHI) — kỳ này gap là **THẬT với 1 vai cụ-thể**, kiểm được bằng cả 2 phép.
**VERDICT trục độ-giữ: REGRESSION** — nhãn 1/29 và 1/2 vai spawn không để lại vết nào trên diary của nó.
---
## §9 — BẢNG VERDICT TỔNG: **38 trục** (vai TỰ CỘNG LẠI trước khi phát)
| # | trục | số máy VỪA in | baseline | verdict |
|---|---|---|---|---|
| 1 | l1_hot vs `soft_cap` 30720 | 0/29 vượt (`l1_over_30kb=False` 29/29) | tiers.l1_hot | **HEALTHY** |
| 2 | l1_hot vs `autoinject_cap` 25600 | **2/29 vượt** (lead-gap 27.639 · ring2 26.652) | cap 25600 | **REGRESSION** |
| 3 | l1_hot vùng áp-sát 80100% cap | **7 vai** (đỉnh lead-stale còn 625 B) | — | MIXED |
| 4 | đơn-vị BYTE vs KÝ-TỰ | 2 vượt (byte) / **0 vượt (ký-tự)** | bài S186 | MIXED |
| 5 | `measured` độ phủ | **29/29** | S186/S188: 19/29 | **HEALTHY** |
| 6 | `measured` độ khớp | **27/29 byte-exact** | S186: 18/19 lệch, đỉnh 13,14× | **HEALTHY** |
| 7 | `measured` bán-rã | **2 row trôi trong ~3h** (harness-refine +779 · ring1 6.470) | — | MIXED |
| 8 | nợ `harvest-curator` | **21.308 B** (dưới đường-cắt 25.000 tới 3.692) | brief: 30.231 B | **HEALTHY** |
| 9 | nợ `reviewer` "485 ký-tự" | 1.127 B / 4.179 ký-tự tới cap | brief: 485 | MIXED (sai đơn-vị) |
| 10 | nhịp `kiem light` | **3/6** | lead: 3/6 | **HEALTHY** |
| 11 | nhịp `kiem deep` | **1/1 OVERDUE:deep** | `deep_every=1` (owner S185) | MIXED |
| 12 | `run-chua-gom` | **1** | lead đo: **0** | **REGRESSION** |
| 13 | `pull-cach` | **1 ngay** | lead đo: **0 ngay** | MIXED (tick lịch) |
| 14 | `so-yc` | treo **6** / nhac2+ **3** `(muc 22, gop 5 dong)` | lead: 6/3, cắt đuôi | MIXED |
| 15 | `l2_index` MAIN (file có cap) | **9.682 / 20.480 = 47,3%** | cap 20480 | **HEALTHY** |
| 16 | `l2_index` TỔNG cicd-monitor | **23.588 = 115,2% cap** | cap 20480 | **REGRESSION** |
| 17 | archive-gate strike lane | **2/29 `YES`** | strike_threshold 2 | **REGRESSION** |
| 18 | `lead-gap-auditor` khả-năng tự giải | **after-est ~25.638 > cap**, `cannot auto-drain` | keep-floor 5 | **REGRESSION** |
| 19 | `ring2-audit` strike | **2 ≥ 2 ⇒ PROPOSE archive** | H17 GAP:MED 26.652 (KHỚP) | **REGRESSION** |
| 20 | A7 archive-integrity | **429/429 resolved, failed 0** | S185/S173: 429/429 | **HEALTHY** |
| 21 | A7 `ring1-audit` | **N/A — pointers 0** (có `_INDEX` + 2 file) | — | MIXED |
| 22 | **độ ổn-định của THƯỚC** | `tooling-auditor` **16.912 → 16.614** cùng lượt | — | **REGRESSION** |
| 23 | crystallized headroom vs target | **122.555** vs **210.000****thiếu 87.445** | S188 84.172 | **REGRESSION** |
| 24 | chuỗi headroom 13 mốc | bước kỳ này **= 0** (lần đầu không giảm) | 12 bước trước đều âm | MIXED |
| 25 | hotload floor | **772.334 B** (+36.053 vs S185); HANDOFF gánh **67,2%** | S185 736.281 | **REGRESSION** |
| 26 | `expected_backfill` precondition | **MET**, 122.555, `headroom binds` | S185/S188 MET | MIXED |
| 27 | `.archive-strikes.json` | stale **4 ngày** · phủ **26/29** · **vênh** với máy (ring2 1↔2, inv-cb 1↔0) | mtime 08-07 11:10 | **REGRESSION** |
| 28 | `.mfe-state.json` anchor | **25 bất động 30/30 bản ghi / 16 ngày** | warn_baseline 25 | **REGRESSION** |
| 29 | MFE Coverage-FIT lead | **PASS** — 30.945 B = 2,71% cap worst-case | cap 380000 | **HEALTHY** |
| 30 | MFE mẫu-số lead | **38 items** (11+15+5+7 ✓) | S168/S172 khai N/A (sai loại) | **HEALTHY** |
| 31 | MFE Goodhart anchor | strikes **25** = warn-baseline **25** ⇒ không kích được | — | MIXED |
| 32 | MFE age-band | 11 mark có ngày, **6 >30d vẫn Active → KEPT** | age=false-proxy | **HEALTHY** |
| 33 | MFE per-role coverage | **21/23 vai = 100%**; gộp **163/165 = 98,8%** | S173: 23 role | **HEALTHY** |
| 34 | MFE 2 vai < 100% | impl-backend **17/18 = 94%** · impl-frontend **12/13 = 92%** | S172: impl-fe 11/13=85% | MIXED |
| 35 | MFE vai ngoài tầm đo | **6/29 `N/A`** (không block anti-pattern để trích) | | **REGRESSION** |
| 36 | độ-giữ nhãn `S189` | **1/29** diary (control-dương `S1` = 29/29 ✅) | S188: 13/29 · S185: 15/29 | **REGRESSION** |
| 37 | độ-giữ vai spawn tự ghi | **1/2** (`tooling-auditor` · `score-counter` mtime 08-08) | S173: 0/4 | MIXED |
| 38 | độ-giữ diary động 24h | **13/29** (12/13 thuộc closeout S188, 1/13 thuộc S189) | | MIXED |
### TỰ CỘNG LẠI (bắt buộc — lớp lỗi meta-count đã ngã ở S151/S153/S159/S173)
**REGRESSION = 13** (#2,12,16,17,18,19,22,23,25,27,28,35,36) · **HEALTHY = 11** (#1,5,6,8,10,15,20,29,30,32,33) · **MIXED = 14** (#3,4,7,9,11,13,14,21,24,26,31,34,37,38)
**13 + 11 + 14 = 38 ✓** khớp tổng số dòng bảng.
# 🔴 VERDICT TỔNG: **MIXED** — 38 trục / **13 REGRESSION** · 11 HEALTHY · 14 MIXED
---
## §10 — BỐN CHỖ LEAD SẼ DẪN LẠI CHO ANH: đứng vững tới đâu
**(1) §2 "ĐẢO CHIỀU LỚN NHẤT KỲ NÀY" đảo theo hướng NÀO, số nào chứng, AI đổi LÚC NÀO.**
- **Hướng:** từ **REGRESSION 4 kỳ liên tiếp → HEALTHY**. Cụ-thể: độ phủ **19/29 → 29/29**; độ lệch **18/19 → 2/29**; đỉnh lệch **13,14× → 23,6%**.
- 🔴 **Ai đổi, lúc nào (trả lời thẳng lưu-ý Mirror C1 của lead):** khối `measured` **KHÔNG đổi trong phiên này và KHÔNG do vai này đổi**. Bằng-chứng đĩa: `memory-budget.json` mtime **2026-08-10 21:04:06**, commit **`ef1d4fbb` 2026-08-10 21:30** (closeout S188), `git status --porcelain` trên file này = **rỗng** (clean, không dirty). `_note` của khối tự khai: *"S188 2026-08-10 FRESH re-sync bang MAY (measure-agent-memory.ps1 -> transcribe, KHONG hand-edit) — tra no E3"*.
- **Cửa-sổ đo đóng-băng Mirror C1 CÒN NGUYÊN.** Vai này chạy `measure-agent-memory.ps1` dạng **thuần đọc** đã kiểm trước khi chạy (`:36-41` chỉ `ConvertTo-Json` ra stdout; **0** `Set-Content`/`Out-File`/ghi budget). §2 so **số máy hôm nay** với **baseline lead đã ghi tối qua**, không cần không re-sync nào trong lượt.
- **Caveat phải đi kèm khi dẫn:** một phần "khớp 27/29" **tautology** baseline vừa chép từ chính máy này ~3 giờ trước. Datum THẬT nằm **2 row đã trôi trong 3 giờ đó** **baseline này có chu-kỳ bán-rã ngắn hơn một phiên.**
**(2) §3 "2/6 vế của lead đã TRÔI" đích danh 2 vế, số lúc đầu phiên vs bây giờ.**
| vế | lead in đầu phiên | máy in lúc 00:0x | cơ-chế |
|---|---|---|---|
| `run-chua-gom` | **0** | **1** | folder `2026-08-10-S189-bookstart-open/` tạo 23:51, chưa `*-synthesis.md` **phiên tự sinh flag cho chính nó** (`nhip-no-probe.ps1:156-182`) |
| `pull-cach` | **0 ngay** | **1 ngay** | `[datetime]::Now.Date - newest.Date` (`:208`) **qua nửa đêm** 08-1008-11; **0 byte nào trên đĩa thay đổi** |
4 vế còn lại KHỚP tuyệt đối. **Không ai đo sai** cả 2 lệch đều **hàm của THỜI ĐIỂM ĐO**, không phải của trạng-thái hệ. Đây bài S159 lần thứ ba, thêm biến-thể mới: **tick LỊCH**, không chỉ tick counter.
**(3) §4-bis "hai instrument, cùng một file, hai số khác nhau, cùng một lượt" đây lỗi THƯỚC.**
- **File:** `.claude/agent-memory/tooling-auditor/MEMORY.md`
- **Số 1 = 16.912 B** in bởi `scripts/measure-agent-memory.ps1` (~00:03)
- **Số 2 = 16.614 B** in bởi `scripts/memory-archive-gate.ps1` (~00:04); `stat` 3 lần liên tiếp xác nhận 16.614, **mtime `2026-08-11 00:04:07`**
- **Chênh 298 B**, mtime nằm **GIỮA** hai lần chạy vai `tooling-auditor` ghi diary **đồng thời** trong lúc đo.
- **Cả hai instrument đều đúng; cái sai là giả-định "cửa-sổ đo trong một bookend là đóng băng".** Vai **CỐ Ý không sửa §1** cho khớp §4 sửa xoá mất chính datum. Hệ quả thực dụng: **mọi bảng số của vai này là ảnh-chụp-tại-thời-điểm**, hạn dùng đo được lần này **dưới một phút**.
**(4) §5 "chuỗi lần đầu KHÔNG giảm" tin tốt thật hay chỉ đổi cách đo?**
- 🔴 **KHÔNG phải tin tốt, và cũng KHÔNG phải đổi cách đo.** Phép đo **y hệt** (cùng script, cùng 6 `hotload_sources`, cùng công-thức `cap bytes/3.0`) khác hẳn ca `l2_index` S173 nơi định-nghĩa bị đổi giữa 2 mốc.
- ** do cơ-học, kiểm được:** `hotload measured = 772.334 B`, **bằng đúng** giá-trị suy ra từ mốc S188 @audit-tick **6 file nguồn không đổi một byte nào** từ 21:xx hôm qua tới giờ. Phiên S189 mới mở, **chưa ai chạm STATUS/HANDOFF**.
- **Bước 0 = "chưa ai viết gì", không phải "đã có ai dọn".** nếu neo vào mốc S188 **@eval** (125.828) thay @audit-tick thì bước kỳ này **3.273**, tức vẫn giảm. **Chọn mốc nào ra hai câu chuyện khác nhau — vai in cả hai, không chọn hộ.**
- Trục vẫn **REGRESSION**: thiếu **87.445** so target (sâu nhất trong cả 13 mốc). In `HEALTHY` cạnh một chuỗi 13 mốc chưa từng đảo chiều sẽ đúng Goodhart-flip luật vai cấm.
---
## §11 — ĐỀ-XUẤT-SIGNAL (đầu vào cho `harness-refine`, nấc 2)
🔴 **CHỈ NÊU TÍN-HIỆU — KHÔNG đề-xuất action.** Việc quyết làm của nấc 2.
**Nhóm A — trục REGRESSION có ngưỡng máy đã kêu (13 trục, xếp theo độ gắt):**
| tín-hiệu | số neo | sao gắt |
|---|---|---|
| A1 · `lead-gap-auditor` **27.639 B**, máy tự khai `after-est ~25.638` **vẫn > cap**, `cannot auto-drain` | +2.039 trên cap | **duy nhất** trong 29 vai máy tuyên bố **tự nó không giải được**; keep-floor 5 chặn |
| A2 · `ring2-audit` **26.652 B**, strike **2 ≥ threshold 2**, máy in `PROPOSE archive` | +1.052 | đã **đủ điều-kiện cơ-chế**; trùng khớp tuyệt đối datum H17 `GAP:MED` lead đưa |
| A3 · crystallized headroom **122.555** vs target **210.000** | thiếu **87.445** | sâu nhất chuỗi 13 mốc; chuỗi 0 lần đảo chiều |
| A4 · hotload floor **772.334 B**, `HANDOFF.md` **220.577 B** gánh **67,2%** phần phình | +24.227 vs S185 | 🔸 **thuộc lead-surface, KHÔNG thuộc agent-memory corpus** ranh-trục: định-tuyến `lead-gap-auditor`, không phải vai memory |
| A5 · `.mfe-state.json` anchor **25** bất động **30/30 bản ghi / 16 ngày**, `warn_baseline` cũng 25 | | latch Goodhart **không thể kích về mặt số-học** |
| A6 · `.archive-strikes.json` stale **4 ngày**, phủ **26/29**, **vênh** máy (`ring2` 12 · `investigator-codebase` 10) | thiếu `ring5-audit`·`score-counter`·`score-count-auditor` | DRY không persist sổ máy **không bao giờ hoà giải** nếu không ai chạy `-Apply` |
| A7 · `cicd-monitor` l2_index TỔNG **23.588 = 115,2%** cap 20.480 | MAIN chỉ 9.682 (47,3%) | probe in `0 over` **đúng theo thiết-kế** nhưng đọc thành sạch |
| A8 · MFE **6/29 vai `N/A`** ngoài tầm đo | 20,7% roster | vắng-mặt trông giống ổn |
| A9 · độ-giữ nhãn `S189` **1/29**; `score-counter` spawn diary bất động từ **08-08** | 2.366 B = đúng số seed "CHUA DO" | vai chạy 2 lần, 0 vết |
| A10 · thước không ổn-định: **16.912 vs 16.614** cùng lượt | 298 B | ảnh hưởng **mọi** bảng số, kể cả bảng này |
| A11 · `run-chua-gom` **1** | folder S189 | phiên tự sinh flag cho mình |
| A12 · `l1_hot` **2/29** vượt autoinject-cap | | **đổi sang ký-tự thì = 0** 1-bis) bài S186, đừng neo action vào con số byte không khai đơn-vị |
| A13 · MFE `implementer-backend` **17/18** · `implementer-frontend` **12/13** | 2 item MISS | 🔴 **CẢNH BÁO CHO NẤC 2:** S188 đã bắt `mfe-eval.ps1:288` vs `:299` **lệch dòng render** đọc thẳng tên vai từ dòng MISS sẽ **QUY SAI VAI**; muốn biết item nào MISS phải chạy `-Detail` rồi đối chiếu, đừng suy từ bảng này |
**Nhóm B — trục gần-cap chưa kêu (máy chưa flag, nhưng còn rất ít chỗ):**
`lead-stale-auditor` **24.975** (còn **625 B**) · `reviewer` **24.473** (còn 1.127) · `cicd-monitor` **24.322** (còn 1.278) · `investigator-codebase` 21.996 · `ctx-verifier` 21.819 · `harvest-curator` 21.308 · `ring1-audit` 20.924 **7 vai trong dải 80100%**; cộng 2 vai đã vượt = **9/29 vai không còn chỗ thở**.
**Nhóm C — tín-hiệu NGƯỢC (đừng để lẫn vào danh sách việc; đây là thứ ĐÃ TỐT, nêu để nấc 2 không "sửa" nhầm):**
`measured` 29/29 phủ + 27/29 khớp (nợ E3 land thật) · `harvest-curator` **21.308** **nợ trong brief ĐÃ ĐÓNG**, đừng lên kế-hoạch cho nữa · A7 **429/429 failed 0** · MFE FIT **PASS** + **21/23 vai 100%** · 0/29 vượt soft-cap.
**Nhóm D — thứ NGOÀI 3 chiều của vai này (nêu verbatim, lead định-tuyến, vai KHÔNG lấn):**
- `HANDOFF.md`/`STATUS.md` phình (A4) = **lead-surface** 2 vai H24.
- `run-chua-gom` (A11) = **thao-tác harvest** **NHƯỜNG `harvest-curator` (H2)**.
- Đường-cắt "~25.000" brief dùng cho `harvest-curator`/`reviewer` **không phải khoá nào trong `memory-budget.json`** (khoá thật `autoinject_cap_bytes` 25600 `low_watermark` 21760) nêu để owner/lead xác-định, vai không tự quyết.
---
### Caveat đóng file (khai thẳng, không giấu)
1. **Vết ghi của lượt này = đúng 1 file:** `.claude/agent-memory/.mfe-state.json` (do `mfe-eval.ps1`, khai §7). 4 instrument còn lại chạy 0-ghi (`measure` thuần stdout · `archive-gate` DRY tự in `no writes at all` · `crystallized` DRY · `nhip-no` zero-mutation). Stop-hook `wal:` thể **nuốt** file này khỏi `git status` lead soát bằng `git log`/diff, không chỉ working-tree.
2. **Mọi số trong file này là ảnh-chụp-tại-thời-điểm**, hạn dùng đo được lần này **dưới một phút** 4-bis). Trục #22 áp cho **chính bảng §9**.
3. **Mẫu-số đổi 23 → 28 → 29 qua các kỳ** 🔴 chỉ so số **TUYỆT ĐỐI** xuyên kỳ, cấm so %/tỉ-lệ.
4. Vai **KHÔNG phán nguyên-nhân**, **KHÔNG đề-xuất action**, **KHÔNG chấm spec** 3 việc đó thuộc nấc 2 (`harness-refine`) nấc 3 (`harness-audit`).
---
## §12 — ERRATUM TỰ BẮT (đo lại SAU khi đóng bảng §9 — cả hai đều là số của CHÍNH VAI NÀY)
Vai soát containment sau khi viết xong, bắt được **2 số của mình đã trôi ngay trong lúc viết**. Ghi thẳng, không sửa lén bảng trên.
### E-1 · Trục #36 (độ-giữ): **1/29 → 2/29** — số §8 đã LẠC HẬU
- Lúc đo 8): `grep -l "S189"` = **1/29**, chỉ `tooling-auditor`.
- Đo lại sau khi viết xong §11: **2/29** thêm **`score-count-auditor/MEMORY.md`**.
- Bằng-chứng cơ-chế: commit `9694ae9a wal: flush 20260811T0013` chạm đúng 2 file `score-count-auditor/MEMORY.md | 1 +` `sub-lead-gap-auditor-open-S189.md` (70 dòng mới) **có thêm vai chạy và ghi TRONG lúc vai này đang viết báo cáo**.
- **Verdict trục #36 GIỮ NGUYÊN `REGRESSION`** (2/29 vẫn thấp; control-dương `S1`=29/29, `S185`=15/29, `S188`=13/29), nhưng **con số phải đọc là 2/29, không phải 1/29**.
- 🔴 Đây **lần thứ hai trong cùng một lượt** hiện tượng trục #22 tái diễn lần này nạn nhân **chính con ĐO**. Kết luận cứng: *trong một bookend đang chạy, KHÔNG có con số nào của hệ memory là ổn định; mọi bảng phải mang dấu thời-điểm.*
### E-2 · Vết ghi của lượt: `.mfe-state.json` — `git status` SẠCH nhưng file **ĐÃ ĐỔI THẬT**
| phép | kết quả |
|---|---|
| trước khi vai chạy MFE | **5.690 B**, `history` **30** bản ghi, `at: 2026-08-10` |
| sau khi vai chạy MFE | **5.875 B**, `history` **31** bản ghi, `at: 2026-08-11`, mtime `00:09:34` |
| `git status --porcelain` trên file | **RỖNG** (trông như chưa ai đụng) |
| `git check-ignore` | **KHÔNG bị ignore**; `git ls-files` xác nhận **đang được track** |
| commit nuốt | **`234fe02c` `wal: flush 20260811T0011`** Stop-hook, không phải vai |
| `git show HEAD:….mfe-state.json` | `history` = **31**, `at` = **2026-08-11** **thay đổi của vai ĐÃ NẰM TRONG HEAD** |
**Caveat containment ở §caveat-1 vừa TỰ CHỨNG MINH bằng ca thật, có SHA:** nếu lead chỉ soát `git status` cuối lượt thì sẽ kết luận **"vai không ghi "** **SAI**. Vai ghi 1 file, hook đã commit hộ trong `234fe02c`.
🔴 **Backstop đúng = `git log`/diff các commit `wal:` trong cửa-sổ lượt, KHÔNG phải working-tree.** (Bài S173 nêu dạng cảnh-báo; lượt này bằng-chứng đầy đủ: byte trước/sau + số bản ghi + SHA.)
🔸 Ghi chú cho nấc 2 & 3: `strikes_total` **vẫn = 25** bản ghi thứ 31 tín-hiệu A5 (anchor bất động) **không những đúng mà vừa dài thêm 1 nhịp** do chính lượt đo này nay **31/31 bản ghi**.

View File

@ -0,0 +1,204 @@
HARNESS-REFINE: 2 action / 16 BÁC
# harness-refine S189 (L15) — nấc 2/3 bộ-ba đồng-kiểm memory · con ĐỀ-XUẤT
> Read-only · INFORM-only · **propose-only**. Single-writer = lead (B3 VERIFY→APPEND). Vai này KHÔNG Write/Edit lên corpus.
> Ghi **artifact-first**: mỗi action chốt xong APPEND ngay (phiên này #53 đã trúng 6 lượt return).
> **Quy-ước đơn-vị dùng SUỐT file (khai 1 lần, S186 bắt lỗi 2-quy-ước):** `B` = byte theo `wc -c`; `ký-tự` = `len(read())`; dòng = `wc -l` (đếm `\n`).
## §0 — FAIL-CLOSED GATE + TICK của vai
**INPUT PIN:** `.claude/workflows/runs/2026-08-10-S189-bookstart-open/harness-eval-return.md`
- Tồn tại · **KHÔNG rỗng****GATE PASS**, vai được phép đề-xuất.
- 🔴 **Đính-chính ngay ở INPUT (Đ5):** lead brief ghi *"44.267 B / 474 dòng"*; đĩa lúc vai đọc = **47.119 B / 501 dòng**. Không ai sai — nấc-1 ghi artifact-first nên §12 ERRATUM được APPEND **sau** khi lead lấy số. ⇒ **LUẬT TICK áp cả cho INPUT của chính vòng này**, không riêng metric.
**TICK-REFINE = 2026-08-11 00:18:53 → 00:26:19** (nấc-1 đo 00:0300:09). Theo LUẬT TICK (promote A2@S188, đang nằm trong diary vai), vai **đo lại tại tick của mình** mọi vật sắp neo action — KHÔNG chạy lại instrument của nấc-1 (`measure`/`mfe`/`gate`), chỉ `wc -c` · `stat` · `grep` · đọc mã.
| vật | con-ĐO §1 (00:03) | **TICK vai (00:18)** | phán |
|---|---|---|---|
| `lead-gap-auditor/MEMORY.md` | 27.639 | **27.639** (mtime 08-10 20:30) | KHỚP · **tĩnh** trong phiên |
| `ring2-audit/MEMORY.md` | 26.652 | **26.652** (mtime 08-10 14:37) | KHỚP · **tĩnh ~9,7 h** |
| `lead-stale-auditor/MEMORY.md` | 24.975 | **24.975** | KHỚP |
| `reviewer/MEMORY.md` | 24.473 | **24.473** | KHỚP |
| `tooling-auditor/MEMORY.md` | **16.912** (§1) / 16.614 (§4) | **16.614** | §1 lạc hậu 298 B — xem Đ1/Đ2 |
| `harvest-curator/MEMORY.md` | 21.308 | **21.308** | KHỚP · nợ ĐÃ ĐÓNG |
**4/6 vật vai định neo đều TĨNH tại tick của vai** ⇒ 2 action dưới đây **không xây trên cát** (trả lời thẳng cảnh báo #22 trong brief).
## §1 — CHỐT-DỪNG dựng lại TỪ ĐĨA (16 return trước, không tin diary một mình)
| đối-tượng | attempt trước | kết quả đo tại TICK | trạng-thái chốt-dừng |
|---|---|---|---|
| `harvest-curator/MEMORY.md` | S186-A3 (③) **không land** → S188-E1 escalate | **21.308 B**, `archive/2026-07.md` mtime 08-10 21:01 | ✅ **ĐÃ ĐÓNG** ở closeout S188 — CẤM đề lại |
| `reviewer/MEMORY.md` | S186-A1 (④ nén 6 stub) **không land** → S188-E2 escalate | **24.473 B** (3.708 vs tick S188 28.181); `grep -ci stub` = **0** | ✅ **ĐÃ ĐÓNG** — CẤM đề lại |
| `ring1-audit/MEMORY.md` | S188-A1 (③) | **20.924 B** < low-water 21.760; `archive/_INDEX.md` 325 B tự khai *"moved @S188 (refine A1…)"* | **ĐẠT** đóng chu-kỳ |
| `harness-refine/MEMORY.md` | S188-A2 (② LUẬT TICK) | luật trong diary, vai **đang dùng nó lượt này** | **ĐẠT** |
| `ctx-audit/MEMORY.md` | S186-A2 (③+`##`) | 20.460 B · 12 heading · **466 B (2%) trên `##` đầu** | ĐẠT **nhưng đẻ dark-matter** A1 |
| 🔴 `lead-gap-auditor/MEMORY.md` | archive từng ĐẠT (14.798) tái phình **S188-E4 ESCALATE** | **27.639 B**, máy `after-est ~25.638 > cap` | 🔴 **FIRE — đang ở `escalated`** **CẤM action** (E1) |
| 🔴 `ring2-audit/MEMORY.md` | S173-A1 (③) ĐẠT 20.375 tái phình +6.277 B/6 ngày | **26.652 B** | 🔴 **archive-theo-mức = attempt-2** **CẤM** (E2) |
**3/3 nợ lead mang sang đã LAND thật** vai kiểm độc lập, **không chép lời lead**: cả 3 khớp.
---
## §2 — ACTION (2) — mỗi dòng neo SỐ của con-ĐO
| # | action | lớp | đối-tượng `file:path` | trigger (SỐ nào của con-ĐO) | chốt-dừng | owner-gate |
|---|---|---|---|---|---|---|
| **A1** | Dựng `_INDEX.md` cho 3 vai L2 verbatim **vô hình với A7** | ** distill** | `.claude/agent-memory/{ctx-audit,ring2-audit,lead-stale-auditor}/archive/_INDEX.md` (tạo mới) | **#20** `A7 GATE PASS 429/429, failed 0` verdict **HEALTHY tuyệt đối** được đo trên mẫu-số **loại trừ 3 vai này**; máy tự khai *"11 sub có archive"* trong khi đĩa **14 vai có archive nội-dung** **28.873 B** L2 nằm ngoài mọi phép kiểm | **attempt-1** chưa lượt nào trong 16 return đề `_INDEX` cho 3 vai này | lead (B3) |
| **A2** | Promote LUẬT **`drain tay không kèm _INDEX = tự đẻ dark-matter`** | ** promote** | `.claude/agent-memory/harness-refine/MEMORY.md` | cùng **#20** + **lặp ≥2**: S186-A2 (`ctx-audit`, LAND+ĐẠT) move **11.521 B** xuống L2 **không dựng `_INDEX`** chính lane này đẻ dark-matter; `ring2`/`lead-stale` cùng hình dạng | **attempt-1** | lead APPEND (B3) |
### A1 — chi tiết thi hành + BẰNG CHỨNG CƠ-HỌC
🔴 **Gốc cơ-học, đọc từ mã chứ không suy:** `scripts/memory-archive-gate.ps1:249`
```powershell
$indexPath = Join-Path $archDir '_INDEX.md'
if (-not (Test-Path $indexPath)) { continue } # only subs with a built index
```
Vai **không có `_INDEX.md`** thì gate **`continue`** không PASS, không FAIL, **không xuất hiện**. Gate đã chốt chống PASS-trên-mẫu-số-rỗng (`:307` *"0 extracted pointers = NOT-MEASURED, never PASS"*, B2@S152) nhưng chốt đó **chỉ bảo vệ ca `_INDEX` RỖNG, không bảo vệ ca KHÔNG CÓ `_INDEX`**. Hai lỗ khác nhau, mới bịt một.
**Đo tại TICK vai (`wc -c` + `ls`, 15/30 vai có `archive/`):**
| vai | L1 | L2 verbatim | `_INDEX` | gist | trạng-thái A7 |
|---|---|---|---|---|---|
| `ctx-audit` | 20.460 | **11.521** | 0 | 0 | 🔴 **vô hình** (gate `continue`) |
| `ring2-audit` | 26.652 | **8.771** | 0 | 0 | 🔴 **vô hình** |
| `lead-stale-auditor` | 24.975 | **8.581** | 0 | 0 | 🔴 **vô hình** |
| `ring1-audit` | 20.924 | 6.761 | 325 B | 0 | **N/A — pointers 0** (thấy nhưng không đo được) |
| 10 vai còn lại | | | | | 429 pointer resolve |
- ** hình hoàn toàn = 28.873 B** (11.521+8.771+8.581, vai tự cộng ✓).
- **Cộng cả ring1 (thấy-mà-không-đo-được) = 35.634 B** L2 nằm ngoài tập được `429/429` chứng nhận.
- 🔴 **Một vai có kho lưu HỎNG HOÀN TOÀN chấm điểm y hệt một vai có kho lưu HOÀN HẢO.** Đây đúng lớp *"vắng-mặt trông giống ổn"* chính con-ĐO nêu **4 lần** trong lượt 3-bis `l2idx 0 over` · §6.2 anchor 25 · §7 6 vai N/A · §4 ring1 N/A) nhưng **không áp cho trục #20**, trục duy nhất chấm *"HEALTHY tuyệt đối"*.
**Quy mô việc (đo, không ước):** `ctx-audit/archive/2026-07.md` 11.521 B / 5 heading `^#` · `ring2-audit/archive/2026-08.md` 8.771 B / 3 · `lead-stale-auditor/archive/2026-07.md` 8.581 B / 3 **11 bản ghi** cần con-trỏ. Khuôn đã sẵn 10 bản chạy tốt trong repo; khuôn **KHÔNG được** dùng kiểu `ring1-audit/_INDEX.md` (bảng period/entries/note, **0 token `substring:"…"`**) chính thiếu token nên rơi vào `N/A pointers 0`.
🔴 **A1 là điều-kiện TIÊN QUYẾT của E2:** chừng nào `ring2` chưa `_INDEX`, **mọi** lượt drain L1L2 cho đều sinh thêm dark-matter kể cả lượt drain "đúng".
### A2 — nguyên văn luật đề nghị APPEND
> **LUẬT `_INDEX` — dark-matter tự đẻ.** Mọi drain L1→L2 **làm tay** PHẢI dựng/nới `archive/_INDEX.md` **trong CÙNG lượt**, kèm token `substring:"…"` cho từng bản ghi. Lý do cơ-học: `memory-archive-gate.ps1:249` `continue` qua vai không có `_INDEX` ⇒ vai đó **biến mất khỏi mẫu-số A7**, và `A7 GATE PASS n/n failed 0` **không phải** phát biểu về corpus, chỉ là phát biểu về **tập vai có index**. Hệ quả: một drain thành công mà thiếu index **làm A7 xanh hơn** trong khi corpus **kém an toàn hơn** — số đi ngược hướng sự thật. Ca thật: A2@S186 (`ctx-audit`, chấm LAND+ĐẠT) chuyển **11.521 B** xuống L2 không kèm index; @S189 đo lại, 11.521 B đó nằm ngoài `429/429`. Lặp: `ring2-audit` 8.771 B · `lead-stale-auditor` 8.581 B. **Chốt kiểm trước khi tuyên một drain là ĐẠT: mở `archive/_INDEX.md`, đếm token `substring:` ≥ số bản ghi vừa move.**
**Vì sao ② chứ không phải ghi vào role-file:** role-file `.claude/agents/*.md` bề mặt của lead; diary vai corpus của vai. A2 ghi vào **diary của chính vai này** nơi luật sẽ tự nạp mỗi lần vai spawn, nơi lane này ra quyết định. KHÔNG lấn.
---
## §3 — Lớp ① reinject = 0 · lớp ③ archive = 0 — **cả hai zero đều CÓ LÝ DO ĐO ĐƯỢC**
### ① reinject = 0 (chạy lại phép thử, không chép kết luận kỳ trước)
Ứng viên duy nhất trên sổ: 2 mục MFE MISS đã được `reinject-ledger.md:61-76` phân loại **BUILD-GAP** @S185, kèm **điều-kiện lật** viết sẵn (*"nếu 1 trong 2 vai thực sự từ chối một task bằng đúng tiêu chí đó diary vẫn 0-hit floor-rot thật"*). Vai **chạy lại phép thử tại tick của mình**, kèm control-dương:
```
impl-backend "Integration testing multiple components" = 0 control "S1" = 12
impl-frontend "30 min trivial" = 0 control "S1" = 22
```
Control-dương 12/22 chứng **grep chạy đúng file, corpus không rỗng** 0/0 **zero THẬT**, không phải zero-do-hỏng-thước. **Điều-kiện lật CHƯA xảy ra** reinject = nhồi 94%→100% / 92%→100% không thêm giá-trị = đúng hình dạng Goodhart. **CG-1 KHÔNG tiêu quota** (không sự kiện reinject nào). Ledger giữ nguyên, vai **không đề nghị lead ghi dòng mới** 0 entry đây trung thực, không phải bỏ sót.
### ③ archive = 0 — vì **cả 3 ứng viên đều bị chặn bởi 3 lý do KHÁC NHAU**, không phải vì hết việc
| ứng viên | byte | sao KHÔNG action |
|---|---|---|
| `lead-gap-auditor` | 27.639 | **đang ở `escalated`** từ S188-E4 chốt-dừng FIRE **E1** |
| `ring2-audit` | 26.652 | archive-theo-mức = **attempt-2** cùng vật cùng thuốc; **PROPOSE của máy đang chĩa sai chỗ** **E2** |
| `lead-stale-auditor` | 24.975 | byte còn 625 tới cap **nhưng ký-tự còn 3.612** (con-ĐO §1-bis) **chưa bị cắt** neo byte = quay lại proxy vai đã tự hạ cấp @S186 |
🔴 Vai **không nặn một ③ trên vật khác** chỉ để bảng đủ 4 lớp đó nghi-thức rỗng (nguyên tắc §3@S188).
---
## §4 — LEO THANG (4) — quyền lead/owner, vai KHÔNG tự quyết
### 🔴 E1 · `lead-gap-auditor/MEMORY.md` — **archive nay đã được MÁY chứng minh là không đủ**
- Số: **27.639 B** (+2.039 trên `autoinject_cap` 25.600) · máy in `entries 8 · strike 1 · after-est ~25.638 · WARN keep-floor hit (5); cannot auto-drain` (con-ĐO **#18**).
- **Datum MỚI so với S188-E4:** kể cả drain hết phần được phép, **25.638 > 25.600** archive **thiếu 38 B** để về dưới cap. Đây không còn "lặp sẽ tái diễn" (lập luận tốc-độ của S188) **bất khả về số học** (lập luận sức chứa). Hai do độc lập cùng chỉ một hướng.
- **Vai đo thêm một tầng máy chưa thấy:** **15.890 B = 57% file nằm TRÊN heading `##` đầu** (dòng `##` đầu = 23) máy đếm **8 entry** nhưng **không nhìn thấy hơn nửa khối lượng** `after-est ~25.638` được tính trên **ảnh chụp thiếu 57%**. Con số ấy **cận trên lạc quan**, không phải dự báo.
- 🔴 **Vai TỪ CHỐI lách bằng đổi lane:** máy tự đơn `SPLIT/condense entries by hand` = đúng tả lớp ④. Nhưng chuyển ③→④ trên **cùng một vật đang ở `escalated`** chính lỗ hổng lượt S188 đã tự bịt (*"vai không lách bằng cách đổi sang `archive/` của cùng vật"*). **không action**, đẩy lên lead.
- **Câu hỏi cần lead/owner quyết (vai nêu, không chọn hộ):** (a) hạ `keep_floor` cho riêng vai này? (b) tách file theo trục? (c) rút gọn nội dung theo giá-trị? cả 3 đều đụng `memory-budget.json` hoặc phán-đoán nội-dung = **ngoài 4 lớp**.
### 🔴 E2 · `ring2-audit` — **`PROPOSE archive` của máy đang CHĨA SAI CHỖ; thi hành nguyên văn sẽ gây hại**
Đây mục **ngăn thiệt hại**, không phải mục xin việc.
- Máy in (con-ĐO **#19**): `26652 YES · entries 7 · strike 2 · after-est ~24928 · PROPOSE archive (strike 2>=2): move 2 lowest-value (position tiebreak)`.
- **Vai MỞ FILE ĐỌC** (LUẬT S185: *span ≠ nhãn heading*) đo được 3 việc máy không thấy:
1. **60% file (16.008 B / 26.652) nằm TRÊN heading `##` đầu** (dòng `##` đầu = 24) 7 "entry" máy thấy **không phải 7 bản ghi**, 7 mục **cấu-trúc/cũ**: `🎯 Role baseline` · `📅 Runs` · `🔄 Curate trigger` · `S151` · `S151-deep` · `S152` · `S159`.
2. `keep_floor 5` giữ 5 mục **cuối theo vị trí** **pool drain = 2 mục ĐẦU = `🎯 Role baseline` + `📅 Runs`**. 🔴 **`Role baseline` chính khối auto-inject mỗi lần vai spawn** diary của chính `ring2` ghi (`:60`, S182): *"Role-baseline auto-inject đầu mỗi spawn = nạp thước thiếu vạch TRƯỚC khi chấm"*. Drain = **vai KIỂM khởi động mà không có thước**.
3. 🔴 **Span `## S159` (dòng 49) chứa S180 · S182 · S169 · S186** trong đó **S186 viết 2026-08-10, hôm qua**. Ai drain "theo nhãn span" sẽ **xoá bản ghi mới nhất**. Đây **lần thứ 3** lớp này xuất hiện (S185 nháp A1 · S186 `ctx-audit` · nay `ring2-audit`) **không còn là tai nạn, là hình dạng chung của corpus**.
- **Đề nghị lead:** đừng thi hành dòng `PROPOSE` nguyên văn. Trình tự an toàn = **A1 dựng `_INDEX` trước** drain **theo NỘI DUNG** (mục thật trong 16.008 B trên heading) cập nhật `_INDEX` cùng lượt. Quyết định drain cái = phán-đoán giá-trị lead/owner.
### E3 · `.archive-strikes.json` — sổ gác cửa **chính lane của vai này** đang đóng băng
Con-ĐO **#27**: stale **4 ngày** (mtime 08-07 11:10) · phủ **26/29** (thiếu `ring5-audit`·`score-counter`·`score-count-auditor`) · **vênh với máy**: `ring2-audit` sổ ghi 1 máy in **2**; `investigator-codebase` sổ ghi 1 máy in **0**.
🔴 **Vai tự khai điểm yếu của chính trigger A-lane:** con số `strike 2` lượt này dùng để nói `ring2` "đủ điều kiện PROPOSE" **số DRY của máy**, **sổ trên đĩa ghi 1** tức nếu ai đó chạy `-Apply` hôm nay, kết quả thể **không** ra 2. **E2 vẫn đứng** neo vào **26.652 B > 25.600** (số byte, đo 2 lần độc lập, khớp tuyệt đối với datum H17 lead đưa) chứ **không** neo vào strike. Nhưng ai trích chữ "strike 2" phải kèm caveat này.
Thuốc = chạy `memory-archive-gate.ps1 -Apply` **một lần** = thao-tác GHI **ngoài 4 lớp** lead/owner. (Định-tuyến instrument-owner: xem N3.)
### E4 · Quy trách nhiệm sai ở trục "vai spawn tự ghi" — **đo một năng-lực mà 25/30 vai không có**
Con-ĐO **#37** chấm `1/2` (`tooling-auditor` ghi · `score-counter` KHÔNG). Vai đọc `tools:` của cả hai:
```
.claude/agents/score-counter.md:4 tools: Read, Grep, Glob, Bash <- KHONG co Write
.claude/agents/tooling-auditor.md:7 tools: [Read, Grep, Glob, Bash, mcp__...] <- KHONG co Write
```
- `score-counter` **không thể** ghi diary bằng tool được cấp diary bất động **thiết-kế + nợ scribe của lead**, KHÔNG phải vai lười (mirror N3@S172).
- 🔴 **Nghịch lý ở vế "CÓ ghi":** `tooling-auditor` cũng **không có Write**, vậy file của đổi lúc **00:04:07**. Chỉ 2 khả năng: **(a)** lead scribe hộ, **(b)** vai ghi qua `Bash` = **residual-write vi phạm** (đúng khung F-6@S172). Vai **không đoán** đây câu lead trả lời bằng `git log` (backstop con-ĐO §12 E-2 vừa chứng backstop ĐÚNG, kèm SHA `234fe02c`).
- **Toàn roster: 25/30 role-file không `Write`** trục #37 đang lấy "tự ghi diary" làm thước sức khoẻ cho một tập **83% cấu-trúc không làm được**. Mẫu-số cần khai lại, không phải hạ điểm vai.
---
## §5 — NHƯỜNG (4) — ranh sắc, vai KHÔNG chạm
| # | trục | số | nhường cho | sao KHÔNG phải của vai này |
|---|---|---|---|---|
| N1 | hotload floor **772.334 B**, `HANDOFF.md` **220.577 B** gánh **67,2%** phần phình; headroom **122.555** vs target 210.000 (thiếu 87.445) con-ĐO #23/#25 | 6/6 nguồn hot-feed của LEAD | **`lead-gap-auditor`** (H24) | 0/6 nguồn agent-memory corpus. Lặp lại đúng kết luận N1@S173 N4@S188 **3 kỳ liên tiếp cùng một ranh**, vai không đổi ý |
| N2 | `run-chua-gom = 1` (con-ĐO #12) | folder S189 chưa `*-synthesis.md` | **`harvest-curator`** (H2) | thao-tác harvest, không phải corpus |
| N3 | `.mfe-state.json` anchor **25** bất động **31/31** bản ghi / 16 ngày (con-ĐO #28) | `warn_baseline` = 25 | **`tooling-auditor`** (chủ instrument) | state-file của instrument; sửa latch = sửa máy |
| N4 | Đường-cắt **"~25.000"** dùng suốt 3 kỳ **không phải khoá nào** trong `memory-budget.json` (khoá thật: `autoinject_cap_bytes` 25600 · `low_watermark` 21760) | | **owner/lead** | định-nghĩa ngưỡng = quyền cấp ngân-sách (`reinject-ledger.md:5`), AI không tự đặt |
---
## §6 — ĐÃ CÂN-NHẮC RỒI **BÁC** (16) — mục bắt buộc, không được rỗng
| # | thứ đã soi | sao BÁC (số/ cụ thể) |
|---|---|---|
| B1 | archive `ring2-audit` theo **mức** | **attempt-2 cùng vật cùng thuốc**: S173-A1 đã archive ĐẠT 20.375 tái phình **+6.277 B / 6 ngày**. S188-E4 đã viết sẵn *"lặp archive theo mức sẽ tái diễn vô hạn"*. E2 |
| B2 | distill `lead-gap-auditor` **dù MÁY tự kê đơn** `SPLIT/condense by hand` | đổi lane trên vật đang `escalated` = đúng lỗ hổng S188 tự bịt. Máy đơn **không** cấp phép vượt chốt-dừng |
| B3 | archive `lead-stale-auditor` (24.975, **vai sát cap nhất chưa kêu**, còn 625 B) | theo **ký-tự** còn **3.612** chưa bị cắt chưa **thiệt hại**. Neo byte = tái phạm proxy đã tự hạ cấp @S186/BÁC-16@S188 |
| B4 | Chép thuốc `##`-tagging (thành công thật `ctx-audit`: nay **466 B = 2%** trên heading đầu) sang `ring2-audit` | **tính ra thì NGUY HIỂM**: tag 7 bullet trên heading đầu entries **7→14**; `keep_floor 5` giữ 5 span **CUỐI theo vị trí** (Curate·S151·S151-deep·S152·S159) **pool drain = 9 span đầu, gồm `S181` (bản ghi thật mới nhất, 08-07) + `Role baseline`**. File này **thứ tự phiên theo vị trí KHÔNG đơn điệu** (181,173,168,172,166,162,153 151,151,152,159 180,182,169,186) **vị-trí ⟂ độ-mới** mọi tự-động theo vị trí đều sai. (mirror BÁC-5@S188) |
| B5 | reinject 2 mục MFE MISS | falsify test chạy lại **0/0**, control-dương **12/22** điều-kiện lật ledger S185 **chưa xảy ra**; reinject = xoá **chứng nhân**, không xoá lỗi |
| B6 | reinject cho `score-counter` (diary bất động từ 08-08, 2.366 B = đúng số seed *"SO 0 = CHUA DO"*) | **không phải floor-rot** (chưa từng rồi rơi B3-test của ledger `:12` loại) vai **không có `Write`** build/scribe-gap E4 |
| B7 | Action trên `cicd-monitor` l2_index **23.588 = 115,2% cap** (con-ĐO #16) | budget khai tường minh *"Probe deliberately measures MAIN file only — by design, do not 'fix' it"*; MAIN thật = **9.682 = 47,3%**. Hành động = **rời tập-đo** (Goodhart) |
| B8 | Action neo vào con-ĐO #22 *"lỗi THƯỚC"* | **thước KHÔNG hỏng** xem Đ1. Vai đo lại 00:18 00:26: **16.614 cả hai lần**, khớp `gate` + `stat`×3. Cái đổi **VẬT**, không phải thước |
| B9 | Đề lại 3 nợ trong `HANDOFF NEXT-em @S188` | kiểm **độc lập** (không chép lời lead): `harvest-curator` **21.308** · `reviewer` **24.473** + `grep -ci stub` = **0** · `measured` **29/29** **cả 3 ĐÃ LAND**. Lead nói đúng |
| B10 | promote luật *"`git status` rỗng ≠ không ghi"* vào diary vai | con-ĐO §12 E-2 **đã ghi trọn kèm SHA `234fe02c`** + byte trước/sau + số bản ghi, trong **chính artifact lead sẽ đọc**. Promote = nhân bản, **0 độ phủ mới** |
| B11 | promote luật *"vị-trí ⟂ độ-mới"* vào `ring2-audit/MEMORY.md` | **thêm byte vào đúng file đang over-cap** thuốc phá bệnh; luật đã sẵn trong diary vai từ S185 |
| B12 | Cáo buộc `ring2` còn giữ thước hỏng: `grep -c "5 class"` = **3 hit** | mở ra đọc: **3/3 là MENTION** trong entry S180/S182 *kể lại* chính lỗi đó, không phải **USE** trong `Role baseline`. Bẫy **use⟂mention** (citation-trap) **0 defect** suýt báo oan |
| B13 | Dọn `investigator-api/archive/` (dir tồn tại, **0 B, 0 file**) | dir rỗng **không phải dark-matter** (không nội dung để mất); gate cũng `continue` qua . Giá-trị 0, không thuộc 4 lớp |
| B14 | archive `ctx-verifier` (**21.819 B vai byte cao nhất KHÔNG tầng L2 nào**, l2v=0) | máy `strike 0`, còn **3.781 B** tới cap máy chưa kêu, ký-tự chưa gần. Action đây = **đề-xuất theo cảm-giác** |
| B15 | Đề nghị chỉnh `keep_floor` (5) để mở đường drain cho `lead-gap-auditor` | (a) đổi ngưỡng để tắt đèn = Goodhart; (b) `memory-budget.json` = **quyền cấp ngân-sách của owner** (`reinject-ledger.md:5`) AI đề nghị được, **không tự quyết** đã đẩy vào E1 dạng câu hỏi |
| B16 | Dùng số §1 `tooling-auditor 16.912` làm mỏ neo bất kỳ | số đó **đã cũ 298 B ngay lúc được in**; đúng số tại mọi tick sau đó = **16.614**. Neo vào = neo vào ảnh chụp đã hết hạn |
---
## §7 — ĐÍNH-CHÍNH con-ĐO (5) — **không hạ verdict nào, chỉ sửa NHÃN/MẪU-SỐ**
| # | chỗ | con-ĐO viết | đo lại tại TICK vai | tại sao quan trọng |
|---|---|---|---|---|
| **Đ1** | trục **#22** | nhãn `độ ổn-định của THƯỚC — REGRESSION` | thước ổn định: `gate` 16.614 · `stat`×3 16.614 · vai đo lại **00:18 và 00:26 đều 16.614**; §4-bis prose của chính con-ĐO nói đúng (*"cả hai instrument đều đúng"*) **chỉ NHÃN ở bảng §9 sai lớp** | nhãn "lỗi thước" biện minh cho việc **mất tin vào toàn bộ instrument**; lớp đúng = *cửa-sổ-đo không đóng băng* (LUẬT TICK), vốn **có thuốc** (ghi tick) |
| **Đ2** | §4-bis | *"vai `tooling-auditor` đang **ghi diary** đồng thời"* | 16.912 16.614 = **298 B**, tức **CO LẠI**, không phải append | append rewrite. Một file **teo** giữa lượt tín-hiệu **compaction/ghi-đè**, vai đó **không có `Write`** đẩy thẳng vào E4 |
| **Đ3** | trục **#37** | `vai spawn tự ghi 1/2` | cả 2 vai đều `tools:` **không có Write**; toàn roster **25/30** không Write | trục đang chấm một năng-lực **83% roster không có** mẫu-số sai, không phải vai kém |
| **Đ4** | §4 | *"11 sub có archive"* (trích máy **trích đúng**) | đĩa: **14 vai có archive NỘI DUNG** (+1 dir rỗng = 15 dir) | chênh **3 vai / 28.873 B**. Con-ĐO không sai khi trích; cái không đứng **suy ra `#20 A7 HEALTHY tuyệt đối`** mức CLASS A1 |
| **Đ5** | INPUT | brief lead: eval-return `44.267 B / 474 dòng` | đĩa lúc vai đọc: **47.119 B / 501 dòng** | nấc-1 ghi artifact-first §12 APPEND **sau** khi lead lấy số. **LUẬT TICK áp cả cho kích-thước INPUT** |
🔴 **Cả 5 đính-chính đều KHÔNG lật verdict nào của con-ĐO.** #22 vẫn vấn đề thật (chỉ đổi tên bệnh) · #37 vẫn thấp (chỉ đổi người chịu trách nhiệm) · #20 vẫn `HEALTHY` **cho tập 429 pointer**, chỉ không được đọc thành *"corpus an toàn"*.
---
## §8 — Caveat vai TỰ KHAI (không giấu)
1. 🔴 **read-only = chặn-THIẾU-tool, KHÔNG phải sandbox.** Vai không Write/Edit lên corpus **nhưng CÓ `Bash`** = kênh ghi vẫn mở. Vết ghi vai **tự khai**: đúng **1 file** = `harness-refine-return.md` (chính file này, trong run-folder). **0** chạm vào `.claude/agent-memory/**`, **0** chạm `memory-budget.json`, **0** chạy instrument ghi (`mfe-eval.ps1` **KHÔNG** chạy đó việc nấc-1, ghi `.mfe-state.json`). Đề nghị lead soát **`git status` `git log`** (con-ĐO §12 E-2 vừa chứng bằng SHA rằng Stop-hook `wal:` **nuốt** file khỏi working-tree).
2. **Vai KHÔNG chạy lại instrument của nấc-1.** Mọi số trong file này hoặc (a) trích từ `harness-eval-return.md` ghi §, hoặc (b) do vai tự đo bằng `wc -c` · `wc -l` · `stat` · `grep` · đọc **đã ghi rõ nguồn từng chỗ**.
3. **A1/A2 là ĐỀ-XUẤT, chưa phải việc đã làm.** Single-writer = lead. Vai **không** tự sửa `reinject-ledger.md` (lượt này **không sinh sự kiện reinject** không dòng nào để thêm).
4. **Điểm yếu tự khai của chính lượt này:** chữ *"strike 2"* làm bối cảnh cho E2 **số DRY của máy**, sổ trên đĩa ghi **1** (E3). E2 **không** đứng bằng strike đứng bằng **26.652 B > 25.600** bằng **cấu trúc file vai tự mở ra đọc**. Ai trích "strike 2" rời khỏi đoạn này trích thiếu.
5. **A1 có một rủi ro vai không tự khử được:** vai **chưa** đọc hết 28.873 B nội dung của 3 archive để biết token `substring:"…"` nào ổn định. Lead dựng index phải **mở từng file**, không suy từ heading nếu chọn token trùng lặp thì A7 sẽ PASS giả (đúng cái bẫy `:277` S167 đã bịt cho index xoay vòng).
---
### END — `HARNESS-REFINE: 2 action / 16 BÁC` · 4 escalate · 4 nhường · 5 đính-chính con-ĐO

View File

@ -0,0 +1,86 @@
# S189 bookstart @open — ONE-SHOT (YC-018/YC-027)
phien-logic: L15 (session-15) · window 1 · nhan-phien S189
HEAD lúc mở: d4799ddd · counter 62 -> 63 (squash-benign)
lenh: /session-start · HMW-mode = ON · lead = Opus 5 MAX (default, im theo luật)
## Bối cảnh
Lượt trước (S188) owner chốt PN-001 + YC-027 (command chạy TRỌN VẸN, cấm viện lý do)
+ YC-026 (không đóng phiên). Lead lượt này ban đầu **dừng ở BƯỚC 0.7(b) hỏi consent**
-> owner bắt lỗi ("turn trước tao đã đưa ra quyết định thế nào") -> chạy trọn không hỏi.
Chính ca này về sau được `lead-gap-auditor` xếp class `gap-incident-unrecorded` (F-1).
## Máy @open (đo tươi)
| hạng mục | số |
|---|---|
| test gate | **680 PASS / 0 FAIL** (Domain 45 + Infra 635) |
| Migration (đĩa) | **72** (145 .cs 72 Designer 1 ModelSnapshot) |
| gotcha | 88 (max = count) · roster **29** · skill 6 |
| counter H24 | 62 → **63** (squash-benign, OR-guard) |
| nhịp-nợ | light 3/6 · deep **1/1 OVERDUE:deep** · run-chưa-gom 0→1 · pull-cách 0→1 |
| shard-probe | pending **10/15 ⇒ IM** ⇒ V4 nén-ngủ **NO-OP có khai** |
| detector | TOTAL **58** + INFORM-only **26** (tách riêng) |
| H17 spec-audit | 1 GAP:MED — `ring2-audit` thiếu `_INDEX` + gist |
| crystallized | headroom **122.555** tok · target 210.000 ⇒ headroom bó |
| RAG | UP · `proj_solution_erp` 2450 chunk · last_indexed 2026-05-29 (stale 73 ngày) |
| thư 2 kênh | `pull-cach 0 ngay` ⇒ không thư mới |
| User-Mark | 13 Active-High · 1 Medium |
## Vòng @open — KẾT QUẢ
- [x] **V1** `tooling-auditor` **PASS_WITH_FLAGS 7** (21.170 B) + `harvest-curator` **GATE-FAIL-5** (21.166 B)
`ring1-audit` **26Đ/4T/6KC trên 36 claim** (28.807 B)
- [x] **V2** `lead-stale-auditor` **11 FLAG deep** (39.234 B, tự khai SÀN≠TỔNG)
+ `lead-gap-auditor` **7 FLAG deep** (31.630 B)
`ring2-audit` **7Đ/3T/14KC trên 24 claim** (25.498 B), enum-gate **18/18 sạch**
- [x] **V3 trio** `harness-eval` **MIXED 38 trục / 13 REGRESSION** (47.119 B)
`harness-refine` **2 action / 16 BÁC** (27.322 B)
`harness-audit` (nấc 3 — chấm tranh chấp #22 + E2)
- [x] **V4** nén-ngủ: SHARD-PROBE pending=10/15 ⇒ **IM** ⇒ NO-OP có khai (không phải bỏ)
- [x] **V5** floor/detector: governance-detectors + memory-selfimprove-audit + crystallized-backfill
- [x] **Khối chấm điểm** `score-counter` (T2) → `score-count-auditor` (T3) **SAI-TẦNG-2, tầng-1 0 lỗi**
⇒ 🔴 **KHÔNG ĐO ĐƯỢC** theo A8 (`adap-upgrade-pack-tracking.md:68`) — **cấm in điểm**
- [ ] **Phase 3.5** `_mind-s-15` block-0 + `mind-check` + `ctx-audit` @open
## #53 — 8 lượt return garble, 0 byte mất
`tooling-auditor` · `harvest-curator` · `lead-stale` · `lead-gap` · `harness-eval` ·
`ring1-audit` · `ring2-audit` · `harness-audit`. Tất cả recover bằng **artifact-first**
(resume + ép đổ ruột ra đĩa từng mục trong lúc làm). Từ vai thứ 5 trở đi lệnh gốc đã
mang sẵn artifact-first ⇒ mất việc = 0. Datum củng cố: **chống-#53 = thiết-kế ARTIFACT,
không phải prompt**.
## Phát hiện load-bearing (lead tự đo lại, không chép)
1. **byte ⟂ ký-tự** — máy chấm byte kêu "2 over-cap"; hook cắt theo KÝ-TỰ ⇒ **0/29 vượt**,
max `lead-gap-auditor` 96,5% (24.118 ch). Lead đo `perl -CSD` khớp H2. = câu (76) treo.
2. **3/7 NEXT-em @S188 ĐÃ LAND**`ef1d4fbb` mà HANDOFF không lật: `harvest-curator`
30.231→21.308 B · `reviewer` →85,7% · `measured` 19/29→**30 row 29/29 phủ**.
3. **`ring5` 0 hit `session-start.md`** / 2 hit `session-end.md` ⇒ guard của RCA `ONESHOT-S188`
**về cấu trúc không fire được ở cửa MỞ** — đúng cửa vi phạm xảy ra lượt này.
4. **YC-027 land 2/4 cửa** (`tiep`=0 · `pause`=0). Lead giả thuyết "thói quen khắc luật"
`ring2-audit` **BÁC** bằng phản ví dụ `YC-021` land 3/4 ⇒ cái thiếu là **phép kiểm ĐỦ-CỬA**.
5. **Công thức đếm Migration trong `STATUS:471` có bẫy** — áp đúng chữ ra 71 vì
`20260717032812_AddPeApprovedBudgetSnapshot.cs` mang chữ "Snapshot". Số 72 thì đúng.
6. **A-21 (ring1 thách-CLEAN)**`skills/contract-workflow/SKILL.md:458` vẫn dạy
*"cầu KHKK→HĐ (W5) chưa làm"* trong khi W5 land `b275893c`; 3 ký pháp GĐ3 = 0 hit
(control dương `ContractType`=6). Skill **bắt buộc dùng** ⇒ chỉ sai đường.
7. **`gap-carry-aged=0` là Goodhart** — re-stamp 47 slug **reset 51/56 slug về streak=1**
⇒ máy đo-tuổi không bao giờ kêu. Số đúng, **nhãn "lành mạnh" sai**.
8. **sai-đơn-vị carry lặp 3 lượt** — 19 = carry-*LINES*, máy đo **56 slug** (S185 20/23 · S188 47 · S189 19/56).
9. **E2** — đơn thuốc `PROPOSE archive` của máy cho `ring2-audit` chĩa sai chỗ; thi hành
nguyên văn có thể **drain `## Role baseline`** (khối auto-inject) + bản ghi S186. Chờ nấc-3 phán.
## Việc XẾP HÀNG sau verdict cuối (Mirror C1 — cửa-sổ đo còn đóng băng)
- `error-ledger.md` entry: TẦNG-2 SAI (L1+L2) — 🔴 CẤM chạm `lead_self_audit.flag_classes`
- sổ yêu-cầu: lật ô `YC-008``YC-010` (số gõ nhầm dòng con) — **việc của chủ sổ**
- `CLAUDE.md:77``69, 71, 72` (ring1 phán: vá 1 chỗ này là ĐỦ, `ef-core-migration` là dương-giả)
- `.claude/WAL.md:2` — gỡ cụm gộp 2 khái niệm (6 nhân chứng chọi 1)
- `skills/contract-workflow/SKILL.md:458` + 3 ký pháp GĐ3
- HANDOFF: lật 3 mục NEXT-em đã xong
- dọn stray `runs/…S189…/.claude/agent-memory/{ring1-audit,ring2-audit}` (thư mục RỖNG, **git mù**`find -type d -empty`)
## Stages

View File

@ -0,0 +1,328 @@
CTX-AUDIT: TRUOT — @open — 5 FLAG
> 🔴 **Luật ghi tệp này (bài học S168 — chính vai này ghi):** dòng-1 **KHÔNG** hứa "sẽ rewrite ở cuối".
> Verdict được ghi **TĂNG DẦN** vào bảng `TALLY` dưới đây ngay khi từng khoản chốt; vai chết giữa chừng thì
> tally đã chốt tới đâu đọc được tới đó — **không để lại artifact trông như đang-chạy vĩnh viễn**.
> Dòng-1 trên đây được đóng ở lượt cuối **vì lượt cuối có thật**; nó **khớp** dòng `END` ở đáy tệp.
> *(Đối chiếu F-5: `harness-audit-return.md` cùng cửa này kẹt ở `(đang chạy)` — đúng cái bẫy tệp này né.)*
## PIN (fail-closed) — ĐỦ
| pin | giá trị | tồn tại |
|---|---|---|
| `_mind` phiên này | `.claude/sessions/session-15/_mind-s-15.md` | ✅ 11.113 B · mtime 2026-08-11 00:52:50 |
| `_mind` phiên trước | `.claude/sessions/session-14/_mind-s-14.md` | ✅ 27.591 B · mtime 2026-08-10 20:44:25 |
| `_context` phiên này | `.claude/sessions/session-15/_context-s-15.md` | ✅ 2.944 B · mtime 2026-08-10 23:50 |
| run-folder | `.claude/workflows/runs/2026-08-10-S189-bookstart-open/` | ✅ 12 artifact + `run.md` |
| lượt | `@open` | — |
Trần đọc: khoá `mind_ctx_kb` (`.claude/agent-memory/memory-budget.json`) — **B1: KHÔNG chép số vào persona**;
đo tại chỗ: file = 22,6% trần. Không gần trần.
Nhánh contract: **FALLBACK HỒI-TỐ ĐẦY-ĐỦ** — phiên 0 `/pause` + 0 `/tiep``ctx-curator` (vai-1) và
`ctx-verifier` (vai-2) **chưa chạy lần nào** ⇒ 5-khoản + 4-khoản là **TỰ SOI**, KHÔNG phải kiểm-vết.
🔴 Đừng đọc kết quả này thành "đã qua 3 lớp".
## 🔴 MÁY — TỰ RE-CHẠY, KHÔNG TIN SỐ PIN (nếp giữ từ S162)
Lead PIN: `10 đạt / 0 TRƯỢT / 1 cờ`. Tao chạy lại `python scripts/session_ctx.py mind-check --session 15`:
```
verdict: dat=11 TRUOT=0 co=0 bo-qua-co-khai=0 => exit 0
```
**Số PIN đã hết hạn** — nhưng 🔴 **lỗi là của CHÍNH TAO, không phải lead.** Cờ duy nhất lúc lead đo nằm ở
phép (4) con-trỏ §E: dòng `ctx-audit` trỏ `sub-ctx-audit-open-S189.md`**tệp NÀY** — lúc đó chưa tồn tại
⇒ máy đọc `dang-cho` ⇒ cờ. Tao Write nó ở bước đầu ⇒ cờ tự tắt, `đạt` 10→11.
**Bản kê CLEAN của máy một phần do chính tao gây ra.** Khai thẳng để không ai đọc 11/0/0 thành "sạch tự nhiên".
*(Cùng hình S172: số PIN hết hạn do artifact của chính tao. Khác S162/S169/S173 — kia là lỗi lead.)*
Hệ quả: **máy 0 TRƯỢT 0 cờ ⇒ mọi FLAG dưới đây đều NGOÀI TẦM MÁY** (ngữ-nghĩa + liên-phiên). Nghĩa-vụ
**thách-CLEAN** được thi hành xuyên suốt (soi §E vs đĩa từng con-trỏ · soi §D vs 3 sổ bền · soi neo vs `git`).
## TALLY (ghi tăng dần)
| # | khoản | verdict |
|---|---|---|
| (0) | PIN đích-danh fail-closed | ✅ ĐỦ |
| (i)1 | block-0 NỘI-DUNG THẬT | ✅ ĐẠT (mạnh) |
| (i)2 | carry từ `_mind-s-14` | ❌ **TRƯỢT — F-1 · F-2** |
| (i)3 | đọc output máy | ✅ ĐẠT (tự re-chạy) |
| (i)4 | gieo mồi-ngầm | ✅ ĐÃ GIEO |
| fb-1 | 5 mục A-E đủ | ✅ ĐẠT |
| fb-2 | §E phủ đủ mọi lượt | ⚠️ **spawn 12/12 · máy 0/≥9 — F-3** |
| fb-3 | đã-chốt = con-trỏ | ✅ ĐẠT |
| fb-4 | 3 rào sạch | ✅ ĐẠT (máy + mắt) |
| fb-5 | nhãn D đủ | ✅ ĐẠT 9/9 |
| fb-6 | hướng-tiếp §B vs `WAL next:` | ✅ ĐẠT |
| fb-7 | kế-hoạch §C vs bản-đồ | ✅ ĐẠT |
| fb-8 | ý D đã định-đoạt chưa đổi nhãn | ✅ ĐẠT |
| fb-9 | con-trỏ giải được | ✅ 12/12 |
| (iv) | bất-biến chuỗi | ✅ ĐẠT (đếm đĩa == máy) |
| A8 | 0 điểm lọt block-0 | ✅ ĐẠT |
---
# ĐẠT — 9 khoản (ghi trước, để FLAG không nuốt mất cái đúng)
### Đ-1 · block-0 có NỘI-DUNG THẬT — ĐẠT MẠNH
Đòi ≥1 mảnh khuôn/máy không tự sinh được. Có thừa:
- **Tên ý §D thật:** `Mở rộng value_protect phủ khối hợp-đồng-vai` (`:71`) · `Dựng phép kiểm ĐỦ-CỬA` (`:72`) ·
`Sửa regex **🆕 Last updated:** trong detector` (`:74`) · `Lật ô YC-008 ↔ YC-010` (`:78`).
- **E-verdict cụ-thể:** 12 dòng, mọi dòng mang verdict + con-trỏ (xem Đ-3).
- Metadata (`ts` · `@ 8dc5fd7f` · heading) **không được tính** — và không cần tính.
### Đ-2 · Neo xuất-xứ ĐÚNG **CẢ HAI TRƯỜNG** — lần thứ 2 LIÊN TIẾP
Heading khai `2026-08-11T00:45:53+07:00 @ 8dc5fd7f`. Đo:
- `git cat-file -t 8dc5fd7f` = `commit` (có thật) · `%cI` = **`2026-08-11T00:45:53+07:00`** — **khớp tới từng giây**.
- `_mind` mtime thật = **00:52:50**; commit kế tiếp `8dcb46a7` = **00:54:36** ⇒ lúc ghi, HEAD **đúng là** `8dc5fd7f`.
🟢 Lịch sử vai: S169 sai cả hai · S172 sai cả hai (`ts` +1m29s TƯƠNG-LAI, sha stale 13,5 giờ) · S186 đúng cả hai ·
**S189 đúng cả hai** ⇒ 2 lượt liên tiếp. Bản vá đã **giữ được**, không phải may một lần.
`[carry:mind-neo-xuat-xu-sai-2-truong]` — đề **HẠ nhiệt** (không đóng: n=2).
### Đ-3 · §E — 12/12 verdict ĐỐI-CHỨNG ĐĨA, **0 BỊA**
Lead cảnh báo phiên này **8/12 lượt return dính #53** ⇒ tao soi từng con-trỏ, không tin dòng §E.
| §E khai | đĩa | khớp |
|---|---|---|
| `tooling-auditor` PASS_WITH_FLAGS 7 | `TOOLING: PASS_WITH_FLAGS — 7 flag` | ✅ byte-exact |
| `harvest-curator` GATE-FAIL-5 | `HARVEST: GATE-FAIL-5` | ✅ byte-exact |
| `ring1-audit` 26Đ/4T/6KC trên 36 claim | `RING1: 26Đ/4T/6KC trên 36 claim` | ✅ byte-exact |
| `lead-stale-auditor` 11 FLAG deep (SÀN≠TỔNG) | `LEAD-STALE: 11 FLAG (deep)` + `:419` *"11 FLAG này là SÀN, KHÔNG phải TỔNG"* | ✅ cả vế phụ |
| `lead-gap-auditor` 7 FLAG deep | `:9` `## LEAD-GAP: 7 FLAG (deep)` | ✅ |
| `ring2-audit` 7Đ/3T/14KC, enum-gate 18/18 | `RING2: 7Đ/3T/14KC trên 24 claim` + `:34` `ENUM-GATE — 18/18` | ✅ cả vế phụ |
| `harness-eval` MIXED 38 trục / 13 REGRESSION | `HARNESS-EVAL: MIXED — 38 trục / 13 REGRESSION` | ✅ byte-exact |
| `harness-refine` 2 action / 16 BÁC | `HARNESS-REFINE: 2 action / 16 BÁC` | ✅ byte-exact |
| `harness-audit` 24Đ/7T/4KC · 4 instrument / 98 số | `:398` `END — HARNESS-AUDIT: 24Đ / 7T / 4KC — re-chạy 4 instrument · 98 số` | ✅ (xem F-5) |
| `score-counter` 4 mục nhắc≥2 | `:11` `SCORE-COUNT: 4 mục nhắc≥2` | ✅ |
| `score-count-auditor` SAI-TẦNG-2 (L1+L2), tầng-1 0 lỗi | `SCORE-AUDIT: SAI-TẦNG-2 — 2 loi dem (L1 … · L2 …)` | ✅ |
| `ctx-audit` @open (chưa verdict) | vai đang chạy | ✅ đúng trạng thái |
🔑 **Phán:** phiên #53 nặng nhất từng chấm (8/12), **§E vẫn 0 dòng bịa**. Củng cố đúng câu §A`:50`
*"độ bền nằm ở NƠI ĐỔ DỮ LIỆU, không nằm ở chất lượng đường truyền về"* — và lần này câu đó **đo được**, không phải khẩu hiệu.
### Đ-4 · Mục A TRUNG THỰC — 3/3 lời tự-nhận có vật chứng
Lead tự khai bị vòng kiểm bác 3 lần và dặn *"đừng tin vì lead tự nhận"*. Đo từng cái:
1. **`_end` ⟂ WAL** — `sub-lead-stale-auditor-open-S189.md:354-372` dựng bảng 7 bề mặt: 6 nói **ĐÓNG**,
`.claude/WAL.md:2` **đứng một mình** nói MỞ ⇒ *"WAL là view SAI, không phải hai bên ngang nhau"*.
§A`:51` ghi **"(6 chọi 1)"** = **chính xác**.
⚠️ Tao có kiểm nhầm-lẫn: `sub-tooling-auditor:89` cũng có cụm *"không phải 6 nhân chứng rời nhau"* — nhưng đó là
**6 bề mặt ROSTER**, chủ-thể KHÁC. **Không có lẫn số.** (Nêu vì hai con 6 cách nhau 265 dòng, dễ đọc chồng.)
2. **`YC-021` 3/4** — `sub-ring2-audit-open-S189.md:250-253` byte-exact: `YC-021 start=0 end=1 tiep=1 pause=1 <- 3/4 ** PHẢN-VÍ-DỤ **`,
kèm câu *"giả-thuyết 'thói quen chỉ khắc 2 site' bị bác"*. ✅
3. **"bề-mặt-đo chưa chạm"** — `harness-audit-return.md` bảng L2: ❌ **TRƯỢT**, `c610ed0d` + `9694ae9a` đổi **2 file corpus** trong cửa sổ. ✅
🟢 Đáng ghi: cả 3 được ghi ở dạng **tự-buộc-tội**, không bào chữa; và bác (ii) đã **back-propagate đúng** thành
ý §D`:72` (*"thay giả thuyết thói-quen đã bị bác"*) ⇒ **chuỗi rebuttal → §D còn sống ở ca này**.
### Đ-5 · A8 — 0 con điểm lọt block-0
Quét dưới `MIND-RULES-END`: 3 hit thô, **cả 3 là dương-giả**`6,4%`/`60,1%` = tỉ lệ **drain** (`:70`);
`score-counter`/`score-count-auditor` = **TÊN VAI** (use⟂mention), không phải giá trị điểm.
`KHÔNG ĐO ĐƯỢC` có mặt đúng chỗ (`:59`), khung là **nhánh ĐÃ LOẠI** kèm lý do `A8`. ✅ (control-dương: 33 dòng `- `)
### Đ-6 · Bất-biến chuỗi — đếm ĐĨA, khớp máy
`p` = `_pause-*.md` **0** + `pause-*.md` **0** (dual-accept) = **0** · `_tiep-*` = 0 · `|block|` = **1**.
Kỳ vọng `[p, p+3]` = `[0,3]`**1 hợp lệ**. Máy in `|block| = 1 ; p = 0`**số tao == số máy, 0 lệch**.
Không có `_end` ⇒ 0 dòng tự-khai để cross-check (máy cũng khai vậy). Đĩa vẫn là nguồn.
🔎 *Tự soát thước:* `grep -c '^## MIND-'` = 1; hit còn lại `<!-- MIND-TOP -->` **không** khớp `^## MIND-`
⇒ thước sạch ở ca này (khác S185, nơi schema-placeholder thổi 3→4).
### Đ-7 · §B vs `WAL next:` — KHỚP
`WAL:18` `next: đợi anh. Có lệnh mới ⇒ ghi mạch mới vào đây rồi chạy.`
§B`:56` = chạy loạt vá xếp hàng **rồi chờ việc kế của owner**. Cùng hướng, không lệch ⇒ không phải kích hoạt "tin sổ máy".
### Đ-8 · §C vs bản-đồ việc — KHỚP, không mù chiều nào
4 delta §C đều truy được về `run.md`: sai-đơn-vị byte⟂ký-tự (`run.md:57`) · 3 mục NEXT-em đã land (`:59-60`) ·
Goodhart `gap-carry-aged=0` (`:70`) · re-stamp 47 slug reset 51/56 (`:70`). **Không có việc trên bản-đồ mà §C mù.**
### Đ-9 · Nhãn D + hình-dạng — ĐẠT
9/9 ý §D mang đúng 1 nhãn trong tập đóng. 5 heading `A.``E.` đủ, **0 mục trống-im-lặng**.
Không thấy ý nào đã ĐỊNH-ĐOẠT mà còn đeo nhãn cũ (kiểm chéo WAL/HANDOFF).
---
# 🔍 HAI CÂU LEAD BẢO "ĐỪNG NỂ" — trả lời thẳng
### Câu 1 — Mục A kể "bị bác 3 lần": có kể thiếu / kể nhẹ / bỏ cái nặng nhất không?
**Đo, không nghe:** quét mọi vết bác trong 11 artifact, lọc riêng cái **nhắm vào LEAD** (khác cái nhắm vào vai bị kiểm).
| vết bác tìm được | nhắm ai | §A có kể? |
|---|---|---|
| `_end` ⟂ WAL, 6/7 bề mặt chọi 1 (`lead-stale:354-372`) | **LEAD** | ✅ có, số đúng |
| `YC-021` 3/4 phản-ví-dụ (`ring2:250-253`) | **LEAD** | ✅ có, kèm *"kết luận F-4 vẫn đứng, thậm chí vững hơn"* |
| L2 *"agent-memory đều chưa chạm"* ❌ TRƯỢT (`harness-audit` bảng L) | **LEAD** | ✅ có, kèm 2 SHA |
| `ring1` 4T / `ring2` 3T | vai bị kiểm (`tooling`/`harvest`/`lead-stale`/`lead-gap`) — **không phải lead** | n/a |
| `ring2:211-215` sai-đơn-vị `19 carry` = DÒNG ≠ 56 slug | `lead-stale` NỀN-MÁY | ✅ **CÓ** — lead xếp vào §C`:65` *"dòng⟂slug (19 vs 56 carry, lặp 3 lượt)"* |
| `tooling:89` tự rút *"không phải 6 nhân chứng rời nhau"* | vai tự-hiệu-chỉnh | n/a |
🟢 **PHÁN: §A KHÔNG kể thiếu, KHÔNG kể nhẹ.** Cả 3 đều là bác nhắm thẳng lead, đều có vật chứng, và
lead ghi ở dạng **tự-buộc-tội** (giữ nguyên câu *"thước đúng là đếm nhân chứng"*, *"giả thuyết bị bác"*).
Cái nặng nhất — L2 TRƯỢT, tức lead tuyên sai về **chính bề mặt lead đang dùng để biện hộ****có mặt**, không bị làm mềm.
Ý sinh từ cú bác (ii) còn được **back-propagate** thành §D`:72`.
🔸 **Một dư-lượng duy nhất, và tao xếp INFO chứ không FLAG** (nói rõ vì sao, để lead tự cân):
`harness-audit` chấm **2** claim của lead — L2 (TRƯỢT, đã kể) và **L1 = `KHÔNG CHẤM`**, kèm câu
*"vai KHÔNG CHẤM row-count khối `measured`, nhưng **nêu lệch 29↔30 để lead tự soát**"*.
§A không nhắc L1. Xét công bằng: L1 **không phải một cú bác** (là non-verdict) ⇒ đếm "bác 3 lần" **vẫn đúng**.
Nhưng nó để lại **một vòng hở chưa ai đóng** (lệch `29 ↔ 30` row) mà không sổ nào cầm.
⇒ Không phải lỗi trung thực; là **việc rơi giữa hai vai**. Nêu để lead soát, đúng như `harness-audit` yêu cầu.
### Câu 2 — §E 12 verdict: có con nào "nghe hợp lý mà artifact rỗng / không khớp"?
**Soi hết 12/12, không con nào bỏ dở** — bảng Đ-3 ở trên. Kết quả: **0 dòng rỗng, 0 dòng lệch.**
Sub-claim gắn kèm cũng soi từng cái: `SÀN≠TỔNG` (`lead-stale:419`) · `enum-gate 18/18` (`ring2:34`) ·
`24Đ/7T/4KC` (`harness-audit:398`) · `4 mục nhắc≥2` (`score-counter:11`) ·
**`tầng-1 0 lỗi`** (`score-count-auditor:16` hàng tầng-1 ✅ + `:71` *"Khớp VERBATIM dòng lead chép ở `:90`"*) — **khớp cả 5**.
🔴 **Cận-dưới có khai (nấc tao KHÔNG với tới):** tao chấm **§E ↔ artifact có khớp không**.
Tao **KHÔNG CHẤM** artifact đó **đúng/sai bên trong** — đó là turf `ring1` / `ring2` / `harness-audit`.
Ví dụ: `ring1` tuyên `26Đ/4T` — tao chứng §E chép đúng chuỗi đó, **không** chứng 26 đúng là 26.
⇒ Đọc Đ-3 thành *"12 verdict này ĐÚNG"***đọc quá**; nó chỉ nói *"12 verdict này KHÔNG BỊA"*.
---
# FLAG — 5 (1 HIGH · 2 MED-HIGH · 1 MED · 1 LOW-MED) + 2 INFO
## 🔴 F-1 (HIGH) — carry ĐÚNG PHẠM VI rơi: 2/4 ý `treo-chờ-anh`+`gần-chốt` vắng block-0
### `mind-D-khong-back-propagate` — **TÁI PHÁT LẦN 3** (S172 F-2 → S186 F-1 → S189)
Phạm vi khoản (i)2 = nhãn `treo-chờ-anh` + `gần-chốt` của `_mind-s-14.md` MIND-3 §D (`:66-75`). Đúng 4 ý.
Đo bằng grep nội-dung trên `_mind-s-15.md` (control-dương: `ring2`=4 · `YC-025`=1 · `treo-chờ-anh`=6):
| # | ý L14 | nhãn | block-0 L15 | nhà durable |
|---|---|---|---|---|
| 1 | `(74) rotate · (76)(77)(78)(79) · tồn (22)(67)(72)` `:74` | treo-chờ-anh | ✅ **CÓ** `:76` (+ thêm `(89)`) | HANDOFF ✅ |
| 2 | `5 vai over-cap 4 hình-dạng` `:73` | gần-chốt | ✅ **CÓ** `:70` (thu hẹp → `ring2` over-cap) | — |
| 3 | **`W8 authz Đ1: mở khi anh nói "ổn rồi"`** `:69` | **treo-chờ-anh** | ❌ **0 hit** (`W8`=0 · `authz`=0) | HANDOFF + WAL + STATUS ✅ |
| 4 | **`[carry:w7b-inbox-param]` BE inbox param + bỏ `Take(100)`** `:70` | **gần-chốt** | ❌ **0 hit** (`w7b`=0 · `inbox`=0 · `Take(100)`=0) | HANDOFF`:17` + WAL ✅ |
🟢 **KHÔNG mất việc** — cả 2 đều có nhà bền (giống S172, khác hẳn S158). Cái mất là **LIỀN MẠCH**:
cửa-sổ mới nạp `_mind` sẽ thấy §D **9 ý mà không ý nào** là hai món này.
🔴 **Nặng hơn thường lệ ở 2 điểm:**
1. **`w7b` mang nhãn `gần-chốt`** = ý *sát đích nhất* của L14, và `_end` s14 xếp nó **ĐẦU TIÊN** trong dòng `carry:`.
Món gần-chốt nhất lại là món rơi ⇒ lệch **theo hướng trấn-an**.
2. **`W8` còn giữ tiền-đề mà mất kết luận:** §D`:77` vẫn có *"Review 1 lần module GĐ3 trên prod theo `YC-025`"*
đúng **cái cổng** mở W8 — nhưng **thứ sau cổng biến mất**. Giữ điều kiện, mất kết luận: xấu hơn rơi cả cặp,
vì bảng §D **trông như có phủ** vùng đó.
**Gốc (giữ chẩn đoán S186, thêm 1 điểm mới):** chiều ghi vẫn **MỘT chiều** — lead dựng hàng đợi ở HANDOFF/WAL
rồi không back-propagate về §D. Điểm mới: lượt này back-propagate **CÓ chạy đúng một lần** (bác `YC-021` → §D`:72`)
**không phải cơ-chế chết, mà là cơ-chế chạy TÙY HỨNG**. Nghịch lý: ý sinh từ **vòng kiểm** thì về được §D;
ý sinh từ **sổ bền phiên trước** thì không.
## 🟠 F-2 (MED-HIGH) — `ActiveOthers` rơi **KHÔNG NHÀ**, và nhãn của nó nằm NGOÀI tầm soát của chính contract tao
`_mind-s-14` §D`:71`: *"F-3 `ActiveOthers` 0-consumer (Designer đã đi lát-cắt-history) — giữ hay gỡ ở wave sau"* — nhãn **`đang-cãi`**.
Đo: **0 hit** trong `_mind-s-15.md`. Nhà durable (`grep -rFl` trên HANDOFF + WAL + STATUS) ⇒ **KHÔNG-CO-NHA**
(control-dương `YC-025` hit cả 3). Còn sống ở: `session-14/_mind`, `implementer-backend/MEMORY.md`, 3 artifact run S187,
sổ phiên ⇒ **toàn nguồn ĐÃ ĐÓNG hoặc không ai đọc lúc mở phiên.**
🔴 **Ý DUY NHẤT trong 7 ý §D của L14 vừa rơi khỏi `_mind` vừa 0 nhà bền** — tức món **thật sự mất địa chỉ**,
trong khi F-1 chỉ mất liền mạch. Và nó là **quyết định kỹ thuật còn treo** (giữ hay gỡ field 0-consumer).
🔑 **Lỗ THIẾT KẾ — tự tố cáo contract của chính tao:** khoản (i)2 chỉ soi `treo-chờ-anh` + `gần-chốt`.
Nhãn **`đang-cãi`** — nghĩa đen *"chưa ai thắng"***KHÔNG nằm trong phạm vi carry-check**.
**Ý dễ bốc hơi nhất lại là ý không vòng nào có nghĩa vụ đuổi theo.**
Cùng HÌNH với `nén-là-lane-không-ai-gác` (S162 FLAG-2) và `mồi-hoạt-động-mà-không-ai-có-nghĩa-vụ-sửa` (S185 F-3).
Im theo đúng chữ contract thì món này chết sạch ⇒ tao nêu **ngoài phạm vi, CÓ KHAI**.
**Đề (lead phán — tao KHÔNG tự sửa persona):** mở phạm vi khoản (i)2 sang `đang-cãi`, hoặc buộc `_end` liệt mọi ý `đang-cãi` xuống `carry:`.
## 🟠 F-3 (MED-HIGH · THIẾT KẾ) — `_context-s-15` FLOW **RỖNG** ⇒ lời anh phiên này **0 nhà hợp-lệ**
### Finding S169/S170 của CHÍNH TAO — **chưa port sau 2 phiên-logic**
`_context-s-15.md` (2.944 B) = scaffold nguyên bản; `(b) FLOW` chứa đúng một dòng
`_(chưa có PAUSE — entry đầu append @/pause đầu tiên của phiên)_`. Luật in ngay trên: **`FLOW = append-only @pause-only`**.
Phiên này **0 `/pause`** ⇒ FLOW **rỗng 100%** suốt phiên. Nhưng **anh CÓ nói**: `run.md:11` chép
*"turn trước tao đã đưa ra quyết định thế nào"* — chính lời bắt lỗi mở ra cả lượt chạy trọn, và `lead-gap-auditor`
xếp thành F-1 `gap-incident-unrecorded`. Đo nhà của lời đó trên `so-yeu-cau-chu-du-an.md` + `WAL.md` + `HANDOFF.md`**0 hit**.
⇒ Lời anh phiên này chỉ tồn tại dưới dạng **trích dẫn trong 1 tệp run-folder**, không phải sổ verbatim.
🔴 **Kẹp cứng của thiết kế:** `_mind` **bị CẤM** chép verbatim (rào-1) và **làm đúng** — nhà hợp-lệ duy nhất là
`_context` FLOW — mà FLOW **chỉ mở ở `/pause`**. ⇒ **Phiên 0-pause = đường hợp-lệ, tuân thủ trọn vẹn, và mất sạch verbatim.**
Lead **không vi phạm chữ nào**; hỏng ở **LUẬT** — cùng hình S185 F-1 (*máy biết bài, lệnh không cưỡng*).
🧊 **Lineage tự-tố:** lỗ y hệt đã **vá cho `_mind`** bằng *refresh-bookend* @S162; tao nêu **chưa port sang `_context`**
@S169/S170 (mồi @close); **@S189 vẫn chưa port**. Đề 1 câu: cho `_context` FLOW nhận **1 entry @bookend** khi cửa-sổ
đóng mà `p = 0`, hoặc `_end` bắt buộc mang `flow-entries: 0 — <lý do>` (vế fail-LOUD là vế quan trọng).
## 🟡 F-4 (MED) — §E phủ **spawn 12/12** nhưng **máy 0/≥9**, và block-0 KHÔNG có con-trỏ tới `run.md`
- **Spawn: 12/12 HOÀN HẢO.** Đối chiếu `run.md:33-45` (V1 3 · V2 3 · V3 3 · khối chấm điểm 2 · `ctx-audit` 1) = 12.
Kể cả V4 nén-ngủ **NO-OP có khai** cũng đúng: 0 spawn ⇒ 0 dòng. **Không sót lượt nào.**
- **Máy: 0 dòng.** `run.md:14-29` liệt **14 hàng đo tươi** (test 680 · Migration 72 · counter 62→63 ·
`nhip-no-probe` deep 1/1 OVERDUE · `distill-shard-probe` 10/15 · detector 58 + INFORM 26 · H17 spec-audit ·
crystallized headroom · RAG stale 73 ngày · thư 2 kênh · User-Mark 13) + `run.md:42` V5
(`governance-detectors` + `memory-selfimprove-audit` + `crystallized-backfill`). **Không dòng nào vào §E.**
- **REGRESSION nội-bộ:** `_mind-s-14` MIND-3 §E`:80` **CÓ** hàng riêng *"Máy cửa này: …"* liệt ~10 máy — cùng tác giả, cách **4 giờ**.
- **Cộng dồn:** block-0 **0 hit** con-trỏ `run.md` (MIND-3 `:81` có hàng *"Con-trỏ artifact"*) ⇒ bảng đo tươi 14 hàng
**không với tới được từ `_mind`**; cửa-sổ sau thấy 12 sub-artifact nhưng **mất bản đồ cấp-run**.
⚖️ **Khai giới hạn (chống thổi):** *"engine-run"* đọc chặt = lượt chạy **Workflow-engine** (HMW fan-out / `fable-*`);
phiên này **0** — mọi vai là spawn thẳng. Theo chữ đó §E **không vi phạm**. Tao vẫn giương cờ ở trục **LIỀN MẠCH**,
không ở trục ĐỦ, vì tiền lệ MIND-3 + `_context` rỗng (F-3) khiến `_mind` là bản ghi mềm **duy nhất** của phiên.
## 🟡 F-5 (LOW-MED) — `harness-audit-return.md` dòng-1 đóng băng `(đang chạy)` — đúng class giết artifact S168
`harness-audit-return.md:1` = `HARNESS-AUDIT: (đang chạy — artifact-first, dòng-1 chốt ở cuối)`.
Verdict THẬT ở `:398` `END — HARNESS-AUDIT: 24Đ / 7T / 4KC …`. **Lượt rewrite dòng-1 không bao giờ tới.**
🧊 Đúng bài đã ghi trong nhật-ký vai (S168): *"dòng-1-sẽ-được-viết-lại-sau là hợp-đồng CHỈ đúng nếu có lượt cuối"*
ca S168 mất trắng verdict, artifact **trông như đang chạy vĩnh viễn**. Lần này hại **KHÔNG hiện thực hoá**
(END có ghi, §E đọc đúng) ⇒ giữ LOW-MED, không thổi.
🔑 **Đảo chiều đáng ghi:** §E của `_mind` **ĐÚNG HƠN dòng-1 của chính artifact**. Ai áp máy móc
*"tin artifact/sổ máy hơn lớp mềm"* ở ca này sẽ **kết tội một bản ghi ĐÚNG**.
**Lần thứ 3** của lớp lệch-ngược (S173 F-3 WAL sai/`_mind` đúng · S186 F-3 `run.md` stale/`_mind` đúng · S189 dòng-1 stale/§E đúng).
Đủ 3 ca để nói thành luật: **"tin sổ máy" là heuristic, KHÔNG phải tiên đề.**
*(Tệp NÀY thi hành đúng bài đó: verdict ghi TĂNG DẦN, dòng-1 không hứa rewrite.)*
## ⚪ INFO-1 (ngoài trục — turf `lead-stale-auditor`)
Lead khai `measured` baseline + over-cap *"đã đổi trạng thái thật"*. **Tao kiểm: ĐÚNG cả hai**
`run.md:57` byte⟂ký-tự ⇒ **0/29 vượt** (2 over-cap là giả) · `run.md:60` `measured` **19/29 → 30 row 29/29 phủ**, land `ef1d4fbb`.
**rơi khỏi §D vì ĐÃ XONG, không phải rơi im lặng.** Phân biệt lead nhờ tao làm — nó **đứng vững**.
🔸 Dư-lượng: `docs/HANDOFF.md:11` **và** `:68` **vẫn** kêu số cũ (*"chết kỳ thứ 5 · 19/29 · 18/19 lệch · quá hạn 9 ngày"*).
Đã **xếp hàng**`run.md:83` ⇒ không mất, nhưng là **instance sống của đúng class §C`:63`** lead vừa viết trong
chính block này (*việc đã xong mà sổ chưa lật*). Bài học cách chỗ vi phạm **~20 dòng, cùng lượt ghi** — hình quen (S162 · S172 · S173).
## ⚪ INFO-2 — vòng hở `29 ↔ 30` không ai cầm
`harness-audit` hàng **L1**: *"vai KHÔNG CHẤM row-count khối `measured`, nhưng nêu lệch **29↔30** để lead tự soát"*.
§A không nhắc (hợp lệ — L1 là non-verdict, không phải cú bác ⇒ đếm "3 lần" vẫn đúng). Nhưng lệch chưa ai đóng.
---
# 🎣 MỒI-NGẦM gieo cho @close
**Ý chọn:** §D`:72`***"Dựng phép kiểm ĐỦ-CỬA cho mọi luật khắc vào file lệnh (thay giả thuyết thói-quen đã bị bác)"*** — nhãn `mới-nêu`.
**Vì sao ý này:**
- **0 nhà durable lúc gieo** — đo `ĐỦ-CỬA` / `DU-CUA` / `đủ-cửa` = **0 hit** trên HANDOFF + WAL + STATUS + sổ-yêu-cầu
(control-dương `YC-027` hit `WAL`). Chỉ sống ở `_mind` §D`:72` + `sub-ring2-audit-open-S189.md:253`.
- **Sinh từ một cú BÁC** — nó thay thế giả thuyết lead vừa bị bẻ ⇒ đúng **kênh duy nhất còn hoạt động** theo chẩn đoán F-1
(rebuttal → §D về được; sổ-bền → §D thì không). Gieo vào đúng kênh đó để đo nó **bền hay tùy hứng**.
- **Ngược mồi S186** (món đó có chủ rõ = anh). Món này **chưa có chủ** ⇒ rơi thì hỏng ở **THIẾU CHỦ**, không ở đường dẫn —
bổ đúng nửa còn thiếu của phổ (S185 hỏng vì thiếu chủ · S186 hỏng nếu đứt đường dẫn).
**Tiêu chí chấm @close (falsifiable, chốt TRƯỚC):** ĐẠT nếu tới cửa đóng ý này có mặt ở **≥1** nơi ngoài `_mind` §D —
`_end` `carry:` · slot HANDOFF · WAL · block `_mind` mới · sổ-yêu-cầu. **TRƯỢT** nếu vẫn **0 hit** ngoài `_mind`.
⚠️ **Khai kẽ (không tả thành tính năng):** single-lead ⇒ *"bên bị chấm không biết mồi"* chỉ đạt **xuyên cửa-sổ**.
---
### END — `CTX-AUDIT: TRUOT — @open — 5 FLAG`
`5 FLAG (1 HIGH · 2 MED-HIGH · 1 MED · 1 LOW-MED) + 2 INFO · 9 ĐẠT`
🔴 **TRƯỢT ở đúng 1 chiều: LIỀN MẠCH** (F-1 carry · F-2 mất địa chỉ · F-3 verbatim 0 nhà · F-4 §E mất bản đồ run).
3 chiều kia **ĐẠT**: **THẬT** (§E 12/12 đối chứng đĩa, **0 bịa**, dù #53 trúng 8/12 · mục A 3/3 bác có vật chứng, không làm mềm) ·
**ĐỦ** (5 mục · nhãn 9/9 · spawn 12/12) · **SẠCH** (3 rào, máy + mắt · 0 điểm lọt block-0).
Máy `mind-check` tự re-chạy = **11 đạt / 0 TRƯỢT / 0 cờ****cả 5 FLAG nằm NGOÀI tầm máy**.
**Nhánh chạy = FALLBACK HỒI-TỐ ĐẦY-ĐỦ** (0 pause / 0 tiep ⇒ vai-1 `ctx-curator` + vai-2 `ctx-verifier` chưa chạy lần nào)
**KHÔNG được đọc thành "đã qua 3 lớp"**.
🔵 **Propose-only:** tao PHÁN, lead GHI. Không tick counter, không sửa `_mind`, không seed diary, không commit.
== HẾT ==

View File

@ -0,0 +1,236 @@
HARVEST: GATE-FAIL-5
# sub-harvest-curator-open-S189 — H2 harvest-MD integrity @open (phiên-LOGIC L15)
> Vai: `harvest-curator` (H2, read-only + propose-only — single-writer = lead, B3 VERIFY→APPEND).
> Run-folder: `.claude/workflows/runs/2026-08-10-S189-bookstart-open/` · 2026-08-10 · vòng V1 @open.
> Kỷ-luật ghi: APPEND TỪNG MỤC ngay khi chốt (chống #53 — lượt return trước của tao bị cắt giữa câu, việc KHÔNG mất, đo lại từ đĩa).
> Kết thúc hợp lệ = dòng `== HẾT ==` ở CUỐI file (dùng, không phải nhắc).
**Verdict: GATE-FAIL — 5 finding** (2 HIGH · 1 MED · 2 LOW) · 5 trục: Coverage ❌FAIL · Completeness 🔶 · Fidelity ✅STRONG · Placement ✅ · Corruption ✅.
---
## 0. Số LEAD KHAI (`_end`) vs số TAO ĐẾM — đối chứng
Ba con số dưới đây là **lead khai**, không phải tao đo. Tao đếm lại từ đĩa:
| Khai (lead `_end`) | Tao đếm được | Khớp? | Lệnh tái-lập |
|---|---|---|---|
| S187 = **19 file + `implement-synthesis.md`** | **19** non-synthesis + **1** synthesis = **20** | ✅ **KHỚP CHÍNH XÁC** | `ls -1 runs/2026-08-10-S187-duyet-hd-tu-khkk/ \| grep -v synthesis \| wc -l` → 19 |
| S188 = **10 file + `bookend-close-synthesis.md`** | **13** non-synthesis + **1** synthesis = **14** | ❌ **LỆCH 3** → F-03 | `ls -1 runs/2026-08-10-S188-bookend-close/` → 14 dòng |
| @close S188 **"seed 12 diary"** | **12** `MEMORY.md` trong `c7b7ca45` | ✅ **KHỚP CHÍNH XÁC** | `git show --name-only --format='' c7b7ca45 -- '.claude/agent-memory/*/MEMORY.md' \| grep -c MEMORY.md` → 12 |
🔴 **"seed 12 diary" ĐÚNG ở tầng FILE nhưng KHÔNG có nghĩa "đã phủ hết vai đã chạy"** — xem F-01. Đây đúng loại bẫy tao tự dính @S181: đo **TÊN/SỐ FILE** ra đẹp, đo **VAI NÀO CÒN THỦNG** ra xấu.
---
## 1. COVERAGE — ❌ **FAIL** (14/18 vai = 78%)
**Cột-A dựng theo luật vá @S181-F03** = HỢP của {vai có sub-file trong run-folder} {vai có VERDICT trong WAL chain} — KHÔNG lấy từ bảng dẫn-xuất, KHÔNG lấy riêng run-folder (nếu chỉ lấy run-folder thì phiên không-mở-folder sẽ cho `AB=∅` = **ĐẠT-ảo do cấu trúc**).
- Cột-A S187 (7 vai, từ 17 sub-file): `cicd-monitor` · `implementer-backend` · `implementer-frontend` · `investigator-codebase` · `reviewer` · `back-end-reviewer-style` · `test-specialist`**7/7 CÓ landing**
- Cột-A S188 (11 vai, từ 13 file): `ctx-audit` · `harvest-curator` · `lead-gap-auditor` · `lead-stale-auditor` · `ring1-audit` · `ring2-audit` · `ring5-audit` · `tooling-auditor` · `harness-audit` · `harness-eval` · `harness-refine`**7/11 CÓ landing**
- **TỔNG: 14/18 = 78%** (đo NỘI DUNG: `grep -c 'S188'` + `grep -c 'S187'` trên từng `MEMORY.md`, đối chiếu 2 commit closeout — KHÔNG đo tên file, KHÔNG đo mtime).
### 🔴 F-01 (HIGH) — 4 vai chạy THẬT @S188, diary nhận **0 chữ**: **42.975 B mồ côi**
| Vai | Sub-file trên đĩa | Byte | mtime | `S188` trong MEMORY.md | Entry cuối THẬT |
|---|---|---|---|---|---|
| `ring2-audit` | `sub-ring2-audit-close.md` | **18.195** | 21:19 | **0** | S186 |
| `ring5-audit` | `sub-ring5-audit-close.md` | **11.282** | 21:08 | **0** | S185 |
| `harness-audit` | `harness-audit-return.md` | **10.664** | 21:30 | **0** | S186 |
| `ctx-audit` | `sub-ctx-audit-close.md` | **2.834** | 20:22 | **0** | S186 |
- Kiểm nhãn thay thế (chống dương-giả do đổi nhãn): cả 4 vai đều **0 hit** cho `S187` lẫn `S188`; `grep -o 'S1[0-9][0-9]' | sort -u | tail` cho max = **S186 / S185**. Không phải "ghi bằng nhãn khác" — là **không ghi**.
- Kiểm bằng git (chống tin-lời-khai): `git log --since='2026-08-10 00:00' -- .claude/agent-memory/<vai>/MEMORY.md``ring5-audit` chỉ có `38896120` @04:08 (seed S185); `ring2-audit`/`harness-audit`/`ctx-audit` chỉ có `5a77f4f1` @18:20 — và `5a77f4f1` **numstat = +1/0** cho ring2 & harness-audit, dòng thêm là **entry S186** (backfill muộn), `ctx-audit` +18/44 = **nén**, không phải append S188.
- 3/4 file **kết thúc SẠCH** (`== HẾT ==` ở dòng cuối) và **mang verdict đầy đủ** ⇒ đây **KHÔNG phải** ca "sub chết giữa chừng nên không có gì để gom". Việc làm xong, chữ nằm trên đĩa, chỉ là **không ai mang về nhà**.
### 🔴 F-02 (HIGH) — Cơ-chế: chữ về **lời kể của lead**, không về **nhà của vai**
Commit `ef1d4fbb` (21:30, "chạy-bù") và `.claude/WAL.md` **kể tên + verdict** đúng 3 vai đang thủng:
> WAL: *"ring5 1Đ5T→lật 6 `tự ý bỏ` + SÓT-1 · ring2 lần-3 2Đ1T2KC → HOÀN 8 class tally từ git 5a77f4f1 · harness-audit gộp 4Đ2T1KC"*
Nhưng `ef1d4fbb` seed diary cho **4 vai KHÁC**: `harness-refine` · `harvest-curator` · `reviewer` · `ring1-audit`. **0/3** vai được kể tên nhận chữ.
⇒ Phát biểu cơ-chế (truy được, không dừng ở triệu-chứng): **narrative-capture ≠ memory-landing.** Findings được chưng vào *commit message + WAL* — hai bề mặt **lead đọc**, không phải bề mặt **vai đọc lúc spawn**. Hệ quả đo được: lượt spawn tới của `ring5-audit` nạp L1 **2.474 B / entry cuối S185**, hoàn toàn không biết mình vừa *"lật 6 nhãn tự-ý-bỏ + RCA ONESHOT-S188"*.
**Đề xuất (propose-only):** phép chặn = luật gom lấy danh-sách từ **`ls runs/<id>/`** (GỐC) **WAL verdict-row**, rồi **đối chiếu từng vai** với `grep -c '<nhãn phiên>' agent-memory/<vai>/MEMORY.md` — vai nào 0 thì **không được đóng gate**. (Cùng họ với phép chặn tao đề @S173: *"lấy từ FOLDER, không lấy từ BẢNG"*.)
---
## 2. COMPLETENESS — 🔶 PASS-with-flags
### F-04 (LOW) — `sub-ctx-audit-close.md` trượt **hợp-đồng do chính nó khai**
- File tự khắc luật ở **dòng 5**: *"Verdict tổng ở §CHỐT cuối file. Kết thúc hợp lệ = dòng `== HẾT ==`"*.
- Dòng cuối THẬT = `---`. File **2.834 B / 48 dòng**.
- 🔴 **Bẫy thước tao suýt dính:** `grep -c '== HẾT =='` trả **1** ⇒ đọc vội thành "có terminator". Hit đó nằm ở **dòng 5** = câu **NHẮC luật** (mention), không phải **DÙNG** (use). Thước đúng = **dòng cuối non-empty**, không phải đếm hit. (Đúng lớp citation-trap use⟂mention tao đã ghi ở m#20.)
- Giảm nhẹ: verdict **có** ở dòng 31 (`verdict: dat=9 TRUOT=0 co=2 bo-qua-co-khai=0`) ⇒ mất phần đuôi, không mất kết luận.
### F-05 (LOW, **tự tố**) — file của CHÍNH TAO cũng thiếu terminator
`sub-harvest-curator-close.md` (S188, 15.334 B): `grep -c` ra **4** hit `== HẾT ==` nhưng **dòng cuối** là câu đang dở *"…tức tao đang làm việc với trí nhớ khuy…"* ⇒ 4 hit đều là mention. Tao **cùng lỗi** với vai tao đang chấm. Ghi vào đây để lead thấy mẫu đủ rộng, không phải bệnh riêng `ctx-audit`.
**Đo trọn 11 file S188** (dòng cuối non-empty): kết `== HẾT ==` = **3** (`ring2-audit` · `ring5-audit` · `harness-audit`) / **8 file còn lại không**. Chỉ 2 file **tự khai** hợp-đồng terminator (`ctx-audit`, `harvest-curator`) nên chỉ 2 file đó bị tính TRƯỢT; 6 file kia **không bị buộc** (không khai luật) ⇒ ghi nhận, **không** tính finding — tránh áp luật cho vai chưa nhận luật.
### Spawn-record 4-field
13 vai có entry S187/S188 đều mang cấu trúc `{task · verdict · learned · surprise}` + nhãn `[LEAD SEED ON-BEHALF]` + `nguồn runs/...`. **0 vai thiếu field.**
---
## 3. FIDELITY — ✅ **STRONG** (0 dấu hiệu bịa, không escalate `reviewer`)
Đối chiếu **lời khai của lead** với **chữ trên đĩa**, byte-level:
| Claim (WAL / commit) | Đĩa | Kết |
|---|---|---|
| *"ring2 lần-3 **2Đ1T2KC**"* | `sub-ring2-audit-close.md` dòng cuối: `**RING2: 2Đ · 1T · 2KC**` | ✅ khớp |
| *"harness-audit gộp **4Đ2T1KC**"* | `harness-audit-return.md` dòng cuối: `**HARNESS-AUDIT (gộp): 4Đ · 2T · 1KC**` | ✅ khớp |
| *"seed 12 diary"* | 12 `MEMORY.md` trong `c7b7ca45` | ✅ khớp |
| *"19 file"* (S187) | 19 non-synthesis | ✅ khớp |
| *"W10 dry-run Dev PASS 5/5"* (STATUS:6) | `sub-w10-dryrun.md` dòng cuối: `**W10: PASS — 5/5 bước.**` + `== HẾT ==` | ✅ khớp |
⇒ Lead **KHÔNG bịa**. Mọi verdict được kể đều truy về đúng dòng trên đĩa. Vấn đề của phiên là **đường ĐI của chữ** (F-01/F-02), **không phải độ THẬT của chữ**.
### F-03 (MED) — riêng con số "10 file" (S188) không tái-lập được ở bất kỳ thời điểm nào
- Đĩa hiện tại: **13** non-synthesis + 1 synthesis = **14**.
- Tại thời điểm `bookend-close-synthesis.md` sinh (20:43): đếm theo mtime chỉ có **8** non-synthesis.
-**10** không khớp mốc 20:43 (8), cũng không khớp mốc cuối (13). 5 file land SAU synthesis (21:08 → 21:30, đợt chạy-bù).
- Đây là **m#12 mẫu-số-có-ngày-đo** ở dạng nặng hơn: số không chỉ *cũ*, mà **không ứng với instant nào**. Không phải bịa — nhiều khả năng đếm giữa chừng rồi không đo lại. **Đề xuất:** con số file trong `_end` phải sinh bằng `ls | wc -l` chạy **sau** file cuối cùng, hoặc ghi kèm giờ-đo.
---
## 4. PLACEMENT — ✅ PASS
- **29** role-dir dưới `.claude/agent-memory/` (đếm bằng `find -mindepth 1 -maxdepth 1 -type d`, **không** dùng `cut -d/ -f3` — guard m#11 chống nuốt `memory-budget.json` + `.mfe-state.json`).
- Mọi delta S187/S188 nằm **đúng nhà** của vai. **0** ca lệch nhà.
- **Empty-dir residue = 0** (`find .claude -type d -empty`). Dùng `find`, **không** dùng git — git **mù thư-mục rỗng** (m#13, bài S122).
- **0** stray `<runfolder>/.claude/...` (lỗi cwd-relative).
---
## 5. CORRUPTION — ✅ PASS (baseline cập nhật)
**Thước có CONTROL DƯƠNG** (luật tao tự đặt sau F-04@S181`grep -P` từng chết `rc=2` mà stderr chui vào file kết quả, đẻ ra `FILES=1` trông hợp lệ):
- Control: file `/tmp/ctrl.md` (15 B) chứa 1 byte-sequence `EF BF BD` → máy đếm **bắt được 1 hit****thước SỐNG**, `rc=0`. Không có control thì kết quả "sạch" là vô nghĩa.
- Phép đo: `perl` mở `<:raw`, đếm `/\xEF\xBF\xBD/g` (byte-mode). **KHÔNG** dùng `grep -P`.
- 🔴 Khai rõ **mẫu-số có mệnh-đề-loại-trừ** (m#20): universe = `find .claude docs -name '*.md' -type f`.
**Kết quả: 26 hit / 13 file** (đã trừ control). So baseline tao ghi @S172 (**24 hit / 11 file**) ⇒ **Δ +2 hit / +2 file**. Mở cả 2 ca mới, **cả 2 LÀNH**:
- `docs/gotchas.md:1101` — nằm trong câu mô tả *triệu chứng* sqlcmd codepage mangle (`H? th?ng trung th?`) = **mention**.
- `runs/2026-08-09-S185-bookend-close/sub-ring1-audit.md:150` — trích **bằng chứng** từ archive: *"console showed `C?ng` = sqlcmd codepage mangle … **NOT data corruption**"* = **mention**, và chính nó đang dán nhãn use⟂mention.
**0 corruption THẬT.** Toàn bộ 26 hit là **quoted-evidence cố ý** (m#9). **Baseline mới đề xuất cho phiên sau: 26 hit / 13 file** trên universe `.claude docs`.
---
## 6. Orphan run-folder — ✅ **0 THẬT / 93 folder có `run.md`** (universe 96 dir)
- Thước: folder có `run.md`**không có file nào chứa chữ `synthesis`** với size > 0.
- 🔴 Dùng `-name '*synthesis*'` (**substring**), **KHÔNG** dùng glob `*-synthesis.md` neo ở ĐUÔI — bài S162-F02: file `...-synthesis-clone-s160.md` có chữ sau `synthesis` nên glob neo-đuôi trượt, và "sửa theo chẩn đoán cũ không hết bệnh".
- **DUAL-ACCEPT** thoả cả 2 dạng: dạng-1 phẳng `<run>/*-synthesis.md` · dạng-2 legacy C8 `<run>/harvest/<stage>-synthesis.md` (5 run cũ 2026-06-18) — `find -type f` quét đệ quy nên phủ luôn dạng-2.
- Máy trả **1** orphan = `2026-08-10-S189-bookstart-open` (1 file, chỉ `run.md`) — **chính là folder của phiên này, đang IN-PROGRESS****KHÔNG tính orphan** (đúng luật brief; và không đọc vắng-mặt thành hỏng).
- 3 dir không có `run.md` ⇒ ngoài phạm vi (spec-only, tiền lệ S153 đã phân loại).
**Orphan thật = 0.** S187 có `implement-synthesis.md` (4.469 B) · S188 có `bookend-close-synthesis.md` (4.684 B). Cả hai ĐÓNG.
---
## 7. 0-byte + file cụt (gotcha #53) — ✅ SẠCH
- `find .claude/agent-memory -type f -size 0`**0**. Không vai nào bị closeout-truncate.
- `find .claude/workflows/runs -type f -size 0`**10**, **toàn bộ là `.gitkeep`** trong 5 run cũ 2026-06-18 (`harvest/` + `sub-md/`) ⇒ **lành**, đúng như S153 đã phân loại.
- Không dùng riêng `-size 0` để kết luận (m#2 partial-write ≠ 0-byte): đã kiểm **dòng cuối non-empty** của 11 file S188 + `sub-w10-dryrun.md` (77 dòng, kết `**W10: PASS — 5/5 bước.**` + `== HẾT ==`) ⇒ terminates clean.
---
## 8. Ngưỡng read-limit L1 — **ĐÃ ĐO ĐƯỢC**, và câu trả lời đảo dấu so với đo theo BYTE
🔴 **Đây là chỗ tao suýt phát ra finding SAI.**
**Nấc bằng chứng (khai đủ, không đoán):**
1. Canonical đọc được trong repo: `.claude/agent-memory/memory-budget.json``/tiers/l1_hot/autoinject_cap_bytes` = **25600** (số nguyên, không có nhập nhằng đơn vị) · `soft_cap_bytes` = 30720.
2. `HANDOFF:54` datum @S187: hook tự bắn cảnh báo *"over its **24.4KB** read limit … Rewrite it to under **17.1KB**"*; `harness-audit` re-chạy 4 instrument (~90 ô, 87 khớp byte-exact) chốt ngưỡng ≈ **24.986 KÝ-TỰ** (= 24,4×1024).
3. `HANDOFF:54` cũng khai thẳng: **hook cắt nằm NGOÀI repo (0 hit trong `scripts/` + config)****chưa ai đọc được nguồn chân lý trực tiếp**. Kết luận dựa 4 đường độc lập.
**Cái tao đo:** đơn vị cắt là **KÝ-TỰ**, mà file diary là tiếng Việt UTF-8 **đa-byte** ⇒ byte ≠ char, tỉ lệ ~1,101,18. Đo cả 2 cột (`perl -CSD`, decode UTF-8):
| Vai | bytes | **chars** | % của 24.986 |
|---|---|---|---|
| `lead-gap-auditor` | 27.639 | **24.118** | 96,5% |
| `ring2-audit` | 26.652 | **23.078** | 92,4% |
| `lead-stale-auditor` | 24.975 | **21.988** | 88,0% |
| `reviewer` | 24.473 | **21.421** | 85,7% |
| `harvest-curator` (tao) | 21.308 | **19.481** | 78,0% |
**0/29 vai vượt ngưỡng.** Max = `lead-gap-auditor` 96,5%.
🔴 **Nếu tao chấm theo BYTE vs 25.600 thì đã tố SAI 2 vai** (`lead-gap-auditor` 27.639 và `ring2-audit` 26.652 đều "vượt") — trong khi tính theo **ký-tự** cả hai **an toàn**. Đây là lỗi **ĐƠN VỊ của thước**, tự bắt trước khi ghi.
**Về nhập nhằng ×1000 vs ×1024** (lead dặn cấm đoán): tao **không cần chọn** — kết luận **đứng ở CẢ HAI**: ×1024 → ngưỡng 24.986, max 24.118 = 96,5% (dưới); ×1000 → ngưỡng 24.400, max 24.118 = 98,8% (vẫn dưới). Nhập nhằng **không đổi verdict**. Cái **chưa đo được** và tao **không đoán**: giá-trị hằng-số thật bên trong hook (file ngoài repo, không đọc được) — chỉ có chữ *"24.4KB"* do chính hook in ra.
**Đóng cờ cũ của chính tao:** entry S188 tao ghi *"L1 của tao 29.776 B VƯỢT read-limit ⇒ bị cắt THẬT; self-compact DUE"*. Nay `harvest-curator` = 21.308 B / **19.481 ch (78,0%)**, `archive/2026-07.md` chạm 21:01 trong `ef1d4fbb`**self-compact ĐÃ CHẠY, cờ ĐÓNG**. Tương tự `reviewer`: 27.013 ch (108,1%) @S187**21.421 ch (85,7%)****đóng**. Hai vai từng bị cắt thật nay **hết bị cắt**. Vẫn > self-target 17,1KB (soft) — mức **khuyến nghị**, không phải vi phạm.
---
## 9. "Đã soi mà SẠCH" — phân biệt trục ĐẠT với trục CHẾT-NON
Liệt kê để lead thấy trục nào **có ca, đo, ra sạch** — khác trục **vacuous-PASS vì không có gì để đo**:
| Hạng mục | Mẫu-số THẬT | Kết | Có phải vacuous? |
|---|---|---|---|
| Orphan run-folder | 93 folder có `run.md` (universe 96) | 0 orphan | **KHÔNG** — mẫu-số lớn, thước substring |
| Corruption | 26 hit / 13 file, universe `.claude docs` | 0 thật, 26 mention | **KHÔNG** — có hit, đã mở đọc từng ca mới |
| Control dương của thước corruption | 1 file control | bắt 1/1, rc=0 | **KHÔNG** — chứng thước sống |
| 0-byte agent-memory | 29 vai | 0 | **KHÔNG** |
| 0-byte runs/ | 10 hit | 10/10 là `.gitkeep` | **KHÔNG** — đã phân loại từng ca |
| Empty-dir | quét `.claude` bằng `find` | 0 | **KHÔNG** — git mù chỗ này nên phải `find` |
| Placement | 29 role-dir | 0 lệch nhà | **KHÔNG** |
| Fidelity | 5 claim đối chiếu byte-level | 5/5 khớp | **KHÔNG** |
| Read-limit L1 | 29 vai, đo char | 0 vượt | **KHÔNG** — và đã lật được kết-luận-sai theo byte |
| Spawn-record 4-field | 13 entry | 13/13 đủ field | **KHÔNG** |
---
## 10. Thước TỰ BẮT trong lượt này (ghi để không tái phạm)
1. **Đơn-vị thước** (§8): byte vs ký-tự → suýt tố oan 2 vai. Ngưỡng nào phát biểu bằng "KB" phải hỏi **KB của cái gì** trước khi so.
2. **use⟂mention trên terminator** (F-04): `grep -c '== HẾT =='` = 1 nhưng hit đó là câu **nhắc luật**. Thước đúng = **dòng cuối non-empty**.
3. **Regex trích vai quá hẹp**: tao quét `vai \`x\`` → 20/28 file ra `<NO vai DECLARED>`, suýt thành finding *"file thiếu khai vai"*. Mở file ra đọc thì vai **có khai**, chỉ khác dạng (`Vai: ring5-audit` · `# ring2-audit @close` · `> Vai KIỂM độc-lập`). **Hỏng thước, không hỏng file****BỎ**, không báo cáo.
4. **Control dương trước khi tin số 0** — giữ nguyên từ S181.
---
## 11. ĐỀ XUẤT cho lead (propose-only — tao KHÔNG ghi, lead VERIFY→APPEND, B3)
**Ưu tiên 1 — đóng 42.975 B mồ côi (F-01).** Gom 4 sub-file → APPEND spawn-record 4-field vào đúng nhà:
- `.claude/agent-memory/ring2-audit/MEMORY.md``sub-ring2-audit-close.md` (18.195 B; verdict `2Đ·1T·2KC` + HOÀN 8 class tally)
- `.claude/agent-memory/ring5-audit/MEMORY.md``sub-ring5-audit-close.md` (11.282 B; lật 6 nhãn *"tự ý bỏ"* + RCA ONESHOT-S188) — **ưu tiên cao nhất**: L1 vai này mới 2.474 B, gần rỗng, mà việc thì nặng
- `.claude/agent-memory/harness-audit/MEMORY.md``harness-audit-return.md` (10.664 B; verdict `4Đ·2T·1KC`)
- `.claude/agent-memory/ctx-audit/MEMORY.md``sub-ctx-audit-close.md` (2.834 B; `dat=9 TRUOT=0 co=2`)
🔴 **DEDUP bắt buộc trước khi APPEND** (harvest chạy cả per-turn lẫn close-gate): 4 vai này hiện `grep -c 'S188'` = **0****an toàn, chưa từng APPEND**, không có rủi ro double-append. Đã kiểm.
**Ưu tiên 2 — vá cơ-chế (F-02):** gate đóng phiên phải đối chiếu **từng vai** trong {`ls runs/<id>/`} {WAL verdict-row} với `grep -c '<nhãn>' agent-memory/<vai>/MEMORY.md`; vai nào = 0 thì **chưa được đóng**. Chặn đúng lớp bệnh: kể-tên-trong-commit không tính là đã-gom.
**Ưu tiên 3 (MED, F-03):** số file trong `_end` sinh bằng `ls | wc -l` chạy **sau** file cuối, hoặc ghi kèm giờ-đo.
**Ưu tiên 4 (LOW, F-04/F-05):** luật END-line — file nào tự khai hợp-đồng terminator thì phải **dùng** `== HẾT ==` ở dòng cuối; kiểm bằng **dòng cuối non-empty**, không bằng `grep -c`.
**Baseline chuyển giao phiên sau:** corruption **26 hit / 13 file** (universe `.claude docs`, control-verified) · orphan **0/93** · role-dir **29** · read-limit **0/29 vượt** (đo ký-tự).
---
## 12. Containment (G-015 — khai đúng giới hạn, không overclaim)
- Tao **KHÔNG ghi** file nào trong repo ngoài **chính artifact này** (`runs/2026-08-10-S189-bookstart-open/sub-harvest-curator-open-S189.md`) — đúng vùng run-folder được giao.
- `git status --porcelain` giữa lượt: **1** dòng `M .claude/governance/.session-counter.json`**KHÔNG phải tao**; đó là counter phiên tự tăng (62→63, khớp `run.md` S189). Tao chỉ chạy lệnh ĐỌC + ghi 1 file control **ngoài repo** (`/tmp/ctrl.md`).
- 🔴 Khai thật: run-folder git-**TRACKED** ⇒ mọi write của tao **hiện trong git-diff**. Nhưng TRACKED **≠** read-only-enforced — tao vẫn còn `Bash` = kênh ghi mở. Containment THẬT = **lead single-writer + git-diff**, không phải "vai này read-only".
- **0** `store_memory` · **0** APPEND vào `agent-memory/*` · **0** quyết định. Fidelity nghi-bịa: **không có****không** escalate `reviewer`.
== HẾT ==

View File

@ -0,0 +1,335 @@
# LEAD-GAP @open S189 (L15, window 1) — nấc **DEEP** (`nhip-no-probe`: `deep 1/1 OVERDUE:deep`)
> Vai `lead-gap-auditor` — H24 §2(1) trục **CÁI KHÔNG CÓ**. Propose-only: KHÔNG Write/Edit vào sổ bền, KHÔNG RAG-write. File này = artifact đổ-ruột-liên-tục (chống #53), em-main VERIFY → APPEND (B3).
> Class ∈ enum ĐÓNG `lead_self_audit.flag_classes` (`.claude/agent-memory/memory-budget.json:262-275`, niêm phong P3B @S181, 12 class).
> 🔴 Mọi `gap-*` dưới đây đều có **≥1 lệnh chạm đĩa** + **control-dương** (chống lỗi lead S121 "bảng-kế-hoạch mô-tả Ý-ĐỊNH, không mô-tả TRẠNG-THÁI").
---
## LEAD-GAP: 7 FLAG (deep)
`gap-carry-dropped` 3 · `gap-owner-specifics` 1 · `gap-decision-sunk` 2 · `gap-incident-unrecorded` 1 · `gap-carry-aged` 0 · `gap-underfill` 0
🔴 **KHAI ĐƠN-VỊ TALLY TRƯỚC KHI LEAD CHÉP SỐ (bài D-4 @S159 — `ring2` bắt chính vai này ghi sai đơn-vị, suýt xoá lịch-sử):** ô `class_repeat.counts` đếm theo **audit LIÊN-TIẾP**, KHÔNG phải số FLAG trong một lượt. Lượt này ⇒ `gap-carry-dropped` **16 → 17** (KHÔNG phải +3 = 19) · `gap-decision-sunk` **9 → 10** (KHÔNG phải +2) · `gap-owner-specifics` **0 → 1** · `gap-incident-unrecorded` **0 → 1**. `gap-carry-dropped` = **17 ≈ 5,7× ngưỡng jump 3**.
---
### FLAG-1 · HIGH · `gap-incident-unrecorded`
**Sự-cố ĐÃ XẢY RA:** lead mở S189 dừng ở `BƯỚC 0.7(b)` hỏi consent, **owner phải bắt lỗi** (*"turn trước tao đã đưa ra quyết định thế nào"*) — trong khi lượt ngay trước (S188) owner đã chốt **PN-001 + YC-026 + YC-027**. Đây là **lần thứ 2 liên-tiếp** cùng một lớp lỗi, chỉ cách nhau **một lượt**, và lần này xảy ra **SAU KHI** bản vá của lần 1 đã land.
**Cái đáng có mà thiếu:** một dòng trên **bất-kỳ sổ bền nào** ghi rằng lớp lỗi này **tái phát ở S189**.
**Disk-touch (đo, không suy) — `S189` trên 7 sổ bền, control-dương `S188` cùng lệnh cùng file:**
| sổ bền | `S189` | `S188` (control-dương) |
|---|---|---|
| `docs/governance/so-yeu-cau-chu-du-an.md` | **0** | 9 |
| `docs/governance/error-ledger.md` | **0** | 4 |
| `docs/HANDOFF.md` | **0** | 17 |
| `docs/STATUS.md` | **0** | 7 |
| `.claude/WAL.md` | **0** | 4 |
| `.claude/governance/ACTIVE-MARKS.md` | **0** | 0 |
| `docs/changelog/migration-todos.md` | **0** | 0 |
**0 hit / 7 sổ**, control-dương chứng lệnh grep KHÔNG hỏng (S188 hiện 9/4/17/7/4). Vết duy nhất = `runs/2026-08-10-S189-bookstart-open/run.md:8-10`**đúng tiền-đề** của class (*"sự-cố có vết ở run-folder mà 0 hit trên các sổ này"*), không phải phản-chứng.
**Bề-mặt vẫn đang quảng-cáo trạng-thái tốt của kỳ TRƯỚC** (dấu-hiệu bắt buộc của class): `error-ledger.md:243` RCA `ONESHOT-S188` §Guard(a) ghi
> *"YC-027 2-site (đã land @S188 — chữ, sẽ được **ring5 chấm mỗi phiên** qua bảng-nhãn = cổng người-máy)"*
— nấc tự khai `fix-② executed`. Đọc hôm nay thì lớp này **đã có cổng**; thực tế S189 chứng ngược.
**🔴 Truy được CƠ-CHẾ, không chỉ triệu-chứng — cổng đó KHÔNG tồn tại ở cửa @open:**
```
grep -oi 'ring5' .claude/commands/session-start.md | wc -l -> 0
grep -oi 'ring5' .claude/commands/session-end.md | wc -l -> 6
```
control-dương: `bảng-nhãn` CÓ 1 hit ở `session-start.md` (khái-niệm được nhắc) nhưng **vai chấm nó = 0** ⇒ không phải "grep sai chữ".
⇒ Chữ *"mỗi phiên"* trong RCA phủ **1/2 cửa**. Vi-phạm S189 rơi đúng **nửa KHÔNG có cổng**. Sót ở @open**tất-yếu CẤU-TRÚC**, không phải đãng-trí — cùng hình-dạng ca S172 FLAG-6 (cổng ép-seed chỉ có ở `/session-end`, `/pause.md` 0/5 token).
**Đối-chiếu 5-why của chính RCA:** vế (3) đã tự đặt tên lớp — *"luật … là CHỮ trong context, không phải cổng máy ⇒ lớp bài-học-trong-context-không-tự-bật"*. S189 = **ca chứng-minh vế (3) vẫn nguyên**, và chính ca đó không được ghi.
🔴 **Ranh (tự chặn dùng nhầm class):** KHÔNG phải `view-*` (không có số cũ nào ở đây) · KHÔNG phải `gap-carry-dropped` (không có slug carry nào rớt) — đúng phạm-vi `gap-incident-unrecorded` như `_note` @S143 định-nghĩa.
**resolve:** có ≥1 dòng trên sổ bền (đề-xuất: `error-ledger` mở RCA nối `ONESHOT-S189` hoặc thêm mục *"Lần thứ 2"* vào RCA `ONESHOT-S188` — đúng khuôn RCA `C1-S181:257` đã có sẵn mục *"Lần thứ 2"*) **+** nấc của guard-(a) hạ từ `executed` xuống đúng sự thật (phủ 1/2 cửa).
---
### FLAG-2 · HIGH · `gap-carry-dropped`
**Hứa ở:** `.claude/WAL.md:14-15` — khối `[ ] NEXT-em khi có lượt`, nguyên văn:
> `[carry:reset-doi-het]` *sửa h24-signal-write (reset đòi ==HẾT== + honest-zero per-class)*
**Hiện:** **VẮNG** khỏi mọi sổ bền ngoài WAL — và WAL là file `§6.4` **xoá trắng ở bước CUỐI** mỗi closeout.
**Disk-touch — `reset-doi-het` trên 7 bề mặt:**
```
.claude/WAL.md = 1
docs/HANDOFF.md = 0
docs/STATUS.md = 0
docs/governance/error-ledger.md = 0
docs/changelog/migration-todos.md = 0
docs/governance/so-yeu-cau-chu-du-an.md = 0
.claude/governance/ACTIVE-MARKS.md = 0
```
**Loại được bào-chữa "bỏ cả khối vì gấp" bằng ĐỐI-CHỨNG NỘI-PHIÊN**`[carry:sentinel-truoc-bu]` **sinh cùng WAL, cùng phiên S188**, lại được chép tay sang:
```
sentinel-truoc-bu: WAL=1 · HANDOFF=2 · error-ledger=1
```
⇒ lead **CÓ với tay** đưa 3/4 slug WAL-sinh sang HANDOFF (`w7b-inbox-param`, `fe-contract-family-drift`, `sentinel-truoc-bu``HANDOFF:6`) và **bỏ đúng 1** ⇒ bỏ **CÓ CHỌN LỌC**, không phải bỏ trọn khối.
**Đã tự bác giả-thuyết "đổi TÊN chứ không rơi"** (bài đau S182 — 0-hit-theo-TÊN ≠ đã-rơi): tra 3 cụm nội-dung của chính món nợ, kết quả **chỉ WAL**:
```
"honest-zero per-class" -> .claude/WAL.md (duy nhất)
"==HẾT==" -> .claude/WAL.md (duy nhất)
"reset đòi" -> .claude/WAL.md (duy nhất)
```
3 hit `h24-signal-write` ở HANDOFF + 1 ở STATUS đều là **việc KHÁC** (B10 fail-loud `|counts| ≠ |flag_classes|` @S151 · `9-FIRE + frozen-held`) — không phải món reset này.
**🔴 Vì sao đây là lỗi CẤU-TRÚC chứ không phải đãng-trí — nghi-thức chống-rơi mới dựng @S188 KHÔNG THỂ bắt được nó:** `HANDOFF:16` tự khai cơ-chế re-stamp mới =
> *"grep `[carry:*]` **toàn file** slug có dấu ✅ĐÓNG ⇒ 47 slug mở"*
Miền quét = **`docs/HANDOFF.md`**. Slug sinh-trong-WAL mà chưa ai chép sang HANDOFF thì **vĩnh viễn ngoài miền** ⇒ không lượt re-stamp nào nhặt được, và `§6.4` reset WAL sẽ xoá bản gốc. Đây **đúng cái `HANDOFF:6` tự viết ra** (*"slug sinh-trong-WAL vô hình có cấu-trúc"*) — lượt vá đã nhận diện đúng bệnh, rồi **rơi thêm 1 ca ngay trong chính lượt vá**.
**im:** 1 phiên (sinh @S188, chưa qua closeout nào) — nhưng cửa tử là **closeout kế**, không phải "N phiên nữa".
**resolve:** `[carry:reset-doi-het]` xuất hiện ≥1 lần trong `docs/HANDOFF.md` (khối RE-STAMP hoặc CARRY-MỚI) **TRƯỚC** khi `§6.4` chạy; hoặc món nợ được đóng có evidence.
---
### FLAG-3 · MED-HIGH · `gap-carry-dropped`
**Hứa ở:** `docs/governance/so-yeu-cau-chu-du-an.md:57`, cột con-trỏ + cột đội-hiểu của `YC-027`, nguyên văn:
> *"…Khắc vào `session-end.md` + `session-start.md` khối ONE-SHOT (trỏ YC-027/PN-001) ngay @S188; **stamp User-Mark theo P4 report-before-stamp ở nhịp tới**"*
Cột con-trỏ của chính dòng đó ghi đích danh: **`2 file lệnh + ACTIVE-MARKS (stamp chờ P4)`**.
**Hiện:** **VẮNG.** Bookstart S189 **CHÍNH LÀ "nhịp tới"** (nhịp đầu tiên sau S188), và:
```
grep -c "^| \`RC-" .claude/governance/ACTIVE-MARKS.md -> 12 (control-dương: bảng KHÔNG rỗng)
grep -o "YC-027" .claude/governance/ACTIVE-MARKS.md | wc -l -> 0
grep -o "PN-001" .claude/governance/ACTIVE-MARKS.md | wc -l -> 0
mark mới nhất theo ngày -> RC-pqhuy1987-07-08-2026-21-42-10 (2026-08-07)
```
⇒ 12 mark tồn tại, mark mới nhất là **2026-08-07**; sự-kiện 2026-08-10 (YC-027/PN-001) **không có mark nào**.
**Và việc này KHÔNG có nhà trong work-state** (đây mới là phần "rớt", không chỉ "chưa làm"):
- `.claude/WAL.md:14-16` khối `[ ] NEXT-em`: liệt `sentinel-truoc-bu` · `reset-doi-het` · `w7b-inbox-param` · *"7 mục NEXT-em @S188 trong HANDOFF"***0 hit** stamp.
- `docs/HANDOFF.md:8-14` = **7 mục NEXT-em @S188** (đếm thật: 1 harvest-curator · 2 reviewer · 3 ring1-audit · 4 measured · 5 E4 · 6 N1-N4 · 7 trục bookend chưa soi) — **0 hit** stamp.
⇒ một cam-kết có **deadline tường-minh** (*"ở nhịp tới"*) + **địa-chỉ tường-minh** (`ACTIVE-MARKS`) mà **không nằm trong bất-kỳ khối việc nào** ⇒ đúng vế *"việc rớt khỏi khối work-state so với backlog"* của class.
🔴 **Ranh — KHÔNG lấn:** không tuyên "P4 chưa chạy" (đó là trạng-thái quy-trình, không phải cái tôi đo). Tôi chỉ đo: **cam-kết có nhà chưa** ⇒ chưa.
**im:** 1 nhịp (từ S188 closeout tới bookstart S189) — nhưng là **nhịp duy nhất** mà lời hứa tự đặt hạn.
**resolve:** hoặc mark được stamp, hoặc cam-kết được ghi thành mục có chủ trong `WAL` `[ ]` / `HANDOFF` NEXT-em kèm hạn mới (đổi hạn phải có vết — đừng để "ở nhịp tới" trôi im lặng).
---
### FLAG-4 · HIGH · `gap-owner-specifics`
**Chữ CỦA OWNER (verbatim, `so-yeu-cau-chu-du-an.md:57`):**
> *"cái này sẽ là rules nhé, **các cái command** phải đc thực hiện trọn vẹn tao ko chấp nhận **bất cứ 1 lý do nào**"*
**Discriminator nằm ở LƯỢNG TỪ:** *"các cái command"* = **số nhiều, toàn bộ**. Không phải "hai đầu phiên".
**Chính lead cũng đọc ĐÚNG như thế** — cột "đội hiểu thành gì" cùng dòng `:57` liệt đích danh:
> *"mọi command/nghi-thức (**bookstart · bookend · `/tiep` · mọi lệnh anh gõ**) phải chạy TRỌN VẸN 100% các bước"*
**Cái đáng có mà thiếu:** luật đó ở **`/tiep`** và **`/pause`** — hai cửa mà chính lead vừa kể tên.
**Disk-touch (4 file lệnh × 4 token):**
| token | `session-start.md` | `session-end.md` | `tiep.md` | `pause.md` |
|---|---|---|---|---|
| `YC-027` | 1 | 1 | **0** | **0** |
| `PN-001` | 1 | 1 | **0** | **0** |
| `TRỌN VẸN` | 1 | 1 | **0** | **0** |
| `ONE-SHOT` | 2 | 2 | **0** | **0** |
| `YC-026` | **0** | **0** | **0** | **0** |
control-dương: 4 token ĐỀU hiện ở 2 file đầu ⇒ grep không hỏng, tên file không sai.
**🔴 Lead TỰ THU-HẸP mà không khai là thu-hẹp** — 3 bề mặt đều ghi phẳng *"2 site"* như thể trọn vẹn, **0 chỗ** nói "còn 2 cửa chưa phủ":
1. `error-ledger.md:241` §Fix ② — *"RULE YC-027 khắc vào **2 file lệnh**"*
2. `.claude/WAL.md:10`*"RULE YC-027 khắc **2 site**"*
3. commit `ef1d4fbb` subject — *"RULE YC-027 khắc **2 site**"*
Đây **đúng hình-dạng ca S179 FLAG-4** (owner viết *"áp CẢ các trang GĐ khác"*, lead tự thu-hẹp 3/4 trang, không lên bề mặt nào) và ca `YC-012` mà chính sổ `:45` ghi làm bài học: *"@S179 lead **tự thu-hẹp** chữ 'OK' … lần này không tự thu-hẹp"*. Lượt này **thu-hẹp lại**, chỉ đổi trục: từ thu-hẹp *sức mạnh* sang thu-hẹp *phạm vi*.
**Vì sao KHÔNG phải chuyện chữ nghĩa — nó có hệ-quả đo được:** `YC-018` (`:60`) và `session-start.md:12` đều nói đứt-bất-khả-kháng ⇒ **`/tiep` phải chạy hết phần nghi-thức còn thiếu**. Tức `/tiep`**cửa gánh nợ ONE-SHOT**, mà nó là **cửa duy nhất 0/4 token**. Cửa được giao gánh nợ lại là cửa không biết mình bị giao.
**Kèm — `YC-026` nặng hơn:** *"ko đóng phiên với bất cứ lý do nào"***0 hit / 4 file lệnh** VÀ 0 hit trên `HANDOFF`/`STATUS`/`error-ledger`/`ACTIVE-MARKS`/`migration-todos`; chỉ sống ở **sổ YC** + **`.claude/WAL.md` (1 hit)** — mà WAL là file `§6.4` xoá trắng. Con-trỏ của chính dòng `YC-026` ghi `WAL (mạch sống)` ⇒ khi WAL reset, dòng owner-request **đang MỞ** này mất neo thi-hành.
**resolve:** hoặc luật xuất hiện ở `tiep.md` + `pause.md` (dù chỉ 1 dòng TRỎ — B1), hoặc 3 bề mặt trên được sửa thành *"2/4 cửa — `/tiep`,`/pause` CỐ Ý chưa phủ vì <lý do>"*. Thu-hẹp **có khai** thì hết flag; thu-hẹp **im lặng** thì không.
---
### FLAG-5 · MED-HIGH · `gap-carry-dropped`
**Nguồn cam-kết:** `memory-budget.json` `tiers.l1_hot.rule`
> *"keep MEMORY.md < autoinject_cap so the WHOLE hot file injects; over soft_cap => curate L1->L2"*
`autoinject_cap_bytes` = **25.600**. Và `HANDOFF:8-13` chứng lead ĐANG coi over-cap là việc phải xử (E1/E2/E4 đều là món này).
**Cái đáng có mà thiếu:** `ring2-audit` — vai over-cap thứ hai — **không có tên trong bất-kỳ khối việc nào**.
**Disk-touch, quét TOÀN roster `.claude/agent-memory/*/MEMORY.md`, lọc `> 25.600`:**
```
lead-gap-auditor L1=27.639 _INDEX=1 gist=1
ring2-audit L1=26.652 _INDEX=0 gist=0
```
đúng **2 vai** — khớp `nhip-no-probe` in *"trần bộ-nhớ 2 over-cap"* (máy và tôi cùng số, không phải tôi tự đếm).
**Nhưng work-state chỉ nhận 1, và nhận nhầm vai:** `HANDOFF:12` mục 5 (E4) nêu **2 vai** = *"`tooling-auditor` @S185 · `lead-gap-auditor` 14.798 → 27.639"*.
- `lead-gap-auditor` ✓ có nhà.
- `tooling-auditor` đo hôm nay = **16.912****đã dưới cap**, không còn là việc.
- `ring2-audit` = **26.652, over-cap****0 nhà**.
⇒ khối việc đang **gọi tên một vai đã khỏi****bỏ sót vai đang bệnh**. Rà tiếp 6 mục NEXT-em còn lại: `ring2-audit` chỉ hiện **2 lần**`HANDOFF:7-14`, cả hai **KHÁC trục** — mục 6 nói `.archive-strikes.json` *"vênh `ring2` 1↔2"* (file strikes, không phải L1) · mục 7 nói *"`ring2-audit` … **chưa chạy**"* (vai chưa chạy, không phải bộ nhớ). **0/7 mục** nói tới L1 của nó.
**🔴 Ca này NẶNG HƠN E1/E2 chứ không nhẹ hơn** — và đó là lý do nó không được nhẹ tay:
- E1 `harvest-curator` / E2 `reviewer` khi bị cắt vẫn còn **đường L2** để lấy lại (`archive/` + `_INDEX` + gist).
- `ring2-audit``archive/2026-08.md` (8.771 B) nhưng **`_INDEX` = 0** và **`.gist.md` = 0** ⇒ theo `tiers.l2_index` (*"inject the map, not the territory"*) thì **không có bản đồ** ⇒ phần bị cắt khỏi L1 **không có đường quay lại**. Đối-chứng cùng lệnh: `lead-gap-auditor` over-cap nhưng `_INDEX=1 gist=1`.
**Loại bào-chữa "chưa ai đo nên chưa biết":** `measure`-machine ĐÃ chạy trong lượt S188 (`measured._note` = *"S188 2026-08-10 FRESH re-sync bằng MÁY"*), và `nhip-no-probe` in *"2 over-cap"* **ngay lượt này** trước khi tôi được spawn. Số đã có; cái thiếu là **người nhận**.
**im:** ≥1 nhịp bookend (số đã hiện ở probe S189 mà khối việc S188 không có mục).
**resolve:** `ring2-audit` có mục trong `HANDOFF` NEXT-em / `WAL` `[ ]` (kèm cả 2 vế: hạ L1 xuống dưới 25.600 **và** dựng `_INDEX` + gist), **hoặc** `tooling-auditor` @S185 được gỡ khỏi E4 kèm số chứng đã khỏi. 🔴 Trình tự bắt buộc theo `HANDOFF:8` (`reviewer:96`): **append archive TRƯỚC → probe moved-not-cut bằng token lấy từ THÂN BÀI + control-âm → mới cắt.**
---
### FLAG-6 · MED-HIGH · `gap-decision-sunk`
**Quyết-định đang treo:** `so-yeu-cau-chu-du-an.md:70``ST-001`, trạng thái **`mở (chờ anh)`**, mở từ **2026-08-07**. Nội dung = **danh sách 7 LOẠI lằn-ranh đỏ** (việc luôn phải dừng hỏi owner). `:75` tự khai nấc: *"7 loại trên **chưa phải lời anh** … chờ anh xác nhận hoặc sửa"*.
**Hiện:** **VẮNG** khỏi mọi bề mặt ngoài chính dòng của nó.
```
ST-001 : so-yeu-cau=2 | HANDOFF=0 | WAL=0 | STATUS=0 | error-ledger=0 | ACTIVE-MARKS=0
```
**🔴 Đòn BẤT-ĐỐI-XỨNG loại được bào-chữa "cả khối chưa tới lượt"** — `ST-002` là dòng **kế bên, cùng bảng, cùng ngày 2026-08-07**, và nó **CÓ** nhà thi hành:
```
ST-002 : so-yeu-cau=3 | ACTIVE-MARKS=5 (đã kiểm ngữ cảnh, KHÔNG phải dương-giả:
"…ritual-labels.md §6 khoản (vi) + `ST-002` của sổ W4 — 2 nơi sau TRỎ, cấm chép"
"ĐÂY LÀ NGUỒN DUY-NHẤT của luật 3 bậc. Mọi nơi khác (`ST-002` …) TRỎ về đây")
```
⇒ hai dòng sinh đôi: một dòng được kéo vào `ACTIVE-MARKS` và chống nguồn-đôi cẩn thận, dòng kia **0 hit 5 bề mặt**. Không phải "bỏ cả khối", là **bỏ một dòng**.
**im:** **8 nhãn phiên** (S181 → S189), 4 ngày lịch.
**🔴 Vì sao món này KHÔNG phải nợ trang-trí — nó chính là dụng-cụ đáng-lẽ đã xử FLAG-1:** câu hỏi vận-hành ở `BƯỚC 0.7(b)`*"ca này có thuộc loại phải dừng hỏi anh không?"*. `ST-001` **là bảng trả lời câu đó**, và trong 7 loại **không có** loại "xin phép tiếp tục nghi-thức". Nếu `ST-001` đã ratify + có nhà, lead có **luật SOI-ĐƯỢC** để tự quyết; nó chưa ratify nên lead rơi về câu cứng *"CHỜ anh chọn"* của `session-start.md:83`. ⇒ quyết-định chìm **có giá đo được ngay trong phiên này**.
*(Khai đúng nấc: đây là quan-hệ dụng-cụca-dùng, tôi KHÔNG tuyên `ST-001` chìm là NGUYÊN-NHÂN duy nhất của FLAG-1.)*
**resolve:** `ST-001` được owner ratify/sửa, **hoặc** được surface lại ở ≥1 bề mặt chờ-anh (slot số ở `HANDOFF`) để nó không tiếp tục chìm trong sổ.
---
### FLAG-7 · MED · `gap-decision-sunk`
**Quyết-định đang treo:** slot **(89)** `HANDOFF:19` + `WAL:12` — owner phải chọn **(a)** kéo audit-sớm / **(b)** đổi ngưỡng / **(c)** giữ nguyên, cho các class H24 ở/vượt `jump_on_class_repeat` = 3.
**Cái đáng có mà thiếu:** **2 class LỚN NHẤT không có mặt trong câu hỏi đặt cho owner.**
**Đo trực tiếp trên sổ đếm** (đã xác nhận bề-mặt-đo ĐỨNG YÊN: `git diff .claude/governance/.session-counter.json` phiên này chỉ đổi `counter 62→63` + 1 `history[]` entry, **khối `counts` 0 dòng thay đổi** — bài `C1-S181`):
| class | counts hiện tại | có trong slot (89)? |
|---|---|---|
| `gap-carry-dropped` | **16** | ❌ **KHÔNG** |
| `view-stale-count` | **14** | ❌ **KHÔNG** |
| `view-residual-asym` | 13 | ✅ |
| `view-stale-status` | 10 | ✅ |
| `gap-decision-sunk` | 9 | ✅ |
| `view-stale-header` | 8 | ✅ |
**6 class ≥ 3**, slot (89) trình **4**, và 2 cái vắng là **hạng 1 và hạng 2**.
**Cơ-chế (không phải xui):** `history[]` entry `S188-restore` liệt đúng 8 class hoàn từ git `5a77f4f1` và ghi rõ *"**GIU 2 class fired S188 (view-stale-count, gap-carry-dropped)**"*. Trong 8 class hoàn ấy có đúng **4 class ≥3****trùng khít** 4 class của slot (89). ⇒ câu hỏi cho owner được dựng từ **danh-sách RESTORE**, không dựng từ **file counts**. Hai class *được GIỮ* (tức chưa từng bị xoá) rơi ra ngoài tầm nhìn **đúng vì chúng không cần cứu**.
**Hệ-quả:** owner sẽ phán a/b/c cho 4 class và **không bao giờ được hỏi** về `gap-carry-dropped`=16 (**5,3× ngưỡng**) — class có tally cao nhất hệ thống.
🔴 **Ranh — KHÔNG lấn `lead-stale-auditor`:** con số *"4 class"* SAI so với đĩa là **cái CÓ nhưng LỆCH****turf của vai kia, tôi không chấm**. Tôi chỉ chấm **cặp VẮNG trong tập quyết-định**.
**im:** từ S188 closeout tới nay (1 nhịp) — nhưng `gap-carry-dropped` đã ở/vượt ngưỡng **từ S150** (`[carry:jump-dai-frozen]`, slot (21)) mà chưa lần nào vào câu hỏi có số.
**resolve:** slot (89) liệt **đủ tập class ≥ ngưỡng dựng TỪ `counts`** (không dựng từ danh-sách restore), hoặc khai rõ *"2 class này cố ý để riêng vì …"*.
---
## MỤC RIÊNG — ca `BƯỚC 0.7(b)`: class nào, và còn ca CÙNG LỚP nào đang sống
**Ca:** lead mở S189 → chạy `BƯỚC 0.7`, WAL có `[ ]` ⇒ rơi nhánh **(b)** ⇒ *"…rồi **CHỜ anh chọn**"* (`session-start.md:83`, nhánh này tự dán nhãn **"NGOẠI-LỆ CHỜ DUY-NHẤT"** của quy-trình no-wait) — trong khi lượt trước owner đã chốt PN-001 + YC-026 + YC-027. Owner phải bắt lỗi.
**Xếp class — 2 mặt KHÁC NHAU của cùng một ca, KHÔNG gộp:**
| mặt | class | vì sao |
|---|---|---|
| **sự-kiện** đã xảy ra mà 0 sổ bền ghi | **`gap-incident-unrecorded`** (FLAG-1) | tái phát lần 2 sau khi bản vá land; 0/7 sổ; RCA vẫn đọc như đã đóng |
| **phạm-vi luật owner** bị thu hẹp khi thi hành | **`gap-owner-specifics`** (FLAG-4) | *"các cái command"* → land 2/4 cửa; `/tiep` (cửa gánh nợ ONE-SHOT) = 0 token |
🔴 **CẤM đọc thành 3 FLAG.** Một sự-kiện, hai nghĩa-vụ khác nhau (ghi sổ ⟂ phủ luật). Tôi **KHÔNG** mở FLAG thứ ba cho chính hành-vi dừng — hành-vi đó owner đã xử tại chỗ; việc của tôi là cái **không được ghi** và cái **không được phủ**.
**🔴 Còn 4 ca CÙNG LỚP đang SỐNG** (lớp = *"luật/quyết-định đã có bằng CHỮ mà cửa thi hành không có máy soi"* — chính `error-ledger.md:239` 5-why(3) đặt tên: *"bài-học-trong-context-không-tự-bật"*):
1. **`ring5-audit` 0/1 cửa @open** — `session-start.md`=0 · `session-end.md`=6, trong khi RCA `ONESHOT-S188` tuyên teeth = *"ring5 chấm **mỗi phiên**"*. (chứng đầy đủ ở FLAG-1)
2. **`jump_on_class_repeat` KHÔNG có máy đọc** — đo: `grep -rn jump_on_class_repeat scripts/` ra **2 hit, cả 2 nằm trong CHUỖI VĂN-BẢN sửa-lỗi** (`governance-detectors.ps1:932` *'create memory-budget.json carrying h24_cadence {…}'* · `:947` *'W2: add h24_cadence {…}'*) — **0 lần đọc giá trị**. Control-dương cùng lệnh: `light_every` được đọc THẬT bởi **2** script (`governance-detectors.ps1`, `nhip-no-probe.ps1`). Khớp lời tự khai của `memory-budget.json` `_sealed_P3B_S181`: *"nguong jump_on_class_repeat KHONG co may nao doc … lop loi moi day sang error-ledger CUNG khong co rang JUMP"*. ⇒ 6 class ≥ ngưỡng mà **0 cơ-chế tự bắn**.
3. **`C1-S181` guard-(b)** — `error-ledger.md:255` tự khai: *"🔴 **CHƯA LÀM, ghi thành nợ:** cần một máy chặn/cảnh báo khi bề-mặt-đo bị chạm giữa cửa-sổ đo. Không có nó thì lần sau lại phụ thuộc trí nhớ."* Vẫn nguyên trạng.
4. **`ST-001` chưa ratify** — bảng 7 lằn-ranh đỏ = **dụng cụ trả lời đúng câu hỏi của `0.7(b)`**, treo 8 nhãn phiên, 0 hit ngoài sổ. (FLAG-6)
> 🔸 Nhận xét khai thẳng, không nống: 4 ca trên **cùng một gốc** — SE vá bằng **CHỮ** rất nhanh và vá bằng **CỔNG** rất chậm. Đó là quan sát trên 4 mẫu, không phải định lý.
---
## ĐÃ SOI MÀ SẠCH — 🔴 phân biệt trục **ĐẠT** với trục **CHẾT NON**
### A. Trục ĐẠT (đo được, kết quả thật là sạch)
| trục | phép đo | kết quả |
|---|---|---|
| **`gap-carry-aged` = 0** | **ĐỌC** output máy `H24-2` (KHÔNG tự tính lại — luật persona) | máy CHẠY THẬT lượt này: `logic-segments = 26 · carry-lines = 19`, `L7-bolt [ok] gap 0<=1`, streak cao nhất = **4** (`adap-apply-2-thu`), kế: `ctx-t9-dogfood` 3 · `hmw-*` 2 · `ring5-audit-gap` 2 — **0 slug chạm M=6**. ⇒ **honest-zero THẬT**, khác hẳn S185 (*"KHÔNG ĐO ĐƯỢC"*) và S180/S182 (*"số 0 CHẾ TẠO"* do vùng câm). Vùng câm pre-marker vá @S185 còn sống — thấy được vì máy đọc tới cả segment đỉnh chứa `w7b-inbox-param`/`sentinel-truoc-bu`. |
| **9 slot chờ-anh đều có nhà** | grep từng slot × 4 sổ | `(22)`5 `(67)`2 `(72)`2 `(74)`2 `(76)`3 `(77)`1 `(78)`1 `(79)`1 `(89)`2 trên `HANDOFF`**0 slot nào 0-hit**. ⇒ **TỰ BÁC** giả-thuyết "slot thủng HANDOFF" mà tôi từng bắt thật @S166 (khi đó `(60)(61)` 0-hit). |
| **`YC-002` KHÔNG còn chìm** | grep + đọc ngữ cảnh | @S186 tôi đo nó *"0 hit trên cả 9 bề mặt bền"*; nay `HANDOFF`**1** hit, và là hit ĐÚNG VIỆC: slot **(79)** trình owner *"lật sang đóng?"* kèm chính số đo của tôi. ⇒ **FLAG cũ của tôi RESOLVED**, ghi nhận. |
| **6 carry của `_end` L14 đều có mặt** | đối chiếu `_end:3``HANDOFF` | `w7b-inbox-param` + `fe-contract-family-drift`**slug**; `harvest-curator-L1-bi-cat`/`reviewer-nen-stub`/`measured-resync`/`tai-phinh-sau-archive` **không có slug** nhưng **CÓ mặt bằng văn xuôi**`HANDOFF:8/9/11/12` (mục 1/2/4/5). ⇒ **KHÔNG flag** — vắng-slug ≠ bỏ rơi. *(Ghi INFORM-2 dưới.)* |
| **PN-001 thi hành THẬT** | chạm đĩa, không đọc bảng | PN-001 đòi *"3 vai + E1 + E2 + E3"*. Đo: `harvest-curator` **30.231 → 21.308** · `reviewer` **~31.341 → 24.473** · `ring1-audit` 20.924 · `measured._note` = *"S188 … FRESH re-sync bằng MÁY"*; `git show --stat ef1d4fbb` có đủ `harvest-curator/MEMORY.md` + `archive/2026-07.md` + `reviewer/…` + `ring1-audit/…`. ⇒ **TỰ BÁC** nghi-vấn "WAL `[x]` khai khống". Việc ĐÃ làm thật. |
### B. Trục CHẾT NON (KHÔNG kết luận được — cấm đọc thành sạch)
| trục | vì sao chết non |
|---|---|
| **`gap-underfill` = 0 → phải đọc là "KHÔNG ĐO ĐƯỢC"** | Thước duy nhất cho trục này ở cửa @open**`§2.1.6` hot-feed %-print** (`session-start.md:229`, `token_governor.pct_print.session_start`). Nó in ra **màn hình, KHÔNG đổ artifact** ⇒ tôi **không có bề mặt đĩa** để đo lead đã nạp bao nhiêu / bucket nào mỏng. Đo hộ được **mẫu số** thôi: floor 6 nguồn `crystallized_backfill.hotload_sources` = **772.334 B ≈ [193K..234K] tok** so `lead_tokens` 380.000 ⇒ về lý còn chỗ, nhưng *"còn chỗ"**"nạp thiếu"*. 🔴 **Tôi TỪ CHỐI báo 0** — báo 0 ở đây là để nó bị đọc thành lành. Món này chỉ đo được nếu `§2.1.6` ghi 1 dòng % xuống `run.md`. |
| **`gap-incident-unrecorded` ngoài ca FLAG-1** | Tôi chỉ soi được sự-cố có vết trên đĩa (run-folder/commit). Sự-cố chỉ tồn tại trong transcript phiên đang chạy thì tôi **mù** — trừ ca FLAG-1 vì nó được `run.md:8-10` ghi lại. **Cận-dưới, không phải cận-trên.** |
| **Đủ/thiếu của "47 slug mở"** | `HANDOFF:16` tự khai *"cận-trên"**"disposition per-slug = việc bookend kế"*. Tôi **KHÔNG** chấm 47 slug này đúng/sai — chưa ai làm disposition thì chưa có chuẩn để so. Cấm đọc "47" thành "47 việc thật". |
---
## INFORM (không phải FLAG — owner/lead tự quyết)
- **INFORM-1 — 17 dòng sổ-YC có con-trỏ CHẾT (trỏ `WAL`).** Đo: cột con-trỏ ⇒ **17** dòng chứa `WAL`. `session-end.md:114` tự tuyên về đúng lớp này: *"WAL là sổ ghi-đè ≤40 dòng … soi một cái sổ tạm đang co lại, để tìm dấu vốn được thiết-kế để xoá đi ⇒ **KHÔNG THỂ đúng**"* + *"WAL = sổ tạm cho `/tiep`; session-log = sổ cái cho hậu-kiểm"*. @S185 đã vá **2 dòng** (`YC-002`, `YC-011`, ghi chú *"con-trỏ cũ 'WAL…' chết theo reset — gap-F2"*), nhưng **6 dòng SINH SAU bản vá** (`YC-018`/`019`/`020`/`021`/`025`/`026`) **tái tạo đúng lỗi đó**. 🔴 **Tôi KHÔNG xếp class** — nó không sạch vào ô nào của enum ĐÓNG (con-trỏ **CÓ** mà trỏ vào hư-vô: không phải `gap-*` "không có", cũng không đúng `view-stale-*` vì nó **sinh ra đã sai**, không phải đúng-rồi-cũ-đi). Theo luật enum ĐÓNG tôi **báo nguyên-văn + đề-nghị anh xét mở rộng**, **KHÔNG bịa class** (tiền lệ đúng-cửa: `gap-incident-unrecorded` @S143, `view-claim-broader-than-sample` @S172).
- **INFORM-2 — 4/6 carry của `_end` L14 không có slug `[carry:*]`.** Việc **có mặt** (nên không FLAG), nhưng nằm **ngoài miền** của cả 2 cơ-chế bền: (a) re-stamp `dựng-từ-nguồn` chỉ grep `[carry:*]`, (b) `H24-2` chỉ đo slug. ⇒ khi segment `HANDOFF` xoay vòng, 4 món này **không có gì đỡ**. Rẻ: cấp slug cho chúng.
- **INFORM-3 — `WAL:13` liệt `(67)` vào *"tồn"* trong khi `so-yeu-cau:49` ghi **"Slot (67) ĐÓNG"**. Hai sổ nói ngược. 🔴 **Turf `lead-stale-auditor`** (cái CÓ nhưng LỆCH) — tôi **nhường**, chỉ ghi để nó không rơi vào khe giữa 2 vai (bài S163: nhường turf mà 0 vai nhặt).
---
## TỰ-KIỂM (chống lỗi của chính vai này)
1.**Mọi `gap-*` đều có ≥1 lệnh chạm đĩa** — không FLAG nào suy từ bảng/spec (chống lỗi lead S121: *"bảng-kế-hoạch mô-tả Ý-ĐỊNH, KHÔNG mô-tả TRẠNG-THÁI"*). FLAG-5 và mục "PN-001 thi hành THẬT" đều là ca **đo đĩa lật ngược bảng**.
2.**Mọi 0-hit đều kèm control-dương** (FLAG-1 `S188` 9/4/17/7/4 · FLAG-2 `sentinel-truoc-bu` 1/2/1 · FLAG-3 12 mark rows · FLAG-4 4 token × 2 file · FLAG-6 `ST-002` 5 hit · ca-2 `light_every` 2 reader).
3.**Tránh bẫy trích RỖNG** — lượt đầu tra `YC-002` bằng `.{200}…{300}` ra **rỗng** (mega-line không đủ ký tự trước/sau) ⇒ suýt đọc thành *"0 hit"*; chạy lại bằng `.{0,180}…{0,320}` ra hit thật. **Số 0 đầu tiên là do THƯỚC, không do đĩa.**
4.**Bề-mặt-đo đóng băng có kiểm** (`C1-S181`): `git diff` sổ đếm ⇒ khối `counts` **0 dòng đổi** trong lúc tôi đo.
5.**Không lấn lane**: 2 phát hiện thuộc `lead-stale-auditor` (số *"4 class"* ở slot (89); `(67)` tồn/đóng) — khai mà **không chấm**.
6.**Không bịa class**: INFORM-1 từ chối ép vào enum.
7.**Không nể lead**: FLAG-2 và FLAG-4 đều bắt **chính lượt vá** đẻ lỗi cùng lớp với thứ nó vừa vá.
**Propose-only** — vai này KHÔNG Write/Edit sổ bền, KHÔNG `store_memory`/RAG-write. Em-main VERIFY → APPEND (B3).
**TOTAL: 7**
== HẾT ==

View File

@ -0,0 +1,452 @@
# LEAD-STALE @open S189 (L15, window 1) — DEEP sweep
LEAD-STALE: 11 FLAG (deep)
- vai: `lead-stale-auditor` (H24 §2(1) vai-STALE) · nấc: **DEEP** (`nhip-no-probe` in `light 3/6 deep 1/1 OVERDUE:deep`)
- propose-only · 0 Write/Edit ngoài file này · 0 RAG-write (lead = sole writer, B3)
- enum class ĐỌC TỪ KHOÁ: `.claude/agent-memory/memory-budget.json``lead_self_audit.flag_classes`
đo tại chỗ: 12 class = 6 `view-*` + 6 `gap-*` (niêm phong P3B @S181). 6 `view-*` là địa phận của tao.
- 🔴 luật ghi: **đổ ruột NGAY mỗi FLAG** (chống #53 — bookend S188 có 5/8 vai chết non).
## NỀN MÁY (đọc, KHÔNG chạy lại)
`scripts/governance-detectors.ps1` — TOTAL 58 FLAG / INFORM-ONLY 26. Đã đọc, dùng làm nền:
- C2/B3 canonical resolve: `mig=72 test=680 gotcha=88 table=97 menu=120 policy=480`, khớp đĩa (mig+gotcha) ⇒ baseline an toàn.
- 18 dòng derived-stale (đều LOW, hầu hết skill-local false-positive theo chính note của máy).
- H24-1 title-freshness: 2 anchor stale (`rag-setup-plan.md:4` · `form-engine/SKILL.md:15`).
- H24-2 carry-age: 19 carry, streak cao nhất 4 < M=6 im.
- H24-3 session-label lag: `[skip] no doc carries BOTH a session label and an S-heading` **trục này máy KHÔNG đo được**, không đọc thành sạch.
- C5 WAL guardrail: 23 dòng 40 OK.
🔴 **KHÔNG FLAG nào dưới đây lặp lại máy.** Tất cả nằm phần máy im: ngữ-nghĩa, tự-mâu-thuẫn nội-file, enumeration thiếu phần-tử, trạng-thái chưa lật.
---
## FLAG-1 · HIGH · `view-stale-status` — `_end` ⟂ WAL: hai vật nói ngược về CÙNG một sự thật
- **view:** `.claude/WAL.md:2` `session: S188 (phiên-LOGIC L14, window 3 — GIỮ MỞ theo YC-026)`
`.claude/WAL.md:4-5` *"Phiên GIỮ MỞ chờ việc kế của anh … KHÔNG đóng phiên"*
- **source:** `.claude/sessions/session-14/_end` **TỒN TẠI** (940 B, mtime 20:43, commit `c7b7ca45` 20:44).
Ngữ nghĩa của vật này do `.claude/commands/session-end.md:410` định: *"FROZEN, ghi MỘT lần, CẤM sửa về sau"*;
`session-end.md:417` *"đã tồn-tại ⇒ NO-OP … phiên-logic đã khép"*.
- **lệch:** view nói phiên-LOGIC L14 **ĐANG MỞ (window 3)** · source nói L14 **ĐÃ CHỐT-KẾT**.
- **bằng chứng thời gian (WAL viết SAU, nên không phải ca 'chưa kịp cập nhật'):**
- `_end` land `c7b7ca45` @2026-08-10 20:44
- WAL header đổi thành `— GIỮ MỞ theo YC-026` `ef1d4fbb` @21:30 (**46 phút SAU** `_end`)
- `git show c7b7ca45:.claude/WAL.md` dòng 2 = `session: S188 (phiên-LOGIC L14, window 3)` **không có** cụm GIỮ MỞ
cụm "GIỮ MỞ" được **thêm vào sau khi** `_end` đã đóng băng.
- **chính lead đã tự giải ca này nơi khác, rồi không lật WAL:**
`docs/governance/so-yeu-cau-chu-du-an.md:58` (hàng `YC-026`) ghi:
*"`_end` phiên-LOGIC L14 đã ghi TRƯỚC lệnh này ~15 phút — dấu frozen không gỡ được; hiệu lực thực tế = **conversation tiếp tục làm việc**, mạch mới ghi WAL như thường."*
Sổ phân biệt đúng **conversation** (tiếp tục) **phiên-LOGIC** (đã khép). WAL gộp hai thứ đó lại làm một.
- ** lead ĐÃ tự bác WAL trong chính lượt này:**
`.claude/workflows/runs/2026-08-10-S189-bookstart-open/run.md:3` `phien-logic: L15 (session-15) · window 1 · nhan-phien S189`
- **hại THẬT (không phải sạch-sẽ hình thức):** WAL nguồn #3 của `tiep_reload.sources` đường nối mạch DUY NHẤT của `/tiep`.
Một `/tiep` đọc WAL sẽ nạp *"L14 window 3 đang mở"* ghi tiếp vào `session-14/` thư-mục máy đã coi đóng
(`.claude/commands/tiep.md:103`: `{ [ -f "$d/_end" ] || [ -f "$d/closed.md" ]; } && continue`, `tiep.md:115` *"`_end` nay ĐÓNG TRỌN thư-mục"*).
Tức **người đọc WAL và máy đọc `_end` sẽ đi hai hướng khác nhau** về cùng một thư-mục.
- **lệnh đo tái lập:**
```
ls .claude/sessions/session-14/_end
sed -n 2p .claude/WAL.md
git show c7b7ca45:.claude/WAL.md | sed -n 2p # bản TRƯỚC: không có "GIỮ MỞ"
git log --format="%h %ad %s" --date=format:"%H:%M" -- .claude/sessions/session-14/_end
sed -n 3p .claude/workflows/runs/2026-08-10-S189-bookstart-open/run.md
```
- **resolve:** WAL:2 đổi sang phiên-LOGIC **L15 / window 1 / S189** (khớp `run.md:3` + `_end`), và nếu muốn giữ tinh thần YC-026 thì
viết đúng vế còn sống: *"conversation KHÔNG đóng"* — **không** viết "phiên-LOGIC L14 giữ mở", vì vế đó đã bị `_end` bác vật lý.
Hết flag khi `sed -n 2p .claude/WAL.md` không còn chứa `L14` **và** không còn chứa `GIỮ MỞ`.
🔸 **Khai ranh (không lấn):** tao **KHÔNG** phán `_end` viết đúng hay sai lúc 20:43 — đó là câu hỏi nghi-thức thuộc `ring5-audit`.
Tao chỉ phán: **hai bề mặt đang nói ngược nhau, và bề mặt viết SAU (WAL) là bề mặt sai** so với vật frozen + so với chính `run.md` lượt này.
---
## FLAG-2 · HIGH · `view-stale-header` — `STATUS:8` "mốc SỐNG" còn neo S185/L13 sau khi S188/L14 đã đóng
- **view:** `docs/STATUS.md:8` → `🔴 **mốc SỐNG = S185, phiên-LOGIC L13, window 4** (2026-08-10)`
- **source (cùng file, cách 2 dòng):** `docs/STATUS.md:6` → ` **S187→S188 ĐÓNG (2026-08-10, phiên-LOGIC L14 window 2-3)**`
và `docs/HANDOFF.md:5` → `**🆕 Last updated:** 2026-08-10 (**S187S188 ĐÓNG** phiên-LOGIC **L14** window 2-3)`
- **lệch:** view nói mốc SỐNG = **S185 / L13 / window 4** · source nói mốc mới nhất = **S188 / L14 / window 3**.
- **bằng chứng "sửa một phía" (đây là điểm đắt):** commit `c7b7ca45` (closeout S188) chạm `docs/STATUS.md` đúng 3 hunk:
`@@ -5,0 +6 @@` (chèn row S188 mới) · `@@ -475 +476 @@` · `@@ -482 +483 @@`.
⇒ **row mới được CHÈN, dòng `:8` không nằm trong hunk nào** ⇒ anchor không advance.
- **chứng row này CÓ hợp đồng phải advance (không phải dòng lịch sử):** chính `:8` mang lineage
`🧊 mốc S179/L11/window-7 xem segment Recently-Done` ⇒ nhiệm vụ của row = *giữ mốc hiện hành + đẩy mốc cũ xuống 🧊*.
Nó đã advance S179→S185 ở lượt trước; lượt S188 thì không.
- **máy MÙ chỗ này, có đối chứng:** `H24-1` in `moc-phai (newest governance milestone) = 2026-08-01 from docs/HANDOFF.md:183`
⇒ máy thậm chí không thấy mốc 08-10; nó không đọc `:8`.
- **lệnh đo tái lập:**
```
awk 'NR>=6 && NR<=8 {print NR": "substr($0,1,90)}' docs/STATUS.md
git show c7b7ca45 --unified=0 -- docs/STATUS.md | grep "^@@"
```
- **resolve:** `:8` đổi thành `mốc SỐNG = S188, phiên-LOGIC L14, window 3`, đẩy `S185/L13/window-4` xuống nhánh 🧊.
Hết flag khi `sed -n 8p docs/STATUS.md` chứa `S188` và `L14`.
---
## FLAG-3 · HIGH · `view-stale-count` — `STATUS:480` row canonical Sub-agents tự chép số roster SAI, ngay trong row ra luật cấm chép số
- **view:** `docs/STATUS.md:480`, trong ô mô tả:
` ~~roster 26 > hmw_width.cap 20~~ ĐÓNG @S181: cap 30, **roster 23** 30 0 lane bị bỏ`
- **source:** cột giữa của **CHÍNH ROW ĐÓ**: `| Sub-agents | **29** |` · đĩa `.claude/agents/*.md` trừ README = **29** · `hmw.js` VALID_ROLES = **29**.
- **lệch:** view nói roster **23** · source (cùng dòng, và đĩa) nói **29** — lệch **6**.
- **vì sao đắt hơn một số sai thường:**
① đây là **ô canonical** mà B1 bắt mọi derived-doc trỏ về — số sai ở đây lan xuống, không lan lên;
② chính row này ra luật *"số vai = cột giữa của chính row này — KHÔNG chép lại vào narrative"* rồi vi phạm nó ở narrative của mình;
③ kết luận *"0 lane bị bỏ"* hiện vẫn ĐÚNG nhưng **đúng do may** (29 ≤ 30), không phải do phép tính đã ghi.
- **tái phạm:** đã bắt @S186 (khi đó ở `:479`). Sau `c7b7ca45` chèn 1 dòng ở đầu file, ô này trôi `:479 :480` mà nội dung không đổi
⇒ **kèm bài học con-trỏ:** mọi cite `file:line` vào STATUS viết cho lượt này chắc chắn thối ở lượt sau (chèn-đầu-file).
- **lệnh đo tái lập:**
```
awk 'NR==480' docs/STATUS.md | grep -o "ĐÓNG @S181[^*]*"
ls .claude/agents/*.md | grep -v README | wc -l # 29
grep -c "" /dev/null; # control
```
- **resolve:** bỏ hẳn con số trong mệnh đề đó (viết `roster cap 0 lane bị bỏ`, trỏ cột giữa) — **bỏ số, đừng đổi số**
(đúng thuốc `agents/README.md:3` đã kê: *"Vá @S122 bằng cách bỏ số, không phải bằng cách đổi số"*).
Hết flag khi `grep -c "roster 23" docs/STATUS.md` = **1** (chỉ còn 1 hit lineage S153 ở cùng dòng, hợp lệ).
---
## FLAG-4 · MED-HIGH · `view-stale-role-desc` — `agents/README.md:264` tự xưng "ĐỦ roster" nhưng liệt THIẾU 3 vai
- **view:** `.claude/agents/README.md:264` → `**VALID_ROLES (whitelist hmw.js ĐỦ roster; …)**` rồi liệt tên.
Đếm phần-tử có mặt trên dòng đó = **26**.
- **source:** `.claude/workflows/hmw.js` mảng `VALID_ROLES` (dòng 22..60) = **29** phần-tử; đĩa `.claude/agents/*.md` trừ README = **29**.
Giao 2 tập: `disk NOT in VALID_ROLES = []`, `VALID_ROLES NOT on disk = []` ⇒ máy và đĩa KHỚP; chỉ **doc** lệch.
- **lệch:** thiếu đúng 3 tên: `ring5-audit` · `score-counter` · `score-count-auditor` (26 vs 29).
- 🔴 **BẰNG CHỨNG VỀ THƯỚC — theo yêu cầu ghi cả 2 số + chênh lệch:**
| phép đếm | kết quả |
|---|---|
| regex ngây thơ `VALID_ROLES\s*=\s*\[([\s\S]*?)\]` (non-greedy, KHÔNG strip comment) | **18** |
| strip `//` + `/* */` TRƯỚC, rồi bắt `'...'` trong khoảng dòng 22..60 | **29** |
| **chênh lệch** | **11** |
Nguyên nhân: dấu `]` nằm trong **comment** (`hmw.js:39` `KHÁC H1 tooling / H2 harvest / H24 lead / reviewer diff`;
cùng lớp `:35` `:37`) non-greedy dừng sớm, cắt mảng làm đôi.
`agents/README.md:28` **đã cảnh báo đúng bẫy này** (*"dấu ']' trong comment hmw.js:39 cắt regex naive thành 18"*) tao xác nhận còn sống, số khớp nguyên văn.
Ai đi FLAG này đếm bằng regex thô sẽ ra 18 tưởng hmw.js mới chỗ hỏng. **Không phải.** hmw.js ĐÚNG; doc sai.
- **tái phạm + xấu đi:** @S186 tao báo *"README:264 thiếu ring5"* (1 tên). Đo lại hôm nay: thiếu **3** tên
báo **cận-dưới**, 2 vai `score-*` (land @S181) chưa bao giờ vào dòng này.
- **cảnh báo nằm ngay dưới, chưa được thi hành:** `agents/README.md:266`
*"Đổi roster = đổi 2 BỀ-MẶT ĐỘC-LẬP: (1) file .md … (2) hằng VALID_ROLES trong hmw.js … Sửa 1 quên 1 = vai spawn được tay nhưng THROW trong workflow"*.
đây cả 2 bề-mặt MÁY đều đúng cái lệch **bề-mặt DOC mô tả chúng**, tức lớp thứ 3 câu cảnh báo không nhắc tới.
- **lệnh đo tái lập:** (node, strip comment trước)
```
node -e "const fs=require('fs');const L=fs.readFileSync('.claude/workflows/hmw.js','utf8').split('\n');
let s=L.findIndex(l=>l.includes('const VALID_ROLES')),e=-1;
for(let i=s+1;i<L.length;i++){if(L[i].replace(/\/\/.*/,'').includes(']')){e=i;break}}
const items=[...L.slice(s,e+1).map(l=>l.replace(/\/\/.*/,'')).join('\n').matchAll(/'([^']+)'/g)].map(x=>x[1]);
const disk=fs.readdirSync('.claude/agents').filter(f=>f.endsWith('.md')&&f!=='README.md').map(f=>f.replace(/\.md$/,''));
const l264=fs.readFileSync('.claude/agents/README.md','utf8').split('\n')[263];
console.log(items.length, disk.length, disk.filter(d=>!l264.includes(d)));"
```
- **resolve:** thêm 3 tên vào `:264`. Hết flag khi lệnh trên in mảng thiếu = `[]`.
---
## FLAG-5 · MED · `view-stale-count` — `CLAUDE.md:77` bảng module KHKK dừng ở Mig 71, thiếu Mig 72
- **view:** `CLAUDE.md:77` cột Migration của row `**ContractSigningPlans (Kế hoạch kết KHKK)**` = `**69, 71**`
- **source:** đĩa có `src/Backend/SolutionErp.Infrastructure/Persistence/Migrations/20260806070242_AddMaHangMucToContractSigningPlanLines.cs`
— commit `530af229` 2026-08-06 *"KHKK màn duyệt — … + mã hạng mục (Mig 72)"*.
`docs/STATUS.md:469` (canonical) = `| Migrations | **72** |` ⇒ **canonical ĐÚNG, derived SAI** (đúng chiều B1: flag derived).
- **lệch:** view liệt 2 mig cho module KHKK (**69, 71**) · source: module này có **3** (69, 71, **72**) — Mig 72 sửa đúng
bảng `ContractSigningPlanLines` của chính module này, không phải mig của module khác.
- **lệnh đo tái lập:**
```
awk 'NR==77' CLAUDE.md | grep -o "| \*\*69, 71\*\* |"
ls src/Backend/SolutionErp.Infrastructure/Persistence/Migrations/ | grep MaHangMuc
git log -1 --format="%h %ad %s" --date=short -- "*MaHangMuc*"
sed -n 469p docs/STATUS.md | grep -o "Migrations | \*\*72\*\*"
```
- **resolve:** `**69, 71**` → `**69, 71, 72**`. Hết flag khi `awk 'NR==77' CLAUDE.md | grep -c "69, 71, 72"` = 1.
---
## FLAG-6 · MED · `view-stale-count` — cùng lớp FLAG-5, bề mặt thứ hai: `CLAUDE.md:69` "Lịch sử mig gần đây" dừng ở 71
- **view:** `CLAUDE.md:69` → `Lịch sử mig gần đây: **+S164/S165 Mig 70 + Mig 71 …** · **+S161 Mig 69** `
⇒ phần tử **mới nhất** trong danh sách "gần đây" là Mig **71**.
- **source:** đĩa = Mig **72** (`530af229`, 2026-08-06) · `STATUS:469` = 72.
- **lệch:** danh sách tự xưng "gần đây" **thiếu đúng phần tử gần đây nhất** — dạng hỏng nguy hơn số-sai, vì
người đọc dùng nó để suy "72 là gì" sẽ không tìm thấy và kết luận nhầm là 72 chưa land.
- **grep 0-hit kèm control dương (chống đọc-vắng-thành-sạch):**
```
grep -c "Mig 72" CLAUDE.md # 0 <- vắng THẬT
grep -c "Mig 71" CLAUDE.md # >0 <- control dương: thước đọc được file này
```
- **resolve:** thêm `Mig 72 AddMaHangMucToContractSigningPlanLines (S177, KHKK Line + hạng mục, AddColumn no new table)` vào đầu danh sách.
🔸 **CARVE-OUT có chủ đích — KHÔNG flag `ef-core-migration/SKILL.md`:** bảng mig ở skill đó cũng dừng Mig 71, nhưng `:25` đã
**tự khai tường minh**: *"Bảng dưới chỉ để tra lịch sử; nó sẽ luôn tụt sau và điều đó **hợp lệ** — cái sai là câu tự nhận nó là mới nhất"*
(câu tự-nhận đã bị gỡ @S181). Đóng-băng-CÓ-KHAI ⇒ theo bẫy #3, flag nó là nhiễu vĩnh viễn. Ngoài ra `SKILL.md:102`
*"last schema-changing Mig 70"* vẫn **ĐÚNG** vì Mig 72 là AddColumn, không đổi số bảng (97 giữ).
Nợ này đã có sổ riêng: `docs/HANDOFF.md:127` F-7. Không tính vào TOTAL của tao.
---
## FLAG-7 · MED-HIGH · `view-stale-status` — `CLAUDE.md` 3 site vẫn giới thiệu `migration-todos.md` như tracker SỐNG, trong khi chính file đó tự khai ĐÃ CHẾT
- **view (3 site, cùng file lệnh mà mọi phiên đọc đầu tiên):**
- `CLAUDE.md:17` — nằm trong khối **"5 file đọc trước tiên"**: `4. docs/changelog/migration-todos.md Atomic tasks theo phase (active-work đọc TRONG file …)`
- `CLAUDE.md:143` — bảng tài liệu: `| migration-todos.md | Roadmap 5 phase + atomic tasks |`
- `CLAUDE.md:166` — **bước 2 của nghi-thức Kết thúc session**: `Tick checklist tương ứng trong docs/changelog/migration-todos.md`
- **source (chính file đó, dòng 6-14):**
- `:6` `🔴 **FILE NÀY ĐÓNG BĂNG Ở S168 — ĐỌC CẢNH BÁO TRƯỚC KHI TIN BẤT KỲ DÒNG NÀO (vá @S186).**`
- `:8` ` ~18 nhãn phiên việc ĐÃ SHIP chưa bao giờ VÀO tracker này. **Nợ dựng lại tracker = việc riêng, chưa làm.**`
- `:10` `🧊 Dòng Active-work **SAI**, giữ nguyên văn làm vết`
- `:14` ` **MẠCH SỐNG cho tới khi tracker được dựng lại:** docs/STATUS.md dòng CURRENT + .claude/WAL.md + docs/HANDOFF.md`
- **lệch:** view nói *đọc active-work TRONG file* + *tick checklist ở đó mỗi closeout* · source nói *đừng tin dòng nào, dòng active-work SAI, mạch sống ở chỗ khác*.
- **hại THẬT, 2 tầng:**
① `:17` nằm trong 5-file-đọc-trước **và** file này là nguồn #9 của `tiep_reload.sources`
(`memory-budget.json:25` — *"header Active-work + section Phase hiện hành"*) ⇒ câu đã-được-khai-là-SAI được **tái sinh vào context lead mỗi lần `/tiep`**;
② `:166` là **một bước nghi-thức**. Dưới `YC-027` (*"command phải đc thực hiện trọn vẹn tao ko chấp nhận bất cứ 1 lý do nào"*,
`so-yeu-cau-chu-du-an.md:57`), một bước trỏ vào file chết đặt closeout vào thế **hoặc bỏ bước (vi phạm YC-027) hoặc tick vào sổ đã khai là sai**.
- **lệnh đo tái lập:**
```
grep -n "migration-todos" CLAUDE.md
awk 'NR>=6 && NR<=14 {print NR": "substr($0,1,120)}' docs/changelog/migration-todos.md
python -c "import json;print([s for s in json.load(open('.claude/agent-memory/memory-budget.json',encoding='utf-8'))['tiep_reload']['sources'] if 'migration-todos' in s])"
```
- **resolve:** 3 site đều gắn nhãn trạng thái thật (vd `:17` → *"⚠️ ĐÓNG BĂNG @S168 — đọc cảnh báo đầu file; mạch sống = STATUS CURRENT + WAL + HANDOFF"*),
và `:166` đổi thành có-điều-kiện (*"tick nếu tracker đã dựng lại; chưa thì ghi mạch vào STATUS/WAL"*) để bước nghi-thức không còn bất khả thi.
Hết flag khi 3 site đều mang nhãn đóng-băng hoặc tracker được dựng lại thật.
---
## FLAG-8 · LOW · `view-stale-count` — khối cảnh báo ở `migration-todos.md:7` tự vô hiệu hoá bằng chứng của chính nó ngay khi land
- **view:** `docs/changelog/migration-todos.md:7` — *"Bằng chứng, 2 đường độc lập:*
① *quét toàn bộ nhãn `S\d{2,3}` … tập nhãn **max = S168, 0 ngoại lệ***;
② *`git log -1 -- docs/changelog/migration-todos.md` = **`a2b37dcc` 2026-08-01** ⇒ file chưa được chạm **9 ngày***"
(kèm `824 dòng / 88.151 B`)
- **source (đo hôm nay):**
- `git log -1 -- docs/changelog/migration-todos.md` = **`5a77f4f1` 2026-08-10** (chính commit đã land khối cảnh báo này) — **không phải** `a2b37dcc`, **không phải** 9 ngày.
- `wc -l` = **833** · `wc -c` = **90.161** (view ghi 824 / 88.151)
- `grep -o "S[0-9]\{2,3\}" | sort -u` ⇒ có **S186** trong file ⇒ mệnh đề *"max = S168, **0 ngoại lệ**"* nay sai literal
(S186 đến từ chữ "vá @S186" trong chính khối cảnh báo).
- **lệch:** cả 3 con số/mệnh đề chứng minh đều đo trên bản TRƯỚC khi khối cảnh báo được thêm vào ⇒ **self-referential count**
(cùng lớp tao đã bắt @S153 FLAG-3: *"nguồn = chính đoạn vừa append"*).
- 🔴 **KHÔNG đọc thành 'cảnh báo sai':** KẾT LUẬN của khối (*nội dung tracker dừng ở S168*) vẫn **ĐÚNG** — cái hỏng là **phép đo được trích dẫn**.
Người đi kiểm chạy đúng lệnh được ghi sẽ nhận kết quả khác và có thể bác nhầm cả khối, hoặc tệ hơn: đọc `git log 2026-08-10` thành "file vừa được cập nhật".
- **lệnh đo tái lập:**
```
sed -n 7p docs/changelog/migration-todos.md | fold -w 200 | head -5
git log -1 --format="%h %ad" --date=short -- docs/changelog/migration-todos.md
wc -l docs/changelog/migration-todos.md ; wc -c docs/changelog/migration-todos.md
grep -c "S186" docs/changelog/migration-todos.md
```
- **resolve:** thêm 1 vế miễn trừ vào `:7` — *"(số đo trên bản TRƯỚC khối cảnh báo, `a2b37dcc`; commit land khối này = `5a77f4f1` 08-10 — nội dung tracker vẫn dừng S168)"*.
Bỏ số dòng/byte hoặc gắn ngày đo. Hết flag khi `:7` có vế miễn trừ.
---
## FLAG-9 · HIGH · `view-residual-asym` — ĐIỂM MÙ TỰ-QUY-CHIẾU: frontmatter của CHÍNH 2 vai H24 còn câu đã bị tuyên là SAI, qua 2 đợt vá khác nhau
🔴 Đây là FLAG tao phải tự soi mình. Diary của tao ghi đúng lớp này 3 lần (S153 M-1 · S173 FLAG-10 · S180 FLAG-15) và nó **vẫn còn**.
- **view (2 file, cùng 1 trường `description:` của frontmatter):**
- `.claude/agents/lead-stale-auditor.md:4` → ` Chạy theo NHỊP (\`h24_cadence\`), **KHÔNG mỗi phiên**. `
- `.claude/agents/lead-gap-auditor.md:4` → **cùng nguyên văn** `Chạy theo NHỊP (\`h24_cadence\`), KHÔNG mỗi phiên.`
- **source (THÂN của chính file đó, cách 50 dòng):**
- `.claude/agents/lead-stale-auditor.md:54` → `## Nhịp mày chạy **MỖI phiên, ở CẢ HAI bookend** (HÌNH B @S149)`
- `:56` → `Mày spawn **VÔ-ĐIỀU-KIỆN** **không bộ-đếm nào phải tới hạn**.`
- `:60` (khối 🧊 vá @S153) → bản cũ *"mày KHÔNG chạy mỗi phiên"* bị tuyên là **"khẳng-định phủ-định SAI"**
- bề mặt LỆNH đồng ý với thân: `.claude/commands/session-start.md:175` *"cặp light = **VÔ-ĐIỀU-KIỆN mỗi bookend** (hình B)"* · `session-start.md:274` *"spawn **VÔ-ĐIỀU-KIỆN mỗi đầu phiên** — KHÔNG còn cổng OVERDUE(light)"*
- **lệch:** view (frontmatter) nói **KHÔNG chạy mỗi phiên** · source (thân + 2 site lệnh) nói **chạy VÔ-ĐIỀU-KIỆN mỗi bookend**.
### Vì sao đây là `view-residual-asym` chứ không phải stale thường: **HAI đợt vá, cả hai đều sửa một phía**
| đợt vá | sửa được | BỎ SÓT |
|---|---|---|
| **S153** (M-1, `ring2-audit` thách-CLEAN bắt) — lật mệnh đề nhịp | thân `:54` `:56` + `STATUS` + `session-start`/`session-end` | trường `description:` `:4` của **cả 2** persona |
| **S180** (W3 gói-B) — mở `view-claim-broader-than-sample`, bỏ số khỏi heading + thêm dòng bảng | bảng class trong thân (đo: **6** dòng `view-*`) | `:4` vẫn liệt **5** dạng dấu-hiệu, thiếu đúng dạng *suy-luận-vượt-mẫu* |
⇒ Cùng một ô (`:4`) sống sót **2 lần vá độc lập** vì cả 2 lần đều grep/sửa trong THÂN.
- **hại THẬT, không phải sạch-sẽ hình thức:** `description:` là trường **harness đọc để chọn/điều-phối vai** — nó là chỗ lead tra
*"khi nào gọi con này"*. Câu *"KHÔNG mỗi phiên"* nằm đúng ở đó ⇒ một lead đọc đúng chữ sẽ tự suy
*"light chưa tới hạn ⇒ chưa tới lượt cặp H24"* và **bỏ spawn ngay tại bookend** — đúng cơ chế hỏng mà S153 đã mô tả.
Lần này còn cứng hơn: `deep_every` đã bị owner hạ **15→1** @S185 (`memory-budget.json:252`, YC-019(5) *"cứ end/start là cứ chạy"*)
⇒ *"theo nhịp"* và *"mỗi phiên"* nay **trùng nhau về giá trị**, nhưng câu ở `:4` vẫn dạy cái mệnh đề phủ định.
- **lệnh đo tái lập:**
```
awk 'NR==4' .claude/agents/lead-stale-auditor.md | grep -o "Chạy theo NHỊP[^.]*\."
awk 'NR==4' .claude/agents/lead-gap-auditor.md | grep -o "Chạy theo NHỊP[^.]*\."
sed -n '54p;56p' .claude/agents/lead-stale-auditor.md
grep -c "^| \`view-" .claude/agents/lead-stale-auditor.md # 6 dòng bảng
awk 'NR==4' .claude/agents/lead-stale-auditor.md | grep -c "vượt mẫu\|broader-than-sample" # 0 = vắng THẬT
grep -c "broader-than-sample" .claude/agents/lead-stale-auditor.md # >0 control dương
python -c "import json;print(json.load(open('.claude/agent-memory/memory-budget.json',encoding='utf-8'))['h24_cadence']['deep_every'])" # 1
```
- **resolve:** ở `:4` của **cả 2** file: bỏ mệnh đề `KHÔNG mỗi phiên`, thay bằng *"chạy ở CẢ HAI bookend mỗi phiên (hình B @S149); độ sâu theo `h24_cadence`"*;
và bỏ luôn phần liệt-kê dấu-hiệu (trỏ khoá `lead_self_audit.flag_classes` thay vì kể 5 dạng) — **bỏ liệt-kê, đừng thêm dạng thứ 6**,
vì kể tay ở đây chính là cơ chế đã thối 2 lần.
Hết flag khi `grep -c "KHÔNG mỗi phiên" .claude/agents/lead-*.md` = **0**.
🔸 **Ranh:** tao chỉ báo phần `lead-stale-auditor` là địa phận mình; site `lead-gap-auditor.md:4` tao báo vì **cùng một chuỗi ký tự, cùng một đợt vá bỏ sót** (bằng chứng bất-đối-xứng), không phải vì tao soi nội dung vai kia.
---
## FLAG-10 · HIGH · `view-residual-asym` — mốc "Last updated" MỚI bị trang trí ⇒ MÁY bám mốc CŨ 9 ngày; canonical-poison LÂY QUA MÁY
- **view:** `docs/HANDOFF.md:183` → `**Last updated:** 2026-08-01 tối (**S163→S168** — phiên-LOGIC **L9** windows 1-6)`
— segment này **đã bị thay thế** nhưng vẫn mang **đúng dạng anchor** và **không** có nhãn 🧊 giáng cấp.
- **source:** `docs/HANDOFF.md:5` → `**🆕 Last updated:** 2026-08-10 (**S187→S188 ĐÓNG** — phiên-LOGIC **L14** window 2-3)`
- **lệch (đo được, không suy):** `governance-detectors.ps1` H24-1 in nguyên văn:
```
anchors parsed: 3 doc(s) ; moc-phai (newest governance milestone) = 2026-08-01 from docs/HANDOFF.md:183
```
⇒ máy chốt "mốc governance mới nhất" = **2026-08-01**, trong khi mốc thật trên **CÙNG FILE** = **2026-08-10** (`:5`).
- **cơ chế (đọc từ chính detector, không suy đoán):** `scripts/governance-detectors.ps1:610`
```
'\*\*Last updated:\*\*\s*(\d{4}-\d{2}-\d{2})'
```
`:5` viết `**🆕 Last updated:**` — ký tự `🆕 ` nằm **BÊN TRONG** cặp `**` ⇒ chuỗi không còn là `**Last updated:**` ⇒ **không khớp**.
`:183` giữ nguyên dạng trần ⇒ khớp. Máy vì thế lấy mốc cũ.
- **bất-đối-xứng ở đâu:** hai segment cũ hơn ĐÃ được giáng cấp đúng cách — `:218` và `:254` đều mở đầu `**🧊 (Last updated cũ)**`.
Riêng `:183` — segment **liền trước** — không được giáng. ⇒ Lượt land segment mới **sửa một phía**: viết `:5` mới, quên hạ `:183`.
- **hại THẬT — đây là lớp `canonical-poison lây qua MÁY` (tao đã bắt cùng lớp @S166 F-1):**
H24-1 tính *"N SESSIONS behind"* cho mọi doc dựa trên mốc-phải. Mốc-phải thấp 9 ngày ⇒ **mọi verdict title-freshness phiên này đều UNDER-report**.
Cụ thể 2 dòng máy vừa in (`rag-setup-plan.md:4` · `form-engine/SKILL.md:15` — *"35 SESSIONS behind"*) là **cận-dưới**;
đo lại theo mốc thật 08-10 thì cả hai còn tụt xa hơn. ⇒ **Không đọc output H24-1 phiên này thành "chỉ có 2 doc hơi cũ".**
- **lệnh đo tái lập:**
```
grep -n "Last updated" docs/HANDOFF.md | head -5
sed -n 610p scripts/governance-detectors.ps1
powershell -Command "'**🆕 Last updated:** 2026-08-10' -match '\*\*Last updated:\*\*\s*(\d{4}-\d{2}-\d{2})'" # False
powershell -Command "'**Last updated:** 2026-08-01' -match '\*\*Last updated:\*\*\s*(\d{4}-\d{2}-\d{2})'" # True
```
- **resolve (2 dạng đều hợp lệ, chọn 1 — đây là phần DOC, tao chỉ đề xuất phía doc):**
① hạ `:183` thành `**🧊 (Last updated cũ)** 2026-08-01 …` cho khớp `:218`/`:254` — máy hết bám nó; **hoặc**
② đưa `🆕` ra NGOÀI cặp `**` ở `:5` (`🆕 **Last updated:** 2026-08-10`) để anchor mới trở nên đọc-được.
Làm **cả hai** thì chắc. Hết flag khi H24-1 in `moc-phai … = 2026-08-10`.
- 🔸 **KHÔNG lấn:** sửa regex của detector **không phải** việc tao đề xuất (turf `tooling-auditor` / chủ detector).
Tao chỉ báo phía doc + khai rằng nền-máy của chính tao phiên này đã bị lệch vì ô này.
---
## FLAG-11 · MED · `view-stale-header` — khối `🔥 CURRENT` của STATUS còn đứng ở S168/L9 sau **3 lượt closeout**, và cửa thoát hiểm của nó trỏ vào ô đã hỏng
- **view:** `docs/STATUS.md:10` → `**🔥 CURRENT (S161→S168, 2026-07-31→08-01 — phiên-LOGIC **L9**: chuỗi SP-002 B0→B4 …`
- **source:** `docs/STATUS.md:6` (S187→S188 ĐÓNG, **L14**) · `docs/HANDOFF.md:5` (**L14**) · `runs/…S189…/run.md:3` (**L15**)
- **lệch:** khối tự xưng **CURRENT** đang mô tả **L9 / S161→S168** · thực tế đã sang **L14 đóng, L15 mở** — cách **5 phiên-LOGIC**.
- **CÓ carve-out tự khai, và tao xử thẳng chứ không lách:** `docs/STATUS.md:8` ghi
*"Dòng CURRENT ngay dưới đây **advance @closeout** nên tụt sau — giữa phiên đọc `.claude/WAL.md`."*
⇒ Miễn trừ này chỉ hợp lệ cho **độ trễ trong phiên**. Nó **không** che được ca hiện tại vì:
① cơ chế được khai là *advance @closeout* mà **3 closeout đã chạy** kể từ đó (S185 · S188 `c7b7ca45` · chạy-bù `ef1d4fbb`) — **0 lần advance**;
② `git log -L 10,10:docs/STATUS.md` ⇒ chạm gần nhất **`d2918790` 2026-08-07** (S181) — nghĩa là khối đứng yên qua cả S185 lẫn S187-S188;
③ **cửa thoát hiểm bị nhiễm:** `:8` bảo *"giữa phiên đọc `.claude/WAL.md`"* — mà WAL:2 chính là **FLAG-1** (khai L14 GIỮ MỞ, sai).
⇒ người đọc đi theo đúng chỉ dẫn của STATUS sẽ rơi vào ô sai thứ hai. **Cùng hình dạng tao đã bắt @S179 FLAG-7** (*"con-trỏ giải-cứu trỏ vào ô cũng đã ô-nhiễm"*) — nay tái diễn.
- **lệnh đo tái lập:**
```
awk 'NR==10 {print substr($0,1,80)}' docs/STATUS.md
git log -3 --format="%h %ad" --date=short -L 10,10:docs/STATUS.md | grep -E "^[0-9a-f]{8}"
git log --format="%h %ad %s" --date=short c7b7ca45 -1 ; git log --format="%h" ef1d4fbb -1
```
- **resolve:** advance khối CURRENT sang L14/S187-S188 (hoặc L15 khi phiên này có nội dung), đẩy L9 xuống `Recently Done`;
và **sửa cửa thoát hiểm ở `:8`** cho trỏ vào ô còn sống. Hết flag khi `sed -n 10p docs/STATUS.md` không còn `S161→S168`.
---
# MỤC RIÊNG — ca `_end` ⟂ WAL: đếm nhân chứng, không đếm cảm giác
Lead pin ca này làm mồi. Tao **không** dừng ở "hai vật nói ngược" — tao đếm **mọi bề mặt đang khai trạng thái của L14** rồi xem bên nào đứng một mình.
| # | bề mặt | khai gì về L14 | phe |
|---|---|---|---|
| 1 | `.claude/sessions/session-14/_end` (tồn tại, FROZEN) | **đã chốt-kết** | ĐÓNG |
| 2 | `docs/STATUS.md:6` | `✅ S187→S188 **ĐÓNG** … phiên-LOGIC L14 window 2-3` | ĐÓNG |
| 3 | `docs/HANDOFF.md:5` | `**S187→S188 ĐÓNG** — phiên-LOGIC **L14** window 2-3` | ĐÓNG |
| 4 | `runs/2026-08-10-S189-bookstart-open/run.md:3` | `phien-logic: **L15** (session-15) · window 1` | ĐÓNG (L14 hết) |
| 5 | `.claude/sessions/session-15/` **TỒN TẠI** (`_context-s-15.md`, 23:50), **0 `_end`** | phiên-LOGIC SỐNG hiện tại = **L15** | ĐÓNG (L14 hết) |
| 6 | `docs/governance/so-yeu-cau-chu-du-an.md:58` (hàng `YC-026`) | *"`_end` … đã ghi TRƯỚC lệnh này ~15 phút — dấu frozen không gỡ được; hiệu lực thực tế = **conversation** tiếp tục"* | ĐÓNG (phân biệt đúng) |
| **7** | **`.claude/WAL.md:2`** | `phiên-LOGIC L14, window 3 — **GIỮ MỞ** theo YC-026` | **MỞ — đứng MỘT MÌNH 1/7** |
**Phán:** 6/7 bề mặt (trong đó có 1 vật frozen + 1 thư mục vật lý mới + chính `run.md` của lượt này) nói L14 đã khép.
`WAL.md:2` là bề mặt **duy nhất** nói ngược ⇒ **WAL là view SAI**, không phải "hai bên ngang nhau". → **FLAG-1**.
**Chỗ dễ đọc nhầm, khoanh rõ:** `YC-026` (*"ko đóng phiên với bất cứ lý do nào"*) là lệnh **CÒN HIỆU LỰC** —
nhưng đối tượng của nó là **conversation/lượt làm việc**, không phải nhãn `phiên-LOGIC`. Sổ `:58` đã tự khai đúng như vậy.
WAL đem lệnh đó **áp nhầm lên nhãn phiên-LOGIC**, tạo ra một trạng thái mà máy (`tiep.md:103`) không thể đồng ý.
⇒ **Vá WAL KHÔNG phải là "bỏ YC-026"** — YC-026 vẫn sống nguyên; chỉ là ghi đúng vật mà nó ràng buộc.
🔸 **Không lấn:** *`_end` viết lúc 20:43 có đúng nghi-thức không* (giữa lúc owner đang ra lệnh giữ phiên) = câu hỏi **nghi-thức**, turf `ring5-audit`.
*Không ai ghi mạch mới vào sổ nào* = turf `lead-gap-auditor`. Tao chỉ phán **view lệch source**.
---
# ĐÃ SOI MÀ SẠCH — tách rõ trục **ĐẠT** ⟂ trục **CHẾT NON / CHƯA ĐO**
🔴 Luật tao tự áp (bài S151 + S162): **VERIFIED-CLEAN phải KÈM LỆNH**. Không có lệnh = không được ghi là sạch.
### A. ĐẠT — có lệnh, có kết quả
| # | trục | lệnh | kết quả |
|---|---|---|---|
| VC-1 | canonical ⟂ đĩa (mig/gotcha) | output máy C2/B3 | `mig=72 gotcha=88` khớp đĩa ⇒ baseline an toàn |
| VC-2 | `CLAUDE.md` KHÔNG chép digit test/mig/gotcha | `grep -c "số hiện tại → \[\`docs/STATUS.md\`\]" CLAUDE.md` | **3** con-trỏ B1 đúng chuẩn (≠ FLAG-5/6 là cột *migration per-module*, trục khác) |
| VC-3 | `STATUS:6` ⟂ `HANDOFF:5` có khớp nhau về L14 | `sed -n 6p docs/STATUS.md` + `sed -n 5p docs/HANDOFF.md` | cả hai `L14 window 2-3` ⇒ **nhất quán**, 0 flag |
| VC-4 | counter ⟂ `_end` tick | `json['counter']` = **63** vs `_end` `counter=62` | đúng thứ tự (tick sau khi đóng) ⇒ 0 flag |
| VC-5 | roster: đĩa ⟂ `hmw.js` | node strip-comment | **29 = 29**, giao 2 tập rỗng 2 chiều ⇒ 2 bề mặt MÁY sạch (chỉ DOC lệch — FLAG-4) |
| VC-6 | WAL guardrail H22 | máy C5 | 23 dòng ≤ 40 ⇒ 0 flag |
| VC-7 | carry-age H24-2 | máy | 19 carry, streak max **4 < M=6** ⇒ im đúng |
| VC-8 | `so-yeu-cau` YC-026/YC-027 còn `mở` | `grep -c "| \*\*mở\*\*"` = 6 | đúng — đây là **luật đứng**, `mở` là trạng thái ĐÚNG, KHÔNG phải stale |
### B. CHẾT NON / CHƯA ĐO — cấm đọc thành sạch
| trục | vì sao chưa kết luận được |
|---|---|
| `H24-3 session-label lag` | **máy tự khai skip**: `no doc carries BOTH a session label and an S-heading — nothing to compare` ⇒ trục này **không ai đo**, cả máy lẫn tao |
| `H24-1 title-freshness` | máy CÓ chạy nhưng **mốc-phải sai 9 ngày** (FLAG-10) ⇒ 2 flag nó in là **cận-dưới**, không phải tổng |
| bundle hash prod `STATUS:483` | đo LIVE cần chạm VPS — tao **không chạm mạng**. Ô này vừa vá @S188 (19:53-19:55), tao **không xác nhận cũng không bác** |
| `ACTIVE-MARKS.md` | chỉ soi mặt ngoài (last-touch `936d1aed` 2026-08-07). **Chưa đối chiếu từng mark với trạng thái thật** ⇒ chưa đo |
| 26/29 persona `.claude/agents/*.md` | chỉ mở **3** (2 file `lead-*` + README). 26 file còn lại **chưa chạm** |
| `docs/STATUS.md` độ phủ | file **853+ dòng**; tao soi tập trung `:1-10`, `:465-496`, + grep có mục tiêu. Ước **< 10%** đọc thật |
| `docs/HANDOFF.md` độ phủ | **667 dòng**, có mega-line `:329` (10.672 ký tự). Tao soi `:1-12`, `:127`, `:183`, `:218`, `:254`, `:300` ⇒ **rất mỏng** |
| `migration-todos` thân (833 dòng) | chỉ soi khối cảnh báo `:1-16`. Phần Phase bên dưới **chưa đối chiếu** |
🔴 **Đối chứng lượt trước để khỏi tự lừa:** `bookend-close-synthesis.md` của S188 tự khai **`5/8 vai chết giữa chừng`**
(đo bằng `grep -o` trên chính file, không lấy từ trí nhớ — lưu ý: brief giao việc cho tao ghi *"4 vai chết non"*, **đĩa nói 5/8**).
Lượt NÀY tao **không** chết non: file này được ghi từ FLAG-1 và append từng FLAG ⇒ nếu tao đứt giữa chừng, phần đã ghi vẫn đứng.
---
# COVERAGE + nấc trung thực
- **11 FLAG này là SÀN, KHÔNG phải TỔNG.** Căn cứ: bảng B ở trên — 26/29 persona chưa chạm · STATUS <10% · HANDOFF rất mỏng · ACTIVE-MARKS chưa đối chiếu · 1 trục máy tự khai skip.
- Phân rã theo class (để lead tính `jump_on_class_repeat`, ngưỡng = **3**):
| class (enum ĐÓNG) | số FLAG | FLAG # |
|---|---|---|
| `view-stale-count` | **4** | 3 · 5 · 6 · 8 |
| `view-residual-asym` | **3** | 9 · 10 · (1 phần) |
| `view-stale-status` | **2** | 1 · 7 |
| `view-stale-header` | **2** | 2 · 11 |
| `view-stale-role-desc` | **1** | 4 |
| `view-claim-broader-than-sample` | **0** | — (không gặp ca nào; **0 thật**, không phải chưa soi) |
- 🔴 **Đơn-vị tally = phiên-LOGIC**: đây là đầu `@open` của L15. Nếu `@close` cùng phiên fire lại class nào thì
`h24-signal-write.ps1` gộp thành **MỘT** quyết-định/class — **đừng đọc 2 lượt thành 2 tally**.
- 🔴 **Tao KHÔNG in nhãn `PASS`/`sạch` ở đâu cạnh số đo nói ngược** (bẫy META-COUNT, lead tái phạm 2 lần). Pass/fail tính từ số đo.
- 🔴 **0 Write/Edit ngoài file này · 0 `store_memory` · 0 RAG-write.** Mọi mục là **đề xuất**; lead VERIFY→APPEND (B3).
## Sợi chỉ chung của 11 FLAG
**8/11 FLAG sinh ra từ MỘT cơ chế: vá-một-phía.**
`_end` viết nhưng WAL không lật (1) · row S188 chèn nhưng anchor `:8` không advance (2) · thân persona vá 2 lần nhưng `description:` không đụng (9) ·
segment HANDOFF mới land nhưng segment cũ không hạ 🧊 (10) · roster đổi ở đĩa+`hmw.js` nhưng doc liệt tên không theo (4) ·
`STATUS:469` đúng 72 nhưng `CLAUDE.md` 2 site không theo (5, 6) · khối cảnh báo `migration-todos` vá nội dung nhưng bằng chứng của chính nó không đo lại (8).
⇒ Không phải "lead quên đo". Lead **đo đúng** (canonical mig/test/gotcha/roster đều khớp đĩa).
Chỗ đứt là **quãng đường từ phép đo về ĐỦ MỌI SỔ** — số đúng dừng lại ở nơi lead vừa làm việc, các bề mặt anh em không đi theo.
Đây là lần thứ **N** cùng hình dạng (S162 · S166 · S172 · S173 đều ghi câu này trong diary tao).
## END
LEAD-STALE: **11 FLAG (deep)** · HIGH 5 (1·2·3·9·10) / MED-HIGH 2 (4·7) / MED 3 (5·6·11) / LOW 1 (8)
class: `view-stale-count` 4 · `view-residual-asym` 3 · `view-stale-status` 2 · `view-stale-header` 2 · `view-stale-role-desc` 1 · `view-claim-broader-than-sample` 0
nấc: **SÀN, không phải TỔNG** (coverage khai thủng ở bảng B)
== HẾT ==

View File

@ -0,0 +1,309 @@
RING1: 26Đ/4T/6KC trên 36 claim
# sub-ring1-audit-open-S189 — KIỂM vòng-ĐO tooling/harvest @open (L15)
> Vai: `ring1-audit` (C4 TÁCH · AUTO sau đo). Read-only + propose-only — single-writer = lead (B3 VERIFY→APPEND).
> 🔴 Nhãn nấc: **@open — chấm diff-report của H1/H2, KHÔNG phải bản chốt.**
> no-self-exempt: tao KHÔNG phải H1 (`tooling-auditor`) cũng KHÔNG phải H2 (`harvest-curator`).
> G-015: `Bash` còn = kênh-ghi-mở ⇒ KHÔNG tuyên "read-only enforced". Backstop THẬT = lead soát git + commit-gate.
> Kỷ-luật ghi (ARTIFACT-FIRST, phiên này #53 trúng 4/5 vai đợt đầu): APPEND TỪNG CLAIM ngay khi chốt.
---
## 0. PIN + fail-safe (nghĩa-vụ (i))
| Input | Đường dẫn | Byte | mtime | Verdict dòng-1 |
|---|---|---|---|---|
| H1 `tooling-auditor` | `runs/2026-08-10-S189-bookstart-open/sub-tooling-auditor-open-S189.md` | **21.170** | 2026-08-11 **00:02:03** | `TOOLING: PASS_WITH_FLAGS — 7 flag` |
| H2 `harvest-curator` | `runs/2026-08-10-S189-bookstart-open/sub-harvest-curator-open-S189.md` | **21.166** | 2026-08-11 **00:02:49** | `HARVEST: GATE-FAIL-5` |
-**PIN ĐẠT** — cả 2 tồn tại, byte khớp brief từng con số, mtime = phiên này.
-**Tuần-tự C4b ĐẠT** — lượt tao bắt đầu 00:05, artifact tao ghi SAU 00:05 ⇒ `mtime(tao) > mtime(H1)=00:02:03``> mtime(H2)=00:02:49`. Không chạy song song.
-**KHÔNG NO-OP.** Có measure ⇒ có cái để chấm.
---
## 1. VERDICT PER-CLAIM (nghĩa-vụ (ii))
### 1A. H1 `tooling-auditor` — mặt ① skill + số nền
| # | Claim H1 | Tao đo lại (lệnh KHÁC) | Verdict |
|---|---|---|---|
| A-01 | 6 project skill · 23 standalone · **20** command | `ls -1d .claude/skills/*/`=6 · `ls -1d ~/.claude/skills/*/`=23 · `ls -1 .claude/commands/*.md`=20 | ✅ **ĐẠT** |
| A-02 | scripts `.ps1` 36 → **37** | `ls -1 scripts/*.ps1 \| wc -l` = **37** | ✅ **ĐẠT** (số hiện tại; "36" là baseline phiên trước, ngoài tầm đo lại) |
| A-10 | `ef-core SKILL:102` *"last schema-changing **Mig 70**"* CÒN ĐÚNG | `grep -c CreateTable`: Mig **69=7** · **70=1** · **71=0** · **72=0** | ✅ **ĐẠT + control dương** — thước BẮT được `CreateTable` (69/70 ra số dương) ⇒ hai số 0 là **vắng mặt THẬT**. H1 chỉ dẫn S179 cho Mig 71; tao đo lại tận đĩa. |
### 1B. 🔴 Load-bearing #3 — công-thức Migration (H1 F-5): **CÔNG THỨC HỎNG THẬT, H1 KHÔNG dựng rơm**
Chạy **4 engine**, trong đó 2 engine do tao tự dựng (không phải lệnh của H1):
| Engine | Phép | Kết |
|---|---|---|
| **A — LITERAL đúng chữ `STATUS:471`** | `ls *.cs \| grep -v Designer \| grep -v Snapshot \| wc -l` | **71** ❌ |
| **B — số học của H1** | 145 total 72 `*.Designer.cs` 1 `ApplicationDbContextModelSnapshot` | **72** ✅ |
| **C — RING1 độc lập: parse TIỀN-TỐ, không lọc theo TÊN** | `grep -E '^[0-9]{14}_'` rồi loại `\.Designer\.cs$` | **72** ✅ |
| **D — RING1 độc lập: BẤT-BIẾN CẶP (mạnh nhất)** | strip `.Designer.cs`/`.cs``uniq -c` phân bố | **72 nhóm, MỖI nhóm ĐÚNG 2 file** ✅ |
- **File bị công-thức NUỐT, gọi đích danh:** `20260717032812_AddPeApprovedBudgetSnapshot.cs` — migration THẬT, dính chữ `Snapshot` trong tên của chính nó.
- 🔑 **Engine D là bằng chứng loại khác, không phải phép đếm thứ ba:** phân bố `uniq -c` ra **"72 nhóm × đúng 2"** ⇒ 0 Designer mồ côi, 0 migration thiếu Designer. Con số 72 rơi ra từ một **bất-biến cấu trúc** (3-file rule), không từ một bộ lọc tên nào cả — nên nó **miễn nhiễm** với đúng lớp bẫy đang bàn.
-**A-08 (F-5 công thức hỏng) = ✅ ĐẠT.** **A-09 (số 72) = ✅ ĐẠT, đứng trên 3 engine độc lập.**
- 🔸 **Tao có động cơ nghi H1 dựng rơm** — sổ tao ghi chính cái bẫy `Snapshot` này đã cắn **tao** 3 lần (S180 F-A · S182 F-A · S186). Lần này nó **không phải bẫy của thước tao**, mà là **bẫy nằm trong CHỮ của doc**. H1 bắt đúng, và tự-rút trước khi nộp HIGH — **đây là hành vi đáng ghi nhận, không phải rơm**.
### 1C. 🔴 Load-bearing #1 — orphan run-folder (H2 §6): **0/93 XÁC NHẬN**
Tao **không** chạy lại `find -name '*synthesis*'` của H2. Tao dựng engine khác: **shell glob + `-s` test** (tồn tại VÀ khác 0-byte), dual-accept 2 dạng.
| Số | H2 khai | Tao đếm | Verdict |
|---|---|---|---|
| Universe dir | 96 | **96** | ✅ |
| Dir có `run.md` | 93 | **93** | ✅ |
| Dir KHÔNG có `run.md` | 3 (ngoài phạm vi) | **3**`S117-pe-approve-minmax-range` · `S117-pe-luyke-finalize` · `S144-bootstrap` | ✅ **ĐẠT + liệt được tên** |
| Orphan-candidate | 1 | **1** = `2026-08-10-S189-bookstart-open` | ✅ |
| Orphan THẬT | **0** | **0** | ✅ **ĐẠT** |
-**Loại folder phiên đang chạy — khai rõ theo brief:** `2026-08-10-S189-bookstart-open` là folder của **chính phiên này**, IN-PROGRESS (lúc tao đo nó đã có 7 file, synthesis chưa sinh vì bookend chưa đóng) ⇒ **KHÔNG tính orphan**. Đây là loại-trừ **có lý do cấu trúc**, không phải miễn-trừ cho tiện.
- 🔑 **CONTROL DƯƠNG cho nhánh dual-accept — tao tự đòi mình, H2 không làm:** một "dual-accept" mà nhánh thứ 2 **không bao giờ khớp** thì là nhánh CHẾT, và lời khai dual-accept thành rỗng. Tao đo riêng nhánh form-2: **đúng 5 folder được nhận CHỈ nhờ nhánh `harvest/`**`2026-06-18-h10-implement` · `h10-invest` · `h10-review` · `h910-curate` · `h910-finalize`.
-**Nếu chỉ dùng glob phẳng form-1, tao đã báo 5 orphan GIẢ.** Nhánh form-2 **SỐNG**, và con số 5 khớp đúng "5 run cũ 2026-06-18" H2 khai. ✅ **ĐẠT**
### 1D. 🔴 Load-bearing #2 — 42.975 B mồ côi (H2 F-01): **ĐẠT TỪNG BYTE**
🔴 *`ring2-audit` nằm trong danh sách này; tao **không phải** nó ⇒ soi được, no-self-exempt sạch.*
| Vai | H2 khai byte | `stat -c %s` | `grep -c S188` | `grep -c S187` | max nhãn | Verdict |
|---|---|---|---|---|---|---|
| `ring2-audit` | 18.195 | **18195** | **0** | **0** | S186 | ✅ |
| `ring5-audit` | 11.282 | **11282** | **0** | **0** | S185 | ✅ |
| `harness-audit` | 10.664 | **10664** | **0** | **0** | S186 | ✅ |
| `ctx-audit` | 2.834 | **2834** | **0** | **0** | S186 | ✅ |
| **TỔNG** | **42.975** | **42975** (`awk` cộng độc lập) | | | | ✅ **ĐẠT** |
-**B-05 ĐẠT** — 4 byte khớp tuyệt đối, tổng khớp tuyệt đối (tao cộng bằng `awk` trên output `stat`, **không** cộng lại số của H2).
-**B-06 ĐẠT từng ô** — bằng chứng git của H2 tái lập chính xác: `5a77f4f1` numstat `ring2-audit` **+1/0** · `harness-audit` **+1/0** · `ctx-audit` **+18/44** (nén). Không sai một con số.
-**B-03 ĐẠT**`c7b7ca45` seed đúng **12** `MEMORY.md`.
**2 phép PHÁ tao thử vào F-01 (chi tiết ở §2 falsify) — cả 2 KHÔNG phá được:**
1. *"Delta có land dưới nhãn KHÁC không?"* — probe `L14` / `2026-08-10` ra **hit thật** (ring2 1, ctx-audit 3…). Mở ra đọc: **toàn bộ** thuộc entry **S185/S186** — trùng **ngày dương lịch** (nhiều phiên cùng ngày 2026-08-10), không phải nhãn thay thế. **HELD.**
2. *"Delta có land ở file khác ngoài MEMORY.md không?"* — H2 chỉ soi `MEMORY.md`. Tao quét **toàn bộ** file trong 4 thư mục: có 2 archive (`ring2-audit/archive/2026-08.md`, `ctx-audit/archive/2026-07.md`). Kết: `S188` = **0/0**. Hit `S187=1` trong archive ctx-audit là **dấu xuất-xứ nén** (`"Moved from MEMORY.md L1 @S187"`) = **mention**, không phải entry công việc. **HELD.**
-**Bổ sung cho load-bearing #3 (lead hỏi):** `git log --diff-filter=D` trên thư mục Migrations = **0 commit****0 migration từng bị xoá**, loại sạch giả-thuyết "số 71 đúng vì mất 1 file". 🔑 **Control dương bắt buộc** (0-hit phải kèm chứng thước sống): cùng cờ `--diff-filter=D` chạy repo-wide since 2026-06-01 ra **4 commit****cờ SỐNG**, số 0 kia là vắng-mặt THẬT chứ không phải cờ câm.
### 1E. 🔴 Load-bearing #4 + THÁCH-CLEAN (bắt buộc — CLEAN sai là ca nguy nhất)
#### (a) mặt ② *"29 everywhere, sạch 6/6 bề mặt"* — ✅ **ĐẠT, tao dựng lại 6/6 bằng engine riêng**
| Bề mặt | H1 | Tao đo | Lệnh tao dùng |
|---|---|---|---|
| 1 đĩa | 29 | **29** | `ls .claude/agents/*.md` = 30 → trừ `README.md` |
| 2 `VALID_ROLES` | 29 | **29** | `awk '/const VALID_ROLES = \[/,/^\]/'``grep -oE "'[a-z0-9-]+'"``sort -u` |
| 3 `agent-memory/*/` | 29 | **29** | `find -mindepth 1 -maxdepth 1 -type d` |
| 4 `STATUS:480` | 29 | **29** | `sed -n '480p'` |
| 5 `README:27` | 29 | **số đã BỎ HẲN** | trỏ `docs/STATUS.md §Sub-agents` |
| 6 skill-matrix `:194-231` | 29 row | **29 row** | `grep -cE '^\|'` |
| frontmatter | 29/29 × 3 | **29 / 29 / 29** | `model: opus` · `effort: max` · `memory: project` |
**A-19 ĐẠT.****A-07 ĐẠT** — vá `README:27`**BỎ SỐ** thật (dòng nay ghi *"số canonical → `docs/STATUS.md` §Sub-agents — đếm phần-tử, KHÔNG chép số vào đây"*), đúng loại vá đóng-lớp chứ không phải đổi-số.
#### (b) 🔴 THÁCH-CLEAN 1 — mở 1 skill H1 để "fresh": **BROKE. H1 sót một skill STALE thật.**
H1 soi mặt ① và chỉ flag **2/6** project skill (`ef-core-migration` F-6 · `permission-matrix` F-7) ⇒ 4 skill còn lại **ngầm định fresh**. Tao mở `contract-workflow` — chọn có lý do: GĐ3 "Duyệt Hợp đồng" vừa land **S187-S188**, nếu có chỗ nào stale thì phải là đây.
| Phép đo | Kết |
|---|---|
| `mtime` `.claude/skills/contract-workflow/SKILL.md` | **2026-07-30***trước* khi GĐ3 land |
| `ContractApprovalWorkflowFamily` trong SKILL | **0** — nhưng file **CÓ THẬT**: `src/Backend/SolutionErp.Domain/Contracts/ContractApprovalWorkflowFamily.cs` |
| `ContractWorkflowGuards` trong SKILL | **0** — file **CÓ THẬT**: `src/Backend/SolutionErp.Application/Contracts/ContractWorkflowGuards.cs` |
| `AwV2_Hd` trong SKILL | **0** — key **CÓ THẬT** trong 2 file `.cs` (`ContractApprovalWorkflowFamily.cs`, `MenuKeys.cs`) |
| **CONTROL DƯƠNG** | `ContractType` = **6** · `phase` = **23** ⇒ thước sống, file không rỗng |
🔴 **Và nặng hơn "thiếu mục" — có một câu SAI về trạng-thái SỐNG:**
> `.claude/skills/contract-workflow/SKILL.md:458` — *"**Còn nợ:** cầu KHKK→HĐ (W5) **chưa làm** ⇒ `pe.contractId` là đường duy nhất tới GĐ3"*
Nhưng W5 **ĐÃ LAND**: commit `b275893c`*"Contract: **W5**+W6FE card **Nguồn-gốc KHKK** + panel duyệt 2-nút mirror `KhkkWorkflowPanel`…"*. Và họ workflow GĐ3 land `af5f5be8` (2026-08-10).
- 🔑 **Vì sao đây KHÔNG được miễn như bảng lịch-sử:** câu này mở bằng **"Còn nợ:"** = **tự nhận trạng-thái HIỆN-TẠI**, không phải bản-ghi quá-khứ. Đúng cái discriminator mà **chính H1** áp cho F-2 (*"dòng mở bằng 'Tổng:' ⇒ tự nhận ảnh hiện-tại ⇒ stale THẬT"*). Áp cùng thước ⇒ `:458`**stale THẬT**.
- **Tác hại đo được:** `contract-workflow` là skill **BẮT BUỘC dùng khi task khớp** (CLAUDE.md §Skills). Vai nào mở nó ra làm việc GĐ3 sẽ đọc *"cầu KHKK→HĐ chưa làm"***đi dựng lại thứ đã có**.
-**A-20 TRƯỢT.** Mặt ① của H1 **PASS_WITH_FLAGS(2) là thiếu** — có ít nhất **1 flag thứ 3** chưa bắt, và nó nặng hơn cả F-6/F-7 (cả hai đều là số/cây lệch; cái này là **chỉ-dẫn sai đường**).
#### (c) THÁCH-CLEAN 2 — mở vai H2 gọi "harvested": ✅ **HELD, có delta APPEND THẬT**
Không tin cột coverage; mở ruột 3 vai H2 xếp vào nhóm CÓ landing (tránh `ring1-audit` = chính tao):
| Vai | `grep -c S188` | Ruột thật (không chỉ nhãn) |
|---|---|---|
| `tooling-auditor` | **3** | `:59` `## S188→S189 … [S188 lead-seed; S189 tự ghi, artifact-first]` + `:27` số roster 6/6 |
| `harness-eval` | **2** | `:52` `## S188 … [LEAD SEED ON-BEHALF]` + `:54` trio nấc-1 MIXED 35 trục, headroom 125.828 tok |
| `lead-gap-auditor` | **2** | `:72` `## S188` + `:74` FLAG-1 HIGH `gap-carry-dropped`, control-dương 327 |
**3/3 có heading phiên + nội-dung 4-field thật** (task · verdict · learned), **không phải coverage-đếm-tên**. ✅ **B-09 ĐẠT.** CLEAN bên H2 **chịu được thách**.
---
## 2. FALSIFY-LOG (nghĩa-vụ (iii)) — 5 phép, 3 HELD · 2 BROKE
| # | Phép PHỦ-ĐỊNH tao thử | Kết |
|---|---|---|
| **P1** | *"H1 dựng rơm: công-thức doc thật ra chạy đúng, H1 bịa ca lỗi để ghi công tự-rút."* | **HELD** — chạy literal ra **71** thật, nạn nhân đích danh `AddPeApprovedBudgetSnapshot.cs`. 3 engine độc lập (B/C/D) đều ra 72. H1 **không** dựng rơm. |
| **P2** | *"F-01 dương-giả: delta CÓ land, chỉ khác nhãn (L14 / ngày) hoặc khác file (archive)."* | **HELD** — probe ra hit thật nhưng mở đọc: toàn bộ thuộc entry **S185/S186** trùng ngày dương-lịch; 2 archive `S188`=0. Không phá được. |
| **P3** | *"Orphan 0/93 là ĐẠT-ảo do thước quá rộng — `-name '*synthesis*'` nuốt mọi thứ."* | **HELD** — tao dựng engine khác (`-s` test), ra **cùng** 0/93; và chứng nhánh form-2 **sống** (5 folder chỉ nhận được nhờ nhánh đó). |
| **P4** | *"F-02: `ef1d4fbb` **seed** diary cho 4 vai khác."* | 🔴 **BROKE** — xem §3. Động từ sai. |
| **P5** | *"Mặt ① sạch ngoài 2 flag."* | 🔴 **BROKE**`contract-workflow/SKILL.md:458` stale live-claim (§1E-b). |
---
## 3. 🔴 ĐÍNH CHÍNH F-02 — động từ nào quá tay (lead hỏi đích danh)
**H2 viết:** *"Nhưng `ef1d4fbb` **seed diary** cho **4 vai KHÁC**: `harness-refine` · `harvest-curator` · `reviewer` · `ring1-audit`."*
**Vì sao lọt:** H2 chạy `git show --name-only -- '.claude/agent-memory/*/MEMORY.md'` — glob chỉ khớp `MEMORY.md`, ra đúng 4 tên. Nhưng **`--name-only` không phân biệt THÊM với XOÁ**. Bỏ glob ra, commit đó chạm **11 file**:
```
5 0 harness-refine/MEMORY.md ← APPEND THẬT (entry "S188 — LUẬT TICK")
0 28 harvest-curator/MEMORY.md +32→ harvest-curator/archive/2026-07.md ← NÉN
3 3 reviewer/MEMORY.md +10→ reviewer/archive/2026-08.md ← NÉN + sửa
0 7 ring1-audit/MEMORY.md +12/+6/+6 → ring1-audit/archive/* ← NÉN
```
| | |
|---|---|
| **Động từ H2 dùng** | *"seed diary cho 4 vai"* |
| **Động từ ĐÚNG** | *"`ef1d4fbb` **APPEND thật cho 1 vai** (`harness-refine`, +5/0); 3 vai còn lại là **NÉN/ARCHIVE** (`MEMORY.md` **0 dòng thêm**, chữ **chuyển ra** `archive/`)"* |
| **Seed 12 diary thật nằm ở** | commit **`c7b7ca45` @20:44** (12 `MEMORY.md`) — **KHÔNG PHẢI** `ef1d4fbb` @21:30 |
🔴 **Vì sao đính chính này đáng giữ, không phải bắt bẻ chữ:** F-02 dựng tương-phản *"3 vai được kể tên nhận 0 chữ — trong khi commit đó đi seed 4 vai KHÁC"*, đọc ra thành **lead phân bổ công gom NHẦM CHỖ**. Sự thật nhẹ hơn: commit đó **gần như không seed ai** (1/4), phần lớn là **dọn nhà** (nén xuống archive). Tương-phản thật là *"chạy-bù kể tên 3 vai rồi đi NÉN diary, không gom cho họ"* — vẫn đúng bệnh, nhưng **không phải** thiên-vị 4 vai khác.
-**B-07 (lõi F-02) vẫn ĐẠT:** 3 vai được kể tên (`ring5` · `ring2` · `harness-audit`) đều `grep -c S188` = **0**. Phát biểu cơ-chế **"narrative-capture ≠ memory-landing" ĐỨNG VỮNG**, và đề-xuất chặn của H2 (đối chiếu từng vai `ls runs/<id>/` WAL với `grep -c '<nhãn>'`) **vẫn là phép chặn đúng lớp**.
-**B-08 TRƯỢT** — chỉ mệnh-đề phụ, giữ nguyên gate `GATE-FAIL-5`.
---
## 4. 🔴 PHÂN XỬ TRANH CHẤP H1 ⟂ `lead-stale-auditor` — `ef-core-migration/SKILL.md`
Tao mở file, **không** phán theo uy tín vai.
**Chữ trên đĩa, `SKILL.md:21-25`:**
> `:21-23` — *"🔴 **Cả hai con số đều đọc từ NGUỒN SỐNG, CẤM đọc từ bảng dưới:** số hiện tại → `docs/STATUS.md` (canonical) · cái mới nhất → `ls …/Migrations/*.cs` (trừ `Designer`/`ModelSnapshot`), lấy row cuối"*
> `:25` — *"⇒ Bảng dưới **chỉ để tra lịch sử**; nó **sẽ luôn tụt sau** và điều đó **hợp lệ** — cái sai là câu tự nhận nó là mới nhất."*
### Phán: `lead-stale-auditor` ĐÚNG. H1 F-6 = **DƯƠNG-GIẢ**.
Ba lý do, đo được:
1. **File đã B1-hoá TRỌN cả hai con số sống.** `:21-23` **CẤM** đọc số từ bảng, và định tuyến cả *"số hiện tại"* lẫn *"cái mới nhất"* về nguồn sống. Bảng không còn gánh claim sống nào ⇒ thiếu row 72 **không lừa được ai**.
2. **Áp đúng discriminator của CHÍNH H1.** H1 phân loại F-2 bằng câu hỏi *"dòng này khai QUÁ KHỨ hay tự nhận ẢNH HIỆN-TẠI?"*. `:25` **tự khai là sổ lịch-sử + tuyên bố sẽ tụt sau**. Áp cùng thước ⇒ **không phải stale**. H1 dùng thước đúng cho F-2 nhưng **không áp cho F-6**.
3. **Carve-out này là kết-quả của một vá ĐÚNG LOẠI, do chính vai tao đẻ ra.** `:25` ghi *"Bắt @S181 bằng **thách-CLEAN của `ring1-audit`**"* — hồi đó lỗi thật là câu *"mới nhất = row cuối bảng"*, và vá là **XOÁ câu tự-nhận** chứ không phải chạy theo bơm row. Đó **cùng một khuôn** với vá `README:27` mà H1 vừa khen là *"đóng ĐÚNG CÁCH"* (§1 vá #3). **Khen khuôn BỎ-SỐ ở file này rồi đòi ĐỔI-SỐ ở file kia = không nhất quán.**
### Hệ quả cho F-1 — mệnh-đề "vá cả hai chỗ" **sai gộp lớp**
- **A-14 ĐẠT:** `CLAUDE.md:77` = `**69, 71**` thật, thiếu Mig 72 thật. Đây là **defect THẬT** — ô đó là cột "Migration" của bảng Module, **không có** con trỏ B1, **không có** tuyên-bố tụt-sau ⇒ tự nhận ảnh hiện-tại.
-**A-15 TRƯỢT:** H1 nói *"Mig 72 vắng ở **2 bề mặt derived độc lập**; vá 1 chỗ rồi tuyên đóng lớp thì **sót đúng một nửa**"*. Hai bề mặt **không cùng lớp**: một cái **gánh claim sống không rào**, một cái **đã rào bằng CẤM + tuyên tụt-sau**. ⇒ **Vá `CLAUDE.md:77` MỘT MÌNH là đóng trọn defect thật.**
- 🔸 Thêm row 72 vào `SKILL.md` = **làm giàu vô hại**, nhưng **không phải điều-kiện để đóng lớp**, và **không được** dùng làm cớ giữ F-6 ở sổ flag.
### 🔑 Quà rơi ra từ tranh chấp — củng cố F-5 của H1
`SKILL.md:23` **đã** ghi công-thức ĐÚNG: *"(trừ `Designer`/**`ModelSnapshot`**)"* — trong khi `STATUS:471` ghi bản HỎNG *"trừ Designer+**Snapshot**"*. ⇒ Đề-xuất F-5 của H1 **không phải phát minh mới**, mà là **đồng-bộ `STATUS:471` về đúng câu chữ đã được chứng trong repo**. Chi phí 1 dòng, có tiền-lệ ngay trong kho. **Nâng F-5 lên đáng vá trước.**
---
## 5. TÁI-DỰNG SỐ CÓ-THỂ-SAI (nghĩa-vụ (iv)) — tổng hợp
Số tao **tự dựng lại**, mỗi số bằng engine KHÁC engine vai kia dùng:
| Số | Nguồn | Kết | Khớp? |
|---|---|---|---|
| Migrations | 4 engine (literal / số-học / tiền-tố / **bất-biến cặp**) | **72** (literal ra 71) | ✅ H1 đúng |
| Migration bị xoá | `--diff-filter=D` + control repo-wide=4 | **0** | ✅ |
| Roster | 6 bề mặt + frontmatter ×3 | **29** đều | ✅ H1 đúng |
| Orphan run-folder | shell `-s` dual-accept + control nhánh form-2 | **0 / 93** (universe 96, 3 no-`run.md`) | ✅ H2 đúng |
| Byte mồ côi | `stat` + cộng bằng `awk` | **42.975** | ✅ H2 đúng |
| Plugin | `python json` parse `~/.claude/settings.json` | **18 reg / 15 en / 3 dis** + đúng 3 tên | ✅ H1 đúng |
| Tests (docs) | `STATUS:476` | **680 PASS** = 45 Domain + 635 Infra | ✅ vá THẬT |
**Không chấm được (KC) — khai thẳng, không bịa ĐẠT:**
- **KC-1 — plugin nấc `used`:** H1 tự khai *"KHÔNG đo được từ repo ⇒ KHÔNG KHAI"*. Tao cũng không có nguồn ⇒ **không chấm**. (Việc H1 **từ chối khai** là hành vi ĐÚNG.)
- **KC-2 — read-limit 0/29:** hằng-số thật nằm trong hook **ngoài repo** (0 hit trong `scripts/`+config). H2 đo theo ký-tự, lead đo độc-lập **khớp**. Tao **không có nguồn thứ 3 độc lập****KC**, không gật theo số đông. 🔸 Ghi nhận: kết-luận đứng ở **cả hai** quy-ước ×1000 và ×1024 ⇒ nhập-nhằng đơn-vị **không đổi verdict**, nên KC này **rủi ro thấp**.
- **KC-3 — coverage tổng 14/18:** tao verify được **4 thủng** (byte-exact) + **3 harvested** (mở ruột), nhưng **không tái dựng trọn mẫu-số 18** trong lượt này ⇒ **KC**. Không gật số tổng chỉ vì 7 mẫu con đều đúng.
---
## 6. SỔ DISPOSITION TỪNG DÒNG — tổng **suy ra từ bảng**, không tự khai
🔴 *Bài `meta_count_selfcoverage_blindspot`: vai đo giỏi vẫn **đếm-về-mình** sai, và sai tập trung TRỌN ở **meta-count/coverage**. Nên con số tổng dưới đây **không được viết trước rồi biện minh** — nó **đếm từ bảng này**.*
| ID | Claim | Vai | Verdict |
|---|---|---|---|
| A-01 | 6 project / 23 standalone / 20 command | H1 | ✅ Đ |
| A-02 | scripts `.ps1` = 37 | H1 | ✅ Đ |
| A-03 | `SKILL:102` "last schema-changing Mig 70" còn đúng | H1 | ✅ Đ |
| A-04 | F-5: công-thức `STATUS:471` HỎNG thật (ra 71) | H1 | ✅ Đ |
| A-05 | Migrations = 72 | H1 | ✅ Đ |
| A-06 | 0 migration từng bị xoá | H1 | ✅ Đ |
| A-07 | roster đĩa = 29 | H1 | ✅ Đ |
| A-08 | `VALID_ROLES` = 29 | H1 | ✅ Đ |
| A-09 | `agent-memory/*/` = 29 dir | H1 | ✅ Đ |
| A-10 | `STATUS:480` = 29 | H1 | ✅ Đ |
| A-11 | `README:27` vá bằng **BỎ SỐ** + đếm 29 | H1 | ✅ Đ |
| A-12 | skill-matrix `:194-231` = 29 row | H1 | ✅ Đ |
| A-13 | frontmatter 29/29 × 3 khoá | H1 | ✅ Đ |
| A-14 | mặt ② "sạch 6/6 bề mặt" | H1 | ✅ Đ |
| A-15 | plugin 18 reg / 15 en / 3 dis + đúng 3 tên | H1 | ✅ Đ |
| A-16 | F-4: `STATUS:10` ghi `roster 28` | H1 | ✅ Đ |
| A-17 | F-1: `CLAUDE.md:77` = `69, 71` thiếu Mig 72 | H1 | ✅ Đ |
| A-18 | 4 vá S188 đều THẬT (Tests 680 · bundle · README · Modules) | H1 | ✅ Đ |
| A-19 | **F-6: `SKILL.md:99` là FLAG** | H1 | ❌ **T** — dương-giả (§4) |
| A-20 | **F-1: "2 bề mặt cùng lớp, vá 1 = sót nửa lớp"** | H1 | ❌ **T** — sai gộp lớp (§4) |
| A-21 | **mặt ① sạch ngoài 2 flag** | H1 | ❌ **T** — sót `contract-workflow:458` (§1E-b) |
| B-01 | orphan **0 / 93**, universe 96 dir | H2 | ✅ Đ |
| B-02 | 3 dir không có `run.md` (ngoài phạm vi) | H2 | ✅ Đ |
| B-03 | dual-accept: nhánh form-2 **sống** (5 folder) | H2 | ✅ Đ |
| B-04 | F-01: 4 vai × byte + `S188`=0 ⇒ **42.975 B** | H2 | ✅ Đ |
| B-05 | F-01 git-evidence `5a77f4f1` numstat từng ô | H2 | ✅ Đ |
| B-06 | "seed 12 diary" = `c7b7ca45` | H2 | ✅ Đ |
| B-07 | F-02 **lõi**: 0/3 vai được kể tên nhận chữ | H2 | ✅ Đ |
| B-08 | coverage — phía "harvested" có APPEND THẬT | H2 | ✅ Đ |
| B-09 | **F-02: "`ef1d4fbb` SEED diary cho 4 vai khác"** | H2 | ❌ **T** — động từ sai (§3) |
| KC-1 | plugin nấc `used` | H1 | ⬜ KC — không nguồn (H1 **từ chối khai** = đúng) |
| KC-2 | F-2 `schema-diagram:515` = 91 bảng | H1 | ⬜ KC — ngoài lượt, tao **không** đo |
| KC-3 | F-3 `PROJECT-MAP` 0-hit ×4 | H1 | ⬜ KC — ngoài lượt, tao **không** đo |
| KC-4 | vá #4 neo `CLAUDE.md:74` | H1 | ⬜ KC — ruột ĐÚNG nhưng row thật ở **`:75`** (lệch 1 dòng, khả năng đếm cả dòng `\|---\|`) |
| KC-5 | read-limit 0/29 vượt | H2 | ⬜ KC — hằng-số hook **ngoài repo**, không có nguồn thứ 3 |
| KC-6 | coverage **tổng** 14/18 | H2 | ⬜ KC — verify 4 thủng + 3 harvested, **chưa** dựng trọn mẫu-số 18 |
**Đếm từ bảng:** Đ = **26** (18 H1 + 8 H2) · T = **4** (3 H1 + 1 H2) · KC = **6** (4 H1 + 2 H2) · **N = 36**.
---
## 7. CHỐT
**H1 `tooling-auditor` — 18Đ / 3T / 4KC.** Chất lượng đo **cao**: 4 vá S188 đều THẬT, mặt ② 6/6 dựng lại khớp tuyệt đối, tự-rút HIGH sai trước khi nộp (F-5) là hành vi đáng ghi nhận. Ba chỗ trượt: **F-6 dương-giả** (§4) · **mệnh-đề gộp-lớp của F-1** (§4) · **sót `contract-workflow:458` stale live-claim** (§1E-b, nặng nhất).
**H2 `harvest-curator` — 8Đ / 1T / 2KC.** Số **rất chắc**: 42.975 B đúng từng byte, orphan 0/93 dựng lại bằng engine khác vẫn khớp, git-evidence tái lập không sai một ô, và tự-tố `F-05` chính mình. Một chỗ trượt: **động từ "seed" ở F-02** (§3) — lõi finding vẫn đứng, **gate `GATE-FAIL-5` GIỮ NGUYÊN**.
🔴 **KHÔNG có verdict-tổng gộp:** 4 claim TRƯỢT ở trên **không** bị nuốt vào chữ "PASS" của vai nào; mỗi cái đứng riêng dòng, có neo `file:line`.
**Đề xuất cho lead (propose-only — tao KHÔNG ghi, lead VERIFY→APPEND B3):**
1. 🔴 **MỚI, chưa ai bắt**`contract-workflow/SKILL.md:458` bỏ/sửa câu *"Còn nợ: cầu KHKK→HĐ (W5) chưa làm"* (W5 land `b275893c`). Skill BẮT-BUỘC-DÙNG mà chỉ sai đường thì đắt hơn số lệch.
2. **F-1 vá `CLAUDE.md:77` → `69, 71, 72`****một mình là đủ**, đừng buộc kèm `SKILL.md` rồi tưởng phải vá cả cụm.
3. **F-5 nâng ưu tiên**`STATUS:471` sửa *"trừ Designer+Snapshot"**"trừ `*.Designer.cs` + `ApplicationDbContextModelSnapshot`"*, **chép đúng câu đã có ở `SKILL.md:23`**.
4. **F-6 ĐỀ NGHỊ HẠ khỏi sổ flag** (giữ làm ghi-chú làm-giàu) — theo §4.
5. **F-01 của H2 giữ nguyên ưu tiên 1** — 42.975 B mồ côi là số THẬT; `ring5-audit` (L1 mới 2.474 B) nặng nhất.
6. Khi vá xong lớp "Mig 72" ⇒ **grep lại bằng LỆNH KHÁC** (bài `absence_looks_like_clean`).
🔸 **Caveat containment (G-015):** tao chỉ ghi **đúng 1 file** — artifact này. `Bash` vẫn là kênh-ghi-mở ⇒ **KHÔNG** tuyên "read-only enforced"; backstop THẬT = lead soát `git status` + commit-gate.
🔸 **Nhãn nấc, không bán quá:** đây là chấm **diff-report @open**, **KHÔNG** phải bản chốt @close.
---
## 8. 🔸 INFORM — bẫy tao SUÝT tự tạo, và nó nằm đúng trục H2 vừa chứng sạch
**KHÔNG phải finding chống H2 — H2 đo ĐÚNG tại thời điểm đo.** Ghi vì nó **vô hình với `git status`**.
- H2 §4 Placement tuyên **0** stray `<runfolder>/.claude/...`. Tao đo lại lúc 00:19: **CÓ 1**.
`.claude/workflows/runs/2026-08-10-S189-bookstart-open/.claude/agent-memory/ring1-audit/`
- **Nhưng mtime = `00:12:17`**, còn H2 chốt lúc **`00:02:49`** ⇒ stray **sinh SAU** phép đo **~9 phút**. ⇒ **Placement của H2 GIỮ NGUYÊN ĐẠT**, không lật.
- **Nguồn:** scaffold cấp cho `ring1-audit` một đường memory **cwd-relative** nằm dưới run-folder. Đây đúng lớp `agent_cwd_relative_memory_misland` (S54).
-**Tao KHÔNG ghi vào đó — `find -type f` = 0 file.** Nếu tao ghi nhật-ký vai vào đấy, tao đã **tự chế tạo** đúng cái defect mà trục Placement vừa chứng sạch, ngay trong lượt đi kiểm nó. Tao ghi **1 file duy nhất** = artifact này (persona: vai KHÔNG APPEND `agent-memory/*`; single-writer = lead, B3).
- 🔴 **Vì sao phải báo bằng chữ:** thư-mục **RỖNG****git MÙ** (chính m#13 của H2). Nó sẽ **không** hiện trong `git status` ở commit-gate. Muốn dọn phải dùng `find -type d -empty`, không dùng git.
- **Đề xuất:** lead dọn bằng `find .claude/workflows/runs -type d -name '.claude'` sau lượt; và nếu scaffold còn cấp đường này cho vai sau, vai sau **rất dễ** ghi thật vào đó.
== HẾT ==

View File

@ -0,0 +1,315 @@
RING2: 7Đ/3T/14KC trên 24 claim
# RING2-AUDIT @open S189 (L15, window 1) — vai KIỂM vòng soi-lead H24, nấc DEEP
> Vai `ring2-audit` (C4/C4b). 🔴 Tao KIỂM **2 con-đo H24**, KHÔNG soi LEAD trực tiếp. Propose-only: 0 Write/Edit ngoài file này, 0 RAG-write. Lead VERIFY→APPEND (B3).
> 🔴 Luật ghi: **đổ ruột NGAY từng claim** (chống #53 — phiên này #53 trúng 6 lượt return).
---
## §0 · PIN (fail-closed) — verify TỒN-TẠI trước khi chấm
| vật | byte đo | dòng | mtime | `== HẾT ==` | `^## FLAG-` đếm máy | TOTAL tự khai |
|---|---|---|---|---|---|---|
| `sub-lead-stale-auditor-open-S189.md` | **39.195** | 452 | 00:09 | ✅ | **11** | 11 ✅ |
| `sub-lead-gap-auditor-open-S189.md` | **31.630** | 335 | 00:13 | ✅ | **7** | 7 ✅ |
**PIN ĐẠT.** Cả 2 trọn, dấu cụt không có, `grep`-count == TOTAL (chặn rủi-ro **pin-bản-cắt 4-A** tao tự nêu @S152). Tuần-tự C4b: mtime file tao > 00:13 ⇒ chạy **SAU** cặp, không song song.
🔸 **ERRATA-0 (brief của lead, không phải của con-đo):** brief pin `39.234 B`; đĩa đo **39.195 B** (lệch **39**). Nội dung trọn nên không ảnh hưởng verdict — nhưng số byte trong brief **không tái lập được**.
**Enum ĐÓNG — ĐẾM LIVE từ khoá** (`.claude/agent-memory/memory-budget.json``lead_self_audit.flag_classes`), KHÔNG chép số:
```
view-stale-count · view-stale-status · view-stale-header · view-stale-role-desc · view-residual-asym
gap-carry-dropped · gap-carry-aged · gap-owner-specifics · gap-decision-sunk · gap-underfill
gap-incident-unrecorded · view-claim-broader-than-sample
COUNT = 12 (6 view-* + 6 gap-*)
```
`h24_cadence` đọc live: `light_every=6 · deep_every=1 · jump_on_class_repeat=3` ⇒ nấc **DEEP** của lượt này hợp lệ (deep_every=1 ⇒ mọi bookend deep).
---
## §1 · ENUM-GATE — 18/18 class, đối chiếu MÁY (không đọc mắt)
Trích class bằng regex trên chính 2 artifact (`^## FLAG-n · SEV · \`class\``), rồi kiểm tư-cách thành-viên với `set(flag_classes)`:
```
18 class assignment -> OUTSIDE enum = [] (0 tự chế)
in-enum = 18/18 enum size = 12
```
| nhánh | phân rã ĐẾM-MÁY từ heading | tự khai ở dòng END | khớp? |
|---|---|---|---|
| stale | `view-stale-count` 4 · `view-residual-asym` **2** · `view-stale-status` 2 · `view-stale-header` 2 · `view-stale-role-desc` 1 | …`view-residual-asym` **3**… | ❌ **lệch 1** |
| gap | `gap-carry-dropped` 3 · `gap-decision-sunk` 2 · `gap-owner-specifics` 1 · `gap-incident-unrecorded` 1 | y hệt | ✅ |
🔴 **A1 (mặt-bằng, KHÔNG phải per-FLAG) — bảng class của `lead-stale` cộng ra 12 trên 11 FLAG.** Trong thân (`:425`) nó ghi `view-residual-asym | 3 | 9 · 10 · (1 phần)` — *"(1 phần)"* = đếm ké FLAG-1, mà FLAG-1 đã được đếm ở `view-stale-status`. Trong thân có caveat nên **không phải bịa**; nhưng **dòng END `:450` in phẳng `view-residual-asym 3`, caveat rụng mất** — và dòng END chính là dòng lead chép. `4+3+2+2+1+0 = 12 ≠ TOTAL 11`.
**Giới hạn hại (khai sòng phẳng, không nống):** đơn-vị tally = **audit LIÊN-TIẾP/class**, không phải flag-count ⇒ class này fire `+1` dù 2 hay 3 ⇒ **tally KHÔNG sai**. Hại thật = tính toàn-vẹn của bảng dùng để *"lead tính `jump_on_class_repeat`"*. ⇒ xếp **ERRATA-1 cưỡng-hành**, không hạ FLAG nào.
---
## §2 · 4 CLAIM LOAD-BEARING — tái dựng bằng lệnh KHÁC
### C-1 · gap FLAG-1 · `ring5` 0 hit @open / 6 hit @close — **ĐẠT, byte-exact 2/2**
Vai đo bằng `grep -oi … | wc -l`. Tao đo bằng **đường khác**: python `re.findall(re.escape('ring5'), text, re.I)` trên toàn file, và **mở rộng tập-đo sang cả 4 cửa lệnh** (vai chỉ đo 2):
| token | `session-start.md` | `session-end.md` | `tiep.md` | `pause.md` |
|---|---|---|---|---|
| `ring5` | **0** | **6** | 0 | 1 |
⇒ **2/2 số của vai khớp tuyệt đối.** Control-dương của vai (`bảng-nhãn` = 1 ở `session-start`) tao tái dựng: **1** ✅ ⇒ không phải "grep sai chữ".
🔴 **Tao đi TÌM ĐƯỜNG BÁC mạnh hơn vai — và không bác được.** Giả-thuyết phản: *"ring5 vẫn được gọi @open dưới TÊN KHÁC"* ⇒ quét `session-start.md` (389 dòng) tìm mọi vai-KIỂM có mặt:
```
ring1 = 2 · ring2 = 5 · ring4 = 3 · harness-audit = 4 · ctx-audit = 5 · ring5 = 0 · score-count = 0
ritual = 1 (không phải cửa gọi vai)
```
⇒ **5 vai-KIỂM anh em ĐỀU có mặt ở cửa @open; đúng `ring5` vắng.** Đây là bằng chứng **mạnh hơn** cái vai đưa: không phải "file không nhắc vai nào", mà là **file nhắc mọi vai TRỪ nó** ⇒ loại sạch bào-chữa *"cửa @open vốn không liệt vai"*.
🔸 **Sắc thêm 1 nấc vai không nói:** `pause.md` có **1** hit `ring5` ⇒ tổng phủ thật = **2/4 cửa** (end + pause), không phải 1/4. Điều này **không cứu** RCA: chữ tuyên là *"ring5 chấm **mỗi phiên**"*, mà cửa @open — đúng cửa vừa xảy ra vi phạm — vẫn **0**. ⇒ FLAG-1 **giữ nguyên**, chỉ **nâng độ chính xác của mẫu số**.
**VERDICT C-1: ĐẠT** (FLAG có thật · class `gap-incident-unrecorded` ∈ enum · cơ-chế truy đúng).
---
### C-2 · gap FLAG-4 · YC-027 land 2/4 cửa — **ĐẠT** (4/5 ô byte-exact, 1 ô under-count của chính vai)
Tự grep 4 file lệnh × 5 token, đường độc lập:
| token | `session-start` | `session-end` | `tiep` | `pause` | vai khai | khớp? |
|---|---|---|---|---|---|---|
| `YC-027` | 1 | 1 | **0** | **0** | 1/1/0/0 | ✅ |
| `PN-001` | 1 | **2** | **0** | **0** | 1/1/0/0 | ⚠️ vai đếm **1**, đĩa **2** |
| `TRỌN VẸN` | 1 | 1 | **0** | **0** | 1/1/0/0 | ✅ |
| `ONE-SHOT` | 2 | 2 | **0** | **0** | 2/2/0/0 | ✅ |
| `YC-026` | **0** | **0** | **0** | **0** | 0/0/0/0 | ✅ |
⇒ **Kết luận "2/4 cửa, `/tiep`+`/pause` = 0 token" ĐÚNG TUYỆT ĐỐI** — 10/10 ô của 2 cửa trống đều = 0, control-dương 4 token đều dương ở 2 cửa kia.
🔸 **ERRATA-2:** ô `PN-001 @session-end` vai ghi **1**, đĩa **2** (cả 2 nằm trong `session-end.md:13`, cùng một dòng RULE). Lệch **về phía làm mẫu-số nhỏ đi** ⇒ **không** thổi FLAG; chỉ là đếm hụt. Verdict không đổi.
Verify chữ owner tồn tại thật: `session-start.md:13` + `session-end.md:13` đều mang nguyên văn *"các cái command phải đc thực hiện trọn vẹn tao ko chấp nhận bất cứ 1 lý do nào"* ⇒ luật CÓ land 2 site, và **CHỈ** 2 site.
**VERDICT C-2: ĐẠT** (class `gap-owner-specifics` ∈ enum; discriminator "lượng từ số nhiều" là đọc-đúng chữ owner).
---
### C-3 · stale FLAG-10 · detector bám mốc CŨ vì emoji trong cặp `**` — **ĐẠT, tái dựng bằng cách MẠNH HƠN vai**
Vai **đọc output máy**. Tao **KHÔNG chạy máy** — tao **port regex ra python và tự chấm trên chính file** (đường thứ 2, độc lập với việc máy có chạy hay không):
`scripts/governance-detectors.ps1:610` (đọc thẳng, byte-exact):
```
'\*\*Last updated:\*\*\s*(\d{4}-\d{2}-\d{2})'
```
Áp regex đó lên `docs/HANDOFF.md` (668 dòng, 11 dòng chứa chuỗi `Last updated`):
| dòng | hình dạng thật | regex `:610` khớp? |
|---|---|---|
| `:5` | `**🆕 Last updated:** 2026-08-10` | ❌ **KHÔNG** — `🆕 ` nằm TRONG cặp `**` |
| `:183` | `**Last updated:** 2026-08-01 tối` | ✅ **KHỚP** → 2026-08-01 |
| `:218` `:254` | `**🧊 (Last updated cũ)** …` | ❌ (đã giáng cấp ĐÚNG cách) |
| `:300` `:305` `:310` `:313` `:322` `:327` | `**Last updated (kỳ S…):**` | ❌ (chèn `(kỳ …)` trong cặp `**`) |
⇒ **trong toàn `HANDOFF.md`, dòng DUY NHẤT khớp anchor-pattern là `:183` = 2026-08-01.** Mốc thật `:5` = 2026-08-10 **không đọc được**. Cơ-chế vai mô tả **đứng vững by-construction** — tao không cần tin output máy.
🔴 **Hệ quả tao xác nhận và ĐÓNG DẤU:** mọi verdict `title-freshness` phiên này (2 dòng `rag-setup-plan.md:4` · `form-engine/SKILL.md:15`, *"35 SESSIONS behind"*) tính trên mốc-phải thấp **9 ngày** ⇒ là **CẬN-DƯỚI**. Cấm đọc H24-1 phiên này thành *"chỉ 2 doc hơi cũ"*.
🔸 Nấc tao **không** chấm: `:218`/`:254` được giáng còn `:183` thì không — bất-đối-xứng vai nêu là **đúng hình dạng** (tao xác nhận 2 dòng kia có `🧊`), nên class `view-residual-asym` **hợp lệ**, KHÔNG phải ép-vừa-enum.
**VERDICT C-3: ĐẠT** (FLAG thật · cơ-chế truy tới dòng code · ranh "không sửa regex, turf `tooling-auditor`" giữ đúng).
---
### C-4 · stale FLAG-9 · frontmatter 2 vai H24 còn câu đã bị tuyên SAI — **ĐẠT, và tao suýt phán TRƯỢT OAN**
Đo trực tiếp trường `description:` (block scalar `|`, thân = đúng dòng 4):
```
lead-stale-auditor.md:4 (1.174 ký tự) -> "…Chạy theo NHỊP (`h24_cadence`), KHÔNG mỗi phiên.…" offset 800
lead-gap-auditor.md:4 (1.239 ký tự) -> CÙNG NGUYÊN VĂN offset 873
grep "KHÔNG mỗi phiên" toàn .claude/agents/*.md -> ĐÚNG 2 hit, cả 2 ở dòng :4 của 2 file này
```
⇒ chuỗi này **chỉ sống trong 2 frontmatter**, 0 nơi khác trong roster 29 persona ⇒ đúng hình dạng *"dư-lượng sau vá một phía"*.
Đối chứng phía source (3 bề mặt, tao đọc thẳng):
- `lead-stale-auditor.md:54` = `## Nhịp — mày chạy **MỖI phiên, ở CẢ HAI bookend** (HÌNH B @S149)` ✅
- `:56` = `spawn **VÔ-ĐIỀU-KIỆN** … không bộ-đếm nào phải tới hạn` ✅
- `:60` = khối 🧊 vá @S153 tuyên bản cũ là **"khẳng-định phủ-định SAI"** ✅
🔴 **FALSIFY BROKE VÀO CHÍNH TAO — ghi lại vì đây là lần thứ 3 cùng một bẫy.** Tao in `session-start.md:175` và `:274` **cắt ở 250 ký tự**, thấy nội dung khác hẳn cái vai trích ⇒ đã định phán **TRƯỢT vì cite sai neo** (và ghi chú "tái phạm class S162 F-3 offset-gõ-tay"). Đọc TRỌN dòng (`:175` dài **380**, `:274` dài **1.087**) thì cụm nằm ở đuôi, **verbatim khớp 100%**:
```
:175 "Nhịp: **cặp light = VÔ-ĐIỀU-KIỆN mỗi bookend** (hình B) · **deep = theo `h24_cadence.deep_every`**"
:274 "cặp soi-lead (…) spawn **VÔ-ĐIỀU-KIỆN mỗi đầu phiên** — KHÔNG còn cổng OVERDUE(light)"
```
⇒ **cite của vai ĐÚNG; cáo buộc của tao SAI.** Đây là **tái phát bài S159 (mega-line `cut` ngắn) và S186 (`README:67` 400 ký-tự)** — tao vấp lại đúng chỗ lần thứ 3. Luật tự áp, ghi to: **CẤM phán cite-sai trên dòng chưa đọc HẾT ĐỘ DÀI.**
Verify nốt vế thứ 2 của FLAG-9 (bảng "2 đợt vá"):
```
đếm dấu · trong danh-sách dấu-hiệu ở :4 -> 4 dấu = 5 dạng (khớp "liệt 5 dạng")
'broader-than-sample' trong :4 -> KHÔNG có (cả 2 file)
'broader-than-sample' trong THÂN stale -> CÓ ; bảng ^| `view- -> 6 dòng
```
⇒ **đúng: S180 thêm dòng thứ 6 vào bảng THÂN, `:4` vẫn 5 dạng.** Bất-đối-xứng 2 đợt vá **có thật, đo được**.
**VERDICT C-4: ĐẠT** (class `view-residual-asym` ∈ enum, và là ca **tự-quy-chiếu** vai tự soi mình — ghi nhận).
---
## §3 · THÁCH-CLEAN #1 — `gap-carry-aged = 0` · **TRƯỢT nhãn, KHÔNG trượt số**
🔴 Đây là ca nguy nhất của lượt (CLEAN "lead ổn"). Tao **chạy lại máy thật**, không đọc lời khai.
### (a) Số của vai — ĐÚNG TỪNG CON
```
powershell -File scripts/governance-detectors.ps1 -> H24-2 block
M = h24_cadence.light_every = 6 (read from config, not hardcoded)
HANDOFF logic-segments (pre-marker + NEXT anh/em) = 26 ; of those, carry-lines = 19
[ok] L7-bolt: carry anchor S188 vs doc newest S188 (gap 0 <= 1)
max streak = 4 -> 'adap-apply-2-thu' (ctx-t9-dogfood 3 · hmw-* 2 · ring5-audit-gap 2)
phân bố streak: {1: 51, 2: 3, 3: 1, 4: 1}
```
⇒ `26` ✅ · `19` ✅ · `L7-bolt gap 0<=1` ✅ · **streak 4 CÓ THẬT** ✅ · **0 slug chạm M=6** ✅. Máy **có chạy**, số **không bịa**. Khác thật S185 (*KHÔNG ĐO ĐƯỢC*) và S180/S182 (*0 chế tạo*).
### (b) 🔴 NHƯNG "vacuous" ĐÃ ĐỔI HÌNH — và cả 2 vai đều không thấy
Vai kiểm hình cũ (S122: *ít segment ⇒ 0 fire*) rồi kết luận sạch. Tao đo hình MỚI: **streak ≠ tuổi**.
```
[carry:*] trong docs/HANDOFF.md -> 377 thể hiện · 60 slug unique
máy streak-đo -> 56 slug
streak = 1 -> 51/56 = 91%
```
**91% slug nằm ở streak=1 ngay SAU commit `ef1d4fbb` — commit có subject *"RE-STAMP 47 slug dựng-từ-nguồn"*.** Re-stamp kéo slug từ khắp file vào segment mới nhất ⇒ với slug đã vắng vài segment gần đây, đồng-hồ **về 1**.
🔴 **NHÂN CHỨNG TỰ TỐ — chọn được vì nó mang đúng tên bệnh:** `[carry:carry-age-vacuous]`
```
máy hôm nay -> [ok] carry 'carry-age-vacuous' streak=1 < M=6 (đọc = TƯƠI)
đĩa (HANDOFF) -> hiện ở :17 :93 :306 :311 :328 :332 :336 :341 :345 :349 :353 :354 :366 :386
re-stamp liên-tục từ khối "@S124-era" (:386 ghi "Counter=3") tới nay
```
⇒ một carry **mở xuyên ~65 nhãn phiên** được máy chấm **streak=1**. Và nội-dung của chính nó là *"carry-age design-question — detector 0-fire vì tiering<M=6: hạ M hay non-tiered-ledger?"* ⇒ **câu hỏi thiết-kế treo từ S124 vẫn treo, và cơ-chế đo nó vẫn không thấy nó.**
**Phán:** con số `0` **ĐÚNG**; nhãn **"honest-zero THẬT"** là **claim rộng hơn mẫu**. Máy chỉ chứng *"0 slug có 4+ segment LIÊN TIẾP"*, **không** chứng *"0 carry quá già"*. Sau một lượt re-stamp 47 slug, hai mệnh đề đó **tách hẳn nhau**.
⇒ Đúng hình `view-claim-broader-than-sample` (enum, mở @S172). 🔸 Ghi ranh: `lead-stale` báo class này **0** là **hợp lệ theo turf của nó** (nó soi bề mặt LEAD, không soi artifact vai kia) — tao **không** tính đó là lỗi của stale; tao tính đây là **sót của gap** (tự-khai-sạch quá tay).
**VERDICT CLEAN-1: TRƯỢT** (số ĐẠT · nhãn TRƯỢT). **Đây là FLAG tao trả về mà cặp H24 không có.**
---
## §4 · Đếm carry — **3 con số, và cách đếm nào đúng** (TRƯỢT)
| con số | nghĩa THẬT | ai dùng |
|---|---|---|
| **19** | `carry-lines` = số **DÒNG** có carry **bên trong 26 logic-segment** | cả 2 vai chép ra thành *"19 carry"* |
| **56** | số **SLUG** máy thực sự đo streak (`carry '<slug>' streak=`) | **không vai nào nhắc** |
| **60** | số slug `[carry:*]` **unique toàn `HANDOFF.md`** (377 thể hiện) | không ai nhắc |
- `lead-stale` NỀN-MÁY `:17` viết thẳng: *"H24-2 carry-age: **19 carry**, streak cao nhất 4"* ⇒ **sai đơn-vị**: `19` là DÒNG, không phải carry.
- `lead-gap` chép **đúng nguyên văn** dòng máy (*"logic-segments = 26 · carry-lines = 19"*) — đọc kỹ thì không sai — nhưng kết luận đứng cạnh *"0 slug chạm M=6"* khiến 19 **được hiểu thành mẫu số**.
🔴 **Xếp thành CLASS chứ không thành con số** (đúng chỉ đạo): đây là **lần thứ 3 liên-tiếp** cùng một trục *"đếm carry ra số khác nhau tuỳ thước"* — S185 khối RE-STAMP ghi **20** khi đếm được **23** · S188 dựng-từ-nguồn ra **47** · S189 máy in **56** trong khi 2 vai báo **19**. Ba lượt, ba thước, **chưa lượt nào khai mình đang đếm ĐƠN-VỊ gì**.
🔸 **Chiều lệch có lợi cho verdict:** 19 < 56 ⇒ vai báo **HỤT** phạm vi máy, tức honest-zero được chứng bởi **nhiều** dữ liệu hơn lời khai. Sai đơn-vị **không** thổi phồng CLEAN. Nhưng nó vẫn là số load-bearing sai trên dòng lead chép.
**VERDICT §4: TRƯỢT** (đơn-vị sai, tái phát 3 lượt) — **resolve rẻ:** dòng nào in `carry-lines` thì ghi kèm `slug-streak-measured = N`.
---
## §5 · THÁCH-CLEAN #2 — `gap-underfill` bị TỪ CHỐI báo · **ĐẠT: từ-chối ĐÚNG NẤC, không phải né**
Tao thử 3 phép để bác lời từ-chối, **cả 3 đều củng cố nó**:
1. **Có bề mặt đĩa nào mang %-print không?** → `run.md` chứa **0** ký tự `%`. Quét cả 8 artifact run-folder: file DUY NHẤT nhắc `hot-feed`/`pct_print` là **chính artifact của gap**. ⇒ **không có** vật để đo. Lời khai đúng.
2. **Định nghĩa under-fill có cho phép suy từ headroom không?** → đọc thẳng `token_governor.pct_print._note`:
> *"Headroom > 0 **WHILE** high-value content still unloaded = under-fill (WRONG)"*
⇒ under-fill là **HỘI của 2 vế**. Gap đo được vế-1 (floor 6 nguồn `772.334 B` vs `lead_tokens 380.000`), **không** đo được vế-2. Câu nó viết — *"còn chỗ ≠ nạp thiếu"* — là **đúng nguyên văn định nghĩa của config**, không phải lý sự.
3. **Có phải né việc không?** → không: nó (a) đo được **mẫu số thật**, (b) chỉ đích danh thước thiếu (`§2.1.6` `session-start.md:229`), (c) nêu **điều kiện mở khoá falsify-được** (*"đo được nếu §2.1.6 ghi 1 dòng % xuống run.md"*). Né việc = 0 phép đo + 0 đường ra. Đây có **cả hai**.
🔴 Và nó **từ chối đúng chiều nguy hiểm**: báo `0` ở ô này sẽ bị đọc thành *lành*, đúng bẫy `absence_looks_like_clean`. **Ghi `KHÔNG ĐO ĐƯỢC` là hành-vi mẫu**, nên nêu làm chuẩn cho vai khác.
**VERDICT CLEAN-2: ĐẠT.**
---
## §6 · Trả 2 câu lead hỏi (đối chứng, không chép)
**(i) `ring5` — 0 hay 6 hay 2?** Cả hai đều đúng, **khác ĐƠN-VỊ**, và tao đo được cả hai:
```
session-start.md : dòng khớp = 0 · lần xuất hiện = 0
session-end.md : dòng khớp = 2 · lần xuất hiện = 6 (6 token dồn trong 2 dòng)
```
⇒ `grep -c` của lead đếm **DÒNG**, `grep -o|wc -l` của gap đếm **TOKEN**. **Kết luận không đổi dưới cả 2 thước**: cửa @open = **0 tuyệt đối**. 🔸 Bổ sung: `pause.md` = **1** ⇒ phủ thật **2/4 cửa**, không phải 1/4.
**(ii) Control `YC-018` có đủ mạnh để kết luận "thói quen khắc luật" không? → CHƯA ĐỦ.** Tao mở rộng control lên 3 mã, có **phản-ví-dụ**:
```
YC-018 start=1 end=1 tiep=0 pause=0 <- 2/4, cùng hình YC-027
YC-019 start=0 end=1 tiep=0 pause=0 <- 1/4
YC-021 start=0 end=1 tiep=1 pause=1 <- 3/4 ** PHẢN-VÍ-DỤ **
```
`YC-021` land **cả `/tiep` lẫn `/pause`** ⇒ đội **CÓ** viết luật vào 2 cửa đó khi cần. Nên giả-thuyết *"thói quen chỉ khắc 2 site"* **bị bác**.
🔴 Đọc đúng hơn (và **nặng hơn** cho gap F-4): luật land ở **cửa mà luật NÓI VỀ** — `YC-021` nói về `/day`·`/pause`·`/tiep` nên land ở đó; `YC-027` nói về **mọi command** nhưng chỉ land nơi tay lead đang gõ. ⇒ cái thiếu không phải thói quen mà là **phép kiểm ĐỦ-CỬA**: không có máy nào hỏi *"luật này phủ mấy cửa / phải phủ mấy cửa"*. Control của lead **hữu ích nhưng suy sai chiều**; kết luận F-4 vẫn **đứng**, thậm chí đứng vững hơn.
---
## §7 · FALSIFY-LOG (HELD / BROKE)
| # | phép thử phủ-định | kết |
|---|---|---|
| F-1 | *"`ring5` vẫn được gọi @open dưới tên khác"* → quét 389 dòng `session-start.md` tìm mọi vai-KIỂM | **HELD** — `ring1`=2 `ring2`=5 `ring4`=3 `harness-audit`=4 `ctx-audit`=5, **riêng `ring5`=0** ⇒ bác không được, còn mạnh thêm |
| F-2 | *"stale cite sai neo (`session-start:175`/`:274`)"* → in trọn dòng thay vì cắt 250 ký tự | **BROKE — vào chính tao.** Dòng dài 380 / 1.087 ký tự, trích của vai **verbatim đúng**. Cáo buộc của tao SAI |
| F-3 | *"`gap-carry-aged=0` là 0-chế-tạo như S180/S182"* → chạy lại máy | **BROKE (một nửa)** — số 0 THẬT, streak 4 thật; nhưng **nhãn** "honest-zero THẬT" vỡ vì streak≠tuổi (51/56 = 1 sau re-stamp 47 slug) |
| F-4 | *"gap né việc ở `gap-underfill`"* → tìm bề mặt %-print trên đĩa + đọc định nghĩa under-fill | **HELD (từ-chối đúng)** — `run.md` 0 ký tự `%`; under-fill là hội-2-vế, gap chỉ đo được 1 ⇒ từ chối là bắt buộc |
| F-5 | *"19 = số carry"* → đếm dòng `carry '<slug>' streak=` trong output máy | **BROKE** — máy đo **56** slug, không phải 19 |
| F-6 | *"bảng class của stale cộng đúng"* → cộng tay 6 dòng | **BROKE** — `4+3+2+2+1+0 = 12` trên TOTAL **11** |
---
## §8 · VERDICT PER-CLAIM
### ĐẠT (7)
| # | claim | neo |
|---|---|---|
| 1 | **PIN** cả 2 artifact trọn, `grep`-count == TOTAL | 39.195 B/452d · 31.630 B/335d · `== HẾT ==` ×2 |
| 2 | **ENUM-GATE** 18/18 class ∈ enum, **0 tự chế** | `OUTSIDE enum = []`, enum size 12 đọc live |
| 3 | gap **FLAG-1** `ring5` 0@open / 6@close | tái dựng 2/2 byte-exact + control + 5 vai anh em có mặt |
| 4 | gap **FLAG-4** YC-027 land 2/4 cửa | 10/10 ô cửa trống = 0, 4 token control dương |
| 5 | stale **FLAG-10** anchor emoji ⇒ máy bám mốc cũ | port regex `:610` ra python: `:5` KHÔNG khớp, `:183` khớp — **dòng khớp duy nhất** |
| 6 | stale **FLAG-9** frontmatter 2 vai còn câu SAI | 2 hit `KHÔNG mỗi phiên`, cả 2 ở `:4`, 0 nơi khác/29 persona |
| 7 | **CLEAN-2** `gap-underfill` từ-chối đúng nấc | `run.md` 0 `%` · under-fill = hội-2-vế theo chính config |
### TRƯỢT (3)
| # | claim | vì sao |
|---|---|---|
| 8 | **CLEAN-1** nhãn *"honest-zero THẬT"* của `gap-carry-aged=0` | streak≠tuổi; 51/56 slug về 1 sau re-stamp 47 slug; nhân chứng `[carry:carry-age-vacuous]` mở ~65 nhãn phiên vẫn `streak=1` |
| 9 | **"19 carry"** (dòng END của stale, ngữ cảnh của gap) | máy đo **56** slug; 19 = carry-**LINES**. Tái phát 3 lượt (S185 20/23 · S188 47 · S189 19/56) |
| 10 | **`view-residual-asym 3`** ở dòng END `:450` của stale | bảng thân có caveat *"(1 phần)"*, dòng END **rụng caveat**; tổng 12 ≠ TOTAL 11. Tally KHÔNG sai (đơn-vị = audit liên-tiếp) — sai tính toàn-vẹn |
### KHÔNG CHẤM (14) — khai thẳng, **cấm đọc thành ĐẠT**
14 FLAG còn lại (stale 1·2·3·4·5·6·7·8·11 + gap 2·3·5·6·7) tao **chỉ** kiểm được 2 tầng: **class ∈ enum** ✅ và **có ≥1 neo đĩa trích dẫn** ✅ — tao **KHÔNG tái dựng số** của chúng trong lượt này (ngân sách dồn cho 4 claim load-bearing + 2 thách-CLEAN theo brief).
🔴 ⇒ verdict của tao là **CẬN-DƯỚI**, y hệt nấc mà `lead-stale` tự khai cho chính nó. **Không** vai nào trong lượt này chứng được "đã phủ hết".
### ERRATA (ngoài 24 claim)
- **ERRATA-0** — brief lead pin `39.234 B`, đĩa **39.195 B** (lệch 39).
- **ERRATA-2** — gap FLAG-4 ô `PN-001 @session-end` ghi **1**, đĩa **2** (cùng nằm `session-end.md:13`). Lệch về phía hụt ⇒ không thổi FLAG.
---
## §9 · TỰ-KIỂM (chống lỗi của chính vai KIỂM)
1. ✅ **KHÔNG soi LEAD trực tiếp** — mọi verdict đều chấm *hành-vi-đo của 2 vai H24*. Ca `WAL:2 GIỮ MỞ` (datum lead gửi) tao **cố ý không phán** — đó là turf `lead-stale`, tao chỉ kiểm nó đo có đúng không.
2. ✅ **no-self-exempt** — tao ≠ `lead-stale-auditor`/`lead-gap-auditor`. 🔴 Và tao **không tự bào chữa**: `ring2-audit` L1 = **26.652 B > cap 25.600** + `_INDEX`=0 + gist=0 ⇒ **gap FLAG-5 nói về CHÍNH TAO là ĐÚNG**. Tao xác nhận thay vì im.
3. ✅ **Tái dựng bằng lệnh KHÁC** — vai dùng `grep -o|wc -l` / đọc output máy; tao dùng `python re.findall`, **port regex detector ra python**, và **chạy lại chính máy**.
4. ✅ **Ghi cả 2 số khi lệch** (19 vs 56 · 12 vs 11 · 39.234 vs 39.195 · PN-001 1 vs 2 · ring5 2-dòng vs 6-token).
5. ✅ **BROKE tự thân được ghi, không gọt** (F-2) — suýt phán TRƯỢT OAN vì cắt dòng 250 ký tự, **lần thứ 3** cùng bẫy (S159 · S186 · nay).
6. ✅ **Thách-CLEAN làm ở CẢ 2 chỗ tự-khai-sạch**, và ra **1 FLAG mới** cặp H24 không có (§3).
7. ✅ **KHÔNG verdict-tổng gộp** — 24 claim tách dòng; 14 KC khai rõ thay vì nhét vào ĐẠT.
8. 🔸 **Ranh không lấn**: không chấm tooling/harvest (`ring1-audit`) · không chấm trio-memory (`harness-audit`) · không chấm nghi-thức `_end` viết lúc 20:43 (`ring5-audit`) · không đề xuất sửa regex detector (turf chủ máy).
**Propose-only** — 0 Write/Edit ngoài file này · 0 `store_memory`/RAG-write. Lead VERIFY→APPEND (B3).
**TOTAL: 24 claim — 7 ĐẠT / 3 TRƯỢT / 14 KHÔNG CHẤM**
== HẾT ==

View File

@ -0,0 +1,178 @@
# sub-score-count-auditor — TẦNG-3 khối chấm điểm @open S189
```
SCORE-AUDIT: SAI-TẦNG-2 — 2 loi dem (L1 o dau-vao muc YC-008 · L2 o dieu-kien P.7)
TẦNG-1: 0 loi dem — 4/4 khoan khop luat, so tai lap duoc hom nay
```
> 🔴 Vai này kiểm **PHÉP ĐẾM**, KHÔNG kiểm KẾT QUẢ. **Không có con điểm nào của tầng-3 trong file này** (P.3 ranh cứng).
> Artifact-first: viết TỪNG MỤC ngay trong lúc làm (phiên dính #53 bốn lần).
## 0. PIN — fail-closed, kiểm trước mọi thứ
| pin | đường dẫn | có trên đĩa? |
|---|---|---|
| tầng-2 (`score-counter`) | `.claude/workflows/runs/2026-08-10-S189-bookstart-open/sub-score-counter-open-S189.md` | ✅ đọc được, verdict `SCORE-T2: 6` / `SCORE-COUNT: 4 mục nhắc≥2` |
| tầng-1 (lead) | mục "Ghi chú của LEAD (tầng-1)" ở CUỐI chính file trên (dòng 87-94) | ✅ `so-yc treo 6 / nhac2+ 3 (muc 22, gop 5 dong nhac-lai)`**3 mục** |
| luật canonical | `docs/governance/harness-11-engine.md` PHẦN P (dòng 495-545) | ✅ đọc THẲNG, không qua lời kể |
| nguồn đếm đã ký | `docs/governance/so-yeu-cau-chu-du-an.md` | ✅ đọc trọn 98 dòng |
**Đủ pin, KHÔNG fail-closed.** Không đi tìm "bản mới nhất" của bất kỳ pin nào.
---
## 1. Câu hỏi 1 — máy `nhip-no-probe.ps1` có thi hành đúng LUẬT-ĐẾM đã ký không?
**Đọc mã, không suy.** Vế 5 (`so-yc`) nằm ở `scripts/nhip-no-probe.ps1:235-272`. Vòng đếm:
```powershell
if ($L -notmatch '^\|\s*`YC-\d+`') { continue } # :246 chỉ dòng YC trong bảng
$c = $L -split '\|'
if ($c.Count -lt 9) { $bad++; continue } # :248 dòng vỡ cột -> ĐẾM RIÊNG, in ra
if (($c[8] -replace '[*` ]','') -ne '') { $dup++; continue } # :254 satellite -> BỎ
$tot++
if (($c[4] -replace '[*` ]','') -eq $OPEN) { $treo++ } # :259
$m = [regex]::Match($c[5], '\d+')
if ($m.Success -and [int]$m.Value -ge 2) { $nhac2++ } # :261 NGƯỠNG >=2
```
Đối chiếu từng khoản luật:
| khoản | luật đòi | máy làm | phán |
|---|---|---|---|
| **P.1 đơn vị** | trừ theo **MỤC**, không theo **LẦN** | `:254` bỏ mọi dòng có `nhắc-lại-của` ⇒ cụm `YC-002`+3 dòng đính chính chỉ vào đếm **1 lần** | ✅ ĐÚNG |
| **P.2 nguồn** | đúng `so-yeu-cau-chu-du-an.md` | `:237` hard-code đúng đường dẫn đó, không tham số hoá được | ✅ ĐÚNG |
| **P.2 cột** | cột *số lần đã nhắc* | `$c[5]` = cột 5 của bảng 8 cột (split cho `$c[0]`=rỗng, `$c[1..8]`=8 cột) ⇒ đúng cột *số lần đã nhắc* | ✅ ĐÚNG |
| **ngưỡng ≥2** | mục nhắc đúng 1 lần **không** tính | `-ge 2``:261` | ✅ ĐÚNG |
| **in điểm** | — | máy in **con số thô** (`nhac2+ K`), **không in điểm**, không áp công thức | ✅ không đụng P.7 |
Ba chi tiết cho thấy máy **không phải** bộ lọc-dòng vô tri, mà là bản mã hoá CÓ CHỦ ĐÍCH của chính luật:
1. `:249-253` comment ghi thẳng dấu vân tay của lỗi LẦN-vs-MỤC: *"ca 'nhắc 5 lần' mã hoá thành 5 dòng sẽ cho 4 dòng count>=2 — đúng con số mà luật gọi là SAI"*. Đây đúng ví dụ ở P.1.
2. `:228-230` tách **`chua-co-du-lieu`** (phép đo KHÔNG tồn tại) ⟂ **`treo 0 / nhac2+ 0`** (đo được, kết quả 0) — đúng ranh *chưa-có-dữ-liệu ⟂ đã-đo-ra-0*, chống "đèn xanh giả".
3. `:263-266` in kèm **MẪU SỐ** (`muc 22, gop 5 dong nhac-lai`) + đếm riêng `dong KHONG TACH DUOC COT` ⇒ người đọc kiểm được ĐƠN VỊ, dòng vỡ không bị nuốt im lặng.
🔸 **Điểm mù có thật của máy (nêu để lead biết, KHÔNG phải lỗi đếm):**`:254` `continue` TRƯỚC khi đọc `$c[5]`, máy **không bao giờ nhìn** cột *số lần đã nhắc* của dòng satellite. Số gõ trên dòng con là vô hình với máy. Nhưng đó là **đúng luật đã ký** (`so-yeu-cau…:30`) — luật bảo dòng con "đã tính ở mã gốc". Máy trung thành với luật; chỗ gãy nằm ở **DỮ LIỆU**, không ở máy.
**⇒ Trả lời câu 1: máy THI HÀNH ĐÚNG luật-đếm đã ký, cả 4 khoản.** Nó lọc-dòng, nhưng "lọc-dòng" ở đây CHÍNH LÀ luật `so-yeu-cau…:30`, không phải phép tắt của người viết script.
---
### 1-bis. Hai phép kiểm máy tao TỰ CHẠY (không tin lời kể)
**(a) Số tầng-1 có tái lập được HÔM NAY không?** — chống lớp *claim mạnh hơn việc đã làm*:
```
$ powershell -File scripts/nhip-no-probe.ps1
NHIP-NO: kiem light 3/6 deep 1/1 OVERDUE:deep | tran-bo-nho 2 over-cap l2idx 0 over
| run-chua-gom 1 | pull-cach 1 ngay | so-yc treo 6 / nhac2+ 3 (muc 22, gop 5 dong nhac-lai)
```
**Khớp VERBATIM** dòng lead chép ở `:90`. Số tầng-1 là số **đo được lúc này**, không phải số nhớ lại.
**(b) Máy có đọc ĐÚNG CỘT trên MỌI dòng không?** — nếu một ô chứa ký tự `|` thì `-split '\|'` lệch chỉ số, `$c[5]`/`$c[8]` đọc nhầm cột mà vẫn ra một con số trông hợp lệ. Đo cả 27 dòng:
```
YC-001..YC-027 parts=10 TRÊN CẢ 27 DÒNG (0 dòng lệch cột, 0 dòng $bad)
cnt=[1]×20 · cnt=[4]×1 (YC-002) · cnt=[2]×3 (YC-010, YC-013, YC-018) · cnt=[-]×3
sat=[] ×22 · sat=[YC-002]×3 · sat=[YC-008]×1 (YC-010) · sat=[YC-013]×1
```
⇒ Không dòng nào lệch cột ⇒ máy đọc đúng cột trên 100% dòng. Và **xác nhận độc lập phát hiện dữ-liệu của tầng-2**: `YC-010` đúng là satellite **DUY NHẤT** mang số (`cnt=[2]`) trong khi 4 satellite kia đều `—`, còn gốc `YC-008` đọc `1`.
---
## 2. Câu hỏi 2 — chệch-luật-thành-văn để bắt lỗi dữ liệu: có hợp luật P không?
**KHÔNG.** Nhưng phải nói cho đúng chỗ sai, vì tầng-2 làm đúng nhiều hơn sai.
**Tầng-2 KHÔNG phạm hai điều dễ tưởng nó phạm:**
- **Không đổi nguồn** (P.2): vẫn đúng tệp sổ đã ký, `Tệp vai đã dùng` liệt đúng 3 tệp, 0 nguồn ngoài.
- **Không đếm theo LẦN** (P.1): nó gộp `YC-008 ⊕ YC-010` thành **một** dòng, `YC-002` + 3 dòng đính chính thành **một**. Đơn vị vẫn là MỤC.
**Chỗ nó thật sự chệch = ĐẦU VÀO của phép đo, không phải đơn vị.**
P.2 ghim **cột** (*số lần đã nhắc*). Sổ `:28` ghim **dòng nào mang cột đó** cho một mục: *"Yêu-cầu bị nhắc lại KHÔNG được cấp mã mới — nó chỉ làm tăng cột số lần đã nhắc của **mã GỐC**."* ⇒ với mục `YC-008`, ô dữ-liệu hợp lệ là ô trên **dòng gốc** — và ô đó đọc **1**. Tầng-2 thay nó bằng số đọc từ dòng `YC-010`, tức một ô mà chính quy-ước mã hoá đặt **ngoài tập đầu vào**.
Hệ quả đo được, không phải chuyện câu chữ: **phép đếm thôi tái lập được từ nguồn đã ký.** Hai người đếm trung thực trên cùng một tệp ra 3 và 4 — đúng cái mà "nguồn ĐÃ KÝ" sinh ra để chặn. Nguồn ký không phải để đúng, nó để **ai đếm cũng ra một số**.
🔴 **Câu chốt:** tầng-2 tự viết ở `:44` *"Việc của chủ sổ: sửa `YC-008` cột nhắc → 2"*. Tức nó **biết** việc sửa thuộc người khác, nhưng đã **đếm trên trạng-thái TƯƠNG LAI** của nguồn — trạng-thái mà chủ sổ chưa viết. Đếm trên bản sổ chưa tồn tại là chệch luật, dù chệch về phía trung thực.
🔬 **Đối chiếu sắc nét ngay trong cùng file:** lead ghi ở `:94` *"Lead cũng chưa sửa sổ (sửa nguồn đếm giữa lúc đang đếm = làm hỏng phép đo)"*. Hai vai đứng trước **cùng một cám dỗ**; lead từ chối sửa **trên đĩa**, tầng-2 đã sửa **trong đầu** rồi đếm trên bản đã sửa. Cùng một hành vi, khác mỗi chỗ nó xảy ra.
**Đường đi đúng (giữ luật + không đánh rơi phát hiện):** đếm trên ô đã viết → **đồng thời** dựng cờ lỗi-dữ-liệu chặn riêng cho chủ sổ → chủ sổ lật ô → **cả hai tầng đếm lại**. Tầng-2 đã làm rất tốt vế cờ (`:23-44`, kèm hướng lệch và cả hai nhánh sửa); nó chỉ gộp nhầm vế sửa **vào trong con số**.
---
## 3. Câu hỏi 3 — soi 4 lỗi đếm điển hình
| # | lỗi điển hình | tầng-1 (lead + máy) | tầng-2 (`score-counter`) |
|---|---|---|---|
| 1 | trừ theo **LẦN** thay vì **MỤC** | ✅ KHÔNG — `:254` bỏ satellite; cụm `YC-002` (nhắc 4, 3 dòng con) vào đếm đúng **1** | ✅ KHÔNG — gộp `YC-008⊕YC-010` = 1 mục, `YC-002` = 1 mục |
| 2 | đổi nguồn đếm khỏi sổ đã ký | ✅ KHÔNG — `:237` hard-code đúng sổ | ✅ KHÔNG — đúng sổ, 0 nguồn ngoài. *(Chệch của nó là đổi **ô đầu vào TRONG** nguồn — lớp khác, xem §2; tao không nong lỗi này cho vừa khuôn lỗi 2.)* |
| 3 | tính cả mục nhắc **đúng 1 lần** | ✅ KHÔNG — `-ge 2``:261` | 🔴 **CÓ (theo hiệu-lực)** — mục `YC-008` có ô *số lần đã nhắc* trên **dòng gốc đọc `1`** đã được nhận vào tập ≥2. Ngưỡng ≥2 bị áp lên một giá-trị **SUY RA**, không phải giá-trị **ĐÃ VIẾT** |
| 4 | in điểm khi sổ còn thưa | ✅ KHÔNG — lead chỉ phát **số đếm** ("3 mục"), **không** in điểm, không áp công thức | 🔴 **CÓ**`:10` phát `SCORE-T2: 6`. Xem §4 |
---
## 4. Câu hỏi 4 — lập luận "điều-kiện-kích-hoạt của P.7 đã FALSE" có đúng PHÉP ĐO không?
**KHÔNG.** Và tao chấm **phép đo**, không chạm vế thẩm-quyền (tuyên gỡ mặc định đúng là việc chủ dự án — chỗ đó tầng-2 nhận định ĐÚNG). Ba chân của lập luận, cả ba đều hỏng ở tầng phép-đo:
**(a) Đổi VỊ-TỪ, rồi vị-từ mới lại VÒNG TRÒN.**
Vị-từ của P.7 là **"sổ đủ dày"**. Tầng-2 thay bằng *lý do* của luật (*"nguồn thưa thì máy luôn cho 10/10"*) rồi đo **độ bão hoà**. Nhưng phép thử bão hoà đọc **KẾT QUẢ của công thức** để quyết định có được **in kết quả** hay không. Bất kỳ sổ nào có **≥1** mục lặp đều qua cửa đó. Một cái van mà **không bao giờ đóng được** kể từ khi có đúng một mục lặp thì nó **rỗng**, chứ không phải **đã thoả**.
**(b) Ô baseline `@S181` SAI so với chính nguồn đã ký — và sai đúng chiều có lợi cho việc in.**
Bảng `:50-57` có một hàng duy nhất nói về đúng cái hỏng mà P.7 gọi tên: *"công thức nhả ra | @S181: **10/10 — bão hoà**"*.
Nguồn đã ký `so-yeu-cau…:64` chép: *"Vai tầng-2 `score-counter` đếm độc lập ra **1 mục**"* @S181. Đếm ra 1 mục ⇒ công thức ở S181 **KHÔNG** ở mức bão hoà 10/10.
⇒ Vậy mà @S181 chính vai này vẫn trả `KHÔNG ĐO ĐƯỢC`**đúng luật**. Nghĩa là **"không bão hoà" CHƯA BAO GIỜ là tiêu chí gỡ mặc định**. Ô baseline hỏng làm sập cả cột so sánh.
**(c) Bỏ sót một điều-kiện chặn THỨ HAI, còn sống, và ĐO ĐƯỢC là CHƯA THOẢ.**
Tầng-2 khẳng định ở `:48`: *"Tiêu chí vận hành **duy nhất** = lý do ở PHẦN P.7"*. Khẳng định này **sai như một phép đo**. Trong chính `docs/governance/`, khoản **A8** đang nằm ở §3 *"Khoản CHƯA ĐO"* — [`adap-upgrade-pack-tracking.md:68`](../../../docs/governance/adap-upgrade-pack-tracking.md):
> **A8 — tỉ lệ phủ sóng.** Bao nhiêu tin của chủ dự án đã được bắt vào nguồn đếm, **trên tổng số tin thật**. Chưa có vật tương đương ở SE nên **chưa xác định được mẫu số**. Chừng nào chưa có tỉ lệ này thì khối chấm điểm **phải in "KHÔNG ĐO ĐƯỢC" và cấm in điểm.**
🔴 **A8 nằm trên TRỤC KHÁC HẲN trục tầng-2 đã đo.** Toàn bộ bảng "đủ dày" của nó — 22 mục · 4 ngày · 7 nhãn phiên · 4 cụm lặp · 2/3 khối — đều là số đo **TỬ SỐ** (*trong sổ có bao nhiêu*). A8 hỏi **MẪU SỐ** (*ngoài kia anh đã nói bao nhiêu tin, bắt được mấy phần*). **Tử số phình lên không nói được gì về một tỉ lệ mà mẫu số chưa xác định.** Repo đã đặt tên sẵn cho lớp này: `docs/governance/ritual-labels.md:100`*"Con số tổng đóng vai đã-phủ-hết trong khi mẫu số lệch."*
**(d) Mâu thuẫn nội bộ ngay trong một artifact.** `:63` nhận: *"chưa ai định nghĩa ngưỡng và **chưa ai tuyên gỡ**"* — trong khi `:10` đã phát `SCORE-T2: 6`. Thừa nhận mặc định **còn nguyên hiệu lực** rồi phát ra đúng con số mà mặc định đó cấm phát.
🔸 **Vế KHÔNG tính là lỗi, ghi rõ để lead khỏi phạt oan:** *"phép thử động cơ"*`:61` (hôm nay từ chối là nhánh **êm** ⇒ không lấy nhánh êm) là kỷ luật liêm chính tốt và tao tin nó thật lòng. Nhưng **giá của một nhánh không phải bằng chứng về giá trị chân lý của vị-từ**. Nó giải thích vì sao một vị-từ **không quyết định được** lại bị quyết, chứ không làm cho phép quyết đó đúng.
---
## 5. Tổng kết — tao chấm PHÉP ĐẾM, không chấm KẾT QUẢ
```
SCORE-AUDIT: SAI-TẦNG-2 — 2 loi dem
```
🔴 **File này KHÔNG chứa con điểm nào của tầng-3, và KHÔNG đề xuất một điểm khác** (P.3). Tao **không** phán 3 hay 4 là số đúng — tao phán **phép đếm nào khớp luật đã ký**, rồi tầng-1/tầng-2 đếm lại.
### Hai lỗi đếm — tầng nào · bước nào · vì sao sai
| # | tầng | bước | vì sao SAI |
|---|---|---|---|
| **L1** | **2** | chọn **ô đầu vào** cho mục `YC-008` | Lấy số `2` từ **dòng satellite `YC-010`** — ô mà sổ `:30` loại khỏi tập đầu vào và sổ `:28` quy về dòng **mã GỐC** (đọc `1`). Ngưỡng ≥2 bị áp lên giá-trị **suy ra**, không phải giá-trị **đã viết** ⇒ phép đếm **không tái lập được** từ nguồn đã ký (2 người đếm trung thực ra 3 và 4). Tự khai ở `:44` rằng việc sửa thuộc **chủ sổ**, rồi vẫn đếm trên bản sổ **chưa được sửa đó** = đếm trên trạng-thái tương lai của nguồn. *(Lỗi điển hình #3 — theo hiệu lực.)* |
| **L2** | **2** | đánh giá **điều-kiện P.7** rồi in `SCORE-T2: 6` | Ba chân đều hỏng: **(a)** thay vị-từ *"sổ đủ dày"* bằng phép thử **bão hoà**, mà phép thử này đọc chính **kết quả** công thức ⇒ **vòng tròn**, sổ nào có ≥1 mục lặp cũng qua ⇒ van **rỗng**, không phải **đã thoả**. **(b)** ô baseline *"@S181 = 10/10 bão hoà"* **trái nguồn đã ký** (`sổ:64`: @S181 tầng-2 đếm **1 mục** ⇒ không bão hoà) — mà @S181 vai vẫn trả `KHÔNG ĐO ĐƯỢC` đúng luật ⇒ *"không bão hoà"* chưa bao giờ là tiêu chí gỡ. **(c)** khai *"tiêu chí vận hành duy nhất"* trong khi khoản **A8** (`adap-upgrade-pack-tracking.md:68`) vẫn nằm ở §3 **CHƯA ĐO** và ra lệnh *"phải in KHÔNG ĐO ĐƯỢC và cấm in điểm"* chừng nào **mẫu số** chưa xác định — A8 đo **tỉ lệ phủ sóng**, mọi số của tầng-2 đều là **tử số**. *(Lỗi điển hình #4.)* |
### Tầng-1 — **0 lỗi đếm**
4/4 khoản khớp: đơn vị **MỤC** (`:254`) · nguồn đúng sổ ký (`:237`) · đúng cột *số lần đã nhắc* (`$c[5]`) · ngưỡng `-ge 2` (`:261`). Số **tái lập được hôm nay** (tao chạy lại, khớp verbatim). Và lead phát **số đếm**, **không** phát điểm ⇒ không đụng lệnh cấm in điểm của P.7.
🔸 Máy có **điểm mù thật** (không bao giờ nhìn cột số-lần của dòng satellite) — nhưng đó **đúng bằng** luật `sổ:30`. Điểm mù nằm ở **luật + dữ liệu**, không ở người đếm.
### Việc phải làm (KHÔNG phải việc của tầng-3)
1. **Chủ sổ lật ô** cụm `YC-008`/`YC-010` cho khớp quy-ước `sổ:28` — sửa **trên đĩa**, không sửa trong đầu người đếm. Sửa xong thì máy tự nhìn thấy.
2. **Sau khi sổ được sửa: tầng-1 và tầng-2 ĐẾM LẠI.** Tao cố ý **không** nói con số hậu-sửa là bao nhiêu.
3. **P.7 vẫn còn hiệu lực cho tới khi chủ dự án tuyên gỡ** — và giờ có **hai** khoá, không phải một: *"sổ đủ dày"* (chưa có ngưỡng) **+ A8** *"mẫu số tỉ lệ phủ sóng"* (chưa xác định). Muốn gỡ thì gỡ **cả hai**, đúng người gỡ.
4. **Đường ghi lại (P.5):** lead ghi `docs/governance/error-ledger.md`**TẦNG-2 SAI**, nhãn *chấm sai*, 2 lỗi L1+L2.
🔴 **CẤM nhét nhãn *chấm sai* vào `lead_self_audit.flag_classes`** — tập ĐÃ NIÊM PHONG theo P3=B (khoá `_sealed_P3B_S181`); `h24-signal-write.ps1` sẽ từ chối **exit 2**. Chỉ chủ dự án mở tập.
### Ghi công cho tầng-2 (để lead phạt đúng liều, đừng phạt lây)
**khai to** chỗ mình chệch (`:23-44`) thay vì giấu — không có lời khai đó thì lỗi L1 **không ai soi ra được**, vì con số 4 tự nó trông hoàn toàn hợp lệ. Nó **giữ đúng đơn vị MỤC**, **không đổi nguồn**, chọn **nhánh tốn điểm hơn** khi gặp dữ-liệu mờ, phát kèm **số đếm thô** `SCORE-COUNT: 4 mục nhắc≥2` (đây mới là dạng output hợp luật), và **từ chối lục run-file** để khỏi đập vào số tầng-1 — đúng ranh cứng P.3. **Phát hiện lỗi dữ-liệu của nó là ĐÚNG và tao xác nhận độc lập bằng máy** (`YC-010` là satellite duy nhất mang số trong 5). Sai của nó không phải sai ở mắt nhìn, mà ở chỗ **đổ phát hiện vào trong con số** thay vì để bên cạnh nó.
### 🔸 Một lỗ cấu trúc cho lead biết (KHÔNG phải lỗi của ai)
Ranh cứng P.3 *"tầng-2 KHÔNG được xem điểm tầng-1"* nay **không cưỡng chế được bằng cách giấu pin nữa**: chính **nguồn đã ký** mang sẵn số tầng-1 của lượt trước — `so-yeu-cau…:64` viết *"Lead đếm **3 mục**"*. Vai tầng-2 nào đọc sổ cũng đập vào con số đó. Tầng-2 lượt này đã **tự khai** trùng hợp ấy (`:77`) và tao chấp nhận lời khai (con 3 lượt trước đi kèm con 1 của tầng-2, khác hẳn cặp 3/4 hôm nay). Nhưng cơ-chế cách-ly giờ **hở theo thiết kế** — muốn bịt thì phải xử ở chỗ khác, không phải bằng việc cấp pin sạch.

View File

@ -0,0 +1,94 @@
# sub-score-counter — TẦNG-2 khối chấm điểm @open S189
> Lead scribe NGAY khi vai trả (single-writer; vai return-only). Return SẠCH, 0 garble, tool_uses=9.
> Pin đã cấp: nguồn đếm đã ký `docs/governance/so-yeu-cau-chu-du-an.md` · luật `harness-11-engine.md` PHẦN P.
> 🔴 Pin CỐ Ý không kèm số tầng-1 — vai tự khai đã kiểm và xác nhận không có số nào lọt vào.
## VERDICT
```
SCORE-T2: 6 — 4 mục lặp>=2 / 22 mục tổng
SCORE-COUNT: 4 mục nhắc≥2
```
## 4 mục lặp ≥2
| # | mã | số lần đã nhắc | trạng thái | ghi chú |
|---|---|---|---|---|
| 1 | `YC-002` | **4** | **mở** | "OK cứ làm dry-run luôn" — 3 dòng đính chính `YC-004`/`YC-005`/`YC-006` treo dưới nó |
| 2 | `YC-008``YC-010` | **2** | đóng | 🔴 dòng LỆCH — xem dưới |
| 3 | `YC-013` | **2** | đóng *(tạm OK @S185)* | KHKK mirror DuyetNcc; satellite `YC-015` |
| 4 | `YC-018` | **2** | đóng | bookend/bookstart ONE-SHOT; lần nhắc 2 = `PN-001` @S188 |
## 🔴 LỖI DỮ LIỆU TRONG SỔ — vai tự khai chỗ mình lệch với luật-đếm
`so-yeu-cau-chu-du-an.md:30` ra luật: *chỉ đếm dòng có `nhắc-lại-của` TRỐNG; dòng có giá trị = "đã tính ở mã gốc"*.
Áp **máy móc** luật đó ⇒ **3 mục** (`YC-002`, `YC-013`, `YC-018`). Vai ra **4**, vì bất-biến mà luật dựa vào **gãy đúng 1 chỗ**.
Bất-biến: *satellite tồn tại ⟺ mục gốc đã bị nhắc ≥2*. Đo cả 5 satellite:
```
YC-004 — -> goc YC-002 cnt=4 OK
YC-005 — -> goc YC-002 cnt=4 OK
YC-006 — -> goc YC-002 cnt=4 OK
YC-010 **2** -> goc YC-008 cnt=1 ### LECH ###
YC-015 — -> goc YC-013 cnt=2 OK
```
`YC-010` là satellite **duy nhất** mang số ở cột *số lần đã nhắc* (2) thay vì `—`, mà gốc `YC-008` vẫn đọc **1** ⇒ con số "2" **gõ nhầm ô**, nằm trên dòng con thay vì dòng gốc.
Dấu vân tay phụ: `YC-010` cũng là satellite duy nhất có ô `nhắc-lại-của` **không in đậm**.
⇒ Lọc-dòng máy móc **đánh rơi im lặng** một mục mà chính sổ ghi là đã nhắc 2 lần — lớp *vắng-mặt-trông-giống-ổn*.
🔴 **Hướng lệch:** bỏ mục này cho **7 điểm**, giữ cho **6**. Vai chọn nhánh **tốn điểm hơn**.
**Việc của chủ sổ:** sửa `YC-008` cột nhắc → `2``YC-010``—` (hoặc ngược lại). Sửa kiểu nào thì số mục vẫn là **4**.
## Vì sao KHÔNG còn trả `KHÔNG ĐO ĐƯỢC` (khác chính lượt S181 của vai này)
Repo không định nghĩa ngưỡng "đủ dày" bằng số. Tiêu chí vận hành duy nhất = *lý do*`PHẦN P.7`: *"nguồn thưa thì máy **luôn** cho 10/10"*. Vai thử đúng điều kiện đó:
| | @S181 (trả KHÔNG ĐO ĐƯỢC) | @S189 |
|---|---|---|
| mục gốc | 8 | **22** (27 dòng 5 satellite) |
| ngày | 1 | **4** (08-07 → 08-10) |
| nhãn phiên | 1 | **7** (S180·181·182·183·185·187·188) |
| cụm lặp độc lập | 1 | **4** (trải 3 cặp phiên khác nhau) |
| khối có chữ anh gõ | 1/3 | **2/3** (khối 3 mở hàng @S188 = `PN-001`) |
| công thức nhả ra | 10/10 — **bão hoà** | **6** — không bão hoà |
Sự bão hoà mà P.7 sinh ra để chặn **không xảy ra được** trên dữ liệu này.
**Phép thử động cơ (vai tự áp):** @S181 từ chối là nhánh **tốn** (đúng nhánh rigorous). Hôm nay từ chối là nhánh **êm** — giấu con 6 sau câu chữ. Chiều lợi-ích đã đảo ⇒ không lấy nhánh êm. Ngược lại cũng không nặn số: **6 là số THẤP NHẤT** trong các nhánh đọc được.
🔸 **Vế vai KHÔNG có thẩm quyền:** P.7 đặt `KHÔNG ĐO ĐƯỢC` làm **mặc định** *"cho tới khi sổ đủ dày"*, chưa ai định nghĩa ngưỡng và chưa ai tuyên gỡ. Vai nộp phép đo cho thấy điều-kiện-kích-hoạt đã FALSE; **tuyên gỡ mặc định là việc của chủ dự án**.
## Luật bắt buộc đi kèm khi in điểm (P.1 — 3 cách đọc)
1. Điểm đo **đội có phải nghe lại không**, KHÔNG đo đội giỏi/dốt.
2. Điểm cao **không** chứng minh làm đúng — chỉ chứng minh không phải nhắc lại.
3. Điểm thấp là **tín hiệu tra cứu**, không phải bản án; đọc kèm danh sách mục.
**P.4 niêm phong**`emit_ts = 2026-08-10T16:58:10Z` (local `23:58:10+07`). `redisplay_ts` + `first_owner_msg_ts` **chưa có****`chờ niêm phong`**, theo P.4 **không được** đẩy sang hàng-chờ-anh.
**P.7 vế 2** — output INFORM-only, cấm gate bất cứ cổng nào. Bộ đếm "≥3 phiên INFORM-only" **lead phải tự xác minh**: vai chỉ chắc S181 là lượt đếm thật đầu tiên; S182 là spawn-probe 0-tool (không phải phép đếm). Vai **cố ý không đi lục** run file xen giữa vì rủi ro đập vào số tầng-1.
🔴 **Vai KHÔNG phán điểm cuối.** Con 6 = kết quả áp công thức trên phép đếm của vai. Điểm cuối = **tầng-4 = chủ dự án**.
🔸 **Khai minh bạch một trùng hợp:** sổ dòng 64 có ghi chuyện cũ *"lead đếm 3 / tầng-2 đếm 1"* @S181 — dữ liệu lịch sử nằm sẵn trong nguồn đã ký nên không tránh được khi đọc. Nó **không** dẫn dắt phép đếm hôm nay: con 3 hôm nay đến từ bộ lọc-dòng, con 4 đến từ bất-biến satellite; trùng số là trùng **cấu trúc**, không phải chép.
## Tệp vai đã dùng
- `docs/governance/so-yeu-cau-chu-du-an.md` (nguồn đếm đã ký)
- `docs/governance/harness-11-engine.md` (PHẦN P, dòng 495-545)
- `.claude/agents/score-counter.md`
---
## Ghi chú của LEAD (tầng-1) — để tầng-3 soi
**Số tầng-1 của lead = 3 mục**, lấy từ máy `scripts/nhip-no-probe.ps1` vế `so-yc`:
`so-yc treo 6 / nhac2+ 3 (muc 22, gop 5 dong nhac-lai)`.
**Tầng-1 = 3 ⟂ Tầng-2 = 4**, lệch đúng 1 mục = cụm `YC-008`/`YC-010`.
Lead **chưa** chỉnh số của mình và **chưa** phán ai đúng — đó là việc tầng-3.
Lead cũng **chưa** sửa sổ (sửa nguồn đếm giữa lúc đang đếm = làm hỏng phép đo).

View File

@ -0,0 +1,233 @@
TOOLING: PASS_WITH_FLAGS — 7 flag
> H1 tooling-auditor · bookstart @open vòng V1 · phiên S189 (phiên-LOGIC L15) · 2026-08-10
> INFORM-only · propose-only · single-writer = lead (B3 VERIFY → APPEND). Vai KHÔNG tự sửa file nào.
> G-015: `store_memory` đã strip, NHƯNG `Bash` còn = write-channel mở ⇒ KHÔNG tuyên "read-only enforced".
> Nấc bằng-chứng: mọi số dưới đây ĐO TỪ ĐĨA trong phiên này, không chép số cũ trong diary.
---
## 0. TÓM TẮT 4 MẶT
| Mặt | Verdict | Số đo (đĩa, hôm nay) |
|---|---|---|
| ① skill | PASS_WITH_FLAGS (2) | 6 project + 23 standalone + **20** command (19→20: `+day.md`) |
| ② vai-trò / roster | **PASS** (0 flag) | **29** — khớp **6/6** bề mặt |
| ③ plugin | **PASS** (0 flag) | **18 registered / 15 enabled / 3 disabled** — 0-delta **phiên thứ 7** |
| ④ docs | PASS_WITH_FLAGS (5) | 4 vá S188 đều THẬT; drift còn lại = carry-over + 1 mới |
**Phân bố:** 1 HIGH · 2 MED · 3 LOW · 1 INFORM.
**Điểm sáng:** mặt ② lần đầu **SẠCH TUYỆT ĐỐI** kể từ S179 — cả 6 bề mặt roster + frontmatter 29/29 × 3 khoá.
---
## 1. XÁC NHẬN 4 VÁ CỦA BOOKEND @CLOSE S188 (lead dặn: đừng tin dòng khai, mở file đối chứng)
Mở từng file đối chứng. **CẢ 4 ĐỀU VÁ THẬT** — không có vá-trên-giấy.
| # | Vá khai @S188 | Đối chứng đĩa | Verdict |
|---|---|---|---|
| 1 | Tests 668→680 | `docs/STATUS.md:476` = `**680 PASS**` \| `45 Domain + 635 Infra`, khai **ĐO ×2 nguồn độc-lập** (local `dotnet test` @gate-cụm + CI run **#482** `b275893c` tách-phần 45/635, đối chứng thứ 3 `sub-reviewer-cum.md`) | ✅ **THẬT + có phương-pháp** |
| 2 | bundle 2 đời | `docs/STATUS.md:479` = admin **`BZ1PG34E`** (1.813.772 B) · user **`0ObPwWFB`** (1.728.765 B), khai đo **LIVE trên VPS 2026-08-10 19:53-19:55** (`sub-cicd-cum.md:53-54`) + ship-proof tầng đĩa "chỉ còn ĐÚNG 1 `index-*.js` mỗi app". `STATUS:10` mega-line KHÔNG chép hash, chỉ trỏ `:479` (đúng B1) | ✅ **THẬT + B1-sạch** |
| 3 | roster README | `.claude/agents/README.md:27` — số đã **BỎ HẲN** (trỏ `docs/STATUS.md §Sub-agents`), enumeration đã **thêm `ring5-audit`**. Đếm phần-tử: **7 core (diagram) + 22 tên = 29** = đĩa | ✅ **THẬT + ĐỦ** (xem §3) |
| 4 | Modules GĐ3 | `CLAUDE.md:74` row Contract = `+ Duyệt HĐ GĐ3 (YC-023/024/025, S187-S188)` · cột Migration `1-11 · **0-mig @S188**` | ✅ **THẬT** — nhưng **row KHKG kế bên lại hở** → F-1 |
🔑 **Vá #3 đáng ghi nhận về CHẤT, không chỉ về số:** vá bằng **BỎ SỐ** (tuân luật `README:3` cấm chép số) chứ không phải **ĐỔI SỐ** — đúng đơn thuốc mà chính dòng `:28` (bài S143) kê. Đổi số thì roster kế lại stale; bỏ số thì hết class. Đây là lần đầu lớp drift này được đóng ĐÚNG CÁCH sau khi sống qua S185→S186→S188.
---
## 2. MẶT ① — SKILL
**Đo:** `.claude/skills/` = **6** project (contract-workflow · dependency-audit-erp · ef-core-migration · form-engine · iis-deploy-runbook · permission-matrix) · `~/.claude/skills/` = **23** standalone · `.claude/commands/*.md` = **20**.
**DIFF vs S188/S186: command 19 → 20.** File mới = `.claude/commands/day.md`, added `6bf768da` 2026-08-10.
### ✅ SẠCH — `day.md` KHÔNG phải máy mồ-côi (control dương chạy đủ)
Áp phép đo "máy MỚI sinh trong phiên = ứng-viên mồ-côi số 1" (method file `method_orphan_machine_audit.md`). Kết quả **có nhà khai đủ**:
- Máy đi kèm **tồn tại thật**: `scripts/day-probe.ps1` (`scripts/*.ps1` 36→**37**).
- `day-probe` được trỏ ở **≥4 bề mặt sống**: `CLAUDE.md` (khối "Mạch việc dở") · `.claude/commands/day.md` · `.claude/commands/pause.md` · `.claude/commands/tiep.md`.
- ⇒ cặp `day.md` + `day-probe.ps1` **có nhà khai, có cửa gọi**. KHÔNG flag. (Ghi nhận để phiên sau không nghi lại.)
### F-6 (LOW · mặt ①) — `ef-core-migration/SKILL.md` bảng migration dừng ở **Mig 71**, canonical = **72**
- **Bằng chứng:** `.claude/skills/ef-core-migration/SKILL.md:99` = row cuối `| **71** | AddKhkkApprovalGroupCatalogAndFinalizeRuntime |`. Đĩa có **Mig 72** `20260806070242_AddMaHangMucToContractSigningPlanLines.cs`. `grep -c AddMaHangMucToContractSigningPlanLines` = **1**, và hit đó nằm ở **`:25`** — trong **ghi-chú lineage** ("bảng dừng ở Mig 71…"), **KHÔNG phải một row của bảng**.
- **Đây là carry-over S179 F-7, sống qua S179 → S180 → S186 → S188 (≥4 phiên).**
- 🔸 **Tự bác một vế:** `:102` ghi *"last schema-changing **Mig 70**"* — **VẪN ĐÚNG**, không flag. Đo: `grep -c CreateTable` trên Mig 72 = **0** (Mig 71 cũng 0 theo S179). Theo từ-vựng "schema-changing" mà chính file định nghĩa (= tạo bảng), câu này còn hiệu lực. Vá phần bảng, **đừng đụng `:102`**.
- **Đề xuất:** thêm 1 row `| **72** | AddMaHangMucToContractSigningPlanLines | S177/L11 — KHKK Line +MaHangMuc, AddColumn no new table |`.
### F-7 (LOW · mặt ① ranh ④) — `permission-matrix/SKILL.md` cây vẽ thiếu root so với số chính nó khai
- **Bằng chứng:** `:3` (frontmatter description) khai **"12 root"**. Cây ở `:55-79` chỉ dựng **8** nhánh root nhìn thấy được (`Contracts` `:55` · `PurchaseEvaluations` `:58` · `KeHoachKyKet` `:60` · `Workflows` `:73` · `PeWorkflows` `:75` + phần trên), phần còn lại chỉ tồn tại dưới dạng câu văn `:22-28`.
- 🔸 **Chỗ SAI là CÂY, không phải SỐ**`ring1` @S182 đã chốt **12 là số ĐÚNG**. Đừng "vá" bằng cách hạ `:3` xuống 8 (đó là Goodhart: rời tập-đo, làm số khớp cây thay vì cây khớp thực tế).
- **Carry-over S179 F-2/F-3 → S182 → S186. Chưa vá.**
- **Đề xuất:** bổ sung 4 root vắng vào cây. ⚠️ **Cảnh báo kèm (bài S186):** trong 4 root từng bị liệt, `Puro`**TÊN MA** — 6/6 hit đều nằm trong COMMENT trỏ NAMGROUP; tên thật là `HopDongCung`. Lấy tên từ `MenuKeys.cs`, **đừng chép lại danh sách cũ**.
---
## 3. MẶT ② — VAI TRÒ / ROSTER — **PASS, 0 FLAG**
**Roster = 29.** Khớp **6/6** bề mặt, đo hôm nay:
| # | Bề mặt | Giá trị | Lệnh/neo |
|---|---|---|---|
| 1 | Đĩa | **29** | `ls .claude/agents/*.md \| grep -v README \| wc -l` (glob thô = 30, **trừ `README.md`** — bẫy đã biết) |
| 2 | `hmw.js` `VALID_ROLES` | **29** | parse khối `const VALID_ROLES = [``\n]`, strip comment `//`, 29 chuỗi |
| 3 | `.claude/agent-memory/*/` | **29** dir | |
| 4 | `docs/STATUS.md:480` (**canonical**) | **29** | `\| Sub-agents \| **29** \|` |
| 5 | `.claude/agents/README.md:27` enumeration | **29** | 7 core + 22 tên, đếm PHẦN-TỬ |
| 6 | skill-matrix `agents/README:194-231` | **29 row** | `comm` 2 chiều: **diskmatrix = ∅** · **matrixdisk = ∅** · 0 row trùng |
**Set-diff đĩa ↔ VALID_ROLES: rỗng cả 2 chiều.** 0 vai thừa, 0 vai ma, 0 dir mồ-côi.
**Frontmatter:** `model: opus` **29/29** · `effort: max` **29/29** · `memory: project` **29/29**. ⇒ **nợ S181 (2 vai W4b thiếu `effort`) đã đóng và giữ được qua 2 lượt sinh vai.**
### 🔑 Bề mặt thứ 6 (skill-matrix) — nợ dai nhất của mặt ② ĐÃ ĐÓNG
Lịch sử: S182 matrix phủ **26/28** (thiếu `score-counter` + `score-count-auditor`) → S185 vẫn ghi *"còn 26"*. Hôm nay đo lại: **29/29, 0 ghost**. Cả 2 vai W4b + `ring5-audit` đều đã có row. Đây là bề mặt cuối cùng của mặt ② còn hở — nay hết.
### 🔸 Khai PHẠM-VI + tự-hiệu-chỉnh độ mạnh bằng chứng (bài S180, ring1 bác)
KHÔNG khai "6 bề mặt ĐỘC-LẬP". Thật ra:
- Bề mặt 1 và 3 **đồng-biến một phần** (dir memory sinh theo vai, tuy không tự động).
- Bề mặt 4, 5, 6 là **3 nguồn tay-nuôi ĐỘC-LẬP THẬT** (3 vị trí khác nhau, 2 file khác nhau, không có máy nào đồng bộ chúng).
- ⇒ Độ mạnh thật ≈ **đĩa + 4 nguồn tay-nuôi độc lập**, đủ để tuyên PASS chắc, nhưng **không phải "6 nhân chứng rời nhau"**.
**Thừa / idle / scope-drift: 0.** Không vai nào trên đĩa vắng khỏi registry, không vai nào trong registry vắng khỏi đĩa.
---
## 4. MẶT ③ — PLUGIN — **PASS, 0 FLAG**
Nguồn thẩm quyền = **user-global** `~/.claude/settings.json` (KHÔNG conflate với project `.claude/settings.json` — file project chỉ có `hooks.Stop``wal-flush.ps1`).
**Báo đúng 4 nấc, KHÔNG conflate:**
| Nấc | Giá trị | Nguồn |
|---|---|---|
| **installed** (marketplace) | **37** | `~/.claude/plugins/marketplaces/claude-plugins-official/plugins` |
| **registered** | **18** | `enabledPlugins` keys |
| **enabled** | **15** | `enabledPlugins` value = `true` |
| **disabled** | **3** | `pr-review-toolkit` · `code-modernization` · `hookify` (đều `@claude-plugins-official`) |
| **assigned** (map → vai) | có bảng | `.claude/agents/README.md:238-244` |
| **used** | 🔴 **KHÔNG ĐO ĐƯỢC từ repo ⇒ KHÔNG KHAI** | — |
- **0-delta phiên thứ 7 liên tiếp** (S169 → S173 → S179 → S180 → S185 → S186 → S189). Không có plugin mới cần phân bổ.
- Lead model ở file đó: `claude-opus-5[1m]` + `effortLevel: xhigh`.
-**Vá S179 R-1 GIỮ ĐƯỢC:** `agents/README:239` nay ghi `frontend-design (standalone; 🔴 plugin trùng **ĐANG enabled** — cố ý KHÔNG dùng)` — khớp đĩa (`"frontend-design@claude-plugins-official": true`). Vị-từ đã đúng, **không tái phát**.
-`agents/README:236` khai **"18 plugin registered (15 enabled / 3 disabled)"** — **KHỚP đĩa từng con số**.
**New-allocation:** 0 skill mới, 0 plugin mới ⇒ **không có gì cần phân bổ phiên này**. (`day.md`/`day-probe.ps1` là máy nội bộ, không phải skill/plugin.)
---
## 5. MẶT ④ — DOCS
### F-1 (HIGH) — `CLAUDE.md:77` bảng Module: KHKK khai `69, 71` — **THIẾU Mig 72**
🔴 **XÁC NHẬN phát hiện của lead. Đây LÀ flag mặt-4, và nó nặng hơn một ô lẻ.**
- **Bằng chứng:** `CLAUDE.md:77` cột Migration = `**69, 71**`. Mig 72 = `20260806070242_AddMaHangMucToContractSigningPlanLines.cs` — tên file tự khai `ContractSigningPlanLines`**đúng module KHKK của chính row đó**, không phải module khác.
- `docs/STATUS.md:471` canonical = **72** ✅ đúng. ⇒ lệch nằm ở **derived**, không phải canonical (tin tốt: chuỗi B1 không hỏng từ gốc).
- **Vì sao HIGH:** row này là **cột "Migration" của bảng Module** — bề mặt mà người đọc dùng để trả lời *"module này gồm những migration nào"*. Thiếu 1 mã ở đây = câu trả lời SAI, khác với một con số tổng bị lệch.
**Trả lời trực tiếp câu lead hỏi — "còn bề mặt nào khác cùng lớp không?":**
- **Cùng-lớp HẸP (chuỗi `69, 71`): CHỈ 1 site.** `grep "69, 71\|69,71\|Mig 69.*Mig 71"` trên `CLAUDE.md` · `docs/CLAUDE.md` · `docs/STATUS.md` · `docs/PROJECT-MAP.md` · `ef-core-migration/SKILL.md`**1 hit duy nhất = `CLAUDE.md:77`**. Không phải lớp "claim chép nhiều site". Vá 1 chỗ là đủ **cho vế này**.
- 🔴 **NHƯNG cùng-lớp RỘNG (= "bề mặt kể migration bỏ sót Mig 72") có site THỨ HAI:** `ef-core-migration/SKILL.md:99` (→ **F-6**). ⇒ **Mig 72 đang vắng ở 2 bề mặt derived độc lập.** Nếu chỉ vá `CLAUDE.md:77` rồi tuyên "đóng lớp" thì sót đúng một nửa.
- **Đề xuất:** vá **CẢ HAI trong CÙNG một lượt**: `CLAUDE.md:77``**69, 71, 72**` (+ nửa câu mô-tả Mig 72) **và** thêm row 72 vào `SKILL.md`.
### F-2 (MED) — `docs/database/schema-diagram.md:515` khai **91 bảng**, canonical = **97**
- **Bằng chứng:** `:515` = `Tổng: **91 bảng** (Mig 42, + __EFMigrationsHistory hệ thống).` · `docs/STATUS.md:472` canonical = **97 @S164** (prod `sys.tables` = 97).
- Lệch **6 bảng**, và neo `Mig 42` so với Mig hiện hành **72** ⇒ ô này đứng yên từ khoảng **30 migration trước**.
- 🔸 **Phân loại theo tiêu-chí S186** (*"dòng này khai về QUÁ KHỨ hay tự nhận là ẢNH HIỆN-TẠI?"*): dòng mở bằng **"Tổng:"** = **tự nhận ảnh hiện-tại****stale THẬT**, không phải dương-giả.
- **Carry-over S179 F-8. Chưa vá.**
- **Đề xuất:** đổi thành con trỏ B1 (`số bảng → docs/STATUS.md`) thay vì thay số — chính `CLAUDE.md` đã mô tả file này là *"(số bảng → docs/STATUS.md)"*, nên hạ số ở đây là **khôi phục hợp đồng B1 đã tuyên**, không phải quyết định mới.
### F-3 (MED) — `docs/PROJECT-MAP.md` **0 hit** cả 4 module đang sống
- **Bằng chứng (kèm control dương, bắt buộc):**
| Từ khoá | Hit trong `PROJECT-MAP.md` |
|---|---|
| `ContractSigningPlans` | **0** |
| `KeHoachKyKet` | **0** |
| `PeWorkItemBudgets` | **0** |
| `ContractCatalogEntries` | **0** |
| `contract` (**control dương**) | **31** |
- Control dương = 31 ⇒ **thước không hỏng, file không rỗng** — 4 số 0 kia là **vắng mặt THẬT**, không phải lỗi grep. (Đúng bài "0-hit phải kèm control dương".)
- **Vì sao đáng MED:** `PROJECT-MAP.md`**file #3 trong 5-file-đọc-trước** của `CLAUDE.md`. Một "bản đồ toàn cảnh" không chứa module KHKK (7 bảng, Mig 69/71/72) + module ngân-sách PE đang chạy prod ⇒ người đọc theo đúng quy trình khởi động sẽ dựng sai bản đồ ngay từ đầu.
- **Carry-over S179 F-5. Chưa vá.**
### F-4 (LOW) — `docs/STATUS.md:10` mega-line CURRENT ghi `roster 28`, canonical `:480` = **29**
- **Bằng chứng:** `:10` chứa `· roster 28 ·`; `:480` = `| Sub-agents | **29** |`; đĩa = 29.
- 🔸 **Cố ý hạ xuống LOW, có lý do đo được** — không thổi lên:
- `:8` **tự khai trước** rằng dòng CURRENT lag: *"Dòng CURRENT ngay dưới đây advance @closeout nên tụt sau — giữa phiên đọc `.claude/WAL.md`"* ⇒ có caveat gắn liền, người đọc được cảnh báo.
- Dòng có **neo cửa sổ** (`S161→S168`) ⇒ mang tính bản-ghi-đông-lạnh nhiều hơn ảnh hiện-tại.
- Vế bundle **trong chính dòng đó đã B1-hoá đúng** (`bundle prod → canonical ở :479, KHÔNG chép số ở đây`) — chứng minh khuôn vá đã có sẵn ngay tại chỗ.
- **Đây là lớp tái phát:** S180 bắt cùng bệnh ở mega-line (khi đó `:8`). Cùng dòng, cùng loại, đổi số dòng.
- **Đề xuất:** áp đúng khuôn mà vế bundle đã dùng — thay `roster 28` bằng `roster → :480` (**bỏ số**, không đổi số). Đổi 28→29 thì phiên có vai thứ 30 lại stale.
### F-5 (INFORM · phương-pháp — không phải lỗi nội dung) — công thức đo cạnh `STATUS:471` **tái dựng ra 71, không ra 72**
🔑 **Flag này sinh ra từ chính cú trượt của em trong phiên này — báo lại để nó không bẫy vai sau.**
- `docs/STATUS.md:471` khai `Migrations = **72**` kèm phương-pháp: *"đo đĩa `ls Persistence/Migrations/*.cs` **trừ Designer+Snapshot** = 72"*.
- **Áp đúng chữ thì ra 71.** Vì migration `20260717032812_AddPeApprovedBudgetSnapshot.cs` có chữ **"Snapshot" trong TÊN CỦA CHÍNH NÓ** ⇒ bộ lọc "trừ Snapshot" **ăn nhầm một migration thật**.
- **Đo lại đúng:** `ls *.cs` = 145 · trừ `*.Designer.cs` (72) · trừ **`ApplicationDbContextModelSnapshot`** (1) = **72** ✅. Ordinal file cuối = **72** `AddMaHangMucToContractSigningPlanLines`. `git log --diff-filter=D` trên thư mục = **0 file bị xoá** (loại giả thuyết "mất 1 migration").
-**SỐ 72 ĐÚNG. Sai là CÔNG THỨC nằm cạnh nó.** Em đã suýt báo "canonical drift 72 vs 71" — tức là **báo oan chính ô canonical đúng**, chỉ vì tin công thức chép trong doc thay vì tự dựng phép đo.
- **Đề xuất:** sửa chữ trong `:471` thành *"trừ `*.Designer.cs` + `ApplicationDbContextModelSnapshot`"*. Chi phí 1 dòng, chặn một lớp báo-oan lặp lại.
- 🔸 Bài rút: **công thức chép trong doc cũng là một derived-artifact và cũng lão hoá** — nó không được miễn trừ chỉ vì trông giống một lệnh chạy được.
---
## 6. DIFF vs S188
| Mặt | S188 / baseline gần nhất | S189 (hôm nay) | Delta |
|---|---|---|---|
| skill project | 6 | 6 | 0 |
| skill standalone | 23 | 23 | 0 |
| command | 19 | **20** | **+1 `day.md`** (`6bf768da`) |
| scripts `.ps1` | 36 | **37** | **+1 `day-probe.ps1`** |
| roster | 29 (đĩa) — nhưng README:27 khai **28** + liệt thiếu `ring5-audit` | **29**, README:27 **đã vá đúng cách** | **F-1 S188 ĐÓNG ✅** |
| skill-matrix | 26/28 (S182) → "còn 26" (S185) | **29/29, 0 ghost** | **ĐÓNG ✅** |
| frontmatter | 26/28 `effort` (S181) | **29/29 × 3 khoá** | **giữ sạch ✅** |
| plugin | 18/15/3 | 18/15/3 | **0-delta phiên 7** |
| Tests (docs) | 668 | **680** (đo ×2 nguồn) | vá THẬT ✅ |
| bundle (docs) | 2 đời | `BZ1PG34E` / `0ObPwWFB` đo LIVE | vá THẬT ✅ |
| Migrations | 72 | 72 (đĩa xác nhận) | 0 |
**Đóng phiên này (do S188 vá): 2 nợ mặt ② + 2 vá mặt ④.**
**Còn treo: 4 carry-over** — F-6 (S179 F-7) · F-7 (S179 F-2/F-3) · F-2 (S179 F-8) · F-3 (S179 F-5). **Cả 4 đều là nợ từ drift-audit THÁNG S179, sống qua ≥4 phiên.**
**Mới sinh: F-1** (Mig 72 vắng ở `CLAUDE.md:77` — sinh 2026-08-06, chưa từng bị bắt).
---
## 7. ĐÃ SOI MÀ SẠCH (để lead biết mặt nào đã phủ — không chết non)
- ✅ Roster set-diff đĩa ↔ `VALID_ROLES` — rỗng 2 chiều.
-`agent-memory/*/` 29 dir — 0 dir mồ-côi, 0 vai thiếu dir.
- ✅ Frontmatter 29/29 × `model` / `effort` / `memory`.
- ✅ skill-matrix `comm` 2 chiều — 0 vai sót, 0 row ma, 0 row trùng.
- ✅ Plugin: 4 nấc đo rời, `agents/README:236` khớp đĩa từng số; vá S179 R-1 (`frontend-design`) **không tái phát**.
-`day.md` + `day-probe.ps1` — có nhà khai ≥4 bề mặt ⇒ **không mồ-côi** (đã chủ động soi vì là máy mới sinh).
-`STATUS:476` Tests / `:479` bundle / `:471` Migrations / `:472` bảng — **canonical đều TƯƠI**.
-`STATUS:10` vế bundle đã B1-hoá đúng (chỉ vế roster hở → F-4).
-`ef-core SKILL:102` *"last schema-changing Mig 70"***tự bác, KHÔNG flag** (Mig 71 & 72 đều `CreateTable` = 0).
-`STATUS:7` khối "S185 ĐÓNG" ghi `Tests 668`**tự bác, KHÔNG flag**: bản-ghi-đông-lạnh có neo phiên/ngày, khai về quá khứ. Sửa = giả mạo phép đo cũ (bài S181/S186).
-`permission-matrix:3` "12 root" — **tự bác, KHÔNG flag**: `ring1` @S182 chốt 12 là số ĐÚNG; lỗi ở CÂY (→ F-7).
### Phạm vi CHƯA phủ (khai thẳng, không để lead tưởng đã quét hết)
- ❌ Chưa soi trọn nội dung 20 `.claude/commands/*.md` (chỉ soi tên + máy đi kèm).
- ❌ Chưa soi trọn 23 skill standalone `~/.claude/skills/` (chỉ đếm).
- ❌ Chưa soi `docs/governance/` theo từng file (chỉ chạm qua con trỏ từ CLAUDE.md).
- ❌ Nấc plugin **`used`** — không đo được từ repo, **không khai**.
- ❌ Số dạng LOC/%/ms/byte-cap trong persona — chưa quét lớp này.
---
## 8. ĐỀ XUẤT CHO EM MAIN (propose-only — vai KHÔNG tự sửa)
**Ưu tiên vá trong phiên (rẻ, chặn lớp):**
1. **F-1 + F-6 CÙNG LƯỢT**`CLAUDE.md:77``69, 71, 72` **và** `ef-core-migration/SKILL.md` +row 72. *(Vá 1 trong 2 = sót nửa lớp.)*
2. **F-5** — sửa công thức `STATUS:471` thành *"trừ `*.Designer.cs` + `ApplicationDbContextModelSnapshot`"*. 1 dòng, chặn báo-oan lặp.
3. **F-4**`STATUS:10` `roster 28`**bỏ số**, trỏ `:480` (khuôn có sẵn ngay trong dòng đó).
**Vá được thì tốt (nợ tháng S179, đã ≥4 phiên):**
4. **F-2**`schema-diagram.md:515` → con trỏ B1 thay vì số 91.
5. **F-3**`PROJECT-MAP.md` bổ sung 4 module sống.
6. **F-7**`permission-matrix` bổ sung root vào CÂY (⚠️ lấy tên từ `MenuKeys.cs``Puro` là tên ma, thật là `HopDongCung`).
🔴 **Chống Goodhart — 3 chỗ CẤM "vá cho tụt flag-count":** đừng hạ `permission-matrix:3` 12→8 · đừng sửa `STATUS:7` "Tests 668" · đừng đụng `ef-core SKILL:102` "Mig 70". Cả 3 đang ĐÚNG; sửa chúng chỉ làm số flag đẹp lên trong khi nội dung xấu đi.
🔴 **Nếu vá F-1/F-4 mà đóng luôn "lớp Mig 72 / lớp roster-số" thì phải grep lại bằng LỆNH KHÁC** sau khi vá — bài `absence_looks_like_clean`.