# S168 (2026-08-01, window-6 phiên-LOGIC L9) — GĐ3-D + K8-blocker Lines-editor + K8 dry-run toàn trình + bộ fixture TEST > Vào bằng `/tiep` (không bookend @open). Lead model: Fable 5 → **Opus 5** (anh `/model` cuối phiên, trước closeout). > Mandate owner trong phiên: `(63)(b)=D` · *"Cứ mở rộng đi nhé"* · *"Chạy dry-run hết luôn đi rồi tao giao tiếp plan khác"* · *"để là ADMIN_TEST… tạo luôn master data test… bộ User test… chữ test trước"* · *"mỗi bộ 2-3 dữ liệu thôi"* · *"tạo 1 bộ dữ liệu test từ PE → Hợp đồng luôn"*. ## 1. Nghi-thức `/tiep` (cửa vào) Sàn-3: tín-hiệu ①④⑤ kêu nhưng **khớp 1:1 danh-sách nợ WAL tự khai** (orphan 4-folder + `sessions/` L9 đang mở) ⇒ không phải sổ-trống-giả. verify 5/5 KHỚP (`sub-implfe-gd3` BLOCKED · `sub-cicd-verify-k7` PARTIAL · git log · porcelain rỗng · suite 639/0). Tick CLEAN **41→42** (S168). `NHIP-NO: light 2/6 deep 2/15 ok`. `thu-moi: se=0 all=0`. `mind-check` **11Đ/0T**. `ctx-verifier` **CO-11-cờ** → biên-nhận `_tiep-5.md` (5 trường máy + verdict — vá luôn lỗi ⑧ chính vai bắt: `_tiep-4.md` rỗng ruột). 🔴 **Bug DÒ thư tự bắt:** lượt đầu báo `se=23 all=26` — sai vì so id **kèm đuôi `.md`** với `_index` (ghi id không đuôi). Đo lại strip đuôi ⇒ `0/0`. *Bài: phép đếm ra số LỚN bất thường = nghi phép đo trước, đừng nghi dữ liệu.* ## 2. Closeout-nợ (9 món trả trọn) — `a2b37dc` Gotcha **#86** (2-push-sát → Gitea auto-CANCEL run đầu; CANCELLED ≠ fail, verifier đọc run CUỐI của range) + cheatsheet-34 + STATUS row · **H24-DEEP-S166 11 FLAG resolve từng dòng** (F-4 `CLAUDE.md` mig 70/71 + module-row `69, 71` · F-5/F-6 HANDOFF segment S163→S168 + disposition NEXT-em cũ · F-9 persona `cicd-monitor` bỏ 5 literal → trỏ STATUS · F-10 bỏ-neo-phase 3 site · F-11 `governance/README.md` lật nhãn trial-đã-đóng · **F-8 KHÔNG ÁP** — `ring2-audit` @S166 đã **bác** vai-đo [đo sai phạm-vi HANDOFF, kết-luận lật ngược] ⇒ slot (59) giữ SỐNG) · orphan S163+S166 **harvest** (2 synthesis, verdict verbatim-từ-đĩa 10/10 + 3/3) · diary `ctx-verifier`/`ctx-curator` seed 3 lượt L9 mỗi vai · tally #53 ghi sự-kiện per-window · spec-cụm1 đính-chính PUT-Conflict · `run.md` ledger +8 row. ## 3. GĐ3-D — `081557b` (owner slot (63)(b) = D) Cây toàn trình vào **Panel-3 khi `!selectedId`**; "mở rộng" ⇒ **cả 3 trang 3-panel** (`MyContractsPage` · `InboxPage` fe-user · `ContractsListPage` fe-admin). `WorkflowMatrixViewPage` **KHÔNG áp** (trang bảng full-width, 0 Panel-3 — gate F-8 phán lead ĐÚNG). Gate `reviewer` **PASS-WITH-FLAGS-10 / 0 blocker** (garble → resume). **F-1 MAJOR vá:** `max-h` khuôn hiệu-chỉnh cho trang giấy-cuộn, vượt chỗ Panel-3 `/inbox` **~26px** ⇒ 2 thanh cuộn lồng. Vá = khuôn **+prop `bodyMaxHClass`** (default GIỮ NGUYÊN — 3 host cũ 0 đổi hành-vi), 3 host mới truyền `lg:max-h-none` ⇒ panel giữ **đúng 1 thanh cuộn**, bền cả 3 trang (không phụ thuộc biên 5px/13px mong manh). SHA-pair khuôn mới `7baf6247` ×2 app. 6 finding còn lại CHẤP-NHẬN-có-khai → UAT-NÓI-TRƯỚC. ## 4. 🔴 K8-blocker: Lines-editor KHKK — dry-run bắt TRƯỚC giờ chạy → `0bfadc2` **Phát hiện:** auto-gen line mồi `CatalogEntryId=null` + comment HỨA *"gán sau qua `UpdateContractSigningPlanLineCommand`"* — **command đó chỉ tồn tại TRONG COMMENT** (grep toàn src+FE = 0 impl/0 route/0 call); submit-guard vá-5 **chặn thật** line null; FE tự khai *"đường GÁN = K4b"* nhưng K4b thật ship `?group=` (`git show --name-only 88e7ecf`). ⇒ **mọi phiếu KHKK tạo sau K2 kẹt Nháp vĩnh viễn** — đúng chỗ cicd-K2 từng khai *"mục-4 chân-lý-rỗng, đo lại khi K8 đẻ phiếu thật"*. **Vá:** command+validator+handler (EnsureDraftEditable + rào `ContractId!=null` 409 + fail-fast entry sống/IsActive/đúng-nhóm 409 + denorm `TenHangMuc` + changelog `EntityId=line.Id` + tên NCC) · route `PUT /contract-signing-plans/{id}/lines/{lineId}` policy `KeHoachKyKet.Update` · FE select tại bảng ×2 app (SHA-pair `0d6147d0`) + option-fallback giữ hạng-mục-đã-lưu + dòng lỗi query + amber nhóm-0-hạng-mục + `aria-label` per-dòng · **+5 Fact**. Gate `reviewer` **PASS-WITH-FLAGS-8 / 0 blocker** — 2 MAJOR (F-1 changelog thiếu `EntityId` = chỗ DUY NHẤT lệch quy ước file · F-2 `