269 lines
23 KiB
Markdown
269 lines
23 KiB
Markdown
# 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.781−23.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=7−5=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.600−25.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.000−134.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" có **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 có **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 L103→EOF |
|
||
| R3 | A1 caveat "còn ≈98,0%" | **ĐẠT** | 25.515−431 = 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); và phép là **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 = 7−5 = **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"*); 185−173 = 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.600−25.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
|
||
|
||
|