# sub-ctx-audit-open-S159 — vai-3 vòng Ctx (SOI-CHUỖI lớp mềm) @bookend OPEN

> Vai: `ctx-audit` (vai-3). Lượt: **@open**, phiên S159 = phiên-LOGIC **L8**.
> PIN nhận đủ (fail-closed pass): `_mind` = `.claude/sessions/session-8/_mind-s-8.md` (12.430 B) · `_context` = `.claude/sessions/session-8/_context-s-8.md` (2.938 B) · run-folder = `.claude/workflows/runs/2026-07-29-S159-bookend-open/` · `_mind` phiên trước = `.claude/sessions/session-7/_mind-s-7.md` (30.305 B, ĐÃ ĐÓNG BĂNG).
> Chế-độ chạy: phiên **0 `/pause` · 0 `/tiep`** tới thời điểm @open ⇒ vai-1 `ctx-curator` và vai-2 `ctx-verifier` **CHƯA từng chạy** ⇒ rơi vào **FALLBACK hồi-tố đầy đủ** (§(ii) 5 khoản + §(iii) 4 khoản tự chạy, không viện "đã có vai khác kiểm").
> Propose-only. Lead single-writer. Vai này KHÔNG sửa `_mind`.

---

## (0) PIN + fail-closed — ĐẠT

Cả 4 path PIN đều tồn tại trên đĩa (`ls` xác nhận). Không glob "mới nhất", không đoán session. Có vật để chấm ⇒ KHÔNG rơi vào nhánh `SKIP-CO-KHAI`.

Glob phụ `*mind*` trong `.claude/sessions/`: chỉ 2 tệp `_mind-s-7.md` và `_mind-s-8.md` — **0 tệp tên sai khuôn** (không có `_mind-s7.md` thiếu gạch). Khoản "tên-sai-phải-NÊU-tên" = sạch.

## MÁY TRƯỚC VAI — đọc nguyên-văn, KHÔNG re-implement

Lệnh đã chạy: `python scripts/session_ctx.py mind-check --session 8`

```
mode=open | target 12430B
(0) enclosure : dat   (1) rào-1 verbatim : dat   (2) rào-2 ts-key : dat   (3) rào-3 secret : dat
(4) con-trỏ E block-top : dat   (5) số-hiệu block : dat   (6) bất-biến |block| vs p : dat
(7) trần mind_ctx_kb : dat (12430B / 32768B)   [phụ-8] trần _context : dat   [phụ-9] A-E + nhãn D : dat
verdict: dat=10 TRUOT=0 co=0 bo-qua-co-khai=0 => exit 0
```

⇒ Máy **CLEAN tuyệt đối**. Theo §(v) điều khoản **thách-CLEAN**, vai này **BẮT BUỘC** phải tự soi ≥1 chỗ máy MÙ trước khi được phép nói "lớp mềm ổn". Các khoản dưới đây là phần đó.

🔴 Ghi nhận bối cảnh lead cấp: block-0 **đã qua 1 vòng sửa** — con-trỏ mục E ban đầu ghi `runs/...` thiếu tiền-tố `.claude/workflows/` ⇒ parent không tồn tại ⇒ máy phép (4) TRƯỢT; lead sửa thành đường đầy đủ rồi mới đạt. Đây là **bằng chứng máy CÓ RĂNG ở phiên này**, và giải thích vì sao `dat=10` không phải "khuôn dễ".

---

## §(i)1 — Block-0 có NỘI-DUNG THẬT? **ĐẠT**

Đòi ≥1 mảnh khuôn/máy không tự sinh được. Tìm thấy **nhiều hơn mức tối thiểu**, cả 3 loại:

- **Tên ý mục D** (`_mind-s-8.md:92`): *"STATUS ghi RAG DOWN nhưng đo được service sống + 5 repo khác index sáng nay, riêng SE cũ 2 tháng ⇒ nên tách 'service chết' khỏi 'SE không được re-index'"* — phân-biệt ngữ-nghĩa này không khuôn nào sinh ra được.
- **Tên ý mục D** (`:93`): *"H6 rộng 3 site (`:224` `:252` `:443`) chứ không phải 1 như HANDOFF ghi"* — 3 số dòng cụ thể, kiểm được.
- **E-verdict cụ thể** (`:99`): `counter 32→33 squash-benign` · `detectors 43 + 8 INFORM` · `distill-shard-probe → IM (15/15)` · `nhip-no-probe → light 5/6 deep 7/15`. Đây là **verdict có số**, không phải metadata.
- **Nhánh-đã-LOẠI có lý do** (`:80`, 3 nhánh ①②③) — mục B viết đúng tinh thần "chống đào lại vòng cũ", không phải câu khuôn.

Không có dấu hiệu scaffold-rỗng đội lốt block. `ts`/hash/HEAD ở `:69` KHÔNG được tính vào phán quyết này.

---

## 🔴 PHÁT HIỆN GỐC — 1 nguyên-nhân, 6 triệu-chứng: **block-0 chụp SAI THỜI ĐIỂM trong nghi-thức**

Đây là trục chính của báo cáo này. Mọi FLAG dưới đây đều **quy về đúng 1 nước đi**, không phải 6 lỗi rời.

### Bằng chứng 1 — luật ordering CÓ THẬT, viết rõ, kèm LÝ DO

`.claude/commands/session-start.md` thứ tự mục trên đĩa:

| Dòng | Mục |
|---|---|
| `:276` | **§2.1.9** bộ-ba trio-memory (các vòng đo @open) |
| `:321` | Phase 3 — REPORT |
| `:356` | **Phase 3.5** — Ctx soft-memory @open |
| `:360` | Phase 3.5 **bước 1** = Lead Write `_mind-s-<N>.md` block-0 |

`session-start.md:358` nói thẳng vì sao Phase 3.5 nằm CUỐI:

> "Trước tiên" = **trước lần dừng đầu tiên** (hub §2: đặt CUỐI nghi-thức mở — **nội dung giàu nhất chỉ tồn tại SAU khi các vòng kiểm đã báo xong**).

⇒ Luật đòi: các vòng đo (§2.1.9, dòng 276) chạy **TRƯỚC**, rồi mới ghi block-0 (dòng 360).

### Bằng chứng 2 — thực tế chạy NGƯỢC lại, đo bằng mtime

```
_mind-s-8.md                       08:32:27   <-- block-0 ghi Ở ĐÂY
sub-lead-stale-open-S159.md        08:46:03   <-- vòng đo ĐẦU TIÊN báo về
sub-tooling-auditor-open-S159.md   08:47:36
sub-lead-gap-open-S159.md          08:55:22
sub-harvest-curator-open-S159.md   08:55:38
harness-eval-return.md             09:06:57
sub-ring1-audit-open-S159.md       09:12:35
sub-ring2-audit-open-S159.md       09:13:06
harness-refine-return.md           09:22:06
harness-audit-return.md            09:26:54   <-- vòng đo CUỐI CÙNG
```

⇒ block-0 ghi **TRƯỚC vòng đo đầu tiên 13 phút 36 giây**, và **TRƯỚC vòng cuối 54 phút 27 giây**.
⇒ Lead chạy **Phase 3.5 bước 1 trước §2.1.9** — đảo đúng thứ tự mà `:358` cấm, vì đúng lý do mà `:358` nêu.

### Bằng chứng 3 — không có ĐƯỜNG VỀ (lỗ cấu-trúc L7 tái phát, ở bookend kia)

`grep "_mind" .claude/commands/session-start.md` = **5 hit**, không hit nào là bước refresh:
`:103` bảng mô-tả tệp · `:166` roster tả vai · `:358` ghi-chú ordering · `:360` ghi block-0 · `:362` spawn `ctx-audit`.

Đây **cùng hình dạng** với `session-7/_end` `khai-thang-3` (*"`session-end.md` không có bước refresh `_mind` @close — `grep '_mind' session-end.md` chỉ ra đúng khoản gọi vai `ctx-audit`"*). Nay đo được ở `session-start.md`: **hình dạng y hệt**.

⇒ **Kết luận cấu-trúc:** lỗ dòng-sống KHÔNG chỉ ở @close như L7 kết. Nó ở **CẢ HAI bookend**. @close thiếu refresh (L7 đã bắt); @open có luật ordering đúng **nhưng không có bước refresh làm lưới đỡ** khi ordering bị đảo. Ghi sớm + không có đường về = **đóng băng ở trạng-thái sai**.

🔸 **Công bằng với lead:** nội-dung lead VIẾT chất lượng cao (xem §(i)1 — 3 loại bằng chứng thật, vượt sàn). Đây **không phải lỗi viết ẩu**, là lỗi **thời điểm chụp**. Và nó rẻ để vá: 1 lượt Write refresh trước cửa dừng đầu tiên.

---

## §(i)2 — CARRY ý-treo từ `_mind-s-7.md` → **FLAG-1 (LOW-MED)**

Tập ý còn sống ở block đỉnh L7 (`_mind-s-7.md` MIND-4 §D, `:95`-`:101`) = **7 ý** (6 `{treo-chờ-anh}` + 1 `{gần-chốt}`).

Đối chiếu với block-0 L8 §D (`_mind-s-8.md:90`-`:94`, 5 ý):

| # | Ý L7 (neo cũ) | Nhãn | Có ở block-0 L8? | Có nhà durable? |
|---|---|---|---|---|
| 1 | Nguồn thứ 4 `SOL-PRO-SP-001` chưa ai đọc (`_mind-s-7.md:95`) | treo-chờ-anh | ❌ vắng | ✅ `docs/HANDOFF.md:18` |
| 2 | 2 đường kết thúc sớm W3 `AllowApproverFinalize`/`CeoApprovalThreshold` (`:96`) | treo-chờ-anh | ❌ vắng | ✅ `docs/HANDOFF.md:18` |
| 3 | 5 câu thiết kế Q3·Q6·Q11 + O-Q1·O-Q2 (`:97`) | treo-chờ-anh | ❌ vắng | ✅ `HANDOFF.md:18` + `STATUS.md:645` |
| 4 | Lỗ hổng an ninh HĐ — "treo CÓ CHỦ ĐÍCH" (`:98`) | treo-chờ-anh | ❌ vắng | ✅ `HANDOFF.md:19` + `STATUS.md:646` |
| 5 | Luật nén `_mind` HỞ + trần (`:99`) | treo-chờ-anh | ✅ qua slot (45) | ✅ `_end` pending-anh |
| 6 | Gate "mở 5 anchor trước mỗi wave" (`:100`) | gần-chốt | ❌ vắng | ✅ `docs/HANDOFF.md:8` (di-trú CÓ CHỦ ĐÍCH) |
| 7 | 22 FLAG governance (42)(43)(44)(E2) (`:101`) | treo-chờ-anh | ✅ qua slot range | ✅ `_end` pending-anh |

🔴 **Phán quyết — FLAG nhẹ, KHÔNG phải mất ý:** **7/7 ý đều CÓ NHÀ durable**, 0 ý bốc hơi khỏi hệ thống. Đây là **thắng lợi của thiết kế di-trú** mà chính `_end` L7 kê (`carry: gate-5-anchor-di-tru-sang-HANDOFF-NEXT-em`) — trái ngược hẳn ca S158 khi 8 ý rơi im lặng.

Cái CÒN THIẾU: block-0 §D **không có 1 dòng con-trỏ** kiểu *"4 ý treo sản-phẩm L7 → xem `HANDOFF.md:18-19`"*. Người đọc `_mind` đơn lẻ (đúng ca vai này tồn tại để phòng) sẽ không biết 4 ý đó tồn tại. Chi phí vá = **1 dòng**.

🔸 **Đối-chứng đã làm, KHÔNG bịa FLAG:** block-0 `:94` ghi *"8 slot NEXT-anh đang mở từ L7 (42)…(48) cộng slot cũ"*. Tôi định FLAG đây là lỗi đếm ((42)…(48) = 7 slot). Truy ra: 7 slot + slot **(41)** `ring5-audit` (mở từ S153, chưa đóng) = **8 — số ĐÚNG**. Ghi lại để cho thấy khoản này đã bị thách và ĐẬU.

## §(i)3 — Đọc output máy: **ĐẠT** (xem khối nguyên-văn ở trên, KHÔNG re-implement)

## §(i)4 — GIEO MỒI-NGẦM cho cửa đóng

**Ý được gieo:** block-0 §D ý #3 (`_mind-s-8.md:92`) —
> *"STATUS ghi RAG DOWN nhưng đo được service sống + 5 repo khác index sáng nay, riêng SE cũ 2 tháng ⇒ nên tách 'service chết' khỏi 'SE không được re-index'"* `{mới-nêu}`

**Vì sao chọn đúng ý này** (3 lý do, không chọn ngẫu nhiên):
1. Nó là ý CHƯA-CHỐT thật sự, và có **hệ-quả trên bề-mặt durable**: `grep -c "RAG DOWN" docs/STATUS.md` = **3** — mâu thuẫn còn sống nguyên trên đĩa, trong khi `run.md` đo *"RAG **sống** 2.449 chunk"*.
2. 🔴 **Nó bị ÉP phải carry**: `run.md` Mirror C1 đóng băng `STATUS.md` trong cửa sổ này ⇒ **không thể vá trong phiên** ⇒ đường sống DUY NHẤT của nó là được mang tiếp. Đúng loại ý dễ rơi im lặng nhất.
3. Nó có thể chấm bằng **nội-dung**, không phụ thuộc số dòng.

🔴 **CHẤM BẰNG GREP NỘI-DUNG, KHÔNG DÙNG NEO SỐ DÒNG** — bài học S158 (neo `:99` mục ngay khi file dịch). Cụm chấm: `RAG DOWN` ∧ (`re-index` ∨ `view-stale-status`).

**Hợp-đồng @close:** ĐẠT nếu ý còn sống ở ≥1 trong {block `_mind` mới · `_end` dòng carry · `WAL next:` · `HANDOFF`} **hoặc** `STATUS.md` đã sửa. **TRƯỢT nếu** biến mất mà `STATUS.md` vẫn `RAG DOWN` ×3 và không dòng khai nào.

🔸 **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ổ**; trong CÙNG cửa sổ này lead đọc được mồi ngay khi scribe tệp này.

---

## §(ii) FALLBACK hồi-tố 5 khoản (phiên 0-pause ⇒ vai-1 `ctx-curator` chưa chạy ⇒ tự chạy đủ)

| # | Khoản | Kết quả |
|---|---|---|
| 1 | 5 mục A-E đủ | **ĐẠT** — `:71/:77/:82/:88/:96` đủ A→E đúng thứ tự; 0 mục trống ⇒ không cần chuỗi `(trống — khai)` |
| 2 | mục E phủ ĐỦ | 🔴 **FLAG-2 HIGH** — xem dưới |
| 3 | đã-chốt = con-trỏ | **ĐẠT** — 2 việc đã chốt (retro-harvest S155/S157) ở `:100` chỉ TRỎ path, không chép nội-dung synthesis. Đúng luật chống 2-sự-thật |
| 4 | 3 rào sạch | **ĐẠT** — máy phép 1-3 `dat`; mắt tôi soi độc lập phần DƯỚI marker đóng luật: 0 dòng `> anh:`, 0 key-line `ts:` đầu dòng, 0 mẫu secret. **Máy KHÔNG hở** |
| 5 | nhãn D đủ | **ĐẠT về CẤU-TRÚC** — 5/5 ý có đúng 1 nhãn có dấu. (Nội-dung nhãn thì sai — xem FLAG-5, đó là khoản khác) |

### 🔴 FLAG-2 (HIGH) — mục E phủ **0/9 lượt spawn**

Mục E hiện có (`_mind-s-8.md:98`):
> `- (chưa spawn vai nào — 5 vòng bookend @open đang treo chờ anh quyết, xem mục D dòng 1)`

Thực tế đĩa + `run.md` (*"9 lượt spawn · 7/7 first-return garble · 6/6 resume trả SẠCH · mất 0 B"*): **9 lượt đã chạy, 9/9 có artifact**.

**Tên từng lượt còn thiếu ở mục E** (persona đòi nêu ĐÍCH DANH, không nêu số tổng):

1. `tooling-auditor` — PASS_WITH_FLAGS 7f — `sub-tooling-auditor-open-S159.md` (15.736 B)
2. `harvest-curator` — GATE-FAIL 9f — `sub-harvest-curator-open-S159.md` (26.134 B)
3. `ring1-audit` — 40Đ/7T — `sub-ring1-audit-open-S159.md` (33.004 B)
4. `lead-stale-auditor` — 5 FLAG (3H/2M), ⚠️ chết #53, 0 END — `sub-lead-stale-open-S159.md` (12.054 B)
5. `lead-gap-auditor` — 8 FLAG (3H/5M) — `sub-lead-gap-open-S159.md` (24.741 B)
6. `ring2-audit` — 13Đ/0T — `sub-ring2-audit-open-S159.md` (40.196 B)
7. `harness-eval` — MIXED, 4 trục REGRESSION — `harness-eval-return.md` (7.714 B)
8. `harness-refine` — 2 action / 1 ESCALATE / 10 BÁC / 5 NHƯỜNG — `harness-refine-return.md` (16.550 B)
9. `harness-audit` — `harness-audit-return.md` (landed 09:26:54)

Cộng engine-run/máy-$0: mục E `:99` CÓ ghi 5 máy — khoản này lead làm ĐÚNG. Thiếu là **phần spawn**, và thiếu **toàn bộ**.

🔴 **Vì sao đây là HIGH chứ không phải sổ sách vặt:** mục E là **dòng-sống** — thứ DUY NHẤT trong lớp mềm trả lời *"phiên này đã đốt những vai nào, ra verdict gì"*. Ở trạng thái hiện tại nó trả lời **"chưa vai nào"** cho một phiên đã đốt 9 spawn + 6 resume. Đây không phải thiếu-sót, là **câu trả lời SAI**, và nó sai theo **hướng trấn an**.

### 🔸 FLAG-6 (MED) — nguồn ĐỐI-CHIẾU của chính khoản 2 bị THỦNG: 3/9 lượt nằm ngoài lưới `sub-*.md`

Persona §(ii)2 bảo tôi đối chiếu mục E với `runs/<run-id>/sub-*.md`. Tôi kiểm chính cái lưới đó:

`scripts/governance-detectors.ps1` dùng `-Filter 'sub-*.md'` ở **2 chỗ độc lập**: `:1095` (evidence-of-run) và `:1760` (C11(b) diary-delta).

Nhưng 3 return của trio đặt tên khác khuôn: `harness-eval-return.md` · `harness-refine-return.md` · `harness-audit-return.md` — **không khớp `sub-*.md`**.

⇒ Ai điền mục E bằng cách glob `sub-*.md` (đúng cách persona tôi kê) sẽ ra **6, không phải 9** — và **thiếu đúng 3 lượt đắt nhất**, im lặng. Lưới dùng để bắt thiếu-sót lại chính là thứ tạo ra thiếu-sót.

🔸 **Khai ranh-trục:** hệ-quả *detector-coverage* của việc này thuộc trục `ring1-audit`/tooling, KHÔNG phải tôi — tôi **không** phán về nó. Phần thuộc tôi và chỉ phần đó: **nguồn đối-chiếu của mục E lossy 3/9**. Bàn giao phần kia cho vòng V1.

---

## §(iii) FALLBACK 4 khoản ĐỐI-CHIẾU (phiên 0-tiep ⇒ vai-2 `ctx-verifier` chưa chạy ⇒ tự chạy đủ)

### 🔴 FLAG-3 (HIGH) — khoản 1: mục B (hướng-tiếp) LỆCH `WAL next:` ⇒ **TIN SỔ MÁY**

| Nguồn | Nội dung |
|---|---|
| `_mind-s-8.md:79` (mục B) | *"Tiếp = trình anh MASTER-CHECKLIST + **xin quyết 2 việc**: (1) có bắn 5 vòng bookend @open không · (2) chọn arc sản-phẩm cho L8"* |
| `.claude/WAL.md` `next:` | *"chờ 3 vai → scribe → trio nấc 2+3 tuần tự → ctx-audit → hợp nhất FLAG → trình anh disposition TỪNG DÒNG (không số tổng)"* |

🔴 **Cả 2 câu hỏi mục B định "xin quyết" thì ANH ĐÃ QUYẾT RỒI.** `run.md` §Uỷ quyền: *"anh chốt @S159, AskUserQuestion: ❶ **Chạy đủ 5 vòng** bookend @open ❷ Arc L8 = **vá 2 chỗ hở spec KHKK** (H5 + H6)"*.

Theo persona: lệch ⇒ **tin `WAL`** (sổ chốt), `_mind` là lớp mềm ⇒ giương cờ. Mục B đang mô tả một ngã ba đã đi qua từ lâu.

### 🔴 FLAG-4 (MED-HIGH) — khoản 2: mục C mang **con số đã bị đĩa phản chứng**

`_mind-s-8.md:86` (mục C) + `:93` (mục D#4) đều ghi **H6 rộng 3 site**.

Đĩa nay nói **4 site**:
- `run.md` §ARC: *"**H6 — 4 site** (không phải 1 như HANDOFF, cũng không phải 3 như lead đếm ban đầu): `:225` cơ-chế · `:252` nhãn bảng wave · `:313` W2 `DbInitializer` · `:465` dòng changelog"*
- `WAL.md` chain: *"H6 **4 site** (không phải 1 như HANDOFF, không phải 3 như lead đếm đầu)"*
- Đối-chứng ĐỘC LẬP của tôi: `grep -n "IsVisible"` trên spec trả về `:313` = *"🔴 `DbInitializer` **CẤP `CanRead`** cho role đích (BCH/PRO/CCM) — **KHÔNG** phải 'bật `IsVisible=1`'"* — site thứ 4 CÓ THẬT.

⇒ Lớp mềm giữ **3**, đĩa đã chốt **4**. Số sai nằm ở đúng chỗ hay bị đọc lại nhất.

🔸 **Đối-chứng công bằng — tôi BÁC một FLAG của chính mình:** block-0 neo `:224` `:252` `:443`; run.md neo `:225` `:252` `:313` `:465`. Nhìn qua tưởng 2/3 neo sai. Truy ra: bản vá ARC chèn thêm dòng ở `:289` và `:362` ⇒ mọi neo sau đó **dịch xuống** (`:224`→`:225` = +1 · `:443`→`:465` = +22, khớp lượng chèn). ⇒ **lệch neo là DRIFT DO CHÍNH BẢN VÁ, không phải lead ghi sai.** Chỉ **con số 3→4** mới là defect thật. Ghi rõ để lead không đi sửa nhầm 2 thứ đúng.

### 🔴 FLAG-5 (HIGH) — khoản 3: **4/5 ý mục D đã bị thực-tế vượt qua mà nhãn còn nguyên**

| Ý (neo) | Nhãn hiện tại | Đĩa nói gì | Cần |
|---|---|---|---|
| `:90` Xung đột luật bookend 5 vòng | `{treo-chờ-anh}` | **ĐÃ QUYẾT** — `run.md` ❶ *"anh chọn nhánh AUTO"*; 5 vòng đã chạy xong | đổi nhãn + trỏ `run.md` |
| `:91` Arc sản-phẩm L8 | `{treo-chờ-anh}` | **ĐÃ QUYẾT + ĐÃ LÀM XONG** — `run.md` ❷ + `WAL` `[x] ARC vá spec KHKK` | đổi nhãn + trỏ |
| `:92` STATUS ghi RAG DOWN | `{mới-nêu}` | **ĐÃ PHÂN LOẠI** — `WAL`: *"lead nhận 3 lỗi: … phân-loại RAG sai (thật = `view-stale-status`)"* | đổi nhãn (🔴 đây là **mồi-ngầm**, xem §(i)4) |
| `:93` H6 rộng 3 site | `{gần-chốt}` | **ĐÃ XONG + số đã đổi 3→4** | đổi nhãn + sửa số |
| `:94` 8 slot NEXT-anh (42)…(48) | `{treo-chờ-anh}` | ✅ vẫn mở thật | **giữ nguyên — ĐÚNG** |

⇒ **4/5 = 80% mục D lệch thực-tế chỉ trong 1 cửa sổ.** Đây là hệ quả trực tiếp của phát-hiện gốc: nhãn đóng băng ở 08:32, quyết định của anh tới sau đó.

🔴 Theo persona tôi **chỉ NÊU, không đổi nhãn** — đổi là việc lead làm ở block kế.

### ĐẠT — khoản 4: con-trỏ giải được

Máy phép (4) chấm `dat` cho 2 con-trỏ. Tôi đối-chứng độc lập bằng `ls`, không tin suông:
- `.claude/workflows/runs/2026-07-27-S155-pe-delete-approver/implement-synthesis.md` — **11.086 B** ✅
- `.claude/workflows/runs/2026-07-28-S157-ke-hoach-ky-ket-hd/review-synthesis.md` — **12.916 B** ✅

Cả 2 giải được thành **tệp thật có ruột**, không phải thư-mục cha. 0 ca `đang-chờ`. Ghi nhận: đây chính là chỗ máy đã BẮT lead 1 lần (thiếu tiền-tố `.claude/workflows/`) và lead đã sửa — răng thật, đã cắn.

---

## §(iv) BẤT-BIẾN CHUỖI — tự đếm ĐĨA, không tin lời khai

Tôi tự đếm bằng `ls` trên `.claude/sessions/session-8/`, **không đọc số của máy trước**:

- `_pause-*.md` = **0** · `pause-*.md` = **0** (dual-accept, mirror ORPHAN-L) ⇒ **p = 0**
- `## MIND-\d+` thật = **1** (MIND-0; placeholder `## MIND-<k>` trong BLOCK-SCHEMA **không tính** — bài học `_end` L7 `khai-thang-1`) ⇒ **|block| = 1**
- Kỳ vọng `|block| ∈ {p, p+1}` = **{0, 1}** ⇒ **1 ∈ {0,1} ✅**

**So với số máy in:** máy phép (6) in `|block| = 1 ; p = 0`. **KHỚP TUYỆT ĐỐI** — không phải in cả hai số.

Tự-khai `markers:` / `mind-blocks=`: session-8 **chưa có `_end`** ⇒ không có dòng tự-khai để cross-check. Máy cũng khai đúng vậy (*"không có `_end` => bỏ qua"*). Đĩa vẫn là nguồn duy nhất. **ĐẠT.**

---

## §(v) THÁCH-CLEAN — bắt buộc thi hành vì máy 0 trượt 0 cờ

Máy in `dat=10 TRUOT=0 co=0` ⇒ theo persona tôi **KHÔNG được phép** nói "lớp mềm ổn" trước khi tự soi chỗ máy MÙ. Đã soi **3 chỗ**, cả 3 ĐỀU ĂN:

1. **1 mục E vs `runs/`** → ra FLAG-2 (0/9 lượt) + FLAG-6 (lưới đối-chiếu thủng 3/9).
2. **Ý mục D vs WAL/run.md** → ra FLAG-5 (4/5 nhãn lệch) + FLAG-3 (mục B lệch `next:`).
3. **Số trong mục C vs đĩa** → ra FLAG-4 (H6 3 vs 4).

🔴 **Vì sao máy mù cả 3:** `mind-check` hỏi *"mục E có con-trỏ giải được không"* — mục E CÓ 2 con-trỏ hợp lệ (2 việc retro-harvest) nên phép (4) `dat`. Máy **không có cách nào** hỏi *"mục E có phủ HẾT số lượt đã chạy không"* vì nó không biết bao nhiêu lượt đã chạy. Tương tự phụ-9 hỏi *"ý mục D có nhãn chưa"*, không hỏi *"nhãn có còn ĐÚNG không"*. **Đây đúng địa hình ngữ-nghĩa mà vai này tồn tại để phủ** — và là biến-thể của cơ-chế `n=2` tôi ghi ở S158 (máy canh HÌNH DẠNG, không canh SỰ THẬT).

---

## KIỂM-VẾT vai-1 / vai-2 — KHÔNG áp dụng, khai rõ

Phiên **0 `/pause`** (`_context-s-8.md:47` = *"(chưa có PAUSE — entry đầu append @`/pause` đầu tiên)"*) và **0 `/tiep`** ⇒ `ctx-curator` và `ctx-verifier` **chưa từng chạy ở phiên này** ⇒ 0 vết để kiểm. Đã **tự chạy hồi-tố đầy đủ** §(ii) 5 khoản + §(iii) 4 khoản ở trên, **không viện "đã có vai khác kiểm"**. Lưới không thủng ở ca 1-cửa.

---

## VERDICT

**`CTX-AUDIT: TRUOT — @open — 6 FLAG`**

🔴 **Khai minh bạch cơ-sở chấm, để lead có thể phản-bác grade mà vẫn dùng được 6 FLAG:**
- **0/4 trigger TRƯỢT liệt-kê trong persona nổ**: mục A-E đủ (khoản ii-1 ĐẠT) · nhãn D đủ cấu-trúc (ii-5 ĐẠT) · con-trỏ không kẹt `đang-chờ` (iii-4 ĐẠT) · bất-biến chuỗi khớp (iv ĐẠT).
- **TRUOT của tôi dựa trên 2 chân:** (a) khoản (ii)2 phủ **0/9** — không phải "thiếu vài lượt" mà thiếu TOÀN BỘ, và sai theo hướng trấn an; (b) luật ordering `session-start.md:358` **có thật, nêu rõ lý do, và bị đảo** — đo được bằng mtime, không suy diễn.
- Nếu lead thấy (a)+(b) chỉ đáng FLAG vì block-0 **đúng tại thời điểm ghi**, tôi ghi nhận lập luận đó là hợp lý. Tôi vẫn chấm TRUOT vì tôi chấm **độ dùng được của ARTIFACT cho mục đích nạp-lại-trạng-thái**, không chấm ý-định của lead: một cửa sổ mới đọc tệp này hôm nay sẽ bị dẫn sai ở mục B, mục C, 4/5 ý mục D và toàn bộ mục E.

**Xếp hạng để vá — rẻ trước:**

| Ưu tiên | FLAG | Vá |
|---|---|---|
| 1 | FLAG-2 + FLAG-5 + FLAG-3 + FLAG-4 | **1 lượt Write duy nhất**: chèn MIND-1 refresh (9 dòng mục E + đổi 4 nhãn D + cập nhật B/C + số H6 3→4). Đóng 4 FLAG cùng lúc |
| 2 | FLAG-6 | đổi tên 3 tệp trio thành `sub-harness-*-open-S159.md`, **hoặc** ghi nhận lưới `sub-*.md` lossy và bàn cho V1 |
| 3 | FLAG-1 | +1 dòng con-trỏ `HANDOFF.md:18-19` vào §D |
| 4 | GỐC (cấu-trúc, tái mỗi phiên) | `session-start.md` thêm bước refresh `_mind` sau §2.1.9 — **hoặc** dời rõ Phase 3.5 bước 1 xuống sau vòng đo. Đối xứng với lỗ @close mà L7 đã kê |

🔴 **Propose-only.** Vai này KHÔNG sửa `_mind`, KHÔNG tick counter, KHÔNG seed diary, KHÔNG commit. Lead single-writer quyết áp hay bác từng dòng.

🔸 **Caveat bắt buộc:** vai này khai `tools:` không Write/Edit — đó là **mô-tả ý-định**, KHÔNG phải cơ-chế chặn; runtime VẪN cấp Write (tệp này là bằng chứng) và tôi giữ `Bash` = kênh ghi mở. Backstop THẬT = git-diff + commit-gate của lead. Ghi-đĩa ở đây là **chống #53 có chủ đích theo lệnh lead**, nằm trong run-folder, 0 chạm `_mind`.

🔸 **Tự-khai lỗi vận-hành của chính vai này (giữ làm nếp, S158):** lượt Write đầu của tệp này lọt 2 dòng thẻ XML thừa (`</content>`/`</invoke>`) xuống **DƯỚI** dòng END ⇒ END không còn là dòng cuối. Tự phát hiện khi verify `tail -1`, đã cắt. Đúng loại defect tôi vừa chấm người khác (`lead-stale` 0 END) ⇒ khai ra thay vì lặng lẽ sửa. **Bài:** verify END phải dùng `tail -1`, không dùng "có thấy END trong file".

<!-- END sub-ctx-audit-open-S159 · TOTAL=16 diem -->
