wal: flush 20260726T1938

This commit is contained in:
pqhuy1987
2026-07-26 19:38:22 +07:00
parent 82a0457e6f
commit b5945a66d4

View File

@ -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-<N>.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.
<!-- ĐIỂM 0 xong -->
---
## (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ỂM (i)(1) xong -->
---
## (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`*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ế.
<!-- ĐIỂM (i)(2) xong -->
---
## (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ỂM (4) xong -->
---
## (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-<k>` 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.
<!-- ĐIỂM (i)(4) xong -->
---
**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-<k>`** ⇒ 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ễ.
---