Files
solution-erp/.claude/workflows/runs/2026-08-09-S185-bookend-close/sub-harness-audit.md
2026-08-10 01:52:51 +07:00

269 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# sub-harness-audit — vòng-3 nấc 3/3 con KIỂM @bookend-close S185
> ARTIFACT-FIRST (chống #53). Ghi liên tục, đổ ruột từng phép. Vai read-only trên agent-memory; file này nằm trong run-folder (run-trace), KHÔNG phải agent-memory.
## 0. PIN GATE — PASS (verify TRƯỚC khi chấm)
PIN đích-danh = `.claude/workflows/runs/2026-08-09-S185-bookend-close/` — KHÔNG tự tìm 'run mới nhất'.
| kiểm | kết quả |
|---|---|
| `test -d <pin>` | PASS |
| `harness-eval-return.md` | **7.495 B** non-empty, mtime 2026-08-09 22:30:33 |
| `harness-refine-return.md` | **6.861 B** non-empty, mtime 2026-08-10 01:33:46 |
| `script-arm-output.md` (PIN input) | **22.950 B**, mtime 22:17:26 |
**mtime-chain ⇒ TUẦN TỰ HELD:** script-arm 22:17:26 → eval 22:30:33 → refine (08-10) 01:33:46 → tao (sau 01:34). Không có dấu hiệu chạy song song.
**F14 GATE (bài học S162 — cây LIVE trượt GIỮA lượt):**
- `git log --since="2026-08-09" -- .claude/agent-memory` ⇒ commit cuối chạm agent-memory = `93173099` @22:18 (wal flush).
- `git diff --stat 93173099 HEAD -- .claude/agent-memory`**RỖNG**.
- `git status --porcelain -- .claude/agent-memory`**RỖNG**.
⇒ Cây agent-memory **ĐÓNG BĂNG từ 22:18**. Cả eval (22:30), refine (01:33) và tao đo **cùng một cây**. F14 KHÔNG tái diễn ⇒ đo trên cây LIVE là hợp-lệ lượt này (khỏi cần `git archive`).
---
## 1. RE-CHẠY INSTRUMENT (đối-chứng byte-exact)
### I1 — `measure-agent-memory.ps1` (exit 0)
Lệnh: `powershell -NoProfile -File scripts/measure-agent-memory.ps1` → parse JSON, diff vs khối JSON trong `script-arm-output.md`.
**KẾT QUẢ: 28 agent × 5 field = 140 ô — 0 MISMATCH.** caps khớp (soft 30720 / autoinject 25600).
Số load-bearing tái-dựng:
```
ring2-audit 31781 (124,14% cap) reviewer 31341 (122,43%)
tooling-auditor 30981 (121,02%) lead-stale 30852 (120,52%)
harvest-curator 28071 (109,65%) impl-be 25515 (99,67%)
OVER 25.600 = 5 vai · OVER 30.720 = 4 vai · n_agents = 28 · TOTAL_L1 = 470.131
```
### I2 — `nhip-no-probe.ps1` (exit 0, read-only: 0 hit Set-Content/Out-File/Add-Content)
```
PIN : ... deep 19/15 OVERDUE:deep | tran-bo-nho 5 over-cap l2idx 0 over | run-chua-gom 1 | pull-cach 4 ngay | so-yc treo 5 / nhac2+ 2
MINE : ... deep 19/15 OVERDUE:deep | tran-bo-nho 5 over-cap l2idx 0 over | run-chua-gom 1 | pull-cach 5 ngay | so-yc treo 5 / nhac2+ 2
```
**Lệch đúng 1 ô: `pull-cach 4` → `5`.** TRUY NGUỒN: `nhip-no-probe.ps1:207` `$days = [int]([datetime]::Now.Date - $newest.Date).TotalDays` ⇒ trường **phụ-thuộc ĐỒNG-HỒ**; PIN chạy 08-09, tao chạy sau nửa đêm 08-10 ⇒ +1 ngày. **KHÔNG phải bịa** — eval khai byte-exact tại thời điểm 22:30 là ĐÚNG. Mọi ô còn lại char-exact.
### I3 — `memory-archive-gate.ps1` DRY (exit 0; `-Apply` default `$false` xác nhận `:30`)
```
ring2-audit 31781 YES 7 entries strike 2 ~23102 PROPOSE archive (move 2 lowest-value)
lead-stale 30852 YES 6 entries strike 1 ~30214 WARN keep-floor hit (5)
reviewer 31341 YES 8 entries strike 1 ~30982 WARN value-floor
tooling 30981 YES 11 entries strike 1 ~30134 WARN value-floor
harvest 28071 YES 9 entries strike 1 ~27224 WARN value-floor
A7 GATE PASS - total pointers 429, resolved 429, failed 0
[A6] DRY-RUN: strike counters NOT persisted
```
⇒ T16 (1 PROPOSE + 4 WARN) · T13 (A7 429/429) · signal-3 (after-est 30.214) **tái-dựng khớp**.
### I4 — đo tay khối TRÊN heading đầu (6 file, byte thật từ đĩa)
Phép: `splitlines(keepends=True)` → cộng byte các dòng TRƯỚC `^#{2,3}\s` đầu tiên.
| file | size | PRE (tao đo) | PRE (refine cite) | verdict |
|---|---|---|---|---|
| impl-be | 25.515 | **15.309** | 15.309 | EXACT |
| reviewer | 31.341 | **17.505** | 17.505 | EXACT |
| ring2 | 31.781 | **16.008** | 16.008 | EXACT |
| lead-stale | 30.852 | **13.713** | 13.713 | EXACT |
| tooling | 30.981 | **11.398** | 11.398 | EXACT |
| harvest | 28.071 | **10.183** | 10.183 | EXACT |
**6/6 EXACT** — refine KHÔNG bịa khối này. (% của refine làm tròn XUỐNG: reviewer thật 55,9% ghi "55%", tooling 36,8% ghi "36%" — làm tròn bảo thủ, không thổi phồng.)
---
## 2. 🔴 PHÁT HIỆN BẺ ĐƯỢC — "8.679 = đúng 2 span" là XÁC-MINH VÒNG-TRÒN
Refine `:10` viết: *"Kiểm số học khớp máy **từng byte**: … ring2 31.78123.102=**8.679** = đúng 2 span"* và E5 `:28` *"(8.679 B khớp)"*.
**(a) Phép của refine KHÔNG THỂ SAI — nó tautology.** `memory-archive-gate.ps1:186` định nghĩa `$afterEst = $bytes - $movedBytes`. Nên `bytes afterEst ≡ movedBytes` **theo định nghĩa**. Trừ ngược 2 số máy in ra rồi tuyên "khớp máy từng byte" = kiểm-tra 0 bậc tự do; nó xác nhận số học của máy, **không** xác nhận đĩa.
**(b) Đo ĐỘC-LẬP trên đĩa thì KHÔNG khớp:**
```
ring2 7 span (khớp cột entries=7):
span1 L24 ## 🎯 Role baseline 1.446 B
span2 L36 ## 📅 Runs 7.192 B
span3..7 = 147 / 533 / 372 / 1.224 / 4.859 B
TRUE span1+span2 = 8.638 B · máy/refine = 8.679 B · Δ = 41 B
```
**(c) CƠ-CHẾ của 41 B** (truy tới dòng, không đoán): `:163` `$b += ($lines[$li].Length + 2) # +2 ~ CRLF est`. File ring2 **0 dòng CRLF** (thuần LF, đếm `raw.count(b'\r\n')`=0) ⇒ máy cộng dư **+1 B/dòng**. Span1+span2 = **41 dòng** (L24→L64) ⇒ dư đúng **41 B**. Khớp cơ-chế tuyệt đối.
**PHÁN:** phần **ĐỊNH-DANH** của refine (2 span đó = `Role baseline`+`Runs`, và chúng là 2 span duy nhất ngoài last-5 vì file chỉ 7 span, keep_floor=5 ⇒ floorStart=75=2) = **ĐẠT, xác minh độc-lập**. Phần **CON SỐ "8.679 … từng byte"** = **TRƯỢT**: số thật 8.638, và chữ "từng byte" mô tả sai một phép vốn không thể sai. Decision-impact: **NHỎ** (0,47%; E5 kết luận "value-scan của lead bác ĐÚNG" vẫn đứng vì nó dựa vào định-danh chứ không vào con số).
⚠️ Hệ quả LAN RỘNG (mọi `after-est` đều lệch cùng dấu): mọi con `~after-est` của gate **nhỏ hơn thực-tế nên OVERSTATE lượng drain được** → after-est THẬT còn cao hơn. Cụ thể lead-stale: máy ~30.214, mà kết luận "vẫn > cap" ⇒ **kết luận CÀNG đứng vững** (sai số đẩy ngược hướng an-toàn). Không lật signal-3/A2.
**Lần thứ 2 cùng cơ-chế (độc-lập):** refine `:9` nói nháp A1 = span `## S152` **2.502 B**. Đo thật span L103→EOF = **2.496 B**, span đó **6 dòng** ⇒ dư đúng **6 B**. Hai ca (41 dòng→+41 B · 6 dòng→+6 B) khớp luật `+1 B/dòng` tuyệt đối ⇒ cơ-chế đã CHỨNG, không phải trùng hợp.
**Lần thứ 3:** refine `:10` `30.852**638**(## Role baseline)=30.214`. Span `## Role baseline` lead-stale đo thật = **634 B** (4 dòng ⇒ dư 4 B). Sau-drain THẬT = **30.218**, không phải 30.214. Kết luận ">cap" **KHÔNG đổi** (30.218 > 25.600).
---
## 3. 🔴 CHUỖI HEADROOM — eval VẪN THIẾU 1 MỐC (tái phạm lớp S173, nhẹ hơn)
Eval `§3` tự dán nhãn *"**7 MỐC (liệt đủ** trước khi trừ — **luật sau erratum S173**)"* — tức nó **viện dẫn chính cái luật do audit S173 của tao đẻ ra**. Nên tao áp đúng phép đã bắt nó lần trước: **liệt MỌI `measured_headroom` máy in trên đĩa**, không tin danh sách vai đưa.
Lệnh: `grep -rn "measured_headroom" .claude/workflows/runs/`
| # | phiên | headroom | nguồn máy | eval cite? |
|---|---|---|---|---|
| — | S144 07-22 | 199.759 | `…S144…/harness-eval-return.md` | ngoài cửa-sổ (chuỗi bắt đầu S153) |
| — | S152 07-25 | 184.502 | `…S152…/machine-baseline.md` | ngoài cửa-sổ |
| 1 | S153 07-26 | **181.228** | `…S153…/instrument-backfill.txt` | ✅ |
| 2 | **S154 07-26** | **176.696** | 🔴 `…S154-bookend-open/harness-eval-return.md:163` — stdout `measured_headroom : 176696 tok`, phiên đó tự xác nhận **BYTE-EXACT 6/6** (`:169`) | ❌ **BỎ SÓT** |
| 3 | S159 07-29 | **172.247** | `…S159…/harness-eval-return.md` | ✅ (mốc DUY NHẤT eval để **trống nhãn phiên** — đúng chỗ kề lỗ hổng) |
| 4 | S162 07-30 | **165.767** | `…S162…/harness-audit-return.md:47` RC-3 byte-exact 6/6 | ✅ |
| 5 | S163 07-30 | **160.924** | `…S163…/harness-eval-return.md` + `run.md` | ✅ |
| 6 | S169 08-01 | **152.968** | `…S169…/harness-eval-return.md` | ✅ |
| 7 | S173 08-05 | **148.183** | `…S173…/harness-eval-return.md` | ✅ |
| 8 | S185 08-09 | **134.573** | `script-arm-output.md:399` | ✅ |
⇒ Trong cửa-sổ S153→S185 đĩa có **8 mốc**, eval liệt **7**. **Thiếu S154 = 176.696.**
**Bảng bước THẬT (8 mốc):**
```
S153→S154 -4.532 S154→S159 -4.449 S159→S162 -6.480 S162→S163 -4.843
S163→S169 -7.956 S169→S173 -4.785 S173→S185 -13.610 (GỘP, eval tự khai)
```
Eval trình S153→S159 như **một bước 8.981**; thật là **hai bước** 4.532 và 4.449.
**PHÁN 2 vế (không gộp):**
- **"đơn-điệu giảm, chưa đảo chiều" = ĐẠT** — chèn S154 vào: 181.228 > **176.696** > 172.247 ⇒ đơn-điệu **vẫn giữ trên cả 8 mốc**. Kết-luận KHÔNG đổ.
- **"7 mốc — liệt ĐỦ" = TRƯỢT** — chữ *liệt đủ* là claim đo-được, và nó sai. Cùng LỚP lỗi S173 (bỏ mốc máy-in giữa chuỗi), **nhẹ hơn nhiều**: S173 sót 2 mốc và **đảo dấu đạo-hàm**; S185 sót 1 mốc và **kết luận không đổi**.
- Eval khai trung-thực bước cuối là **GỘP** (S179 không có số máy) ⇒ không tái phạm lỗi "đọc bước gộp thành gia-tốc" của S173. Ghi nhận.
---
## 4. 🔴 EVAL T24 — so-sánh lịch-sử SAI (số hiện-tại thì đúng)
Eval `T24`: *"MFE impl-fe **12/13 = 92%** (**S172/S173 = 85%** ⇒ hướng TỐT LÊN)"* · signal-10 lặp lại *"(S172: 85%), refine đừng đọc ngược"*.
Đối chứng ĐĨA (nguồn sơ-cấp, không dùng trí nhớ):
| phiên | số | neo |
|---|---|---|
| S172 | **11/13 = 85%** | `…S172-bookend-close/sub-harness-audit-close-S172.md:120` |
| **S173** | **12/13 = 92%** | `…S173…/harness-eval-return.md:203` · `run.md:28` · `harness-audit-return.md:132,142` |
| S185 | **12/13 = 92%** | `script-arm-output.md` |
**S173 KHÔNG phải 85% — nó đã là 92%.** Chính `sub-tooling-auditor-open-S173.md:223` gắn nhãn *"SỐ ĐÃ STALE — đo tươi phiên này 12/13 = 92%"*, và eval S173 `:399` xếp hạng **MIXED** (*"hồi 1, chưa về 13/13"*).
**Verdict:** con số **12/13 = 92% ĐẠT** · mệnh-đề **"S173 = 85%" TRƯỢT** · nhãn **"hướng TỐT LÊN" TRƯỢT theo** — đúng thật là **ĐỨNG YÊN 12 phiên** (S173→S185, 92%→92%), và **mục MISS vẫn chưa ai gọi tên**. Đọc "tốt lên" làm **giảm** áp-lực lên đúng chỗ đang tắc.
🔴 Hệ quả **NGƯỢC hướng eval nghĩ**: sự đứng-yên này **CỦNG CỐ E1 của refine** (lane ① mù vì không ai chạy `-Detail`), chứ không làm E1 yếu đi. Refine **không** nhại lại chữ "tốt lên" ⇒ refine giữ đúng nấc.
---
## 5. VERDICT PER-CLAIM — 44 claim: **40 ĐẠT / 4 TRƯỢT**
### 5A. harness-eval — 24 claim: **22 ĐẠT / 2 TRƯỢT**
| # | claim | verdict | bằng-chứng tao tự dựng |
|---|---|---|---|
| E1 | §0 PIN-vs-LIVE 4/4 + control đĩa 8/8 | **ĐẠT** | 8/8 stat khớp; `pull-cach` lệch hôm nay do đồng-hồ, KHÔNG phải lỗi eval |
| E2 | §1 tự-cộng 12+9+8+4+1+2 = 36 | **ĐẠT** | cộng lại = 36 |
| E3 | T1/T4 roster 28 vai đo đủ | **ĐẠT** | re-run: `n_agents 28` |
| E4 | **T5** 5 vai > 25.600 (5 số %) | **ĐẠT** | re-run: OVER_25600 = 5, cả 5 tên + % khớp |
| E5 | **T6** 4 vai > 30.720 | **ĐẠT** | re-run: OVER_30720 = 4 |
| E6 | **T7** impl-be 99,7% còn **85 B** · 10/28 ≥80% cap | **ĐẠT** | 25.60025.515 = **85** ✓; đếm ≥20.480 = **10** ✓; 4 số cận-cap còn lại khớp |
| E7 | **T9** baseline `measured` **16/17** lệch + top-5 % | **ĐẠT** | 19 row 2 seed-0 = 17; khớp đúng 1 (office-document 3323) ⇒ 16/17 ✓; +998,6/+899,9/+836,0/+825,9/+556,8 **cả 5 EXACT** |
| E8 | **T10** 17 số-thật + 2 seed-0 + 9 vai 0-row = 28 | **ĐẠT** | 9 tên thiếu **trùng khít** danh sách eval |
| E9 | **T11** hẹn re-sync 2026-08-01 trễ 8 ngày · row harness-eval `1547` + "first-run pending" | **ĐẠT** | `measured['harness-eval'].l1_hot = 1547`; rollout chứa cả 2 chuỗi |
| E10 | **T12** l2_index MAIN-only max **68,1%** · cicd split 9.682+13.906=23.588 | **ĐẠT** | cap 20.480; reviewer 1 file 13.941 = 68,07%; cicd đúng 2 file cộng khít |
| E11 | **T13** A7 **429/429** PASS | **ĐẠT** | re-run gate: `total pointers 429, resolved 429, failed 0` |
| E12 | **T16** 1 PROPOSE (ring2 strike-2 ~23.102) + 4 WARN | **ĐẠT** | re-run DRY in y hệt 5 dòng |
| E13 | T22 FIT 2,71% worst-case | **ĐẠT** | `script-arm:247` |
| E14 | T23 per-role **22/23 = 100%** + 5 N/A | **ĐẠT** | đếm tay: 28 dòng 5 N/A = 23; đúng 1 dòng < 100% |
| E15 | T24 số hiện-tại impl-fe **12/13 = 92%** | **ĐẠT** | khớp |
| E16 | **T24 "S172/S173 = 85%" ⇒ hướng TỐT LÊN** | 🔴 **TRƯỢT** | §4 S173 **đã là 92%**; thật = **đứng yên 12 phiên** |
| E17 | **T27** hotload **736.281** + 6 file | **ĐẠT** | tao **tự stat 6 file**: 6/6 EXACT, tổng EXACT |
| E18 | **T28** headroom **134.573**, thiếu **75.427** | **ĐẠT** | tự dựng: 380.000 736.281/3,0 = **134.573** ✓; 210.000134.573 = **75.427** |
| E19 | T31 deep **19/15** OVERDUE | **ĐẠT** | re-run probe |
| E20 | T32 run-chua-gom **1** | **ĐẠT** | re-run probe |
| E21 | T34 vế-5 `so-yc treo 5 / nhac2+ 2` | **ĐẠT** | re-run probe; **+bổ**: `nhip-no-probe.ps1:22` (SYNOPSIS) **chỉ khai 4 vế** còn code `:264` in vế 5 "brief nói 4" **nguồn máy**, không phải brief sai |
| E22 | §4 erratum: `nhip-no-probe.ps1:115` đọc `autoinject_cap_bytes` 25.600, bản `c2d01f0d` y hệt | **ĐẠT** | `:115` khớp **nguyên văn**; `git show c2d01f0d` khối 110-120 **byte-identical** eval tự bắt lỗi diary mình = ĐÚNG |
| E23 | §3 chuỗi **đơn-điệu giảm, chưa đảo chiều** | **ĐẠT** | giữ trên **cả 8** mốc |
| E24 | **§3 "7 MỐC liệt đủ (luật sau erratum S173)"** | 🔴 **TRƯỢT** | §3 đĩa **8**; sót **S154 = 176.696** |
### 5B. harness-refine — 20 claim: **18 ĐẠT / 2 TRƯỢT**
| # | claim | verdict | bằng-chứng |
|---|---|---|---|
| R1 | **A1** dòng `:104` = **431 B đo tươi** | **ĐẠT** | đo byte thật: `L104 = 431 B` **EXACT** |
| R2 | **A1** `:103`=S152 · `:106`=S182 · `:108`=S185, span chạy tới EOF | **ĐẠT** | 4/4 vị-trí đúng; span cuối L103EOF |
| R3 | A1 caveat "còn 98,0%" | **ĐẠT** | 25.515431 = 25.084 **97,98%** |
| R4 | **A2** `## 📅 Runs` lead-stale = **8.463 B**, 27,4% file | **ĐẠT** | đo thật **8.463 EXACT**; 8.463/30.852 = **27,43%** |
| R5 | A2 neo `:201` máy tự in "SPLIT/condense by hand" | **ĐẠT** | `:201` khớp nguyên văn |
| R6 | **A3** diary harness-refine "59% cap, an toàn" | **ĐẠT** | 15.126/25.600 = **59,1%** |
| R7 | **span ≠ nhãn 4/4 file** | **ĐẠT** | đọc ruột: impl-be→**S185** · lead-stale→**S185** · ring2→**S182** · tooling→**S182**. 4/4 |
| R8 | khối TRÊN heading đầu, **6 file** | **ĐẠT** | **6/6 BYTE-EXACT** (15.309/17.505/16.008/13.713/11.398/10.183); % làm tròn **xuống** bảo thủ |
| R9 | parser `:153` cắt `^#{2,3}\s` · `:159` span cuối tới EOF | **ĐẠT** | 2/2 khớp nguyên văn |
| R10 | `keep_floor` giả định **bottom=newest** (`:177`) | **ĐẠT** | `:177` comment **verbatim** *"bottom = newest, append-to-end convention"* |
| R11 | **"8.679 = đúng 2 span khớp máy TỪNG BYTE"** | 🔴 **TRƯỢT** | §2 thật **8.638** (Δ41); phép **tautology** (`:186` định nghĩa `afterEst = bytes moved`) |
| R12 | `30.852 638 (Role baseline) = 30.214` | 🔴 **TRƯỢT** | span thật **634 B** sau-drain **30.218**. Kết-luận ">cap" **vẫn ĐẠT** |
| R13 | **E5** 2 span = `Role baseline`+`Runs`, là 2 span DUY NHẤT ngoài last-5 vì file chỉ **7 span** | **ĐẠT** | 7 heading ✓ (cột `entries`=7); keep_floor 5 ⇒ floorStart = 75 = **2** ✓ |
| R14 | **E5** `Role baseline` ring2 chứa nội-dung tới **S182****value-scan lead bác ĐÚNG** | **ĐẠT** | span1 chứa token **S182** (dòng FLAG-SÓT) + trọn hợp-đồng vai |
| R15 | **E1** `-Detail` **0 call-site**, `:32`, comment `:285-286`, **12 phiên** sau S173 | **ĐẠT** | `:32` + `:285-286` khớp **nguyên văn** (comment nêu đích danh *"reinject lane"*); 185173 = 12 ✓. Grep repo: hit **duy nhất** = `eval/mfe/README.md:25`**doc-home, KHÔNG phải call-site** (đúng "1 home" chốt @S152) ⇒ claim ĐỨNG |
| R16 | **E2** `measure-agent-memory.ps1` print-only 0-writer ⇒ là **phép CHÉP** | **ĐẠT** | đọc trọn 41 dòng: chỉ `ConvertTo-Json` ra stdout, 0 `Set-Content` |
| R17 | **E3(i)** 36-60% byte nằm trên heading đầu ⇒ **ngoài pool** | **ĐẠT** | vòng lặp chỉ chạy từ `headIdx[0]` ⇒ byte trước đó **không thuộc span nào**. Dải đo: 36,3%→60,0% ✓ |
| R18 | **E3(ii)** keep_floor ngược corpus | **ĐẠT** | = R10 |
| R19 | caveat 2: `low_watermark_bytes` nay đọc **None** | **ĐẠT** | key **KHÔNG tồn tại**; key thật `low_watermark_ratio` 0.85 ⇒ 25.600×0,85 = **21.760** (giá-trị diary vẫn đúng, TÊN KHÓA thì chết) |
| R20 | BÁC (2)(5)(9)(10) — reviewer vừa harvest · tự-bác "S185=0" · nhường lead-gap · nhường deep | **ĐẠT** | reviewer mtime **22:16** ngay trước PIN 22:17 ✓; (5) tự bác suy-luận CỦA CHÍNH MÌNH + nhường lane H2 = đúng ranh; (9)(10) nhường đúng vai |
---
## 6. FALSIFY-LOG — 17 phép: **12 HELD / 5 BROKE**
| # | phép thử (cố BẺ) | kết |
|---|---|---|
| F1 | "5 vai >25.600" — re-chạy instrument độc-lập, so 140 ô | **HELD** |
| F2 | "impl-be còn 85 B" — 25.60025.515 | **HELD** |
| F3 | "span ≠ nhãn 4/4" — mở ruột từng file, quét token phiên | **HELD** (4/4) |
| F4 | **"8.679 = đúng 2 span, khớp TỪNG BYTE"** — đo span thật trên đĩa | 🔴 **BROKE** (8.638) |
| F5 | "keep_floor giả định bottom=newest `:177`" — đọc source | **HELD** (verbatim) |
| F6 | "2 span đó là 2 span duy nhất drain được" — dựng lại floorStart | **HELD** |
| F7 | **"chuỗi 7 mốc — liệt đủ"** — grep MỌI `measured_headroom` trên đĩa | 🔴 **BROKE** (8 mốc; sót S154) |
| F8 | "đơn-điệu giảm, chưa đảo chiều" — chèn mốc bỏ sót rồi thử phá | **HELD** (vẫn đơn-điệu) |
| F9 | **T24 "S172/S173 = 85%"** — tra artifact S172 + S173 | 🔴 **BROKE** (S173 = 92%) |
| F10 | refine "0 call-site `-Detail`" — grep toàn repo | **HELD** (README = doc-home ≠ call-site) |
| F11 | **"638 B = Role baseline lead-stale"** — đo span thật | 🔴 **BROKE** (634 B) |
| F12 | **F14@S162 tái phát?** cây agent-memory trượt giữa lượt ⇒ tao báo sai cho cả 2 con | **HELD** (`git diff 93173099 HEAD` **RỖNG**, `git status` rỗng ⇒ đóng băng từ 22:18) |
| F13 | "trio chạy song song ⇒ tao chấm bản cũ" | **HELD** (mtime-chain 22:17→22:30→01:33→tao) |
| F14 | **"eval bịa `pull-cach 4`"** (tao đo ra 5) | **HELD**`:207` dùng `[datetime]::Now.Date`**đồng-hồ**, không phải bịa. Eval **trong sạch** |
| F15 | 🔴 **TỰ NGHI: "tao bịa mốc S154 để bắt lỗi oan?"** | **HELD** — S154 là **stdout máy** `harness-eval-return.md:163`, chính phiên đó tự xác nhận **byte-exact 6/6** `:169`; và **không tiêu-chí nào** loại S154 mà vẫn giữ S163/S169 |
| F16 | "`value_protect` che chở `Role baseline`" (⇒ máy sai khi đề-xuất move) | 🔴 **BROKE****0/10** pattern khớp (`gotcha #`,`anti-pattern`,`recurring`,`guard`,`root-cause`,…). Máy **đúng luật của nó**; luật **mù** với span hợp-đồng-vai ⇒ **củng cố E5** |
| F17 | 🔴 **TỰ NGHI: "verdict tổng của tao gộp để che TRƯỢT lẻ?"** | **HELD** — liệt **từng dòng** 44 claim, 4 TRƯỢT nêu **đích danh**, không tuyên "ĐẠT tổng" |
---
## 7. RE-CHẠY SỐ — 5 instrument · **183 ô đối-chứng · 180 khớp byte-exact**
| # | instrument / phép | ô | kết |
|---|---|---|---|
| I1 | `measure-agent-memory.ps1` (exit 0) vs khối JSON trong PIN | **140** | **140/140 EXACT** |
| I2 | `nhip-no-probe.ps1` (exit 0) vs PIN dòng `:422` | 5 vế | 4 char-exact · **1 lệch đồng-hồ** (`pull-cach 4→5`, truy `:207`) — **không tính lỗi vai** |
| I3 | `memory-archive-gate.ps1` DRY (exit 0) | ~20 | 5 dòng over-cap + after-est + strike + **A7 429/429** đều khớp |
| I4 | tự stat 6 file hotload + dựng lại số-học headroom | 8 | **8/8 EXACT** (736.281 · 134.573 · 75.427) |
| I5 | đo tay span/khối trên đĩa (python byte-exact) | 10 | **8 EXACT** (6 khối + `:104`=431 + Runs=8.463) · **2 LỆCH** = `8.679→8.638`, `638→634` |
🔴 Kết: **nấc ĐO không bịa số nào** (mọi số eval cite đều tái dựng được). **2 số lệch duy nhất đều thuộc nấc ĐỀ-XUẤT**, cùng **một cơ-chế** (`+1 B/dòng` do gate giả định CRLF trên file thuần LF), **cùng chiều**, **biên độ nhỏ**, **không lật kết-luận nào**.
---
## 8. NGOÀI-TRỤC / NHƯỜNG (nêu verbatim, KHÔNG tự chấm)
1. **NHƯỜNG `harvest-curator` (H2):** eval §6 chênh "13 file mtime hôm nay vs 6 chứa S185" + refine BÁC (4)(5) — **thao-tác harvest, không chấm lại**.
2. **NHƯỜNG `lead-gap`/`lead-stale` (H24):** T27/T28 hot-feed + target 210.000 = số OWNER; tao chỉ **tái dựng số học**, không phán chính sách.
3. **NGOÀI TRỤC → lead:** `nhip-no-probe.ps1:22` SYNOPSIS khai **4 vế** trong khi code `:264` in **vế 5** (`so-yc`) ⇒ **doc-trong-script stale**, không phải brief sai. Sửa doc = lane tooling.
4. **NGOÀI TRỤC → OWNER (tao KHÔNG đề-xuất đổi):** `archive_gate.value_protect.patterns` (10 mẫu) toàn hướng **bug/lesson**; **0 mẫu** phủ **hợp-đồng-vai / Role baseline**. Vì vậy máy hợp-lệ đề-xuất drain đúng phần **không được phép mất**. Đây là **quyết định CHÍNH SÁCH** (tiền-lệ S173: đổi quy-ước hình-dạng diary = quyền owner).
5. **Cảnh báo Goodhart (nhắc lại từ S173, vẫn sống):** MFE khớp theo "token có mặt BẤT KỲ ĐÂU trong file" ⇒ **file dài thì dễ khớp hơn**; đẩy 92%→100% bằng cách nhồi chữ = **Goodhart thuần**. CẤM "vá" mục MISS bằng nhồi nội dung.
## 9. CONTAINMENT (khai thẳng)
- Vai không Write/Edit lên `agent-memory`; file này nằm ở **run-folder** (run-trace), KHÔNG phải agent-memory.
- Lệnh tao chạy: **4 read-only** (`measure`, `nhip-probe`, `gate` DRY mặc định `-Apply:$false` `:30`, `git`) + đo python read-only. **0 lệnh ghi** vào `.claude/agent-memory`.
- 🔴 Lead soát `git status` **và** `git log` wal-commit sau lượt (Stop-hook auto-commit agent-memory — caveat S173 còn hiệu lực).
- Tao **PHÁN**, lead **single-writer** ghi verdict.
END