Files
solution-erp/.claude/workflows/runs/2026-07-25-S152-h24-open-bookend/sub-ring1-S152.md
pqhuy1987 c2d01f0dce
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m30s
[CLAUDE] Docs: S152 closeout — bookend hình B trọn 2 đầu + owner (30)(31)(32) + queue memory-ops TRỌN (squash 20 wal:)
- Owner 3-quyết: (30) JUMP để-nguyên-theo-nhịp · (31) 4 persona +NEVER-block (restart ĐÃ THOẢ) · (32) vòng 1→5 AUTO — lô consent gỡ 9 site (5 H1 + ring1-tự-bắt + 3 trio; E-013 EXT)
- Memory-ops TRỌN: A1-A4/D1/D2/R1/B-series — A7 392/392 · mfe 20/20-100% lần đầu · lead-gap drain 24.728→16.485B · strike-ledger + WARN-latch (-Ack = owner-action)
- V4 sleep AUTO đầu: 1 shard thật/16 KÊU · ring4 đầu-đời TRƯỢT-4/5 → 4 fix gist (scribe sub-ring4-close vì return-only)
- Thư model re-stamp: 59ce1d0f → 9c909007 published (G-024a) — adap-report Đính-chính @S152 + sweep 13 bề-mặt LIVE
- Bookend @close: stale 6 FLAG + gap 2 FLAG → vá 8/8; ring2 8/8 ĐẠT (4-A pin-bản-cắt → slot 33) · ring1 48Đ/5T/59-claim
- M9 13 đơn-vị diary (3 S151-deep hồi-tố) · #53 ×10-chắc → tally 60-cận-dưới + errata subject-1b85713
- Session-log 2 run= + completeness-gate 5-vòng ĐẠT · HANDOFF segment S152 (carry 3-đóng/3-mới/23-giữ; slot 33/34)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-26 01:58:30 +07:00

96 lines
18 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-ring1-audit — S152 @open · KIỂM vòng-1 (H1 tooling-auditor + H2 harvest-curator)
> Read-only ngoài file này · propose-only · APPEND TỪNG MỤC NGAY (anti-#53 / AS-17).
> Mỗi số kèm LỆNH. KIỂM ≠ đo lại: tao verify per-claim + tái-dựng số load-bearing + falsify, KHÔNG chạy lại trọn việc H1/H2.
## §0 — PIN + fail-safe (nghĩa-vụ (i))
**LỆNH:** `stat -c "%s %y %n" <3 file pin>` · `date "+%H:%M:%S"` · `git log --oneline -3`
| pin | size đo | size lead khai | mtime | phán |
|---|---|---|---|---|
| `sub-tooling-S152.md` (H1) | **20435 B** | 20.435B | 2026-07-25 **20:49:55** | ✅ TỒN-TẠI + khớp byte EXACT |
| `sub-harvest-S152.md` (H2) | **16263 B** | 16.263B | 2026-07-25 **20:46:17** | ✅ TỒN-TẠI + khớp byte EXACT |
| `machine-baseline.md` (nền) | 4578 B | 4.578B | 20:30:47 | ✅ |
- **Tuần-tự C4b CHỨNG ĐƯỢC:** `now = 20:53:07` > mtime cả 2 pin (20:49:55 / 20:46:17) ⇒ tao chạy SAU con-đo, không song-song. Chấm bản đã-xong.
- **Fail-safe KHÔNG kích:** pin đủ + non-0-byte + mtime trong cửa-sổ phiên S152 ⇒ có measure thật ⇒ tao chạy (không NO-OP).
- 🔴 **Khai ranh open/close (contract tao = KIỂM end-only):** vòng này là bookend **@open** nhưng 2 pin KHÔNG phải diff-report — chúng là **verdict đầy-đủ** (H1 4-mặt + H2 5-trục) ⇒ có artifact đáng chấm. Tao chạy vì **lead spawn đích-danh** (`run.md:6` đợt-2 ghi rõ `ring1-audit` KIỂM H1+H2), **KHÔNG phải tự-fire @open** — điều cấm trong contract là *tự* chạy. Ghi ra để owner biết hình-B @open đã sinh artifact authoritative-shape, tức tiền-đề "@open chỉ có diff-report" của §L.b(g-bis) không còn đúng với thực-tế wave này (nêu, không tự chấm — quyền owner/lead).
- 🔴 **Time-drift đã lộ ngay (bài E1-1 của tao):** H1 §0 khai `HEAD 3058470`; tao đo HEAD nay = **`766eb87 wal: flush 20260725T2049`** (+3 commit hook WAL trong lúc wave chạy). ⇒ MỌI tái-dựng git của tao phải pin tại base H1/H2 (`1b85713` / `3058470`), KHÔNG tại HEAD tao. Không được chấm H1 TRƯỢT vì cái này.
## §1 — TỰ TÁI-DỰNG số load-bearing (nghĩa-vụ (iv) phần 1) — 6 số
> Luật tự áp (E1-surprise-1 S150): mọi lệnh đếm trên `.claude/agents/*.md` **PHẢI** trừ `README.md`. Chứng bẫy còn sống: `ls -1 .claude/agents/*.md | wc -l` = **21** (có README) vs **20** (trừ README).
| # | số load-bearing | H1/H2 khai | tao đo lại | lệnh (nguồn KHÁC con-đo) | phán |
|---|---|---|---|---|---|
| R-1 | roster `.claude/agents/*.md` README | **20** (H1 2a) | **20** | `ls -1 .claude/agents/*.md \| grep -v README \| wc -l` | ✅ KHỚP |
| R-1b | roster nguồn thứ-2 (git index, không phải `ls`) | — | **20** | `git ls-files .claude/agents/ \| grep '\.md$' \| grep -v README \| wc -l` | ✅ KHỚP |
| R-2 | `VALID_ROLES` element-count | **20** + set-diff RỖNG (H1 2a) | **20**, dup **0**, set-diff **RỖNG 2 chiều** | python: cắt block `hmw.js:22..41` (dòng `]` cột-0) → **strip `//` comment TRƯỚC**`findall("'([a-z0-9-]+)'")` → so `set` với glob đĩa | ✅ KHỚP |
| R-3 | role-dir `agent-memory/` (nguồn thứ **5**, H1 không dùng — H2 dùng ở 2a) | **20** (H2) | **20**, và `set(dirs) == set(roster)` (0 lệch 2 chiều) | `os.listdir + isdir` → set-compare với roster | ✅ KHỚP + mạnh hơn: khớp TẬP, không chỉ khớp SỐ |
| R-4 | `.claude/commands/*.md` | **19** (H1 FLAG-4) | **19** | `ls -1 .claude/commands/*.md \| wc -l` | ✅ KHỚP |
| R-5 | `tests/…Tests/Application/` file-count | **38** (H1 FLAG-3) | **38**, trong đó **0** entry không-`.cs` | `ls -1 … \| wc -l` + `ls -1 … \| grep -vc '\.cs$'` | ✅ KHỚP (và 38/38 là file `.cs` thật, không lẫn dir) |
🔴 **BẪY TAO TỰ ĐẠP (khai thẳng — chi tiết ở F-1):** lần extract VALID_ROLES ĐẦU của tao dùng `sed -n '/^const VALID_ROLES/,/\]/p'` ⇒ range **kết thúc SỚM** tại dòng comment chứa literal `[2]` ("owner-decision **[2]** TÁCH") ⇒ ra **18** và set-diff *giả* báo thiếu `ring2-audit`/`ring4-audit`. Nếu tao tin số của chính mình thì đã chấm H1 claim-2a **TRƯỢT OAN**. Sửa: strip `//`-comment TRƯỚC khi bắt literal + chốt biên bằng dòng `]` cột-0.
## §2A — VERDICT PER-CLAIM · H1 `tooling-auditor` (27 claim: ĐẠT 25 / TRƯỢT 2)
| # | claim H1 | verdict | bằng-chứng tao tự chạy |
|---|---|---|---|
| H1-1 | §0 `HEAD 3058470` + `git status` 3 mục | **ĐẠT** | `git log --oneline -3` nay = `766eb87/fda01de/76c27c7` (3 wal-hook flush SAU khi H1 đo) — `3058470` vẫn trong lineage ⇒ **time-drift, KHÔNG phải sai** |
| H1-2 | 1a **6 skill** + README · 0 thêm/xoá vs S151 | **ĐẠT** | `ls -1 .claude/skills/` = 6 dir + README · `git log 1b85713..HEAD -- .claude/skills/ .claude/agents/ \| wc -l` = **0** commit |
| H1-3 | 1b row **Mig 67** tại `ef-core-migration/SKILL.md:89` | **ĐẠT EXACT** | `sed -n '89p'` = `\| **67** \| **AddPeApprovedBudgetSnapshot** \| … *(row bổ sung @S151 — ring1 TRƯỢT-1…)*` |
| H1-4 | 1b mtime `Jul 25 19:11` · **33.773B** | **ĐẠT EXACT** | `stat -c "%s %y"` = `33773 2026-07-25 19:11:33` |
| H1-5 | 1c tái-lập **TOTAL C2 = 15** | **ĐẠT (gián-tiếp)** | tao KHÔNG chạy lại detector (KIỂM≠đo lại). Kiểm **số-học phân-rã**: 6 (contract-wf) + 7 (ef-core) + 1 (CLAUDE.md:93) + 1 (session-end:251) = **15** ✓ · spot **8/15 dòng** mở ra đúng nội-dung H1 mô-tả (`ef-core:100` "2 migration tách" · `:101` "1 migration GỘP" · `:117` "3 bảng" · `:120` "1 bảng riêng" · `:168` heading "Revert 1 migration" · `:185` comment "Script từ 1 migration" · `contract-workflow:24` "3 bảng" · `:35` "6 test PE 2-stage") |
| H1-6 | 1c **15/15 DƯƠNG-GIẢ** ⇒ KHÔNG vá | 🔴 **TRƯỢT (phần — 13/15)** | 2 dòng `ef-core:109` + `:117` bị H1 bác **bằng lý-do đếm** ("module-local") trong khi **cả khối chứa chúng mô-tả module ĐÃ XOÁ** (Budget, DROP @Mig 50/S61). Xem **TC-CLEAN-1**: `BudgetPolicy` = **0 hit** trong toàn bộ `*.cs`. ⇒ "dương-giả" đúng ở trục count, **sai ở trục nội-dung** — đúng bài chính H1 dùng cho FLAG-3 ("máy flag đúng dòng, sai lý-do") nhưng H1 không áp lại cho 2 dòng này |
| H1-7 | 1d 0 commit chạm `skills/` sau `1b85713` | **ĐẠT** | như H1-2 |
| H1-8 | 1d 6 cặp size/mtime `SKILL.md` | **ĐẠT EXACT 6/6** | `ls -la .claude/skills/*/SKILL.md` → 24452/May8 · 5551/Jun18 · 33773/Jul25 · 5450/Apr30 · 14688/Jun25 · 7864/Jul15 |
| H1-9 | 1d nợ S119 `permission-matrix` CLOSED (`:3/:17/:18/:26`) | **ĐẠT EXACT** | `sed -n '3p;17p;18p;26p'``:3` B1-pointer trong frontmatter · `:17` "KHÔNG chép số vào file này (B1)" · `:18` dạy đếm từ `MenuKeys.cs:147` · `:26` bia-mộ `Bg_*` XOÁ-S61 |
| H1-10 | FLAG-1 `permission-matrix:42` `~60 key` vs canonical 54 | **ĐẠT** | `sed -n '42p'` = `## Menu tree (seed — ~60 key sau Phase 8)` · canonical `docs/STATUS.md:447` row `Menu keys` = **54** |
| H1-11 | 2a roster **20** (4 nguồn) | **ĐẠT + tao thêm 2 nguồn** | `ls\|grep -v README\|wc -l`=20 · `git ls-files`=20 · `os.listdir agent-memory`=20 · STATUS:452=20 · STATUS:465 state-line "Sub-agents 20" |
| H1-12 | 2a **set-diff 2 chiều RỖNG** | **ĐẠT** | python `set(VALID_ROLES) - set(disk)` = `[]` · `set(disk) - set(VALID_ROLES)` = `[]` · thêm: `set(role-dir) == set(roster)` (0 lệch 2 chiều) |
| H1-13 | 2b matrix **20 row** + `ring1:195`/`ring2:196`/`ring4:197` + header `:174` không hardcode số | **ĐẠT** | `sed -n '174,200p' \| grep -c '^\| '` = **21** = 1 header + **20 row** (dòng `\|---\|` không khớp pattern) · `:174` = "Skill assignment (**6 skill**, re-distributed S39)" — số SKILL, không phải số VAI ⇒ không tự-lão-hoá |
| H1-14 | 2c **10 hit** tên-chết / 8 bề-mặt sống · **10/10 frozen-mention · 0 dùng-sống** | **ĐẠT (kết-luận) + caveat PHẠM-VI** | Tao quét RỘNG hơn: `.claude/governance/ACTIVE-MARKS.md` **4** · `.claude/governance/.session-counter.json` **6** · `docs/governance/**` **~11** · `docs/STATUS.md` **4** — đều **ngoài** 8 bề-mặt H1 chọn. Mở từng cái: counter-hit nằm trong chuỗi `_note`/`event` (bản-ghi sự-kiện, KHÔNG phải key máy đọc) · ACTIVE-MARKS-hit nằm trong **bảng-mapping rename** + scope-cũ của mark. ⇒ **kết-luận "0 dùng-sống" HELD**, nhưng con số "10" là **10-trong-8-bề-mặt**, không phải 10 repo-wide (H1 có khai phạm-vi ⇒ không chấm TRƯỢT) |
| H1-15 | ③ `enabledPlugins` **18 / true 15 / false 3** + đúng 3 tên | **ĐẠT EXACT** | `json.load(~/.claude/settings.json)` (parse KHÁC `sed` của H1): total **18**, true **15**, false **3** = `pr-review-toolkit@…` · `code-modernization@…` · `hookify@…` |
| H1-16 | ③ standalone skill **23** | **ĐẠT** | `ls -1 ~/.claude/skills \| wc -l` = 23 |
| H1-17 | ③ marketplace **37** | **ĐẠT** | `ls -1 ~/.claude/plugins/marketplaces/claude-plugins-official/plugins \| wc -l` = 37 (+ ghi công: H1 **tự khai** "count trùng ≠ set trùng" và dán 37 tên làm mốc — đúng nấc trung-thực) |
| H1-18 | ③ `settings.json:11` = `claude-opus-5[1m]` | **ĐẠT EXACT (đúng cả số dòng)** | `sed -n '11p'` = ` "model": "claude-opus-5[1m]",` · `json['model']` = `'claude-opus-5[1m]'` |
| H1-19 | ③ nợ S143 (a) **model-pin-flip-unlogged CLOSED** | **ĐẠT** | `STATUS:452` chứa "Lead = **DEFAULT Opus 5 MAX** (thư `59ce1d0f` @S149)" · `session-start.md` khối BƯỚC 0.6 có dòng "🔄 **VALUE-update @S149** … Default = Opus 5 MAX ở MỌI vị trí, KỂ CẢ ghế lead" |
| H1-20 | ③ nợ S143 (b) **outage-recipe hết no-op** | **ĐẠT** | `session-start.md` outage-path: "GIỮ `/model claude-opus-4-8[1m]` + BÁO HUB NGAY" ≠ pin `opus-5` ⇒ recipe trỏ model **khác** pin ⇒ có tác-dụng thật |
| H1-21 | ④ `STATUS:451` Skills **6** = 3 domain + 3 ops | **ĐẠT** | `grep -n "^\| Skills"` = `:451 \| Skills \| 6 \| 3 domain + 3 ops \|` — khớp 6 dir đĩa |
| H1-22 | FLAG-2 `STATUS:453` RAG **2447** vs tươi **2448** | **ĐẠT (tao đo LẠI bằng nguồn gốc)** | tao **tự gọi MCP `list_projects`** (không đọc qua `machine-baseline`): `proj_solution_erp.chunk_count` = **2448** ⇒ lệch +1 xác nhận |
| H1-23 | ④ `README:27` ⓘ diagram 7-lane vẫn ĐÚNG (legend 7 màu · B1 0-số-cứng) | **ĐẠT** | `sed -n '28,60p' \| grep -oiE "cyan\|blue\|yellow\|orange\|purple\|red\|green" \| sort -u` = **7 màu distinct** · `:27` liệt **tên** vai + chốt "Số vai canonical → docs/STATUS.md" (0 số cứng) |
| H1-24 | FLAG-3 `tests/…/Application/` = **38 file** | **ĐẠT** | `ls -1 \| wc -l` = 38 · `grep -vc '\.cs$'` = **0** ⇒ 38/38 là file `.cs` thật |
| H1-25 | FLAG-4 commands **19** · "3 file thêm gần nhất = snapshot · pause · fable-clone" | **ĐẠT (19) + 🔴 TRƯỢT-nit (danh-sách 3 tên)** | `ls -1 .claude/commands/*.md \| wc -l` = **19** ✓. Nhưng `git log --diff-filter=A -1` từng file: `snapshot` `2448393` **2026-07-24** · `pause` `8aa3869` **2026-07-12** · **`tiep` `8aa3869` CÙNG COMMIT với pause** · `fable-clone` `e350660` **2026-07-03** ⇒ 3 mới nhất = snapshot · pause · **tiep**, KHÔNG phải fable-clone. **Kết-luận delta 18→19 = `snapshot.md` KHÔNG đổi** |
| H1-26 | INFORM-1 class ∈ enum ĐÓNG, H1 không tự chế | **ĐẠT** | `json.load(memory-budget.json)['lead_self_audit']['flag_classes']` = **11 class**, có `view-stale-count`; cả 4 FLAG của H1 đều dùng đúng class trong enum |
| H1-27 | INFORM-2 C1 MED nằm ở session-log (frozen) + turf H24 | **ĐẠT** | `machine-baseline.md:22` xác nhận vị-trí `docs/changelog/sessions/2026-07-25-1930-S151-…:25` |
## §2B — VERDICT PER-CLAIM · H2 `harvest-curator` (23 claim: ĐẠT 21 / TRƯỢT 1 / KHÔNG-CHẠM 1)
| # | claim H2 (trục) | verdict | bằng-chứng tao tự chạy |
|---|---|---|---|
| H2-1 | §1 universe **55 dir** | **ĐẠT** | python `os.listdir + isdir` = **55** (nguồn KHÁC: H2 dùng `ls -1d */ \| wc -l`) |
| H2-2 | §1 **3 dir** không có `*-synthesis.md` non-0 — đúng 3 tên | **ĐẠT EXACT** | python `os.walk` + `getsize>0` → đúng 3: `S117-pe-approve-minmax-range` (1 file) · `S117-pe-luyke-finalize` (1 file) · `S152-h24-open-bookend` (8 file, có `run.md`) |
| H2-3 | §1 **ORPHAN THẬT = 0** (Coverage) | **ĐẠT** | 2 dir spec-only không `run.md` (by-design, baseline S132 đã ghi) + 1 dir **chính wave đang chạy** ⇒ 0 orphan. Phán độc-lập trùng H2 |
| H2-4 | §1b `S144-bootstrap` CÓ synthesis ⇒ **không orphan** (nợ ring1-S151 của TAO đóng) | **ĐẠT EXACT** | `find -printf "%s %f"` = `1239 bootstrap-synthesis.md` · `16732 sub-tooling-auditor-1.md` · `18326 sub-harvest-curator-1.md` — khớp 3/3 byte. **Nợ TAO bắt @S151 đóng ĐÚNG** (và H2 khai đúng bản-chất: lỗi **mẫu-số**, không phải folder thiếu vết) |
| H2-5 | §2a **9 vai distinct** chạy @S151 | **ĐẠT** | `ls` 2 folder: bookend 6 vai (`harvest`·`lead-gap`·`lead-stale`·`ring1`·`ring2`·`tooling`) + trio 3 vai (`harness-audit/eval/refine`) = **9**, trùng tên 9/9 |
| H2-6 | §2a **20 role-dir** | **ĐẠT** | `find -mindepth 1 -maxdepth 1 -type d \| wc -l` = 20 |
| H2-7 | §2a **9/9 vai có mục `## S151`** + hit-count từng vai | **ĐẠT EXACT 9/9** | `grep -c S151` per role: lead-gap **3** · lead-stale **3** · ring1 **2** · ring2 **2** · tooling **2** · harvest **2** · h-eval **2** · h-refine **1** · h-audit **1** — khớp **từng con một** với bảng H2 |
| H2-8 | §2a **11 vai không chạy = 0 hit** | **ĐẠT EXACT** | đúng 11 vai còn lại đều `grep -c S151` = 0 (cicd · db · fd · impl-be · impl-fe · inv-api · inv-cb · office · reviewer · ring4 · test-spec) |
| H2-9 | FLAG-1 chứng ① 3 diary mtime = **19:29:03** (cùng giây, batch) | **ĐẠT EXACT** | `stat -c "%y"`: lead-gap `19:29:03.547` · lead-stale `19:29:03.466` · ring2 `19:29:03.582` |
| H2-10 | FLAG-1 3 deep-file: **22.056/19:46:35** · **22.157/19:48:49** · **22.843/20:09:56** | **ĐẠT EXACT 6/6** | `stat -c "%s %y"`: 22056 `19:46:35` (lead-stale-deep) · 22157 `19:48:49` (lead-gap-deep) · 22843 `20:09:56` (ring2-deep) ⇒ **mtime-chain diary < deep đúng 1741 phút** |
| H2-11 | FLAG-1 chứng ② `grep -rn "deep-S151" agent-memory/` = **0** | **ĐẠT** | tao chạy lại = **0** |
| H2-12 | FLAG-1 chứng ② `grep` 3 byte-cite (22.056/22.157/22.843) = **0** | **ĐẠT** | regex `22[.,]056\|22[.,]157\|22[.,]843` trên `agent-memory/` = **0** |
| H2-13 | FLAG-1 chứng ③ **0 token "deep" trong khối `## S151`** (0/0/0) | **ĐẠT EXACT** | python cắt block heading-to-heading: lead-gap `:4650` **0** · lead-stale `:2428` **0** · ring2 `:5256` **0** |
| H2-13b | (phụ) "2 hit deep ở lead-gap + 1 ở lead-stale **đều thuộc khối S143**" | **ĐẠT về QUY-THUỘC · lệch ĐƠN-VỊ** | quy-thuộc đúng 100% (lead-gap `:25` heading `## S143 DEEP-audit #1` + `:27` trong khối đó; lead-stale `:18` "S143 … DEEP-audit"). Đơn-vị: lead-gap = **2 DÒNG nhưng 3 occurrence** (`grep -c` dòng ⟂ `grep -o\|wc -l` occurrence — bẫy quen `feedback_resume_premise_reverify`) |
| H2-14 | FLAG-1 chứng ④ commit `1b85713` **20:13:25** chứa 3 deep **+214/+171/+219 = 604** + **9 diary +4/+5** | **ĐẠT EXACT** | `git show -s --format="%ci"` = `2026-07-25 20:13:25` · `git show --numstat`: lead-gap-deep **214** · lead-stale-deep **171** · ring2-deep **219****604**) · đúng **9** `MEMORY.md` với +4 (h-audit/h-eval/h-refine/harvest) và +5 (lead-gap/lead-stale/ring1/ring2/tooling) |
| H2-15 | §3(A) **0 file <400B** trong 3 folder · nhỏ nhất 1.861/1.947/1.971 | **ĐẠT EXACT** | `find -size -400c \| wc -l` = **0** · `sort -n``1861 S151-bookend/run.md` · `1947 trio/run.md` · `1971 trio/trio-synthesis.md` |
| H2-16 | §3(B) **10 file 0-byte, TẤT CẢ `.gitkeep`** | **ĐẠT EXACT** | `find -size 0c -printf "%f\n" \| sort \| uniq -c` = `10 .gitkeep` (0 tên khác) |
| H2-17 | §3(C) 5 diary nhỏ nhất **1047/2060/2131/2149/3323** | **ĐẠT EXACT 5/5** | `find -name MEMORY.md -printf "%s %p" \| sort -n \| head -5` khớp cả 5 số + 5 tên |
| H2-18 | §4 `git status --porcelain agent-memory/` = **0** (containment) | **ĐẠT** | tao chạy lại = **0 dòng** (kể cả sau khi 6 sub đã chạy) |
| H2-19 | trục 4 Placement: **0 dir rỗng** · **20/20 role-dir có MEMORY.md** | **ĐẠT** | `find .claude -type d -empty \| wc -l` = **0** · role-dir 20 / `MEMORY.md` depth-2 = **20** |
| H2-20 | §5 Fidelity mẫu `ring2` **6/6 truy được** (byte 18.785 · 8 heading ĐẠT · falsify 5) | **ĐẠT (spot 3/6 mệnh-đề)** | `stat -c %s sub-ring2-S151.md` = **18785** EXACT · `grep -cE "^### [SG]-[0-9]"` = **8** · file chứa 19 lần chữ "ĐẠT" (bao trọn 8 heading) ⇒ 3 mệnh-đề load-bearing nhất tái-dựng đúng |
| H2-21 | §5-bis **U+FFFD = 0** trên 20 diary + 12 S151 + 6 trio + 4 S152 | 🔴 **TRƯỢT (SỐ SAI — hit LÀNH)** | python `str.count('\ufffd')` (đọc file trực-tiếp, KHÔNG qua shell-quoting) → **1 hit**`agent-memory/harvest-curator/MEMORY.md` char-index **8912** (nội dung: `inv-cb "<FFFD>24.1KB" = m#6 tail-cut artifact tự-bắt`) + **1 hit** ở CHÍNH `sub-harvest-S152.md:124` (nằm TRONG backtick của dòng `**LỆNH:** grep -c …`). **Phán 2/2 hit = LÀNH** (mention/trích artifact — use⟂mention, bài citation-trap S123/S151 tao suýt nộp HIGH oan @S151). **Nhưng "0" là số SAI** ⇒ xem F-4: instrument FFFD của H2 có dấu hiệu **mù** |
| H2-22 | §5-bis `iconv` **VALID 12/12** | **KHÔNG-CHẠM** | tao không chạy lại `iconv`. Hậu-thuẫn gián-tiếp: python `io.open(…, errors='strict').read()` thành-công trên **20/20 diary + 34/34 file run S151+S152** ⇒ 0 `UnicodeDecodeError` (KHÔNG thay iconv được vì đây là phép decode khác) |
| H2-23 | §5-bis moved-not-cut **N/A** (0 `archive/` trong `1b85713`) | **ĐẠT** | `git show --stat 1b85713 \| grep -c "archive/"` = **0** |