diff --git a/.claude/workflows/runs/2026-07-26-S154-bookend-open/sub-ctx-audit-open-S154.md b/.claude/workflows/runs/2026-07-26-S154-bookend-open/sub-ctx-audit-open-S154.md new file mode 100644 index 0000000..405d702 --- /dev/null +++ b/.claude/workflows/runs/2026-07-26-S154-bookend-open/sub-ctx-audit-open-S154.md @@ -0,0 +1,217 @@ +# sub-ctx-audit @open — S154 / phiên-LOGIC L7 + +> Vai-3 vòng Ctx. **Lần chạy runtime ĐẦU TIÊN** của vai (land @S153, chưa spawn lần nào) — dogfood `[carry:ctx-t9-dogfood]`. +> Propose-only. Ghi-đĩa-trong-lúc-làm (chống #53). Mỗi mục ghi NGAY khi xong, không gom cuối. + +--- + +## (0) PIN — fail-closed: GIẢI ĐƯỢC + +| Pin | Giá trị lead pin | Đĩa | Kết | +|---|---|---|---| +| `_mind` | `.claude/sessions/session-7/_mind-s-7.md` 14.707 B | tồn tại, **14707 B** khớp | OK | +| `_mind` trước | `.claude/sessions/session-6/_mind-s-6.md` block-0 @:69 | tồn tại, `## MIND-0` đúng dòng 69 | OK | +| run-folder | `.claude/workflows/runs/2026-07-26-S154-bookend-open/` | tồn tại, 12 tệp | OK | +| lượt | `@open` | — | OK | + +Glob `*mind*` toàn `.claude/sessions/`: **đúng 2 tệp**, cả 2 đúng khuôn `_mind-s-.md` (`session-6`, `session-7`). **Không có tệp tên-sai** kiểu `_mind-s6.md` (thiếu gạch) lẩn trong thư mục. Không tự glob "mới nhất" — chỉ dùng path lead pin. + + + +--- + +## (3) MÁY chạy TRƯỚC vai — tao ĐỌC, KHÔNG re-implement + +Tao tự chạy lại đúng 1 lệnh đọc (`$0`, read-only) để lấy **nguyên-văn**, không nhận số qua relay: + +``` +python scripts/session_ctx.py mind-check --session 7 + verdict: dat=10 TRUOT=0 co=0 bo-qua-co-khai=0 => exit 0 +``` + +4 mức nguyên-văn: **đạt=10 · TRƯỢT=0 · cờ=0 · bỏ-qua-có-khai=0**. Khớp số lead pin (dat=10 TRUOT=0, exit 0) — **không có lệch relay**. + +Máy đã phủ: enclosure(0) · rào-1/2/3 · con-trỏ E(4) 11/11 `dat` · số-hiệu(5) · bất-biến(6) · trần(7) · phụ-8 `_context` · phụ-9 A-E+nhãn D. **Tao KHÔNG chấm lại 9 phép này.** + +2 dòng máy tự khai đáng ghi (không phải finding của tao, là ngữ-cảnh): +- `(6)`: `|block| = 1 ; p (DEM DIA) = 0` — máy tự đếm đĩa, kỳ vọng `{0,1}`. Tao đếm độc-lập: `_pause-*.md` = 0, `pause-*.md` = 0 trong `.claude/sessions/session-7/` (thư mục chỉ có `_context-s-7.md` + `_mind-s-7.md`). **Số tao khớp số máy** — không có lệch để in 2 số. +- `(4)`: máy tự KHAI kẽ *"TÊN-TEP-SAI trong thu-muc THAT doc thanh dang-cho o cua mo"* — đúng, và ở lượt này kẽ đó **không bị chạm** (0 tệp tên-sai, đã glob ở mục 0). + +--- + +## (i)(1) block-0 có NỘI-DUNG THẬT không — **ĐẠT** + +Sàn: ≥1 mảnh khuôn/máy **không tự sinh được**. Metadata `ts`/hash/heading **không tính** (tao loại trước khi chấm). + +Tìm được **nhiều hơn 1**, dẫn 3 mảnh chắc nhất: +- `:91` tên một ý mục D: *"Row ngoài `$canonRows`: mở rộng tập máy canh hay bỏ số + trỏ nguồn sống theo khuôn B1"* — ý có LẬP-TRƯỜNG (*"em nghiêng phương án 2"*), khuôn không sinh được. +- `:107` E-verdict cụ thể `46Đ/2T/5KC trên 53 claim`. +- `:75` mệnh-đề hệ-thống *"row có máy canh thì đúng, row không có máy canh thì trôi — 3/3 row ngoài `$canonRows` đều lệch, 6/6 row trong tập đều đúng"* — số + kết luận, không phải scaffold. + +⇒ **KHÔNG phải scaffold-rỗng đội lốt block.** ĐẠT. + +### Đối-chứng THẬT của mục E (máy chỉ chấm con-trỏ RESOLVE, mù nội-dung verdict) + +Máy `(4)` chỉ hỏi *"tệp có tồn tại không"*. Tao hỏi *"verdict ghi trong `_mind` có ĐÚNG cái tệp đó nói không"*. Đọc END-line + thân từng tệp: + +| Mục E | `_mind` ghi | Đĩa nói | Kết | +|---|---|---|---| +| `:103` tooling | `PASS_WITH_FLAGS 3 finding`, 1 bị lead+ring1 bác | `TOTAL=3 FINDING` @:143; ring1 `:59` *"H1 F-3 = TRƯỢT (dương-giả). Lead bác ĐÚNG"* | ĐẠT (cả vế "1 bị bác") | +| `:104` harvest | `GATE-PASS-WITH-FLAGS 6 finding` | `TOTAL=6 FINDING`; thân: `VERDICT: GATE-PASS-WITH-FLAGS — 6 finding` | ĐẠT verbatim | +| `:105` lead-stale | `5 FLAG` (3H·1M·1L) | FLAG-1 HIGH · 2 HIGH · 3 HIGH · 4 LOW · 5 MED = **3H·1M·1L** | ĐẠT (tao đếm lại từng FLAG) | +| `:106` lead-gap | `5 FLAG` (1H·2MH·2M) | FLAG-1 HIGH · 2 MED-HIGH · 3 MED-HIGH · 4 MED · 5 MED = **1H·2MH·2M** | ĐẠT | +| `:107` ring1 | `46Đ/2T/5KC trên 53 claim` | END `TOTAL=53 CLAIM · ĐẠT=46 TRƯỢT=2 KHÔNG-CHẤM=5` | ĐẠT verbatim | +| `:108` ring2 | `17Đ/1T/1KC trên 19 claim` + M-1 thật | END `TOTAL=19 CLAIM · ĐẠT=17 TRƯỢT=1 KHÔNG-CHẤM=1`; thân xác nhận 1 M-1 (`STATUS:449 FE pages` 68↔66) | ĐẠT | +| `:109` eval | `MIXED 12 signal` | END `TOTAL=12 SIGNAL · VERDICT=MIXED` | ĐẠT | +| `:110` refine | `3 action/8 bác/3 escalate` | END `TOTAL=3 ACTION · BÁC=8`; thân: `3 ACTION · 3 ESCALATE · 8 BÁC · 4 NHƯỜNG` | ĐẠT (rơi "4 NHƯỜNG" — nén 1 dòng, chấp nhận) | +| `:111` audit | `68Đ/8T trên 78 claim` | END `TOTAL=78 CLAIM · ĐẠT=68 TRƯỢT=8`; thân: *"2 ô KHÔNG-CHẤM để trống thật"* | ⚠️ **FLAG-3** (dưới) | + +**9/9 verdict khớp đĩa** — đây là kết quả TỐT và tao ghi rõ: lead chép verdict **không bịa, không làm tròn**. Chỗ duy nhất lệch là hình-thức mẫu-số ở `:111`. + + + +--- + +## (i)(2) CARRY từ `_mind-s-6.md` — 5/5 ý mang tiếp, **0 ý rơi trọn**, nhưng **1 ý mang SAI CHIỀU** + +Bảng đối-chiếu từng ý (neo `file:line` cả 2 đầu): + +| # | Ý @S6 | Nhãn S6 | Ở S7? | Nhãn S7 | Kết | +|---|---|---|---|---|---| +| 1 | Trần `mind_ctx_kb`=32KB đủ không — `_mind-s-6.md:92` | treo-chờ-anh | ✅ `:94` | treo-chờ-anh | ĐẠT, có delta | +| 2 | Nhịp spawn `ctx-curator` @mỗi pause đắt không — `:93` | treo-chờ-anh | ✅ `:95` | treo-chờ-anh | ⚠️ **FLAG-4** (rơi neo số) | +| 3 | `ring5-audit` build ngay hay chờ VIPIX — `:94` | treo-chờ-anh | ✅ `:96` | treo-chờ-anh | ĐẠT | +| 4 | Điểm mù tự-quy-chiếu cặp H24 — `:95` | đang-cãi | ✅ `:97` | đang-cãi | 🔴 **FLAG-1** (kết luận NGƯỢC + mất phép thử) | +| 5 | Mẫu-số/lời-khai-tiêu-chí — `:96` | mới-nêu | ✅ `:98` | **đang-cãi** | ĐẠT — đổi nhãn CÓ căn cứ | + +Ý #5 đổi nhãn `mới-nêu → đang-cãi` có căn-cứ đo được: `sub-ring2-open-S154.md` chấm TRƯỢT phần khai-phạm-vi của `lead-gap` vì *lời khai không vét cạn* ⇒ ý được tranh-luận thật, không phải tự nâng cấp. **Không flag.** + +--- + +## 🔴 FLAG-1 — `carry-ket-luan-nguoc` — **HIGH** — ý D#4 kết luận NGƯỢC với kết quả của chính phép thử được carry + +**Đây là finding load-bearing của lượt này. Máy mù 100%** (con-trỏ resolve, nhãn đủ, cấu-trúc đủ ⇒ 10/10 xanh). + +**Phép thử được đặt ra @S153** — `.claude/workflows/runs/2026-07-26-S153-bookend-close/sub-ring2-close-S153.md:137`: +> điểm mù **được KHAI, chưa được CHỨNG là đã đóng** … Bằng-chứng đóng thật chỉ có ở lượt tương-lai khi cặp **tự** bắt một lệch trong `.claude/agents/lead-*-auditor.md` mà không ai chỉ. ⇒ giữ mở làm phép thử cho S154. + +`_mind-s-6.md:95` ghi đúng điều đó: *"ring2 đề phép thử cho S154"*. + +**Phép thử ĐÃ CHẠY VÀ ĐÃ ĐẠT ngay trong cửa-sổ này** — 3 điều kiện khớp trọn: + +| Điều kiện phép thử | Đĩa S154 | | +|---|---|---| +| "cặp **tự** bắt" | `sub-lead-stale-open-S154.md:20` FLAG-2 do **chính vai-STALE** (thành viên cặp H24) nêu | ✅ | +| "một lệch trong `.claude/agents/lead-*-auditor.md`" | `:22` view = `lead-stale-auditor.md:4` **VÀ** `lead-gap-auditor.md:4` — đúng 2 tệp đó, đúng bề-mặt tự-quy-chiếu | ✅ | +| "mà không ai chỉ" | `:27` tự-phê: *"đây là lượt đầu tao đưa `.claude/agents/lead-*-auditor.md` vào tập-đo theo đúng bài đã học — và nó ra ca THẬT ngay lượt đầu"* | ✅ | +| (bonus) vai KIỂM xác nhận | `sub-ring2-open-S154.md:63` S-2 `view-residual-asym` HIGH → **ĐẠT** | ✅ | + +**Nhưng `_mind-s-7.md:97` ghi:** +> *"phiên này ring2 lại bắt M-1 mà cả 2 con-đo cùng sót ⇒ **nghiêng hẳn về kết luận cặp H24 KHÔNG tự đóng được điểm mù của mình**, phải có vòng KIỂM {đang-cãi}"* + +**2 lỗi chồng nhau:** + +1. **Chiều kết luận ngược với chứng-cứ trong CÙNG run-folder.** Phép thử hỏi *"cặp có tự bắt được lệch trên bề-mặt tự-quy-chiếu không?"* — S154 trả lời **CÓ**, ca THẬT, mức HIGH, được ring2 duyệt ĐẠT. Block-0 lại chốt *"KHÔNG tự đóng được"*. +2. **Phép thử biến mất khỏi lớp mềm.** Chữ *"phép thử"* có ở `_mind-s-6.md:95`, **0 hit** trong toàn `_mind-s-7.md`. Cửa-sổ sau nạp lại sẽ không biết là có một nghiệm-thu đang treo, càng không biết nó đã đạt ⇒ phép thử **chết im lặng** — đúng loại chết mà lớp mềm sinh ra để chặn. + +**Vế công-bằng (tao đọc bản mạnh nhất của block-0):** mệnh-đề *"ring2 lại bắt M-1 mà cả 2 con-đo cùng sót"* là **THẬT** (M-1 = `STATUS:449 FE pages` 68↔66, `sub-ring2-open-S154.md` bổ-sung). Và vế *"phải có vòng KIỂM"* vẫn **đúng độc lập**. Nhưng đó là chứng-cứ cho một mệnh-đề KHÁC (*"cặp có vét cạn không"* — không con-đo nào vét cạn, nên vòng KIỂM luôn cần) chứ không phải mệnh-đề mà phép thử đo (*"cặp có tự-soi được chính mình không"*). Trộn 2 mệnh-đề làm kết luận âm trông mạnh hơn chứng-cứ cho phép, **và trả giá bằng việc xoá một thắng lợi đo được**. + +**Vì sao HIGH, không phải cosmetic:** `_mind` là lớp đọc TRƯỚC, giàu ngữ-cảnh nhất khi nạp lại — chính `_mind-s-7.md:30` (lý-do rào-1) tự viết *"khi 2 bản lệch thì bản mềm … sẽ thắng bản durable"*. Một kết luận sai chiều nằm ở đây sẽ **thắng** `sub-lead-stale-open-S154.md:27` ở mọi cửa-sổ sau, và nó đang chống lại đúng cái vá mà 2 phiên vừa bỏ công làm. + +**resolve (propose-only — lead ghi, tao KHÔNG sửa):** viết lại ý D#4 ở block kế thành 2 vế tách bạch: (a) *phép thử tự-quy-chiếu S153 → **ĐẠT** @S154, neo `sub-lead-stale-open-S154.md:20,27` + `sub-ring2-open-S154.md:63`*; (b) *vét-cạn vẫn hở (M-1 `STATUS:449`) ⇒ vòng KIỂM giữ nguyên*. Nhãn nên lật `đang-cãi → gần-chốt` cho vế (a). + +--- + +## FLAG-2 — `mau-so-co-lai` — **MED** — probe khai `2/2` trong khi carry S6 hẹn **3 vai** + +- `_mind-s-6.md:81` (hướng-tiếp): *"T9 dogfood 4-cửa THẬT … + **spawn-probe cả 3 vai** + mồi-ngầm xuyên-cửa-sổ"* — mẫu-số hẹn = **3**. +- `_mind-s-7.md:112` + `:73`: *"registry-probe `ctx-curator` + `ctx-verifier` — **2/2 ALIVE**"*. Nguồn: `bookend-open-synthesis.md:93` cũng ghi `2/2 ALIVE`. +- Vai thứ 3 = **`ctx-audit` (chính tao)**. Không có dòng nào khai vì sao nó ra khỏi mẫu-số. + +**Lệch:** `3` (hẹn) → `2` (đo), trình bày thành `2/2` = **100% sạch**. Không ai nói dối: probe của tao không chạy được ở nhịp đó vì tao là vai chạy @bookend chứ không phải @pause/@tiep — nhưng *lý-do đó không có trên đĩa*, nên bề-mặt đọc thành "đủ". + +**Vì sao đáng ghi:** đây đúng lớp mà **chính block-0 đang tranh-luận ở ý D#5** (`:98` *"Bắt mọi con-đo khai mẫu-số kèm tập-bù"*) — lớp mềm vừa nêu luật vừa vi phạm luật đó ở mục A của chính nó. Cùng họ với `feedback_absence_looks_like_clean` (auto-memory) và với M-1 mà ring2 vừa bắt. + +**Nhẹ đi ở chỗ:** lượt spawn NÀY của tao chính là nghiệm-thu vai-3, nên nợ được trả trong cùng phiên — nhưng phải **ghi ra**, không để tự khớp. + +**resolve:** `:112` đổi thành `2/3 probe @nhịp registry (vai-3 ctx-audit nghiệm-thu bằng spawn THẬT @bookend, xem sub-ctx-audit-open-S154.md)`. + +--- + +## FLAG-3 — `mau-so-bat-doi-xung` — **LOW-MED** — mục E khai KHÔNG-CHẤM cho ring1/ring2 nhưng NUỐT của harness-audit + +- `:107` ring1 → `46Đ/2T/**5KC**` ✅ · `:108` ring2 → `17Đ/1T/**1KC**` ✅ · `:111` audit → `68Đ/8T trên 78 claim` — **thiếu KC**. +- `68 + 8 = 76 ≠ 78`. Hai ô còn lại có thật: `harness-audit-return.md` đuôi ghi *"2 ô KHÔNG-CHẤM để trống thật, không gật cho đủ"*. +- Lead **chép trung thành** END-line của audit (END đó cũng không in KC) ⇒ gốc ở con-đo, nhưng hệ quả nằm ở `_mind`: cùng một mục E, **2 khuôn mẫu-số khác nhau**, đọc lướt tưởng audit phủ trọn 78. +- **resolve:** `:111` → `68Đ/8T/2KC trên 78 claim`. (Và nếu (44) END-line lên luật thì bắt luôn trường KC.) + +--- + +## FLAG-4 — `carry-mat-neo-dinh-luong` — **LOW** — câu hỏi chi-phí mất đúng con số làm nó trả lời được + +- `_mind-s-6.md:93`: *"Nhịp spawn `ctx-curator` @MỖI pause có đắt quá không (**~100K tok/spawn**) — núm hạ đã để sẵn"*. +- `_mind-s-7.md:95`: *"… có đắt quá không — núm hạ đã để sẵn"* — **neo `~100K tok/spawn` rơi**. +- Ý sống, nhãn giữ đúng, nhưng câu hỏi *"đắt quá không"* mà không còn đơn-giá thì cửa-sổ sau **không quyết được** nếu không đào lại `_mind-s-6`. Với ý `treo-chờ-anh` (chờ owner quyết) thì mất đơn-giá = mất chính thứ owner cần để quyết. +- **resolve:** trả lại `(~100K tok/spawn)` vào `:95` ở block kế. + + + +--- + +## (4) Mục E phủ ĐỦ mọi spawn/engine-run — **ĐẠT (11/11, 0 lượt thiếu)** + +Tao **đếm đĩa**, không tin lời khai của block. + +**Mẫu-số dựng từ 3 nguồn độc-lập:** +1. `ls` run-folder = **12 tệp** → trừ `run.md` (sổ vòng, không phải lượt) + 2 synthesis (lead-written) = **9 tệp lượt-vai**. +2. `run.md` §"Vòng chạy": V1 (3 spawn) + V2 (3 spawn) + V3 (3 spawn) + V4 **NO-OP có khai** (probe IM ⇒ không fire, không spawn) + V5 (script, không phải spawn) = **9 spawn**. +3. `.claude/WAL.md` — **0 dòng `wf:`**; sổ đã reset @closeout S153 (11 dòng, `goal: (trống — không có mạch dở)`). `ls -d runs/*S154*` = **đúng 1 folder** ⇒ **0 engine-run** (không hmw / không `/fable-real`) trong cửa-sổ này. + +**Mẫu-số chốt = 9 spawn + 0 engine-run.** Mục E có 11 dòng = 9 dòng vai + 1 dòng registry-probe + 1 dòng synthesis ×2. **Phủ trọn, 0 lượt thiếu tên.** + +Đối-chứng chéo: máy `(4)` chấm **11 con-trỏ** — khớp đúng cách đếm của tao (9 dòng vai ×1 path + dòng probe 0 path + dòng synthesis ×2 path = 11). + +2 ca "vắng mặt" tao kiểm riêng vì vắng-mặt trông giống ổn: +- **`ring4-audit` không có dòng E** — ĐÚNG: V4 không fire nên không có lượt. Và NO-OP **có được khai**, ở mục A `:73` (*"V4 IM"*) ⇒ không phải rơi im lặng. +- **`ctx-audit` (tao) không có dòng E** — ĐÚNG tại thời điểm block-0 (19:12); tao spawn sau. Lead scribe dòng này khi tao trả. + +**Bất-biến block (máy KHÔNG canh được — cần git, đúng lane của tao):** `git log -- _mind-s-7.md` = **đúng 1 commit** (`82a0457`, 19:28), diff = `new file mode` toàn tệp ⇒ **0 lần rewrite sau khi land**. Đợt lead sửa 11 con-trỏ (do máy bắt thiếu tiền-tố `.claude/workflows/`) xảy ra **trước** commit đầu ⇒ không phải mutation của block đã chốt. `git status` session-7 = **sạch**. + + + +--- + +## (i)(4) MỒI-NGẦM — gieo cho @close + +**Mồi = ý mục D `_mind-s-7.md:99`:** +> *"Guard post-wave assertion mù 4 path hook — sửa bằng cách soi commit của hook thay vì `git status`"* {mới-nêu} + +**Vì sao chọn đúng ý này** (không chọn bừa): +- Nó **sinh trong cửa-sổ này**, không có ở `_mind-s-6.md` ⇒ nếu sống sót thì đó là bằng-chứng lớp mềm chở được ý **MỚI**, không phải quán-tính chép lại từ phiên trước. +- Nó là ý **dễ chết nhất**: dòng CUỐI mục D, nhãn `{mới-nêu}` (độ bám thấp nhất), và bản chất là *"nghi vấn để dành"* (mục C `:86`) — đúng lớp chết im lặng. +- Nó **kiểm được bằng máy**: có 3 token neo cứng (`§2.1.9(f)` · `git status` · "4 path"), không phải ý mơ hồ. +- Nó **có thật ngay lượt này**: `git log --since 16:30` = **10/10 commit đều là `wal: flush …`** (Stop-hook tự commit) ⇒ đúng 4-path-mù mà ý này nói. Ý không phải giả-thuyết suông. +- Nó **KHÔNG trùng** ý tao đã FLAG (D#4) ⇒ không tự làm nhiễu phép đo của chính mình. + +**Chấm thế nào @close (4 nấc, dừng ở nấc đầu tiên khớp):** +1. `grep -n "post-wave\|2\.1\.9(f)\|soi commit của hook" .claude/sessions/session-7/_mind-s-7.md` — ý còn ở **block MỚI** (không tính block-0)? +2. Nếu có `/pause`: ý có mặt trong `_tiep-*` / `### PAUSE-` không? +3. Nếu ý được XỬ: có trace ở `.claude/WAL.md` `next:` / `docs/HANDOFF.md` / commit không? +4. Biến mất khỏi **mọi** bề-mặt @close ⇒ **TRƯỢT carry** (neo: `_mind-s-7.md:99` + chỗ đáng-lẽ-phải-có). + +### 🔴 KHAI KẼ (bắt buộc, không tô thành tính năng) + +**Mồi này KHÔNG phải phép thử mù trong cửa-sổ hiện tại.** Lead scribe return của tao ra đĩa NGAY khi tao trả ⇒ lead **đọc được tên ý tao vừa chọn**. Nếu @close diễn ra trong **cùng** cửa-sổ, tính chất "bên bị chấm không biết mồi" **VÔ HIỆU HOÀN TOÀN** — ý sống sót có thể chỉ vì nó bị chỉ mặt, chứ không vì đường ống chở tốt. + +Chỉ khi có ranh-giới cửa-sổ chen vào (`/pause` → `/tiep` → cửa-sổ tươi không nhớ ý nào là mồi) thì mồi mới là phép thử thật. Đây là **kẽ cấu-trúc của single-lead**, không sửa được bằng cách viết hay hơn. + +**Giảm nhẹ (đối-chứng tao dựng sẵn):** ngoài mồi, block-0 còn **3 ý chưa-chốt KHÔNG được tao nêu tên** (`:91` `:92` `:93`). @close tao so **tỉ lệ sống**: nếu **chỉ** mồi sống mà 3 ý kia rơi ⇒ hiệu-ứng-quan-sát được xác nhận **và** carry thật sự yếu; nếu **cả 4 cùng sống** ⇒ carry khoẻ, mồi không cần thiết; nếu **cả 4 cùng rơi** ⇒ lỗi hệ-thống, mồi vô can. Ba nhánh đều đọc được — không nhánh nào đọc thành "ổn" theo mặc định. + + + +--- + + +**Fallback hồi-tố XÁC NHẬN bằng đĩa (không tin lời khai):** `.claude/sessions/session-7/_context-s-7.md:47` = `_(chưa có PAUSE — entry đầu append @/pause đầu tiên của phiên)_` ⇒ **0 entry `### PAUSE-`** ⇒ vai-1 `ctx-curator` và vai-2 `ctx-verifier` **chưa chạy lần nào trong L7**. Không có vết để KIỂM-CỦA-KIỂM ⇒ tao chạy **hồi-tố đầy đủ** trên block-0 (điều khoản "lưới không thủng ca 1-cửa"). Đây là ca ĐÚNG của fallback, không phải tao chọn đường dễ. + +---