# Sổ yêu-cầu chủ dự án — 3 khối (GĐ-4, wave W4)

> **Dựng @S181 · 2026-08-07.** Điều-kiện-vào đã đủ: W3 thi công xong + chủ dự án chốt **P2 = PB-2** (tách REQUEST ⟂ TASK).
> Sổ quyết-định: [`owner-decisions-07-08-2026-dot-2.md`](../../.claude/workflows/runs/2026-08-07-S180-adap-upgrade-pack-phased/owner-decisions-07-08-2026-dot-2.md).

## 🔴 Ranh sống-còn: sổ này là REQUEST, KHÔNG phải TASK

| | REQUEST (sổ này) | TASK (`.claude/WAL.md`) |
|---|---|---|
| Trả lời câu | *"anh đã yêu-cầu gì, đã được đáp chưa?"* | *"việc đang tới đâu?"* |
| Nguồn | **sổ này** | **WAL — nguồn duy-nhất** |
| Cột trạng-thái | `mở`/`đóng` của **YÊU-CẦU** | `[ ]`/`[!]`/`[x]` của **VIỆC** |

🔴 **Sổ này CẤM mang cột trạng-thái-thi-công của riêng nó.** Muốn biết việc tới đâu thì đi theo cột *con trỏ* về WAL. Luật + lý-lẽ đầy-đủ = canonical ở [`.claude/commands/tiep.md` §3-bis](../../.claude/commands/tiep.md) — **B1: CẤM chép sang đây.**

## 🔴 Chống bẫy A1 — cột *lời nguyên văn* chỉ nhận chữ anh gõ TỪ 2026-08-07

Dữ-liệu cũ (WAL · HANDOFF · auto-memory · migration-todos) **KHÔNG** được đổ vào 3 khối dưới — chúng là **nhãn do đội đặt**, không phải lời anh. Chúng sống ở **PHỤ LỤC** cuối tệp, mang nhãn *"suy ra, không phải nguyên văn"*.

- **Mã `YC-`/`ST-`/`PN-` là VĨNH VIỄN, cấm tái dụng.** Đóng = **lật trạng thái**, KHÔNG xoá dòng. *(SE từng làm ngược: `HANDOFF:10-17` đánh số 1..7 tái dụng mỗi phiên, đã trả giá bằng 3 lượt hỏi lại.)*
- **Trần ký tự cột nguyên văn** = khoá `owner_request_verbatim_char_cap` trong `.claude/agent-memory/memory-budget.json` — **B1: trỏ khoá, CẤM chép số vào đây.**

---

## Khối 1 — `việc-được-giao`

> 🔴 **CỘT `nhắc-lại-của` — ĐỌC TRƯỚC KHI ĐẾM** (thêm @S181 sau khi vai tầng-2 bắt lỗi mã hoá của lead).
> Đơn vị đếm là **MỤC = YÊU-CẦU**, không phải **DÒNG**. Yêu-cầu bị nhắc lại **KHÔNG** được cấp mã mới — nó chỉ làm tăng cột *số lần đã nhắc* của **mã GỐC**.
> Bản đầu của sổ **làm sai đúng điều đó**: cấp 4 mã cho **một** yêu-cầu. Mã đã cấp là **vĩnh viễn, cấm xoá dòng** ⇒ chữa bằng **đánh dấu**, không bằng gỡ.
> 🔴 **LUẬT ĐẾM:** chỉ đếm dòng có `nhắc-lại-của` **TRỐNG**. Dòng có giá trị = cùng một mục, đã tính ở mã gốc.

| mã | lời nguyên văn | thời điểm · phiên | trạng thái | số lần đã nhắc | con trỏ | 🔴 đội hiểu thành gì | nhắc-lại-của |
|---|---|---|---|---|---|---|---|
| `YC-001` | "Nói rõ các vấn đề trên nhé" | 2026-08-07 · S181 | đóng | 1 | báo-cáo lượt S181 | Giải thích 6 câu chờ-anh bằng nguồn thật, không phỏng theo trí nhớ — kèm khuyến nghị từng câu | |
| `YC-002` | "OK cứ làm dry-run luôn" | 2026-08-07 · S181 | **mở** | **4** | `docs/changelog/sessions/` log S181 + run `2026-08-07-S180-adap-upgrade-pack-phased/` *(con-trỏ cũ "WAL W5+W4b" chết theo reset — gap-F2)* | *(lead hiểu SAI lượt đầu: tưởng dry-run các ô acceptance W3 ⇒ anh phải đính chính **3 lần**, xem 3 dòng dưới.)* Ý thật: **thi hành trọn plan adapt** | |
| `YC-003` | "gõ /adap-apply (dry) -> OK chốt cái này cho W3" | 2026-08-07 · S181 | đóng | 1 | `WAL` chain "W3 acceptance 6/6 ĐÓNG" | Gõ lệnh thật để xác nhận thân lệnh nạp có BƯỚC 0, **không** áp thư nào | |
| `YC-004` | "làm tiếp đi nhé, nãy tao nói dry-run tức chạy hết cái plan adapt ở turn trước chứ ko phải dry-run cái này" | 2026-08-07 · S181 | đóng | — | `WAL` chain "THI HÀNH 5/6 khoản đợt-2" | Đính chính lần 1 | **`YC-002`** |
| `YC-005` | "làm xong thì chậy hết cái plan adapt nhé" | 2026-08-07 · S181 | đóng | — | cùng trên | Đính chính lần 2 | **`YC-002`** |
| `YC-006` | "làm cho hết đi nhé" | 2026-08-07 · S181 | đóng | — | `WAL` chain W5 + W4b | Đính chính lần 3 | **`YC-002`** |
| `YC-007` | "1 -> B / 2 -> nguyên văn / 3 ->1 -> Gật luôn / 4 -> Đội đầy đủ khi chạy -> OK / 5 -> b / 6 -> b" | 2026-08-07 · S181 | đóng | 1 | `owner-decisions-07-08-2026-dot-2.md` | Sáu phán quyết P3·P5·P7(i)·P8 + cột `status` + baseline. 🔴 P7 chỉ vế (i); vế (ii) phán riêng ở `YC-009` | |
| `YC-008` | "Làm xong hết đi nhé" *(dán kèm bảng 5 wave còn lại, trong đó 2 wave ghi rõ đang CHẶN)* | 2026-08-07 · S181 | đóng | 1 | `WAL` chain W5/W4b | Chạy hết wave chạy được; 2 wave chặn thì chuẩn bị trọn rồi để đúng phần của anh | |
| `YC-009` | "đồng ý stamp - ký tên -> Làm đi nhé" | 2026-08-07 · S181 | đóng | 1 | `ACTIVE-MARKS` mark `RC-…-21-42-10` | Cấp chữ ký niêm phong W6 **và** phán nốt P7 vế (ii) | |
| `YC-010` | "OK làm hết rồi khép trọn đi" | 2026-08-07 · S181 | đóng | **2** | `WAL` chain W5b/W3b/W6 | Khép trọn gói: W5b + W3b + phần còn lại W6 | `YC-008` |
| `YC-011` | "1,2 -> làm đi, OK sau đó /session-end" | 2026-08-07 · S181 | **đóng** *(lật @S185 — stale-F8: 3/3 vế xong từ S181, treo oan 4 nhãn phiên)* | 1 | closeout S181 commit `d2918790` + `HANDOFF` segment L12 *(con-trỏ cũ "WAL next:" đã chết theo reset — gap-F2, đổi sang mốc bền)* | (1) push 42 commit · (2) cổng đồng-bộ + báo cáo cuối · rồi đóng phiên — cả 3 đã thi hành @S181 | |
| `YC-012` | "nâng cap" *(🔸 trích từ `spec-…-07-08-2026.md:64`, cửa-sổ **S180**, KHÔNG bắt trực tiếp ở cửa-sổ này — khai đúng nấc)* | 2026-08-07 · S180 | đóng | 1 | `memory-budget.json` `_cap_raised_S181` | Lệnh dứt khoát nâng `hmw_width.cap` 20→30. 🔴 @S179 lead **tự thu-hẹp** chữ "OK" thành "chưa phải lệnh đổi số" — lần này không tự thu-hẹp | |
| `YC-013` | "Hiện tạo muốn cac quy trình này giống như duyệt NCC. Có thể thêm sửa xóa edit stick tương tự như duyệt NCC. Cho 2 /fable-real invest cách làm BE và Database, 1 /fable-real invest cách cấu hình giao diện front-end đúng nhất về UI lẫn giao diện, ko lệch. -> Ra các wave xử lý chi tiết nhất. cho 2 /fable-real review và tổng hợp các wave xử lý chi tiết. Cuối cùng fan-out cho Opus 5 MAX xử lý nhé." *(kèm 4 ảnh trang `approval-workflows-v2/DuyetNcc` + dialog Sửa-tại-chỗ)* | 2026-08-08 · S182 | **đóng** *(acceptance mắt-anh = "Tạm OK" @S185/YC-019(1) — nấc TẠM khai đúng: anh chưa duyệt sâu, có gì bung thì mở lại bằng mã mới)* | **2** | `runs/2026-08-08-S182-khkk-awf-mirror-ncc/` | 8 workflow "Duyệt KHKK — Nhóm 1..8" phải có ĐỦ chức năng như trang "Duyệt NCC": xem steps/cấp/NV + per-NV quyền duyệt + Sửa-tại-chỗ + Tạo-phiên-bản-mới + Ghim/Bỏ-ghim + Xoá-version + lịch-sử-versions. UI **không lệch** khuôn DuyetNcc. Pipeline anh chỉ định: 3 `/fable-real investigator-codebase` (BE · DB · FE-UI) → wave-plan chi tiết → 2 `/fable-real reviewer` → hmw fan-out **Opus 5 MAX** execute | |
| `YC-014` | "C — Mờ ô chưa nghe (Recommended)" *(AskUser D3 @S182 — sau khi invest phát hiện 6/9 checkbox KHKK-runtime bỏ qua)* | 2026-08-08 · S182 | đóng | 1 | `spec-khkk-awf-mirror-ncc-DRAFT.md` MỤC 3 D3 | Dialog KHKK giữ layout y khuôn; ô máy-chưa-nghe **mờ + tooltip "chưa áp dụng cho KHKK"** (tiền lệ ô Duyệt-thẳng-Cấp-cuối @K3). KHÔNG port semantics đợt này (W3 hủy); port sau thì gỡ mờ dần | |
| `YC-015` | "làm nốt cho ra giao diện luôn nhé" *(qua `/tiep` @S183)* | 2026-08-08 · S183 | đóng | — | WAL chain `[x]` cicd-4-chân | Verify deploy `706134da` cho giao diện 8 panel SỐNG trên prod — 4/4 chân PASS (bundle ×2 rotate + marker + DLL 3-hit + 8-row IsActive=1 + pin-lệch 0) | **`YC-013`** |
| `YC-016` | "1 -> (c) THEO TAY CẦM PHIẾU -> OK nhé" | 2026-08-08 · S183 | **đóng** *(verify-DLL @S183 + RE-verify @S185 + acceptance "Tạm OK" @S185/YC-019(1) — lật cùng đợt YC-013)* | 1 | ship `72568f05` + WAL chain (TASK → WAL) | **Phán quyết slot (67)** treo từ S172: upload file-khi-duyệt KHKK theo TAY CẦM PHIẾU — phiếu Nháp/Trả-lại (tay người soạn) ⇒ NGƯỜI SOẠN up được; phiếu Chờ-duyệt ⇒ CHỈ NGƯỜI DUYỆT (thuộc workflow phiếu); guard ở API-layer (#82 2-tầng), kèm test. Slot (67) ĐÓNG | |
| `YC-017` | "AI_INFRA và /adap-apply — Cho /fable-real invest và review checklist cẩn thận sau đó cho Opus 5 MAX xử lý" *(args lệnh `/check-email` @S185)* | 2026-08-09 · S185 | **đóng** *(pipeline P1→P4 trọn @S185: 0/39 nợ per-id · 21/21 item disposition; 4 câu W phát sinh → khối CHỜ-ANH riêng, không giữ YC mở)* | 1 | `runs/2026-08-09-S185-email-adap-pipeline/implement-synthesis.md` | Kéo thư AI_INFRA CẢ 2 kênh (`outbox/se` qua check-email + `outbox/all` qua adap-apply), rồi pipeline khuôn YC-013: `/fable-real investigator-codebase` soi trạng-thái thư/adopt + dựng checklist → `/fable-real reviewer` review checklist cẩn thận → hmw fan-out **Opus 5 MAX** execute. *(Thư 08-08 đã áp trọn @S185 TRƯỚC lệnh này — pipeline chạy trên phần việc CÒN LẠI mà invest tìm ra.)* | |
| `YC-022` | "OK" *(gật bảng thẩm-quyền owner sau khi 3 dòng owner-SỐ được reviewer-gate sửa)* | 2026-08-10 · S185 | **đóng** *(lật DRAFT → `docs/governance/bang-tham-quyen-owner.md` chính thức + đối-soát 210K giải caveat dòng-7 [nhà thật = `crystallized_backfill.target`] + trỏ từ engine)* | 1 | `bang-tham-quyen-owner.md` | Bảng 2 cột {10 owner-SỐ · 12 owner-LUẬT} thành luật sống — mọi thứ trong đó chỉ anh đổi, em thi hành có vết | |
| `YC-023` | "Tập trung vào product tiếp tục nhé, hiện phần KHKK tạm ổn -> Từ KHKK sẽ làm tiếp phần hợp đồng. ⏎ Hợp đồng cũng có cấu trúc FE bà BE  tương tự như KHKK và Duyệt NCC nhưng cho các quy trình duyệt khác nhau là các loại hợp đồng khác nhau, ví dụ thầu phụ, nguyên tác ... ⏎ Cấu trúc Menu cũng tương tự . Hiện duyệt Hợp đồng sẽ kế thừa từ KHKK đã đc duyệt trước đó. ⏎ cho 2 /fable-real invest cách làm, và 1 /fable-real  review lại style , 1 /fable-real  review tổng thể và tổng hợp lại plan. ⏎ Sau đó fan-out cho Opus 5 MAX xử lý. Theo từng wave cụ thể." | 2026-08-10 · S187 | **mở** | 1 | run `2026-08-10-S187-duyet-hd-tu-khkk/` *(trạng-thái thi-công → WAL, sổ không mang cột thi-công)* | Module **Duyệt Hợp đồng (GĐ3)** mirror khuôn PE/KHKK cả FE+BE+menu (*"bà"=và · "nguyên tác"=HĐ nguyên tắc*); quy trình duyệt V2 **riêng per-LOẠI-HĐ**; phiếu duyệt HĐ **kế thừa từ KHKK ĐÃ DUYỆT** (nền bridge K7 `aaed6992`). Điều phối anh chỉ định: 2 fable-invest *(em chia lăng kính BE⟂FE)* → 1 fable-style-review *(em gán `back-end-reviewer-style`)* → 1 fable-review tổng thể + tổng hợp plan *(`reviewer`)* → fan-out Opus 5 MAX theo wave | |
| `YC-021` | "W1,3,4 -> OK, W2 thì đồng ý thêm 1 nghi thức ko vấn đề" | 2026-08-10 · S185 | **đóng** *(4W trọn @S185 commit `6bf768da`: W-2 ring5 verified-runtime-cùng-phiên · W-1 day-wake 4-floor · W-3 500ms/4.3-PASS · W-4 bảng-DRAFT+thư-hub-restamp; REVIEW 8-MAJ vá hết. Còn 1 vế nhỏ CHỜ-ANH: gật bảng-DRAFT sau khi 3 dòng owner-SỐ được sửa đúng)* | 1 | WAL chain (TASK → WAL) | Cả 4 W GẬT: **W-1** thi công day-wake (3 chạm canonical + `/day` + dogfood + report hub, kèm REVIEW riêng) · **W-2** BUILD `ring5-audit` SE-form (vai kiểm nghi-thức — "thêm 1 nghi thức ko vấn đề") · **W-3** ngưỡng "điểm dừng RẺ" = 500ms (em đề, anh OK) · **W-4** em kê NHÁP bảng thẩm-quyền owner-SỐ/owner-LUẬT + soạn 2 đề-xuất-ngược gửi hub, anh duyệt bản kê | |
| `YC-020` | "1 -> OK, 1 phiên. · 2 -> đồng ý 14 ngày. (nhưng cũng theo phiên luôn vì có ngày làm ngày ko). · 3 -> OK · 4 -> OK · 5 -> OK đông ý." *(trả lời 5 khoản SKIP-owner)* | 2026-08-10 · S185 | **đóng** *(5/5 thi hành @S185 commit `2a5290a8`: fold-3-detector + ngưỡng-14-PHIÊN [2 flag thật fire ngay] + đính-chính-thư-kế ghi nợ + grid-c-trio + giữ-neo-glyph)* | 1 | WAL chain (TASK → WAL) | (1) fold C13/C14/C15 vào TOTAL sau **1 phiên nền** (S185 = nền — sửa code giờ, lần chạy kế tự vào TOTAL) · (2) ngưỡng title-freshness = **14 PHIÊN** (KHÔNG phải ngày — anh chỉ rõ "có ngày làm ngày ko" ⇒ đo bằng nhãn-phiên/counter, khớp luật H24 "khoảng đo từ counter không từ đồng-hồ") · (3) V5 bao-cao-cuoi: KHÔNG sửa file đã gửi — đính chính 1 dòng trong THƯ KẾ gửi hub · (4) mở detector C13 canh thêm lưới trio · (5) GIỮ neo-glyph (không đổi quy ước heading) | |
| `YC-019` | "1 -> Tạm OK · 2 -> Role baseline + Runs · 3,4 -> giải thích · 5 -> OK kéo audit luôn giờ cứ end/start là cứ chạy · 6 -> Nợ cũ thì xử lý cho xong luôn" | 2026-08-10 · S185 | **đóng** *(6/6 vế thi hành @S185: (1) YC-013/016 đóng · (2) ring2 24.859B · (3)(4) đã giải thích → anh phán tiếp = YC-020 · (5) deep_every=1 · (6) nợ cũ đóng trọn)* | 1 | WAL chain (TASK → WAL) | 6 phán quyết một lượt: (1) acceptance 8-panel TẠM-OK ⇒ lật YC-013/016 nấc "tạm" · (2) C-6 = NÉN `Role baseline`+`Runs` của ring2 (khuôn moved-not-cut như lead-stale) · (3)(4) em giải thích W-1..W-4 + 5 SKIP-owner, chưa phán · (5) 🔴 ĐỔI NHỊP DEEP: từ nay **mỗi bookend end/start đều chạy deep** (deep_every → 1, hết chờ nhịp 15) · (6) uỷ quyền xử TRỌN nợ cũ theo bậc-2 LT3 (chọn nhánh an toàn + khai, việc-vật-lý-của-anh thì kê rõ) | |
| `YC-024` | "(80) Đồng ý đúng, 7 loại ⏎ (81) Tức Duyệt NCC -> Chọn Duyệt NCC tạo KHKK -> KHKK (đã duyệt) -> Chọn để tạo HĐ ⏎ (82) Hiện phân quyền tất cả trước đi, sau khi ổn rồi thì phân quyền sau. ⏎ (83) Lấy tương tự như KHKK sau đó tao sẽ điều chỉnh sau, phần điều chỉnh trong Admin tao sẽ tự chủ động ⏎ (84) Đồng ý ⏎ (85) Đồng ý ⏎ (86) Đồng ý khóa cứng tương tự như KHKK và Duyệt NCC ⏎ (87) Chỗ này user có thể tự chọn KHKK cho loại Hợp đồng nào. ⏎ (88) Đồng ý ruột lấy từ các thông tin đã nhập (Có thể tham khảo 1 form Hợp đồng trước file word đã có, lấy làm mẫu trước, các thông tin đã nhập vào có thể lấy load lên, còn nếu chưa thì cho điền bổ sung, ví dụ như điều khoản)." | 2026-08-10 · S188 | **mở** | 1 | run `2026-08-10-S187-duyet-hd-tu-khkk/` spec + WAL *(thi-công → WAL)* | 9 phán quyết mở khoá plan 11-wave YC-023: (80) trục **7-LOẠI** · (81) **PA-A** + xác nhận chuỗi kế thừa PE→KHKK→HĐ · (82) *đội hiểu (bậc-2, khai)*: **MỞ TẤT CẢ trước** như posture hiện tại, phân quyền chi tiết = đợt SAU khi anh thấy ổn ⇒ **W8-authz HOÃN chờ lệnh anh**; guard đúng-trạm của máy duyệt V2 vẫn chạy (logic quy trình ≠ phân quyền) — anh bác cách hiểu thì em sửa · (83) W3 seed roster **SAO KHUÔN KHKK**, anh tự chỉnh trong Admin Designer sau ⇒ hết chặn cứng · (84) màn duyệt **2 nút** · (85) admin **giữ ẩn** ⇒ W9 HỦY · (86) **khoá cứng** quy trình theo loại, không đổi tay · (87) KHÔNG cột gợi-ý — user tự chọn loại HĐ khi tạo từ KHKK · (88) KHÔNG bảng hạng mục — **ruột HĐ pre-fill** từ dữ-liệu đã nhập + khuôn **form HĐ Word có sẵn** làm mẫu, field thiếu cho điền bổ sung (vd điều khoản) → vào W5/W6 | |
| `YC-027` | "cái này sẽ là rules nhé, các cái command phải đc thực hiện trọn vẹn tao ko chấp nhận bất cứ 1 lý do nào" | 2026-08-10 · S188 | **mở** | 2 | 2 file lệnh + ACTIVE-MARKS (stamp chờ P4) | **NÂNG THÀNH RULE VĨNH VIỄN**: mọi command/nghi-thức (bookstart · bookend · /tiep · mọi lệnh anh gõ) phải chạy **TRỌN VẸN 100% các bước** — không vai nào được bỏ, không viện BẤT KỲ lý do nào (ngân sách · cạn context · "để lượt sau" · nghi-thức-đã-đóng). Đứt bất-khả-kháng (limit/crash) ⇒ lượt-nối đầu tiên chạy HẾT phần thiếu. Khắc vào `session-end.md` + `session-start.md` khối ONE-SHOT (trỏ YC-027/PN-001) ngay @S188; stamp User-Mark theo P4 report-before-stamp ở nhịp tới | |
| `YC-028` | "xóa bớt 1 tý để các bạn upload load phiếu rồi tính tiếp" | 2026-08-11 · S189 | **mở** *(vế "xóa bớt" ĐÃ XONG cùng lượt; vế "tính tiếp" treo chờ anh chọn số)* | 1 | WAL (mạch sống) + `runs/2026-08-10-S189-bookstart-open/run.md` | Bối cảnh: anh Kiệt báo phiếu `PE/2026/A/059` "ko duyệt được" rồi "ko tìm thấy phiếu" — chẩn đoán ra **ổ C VPS còn 0 byte** (free âm 20MB vào reserve) ⇒ SQL connection timeout ⇒ FE vẽ mọi lỗi thành "Không tìm thấy phiếu" (#44). Đội hiểu: giải phóng đĩa NGAY bằng mục AN TOÀN nhất — đã xóa cache `gitea\data
epo-archive` **16,49GB** (cache chính chủ Gitea, tự tái tạo) → free **20,1GB**, API 200/401 chuẩn, 0 ERR mới; KHÔNG đụng DB/repo/uploads. "Tính tiếp" = bảng đánh số trình anh: npm-cache SYSTEM 12,76GB · inetpub\logs 2,15GB · chống tái phát repo-archive · disk-watch · FE tách lỗi-hệ-thống ⟂ không-tìm-thấy · truy log 10/08 biến mất | |
| `YC-026` | "ko đóng phiên với bất cứ lý do nào" | 2026-08-10 · S188 (giữa lượt chạy-bù PN-001) | **mở** | 1 | WAL (mạch sống) | Phiên/conversation này KHÔNG được kết thúc — chạy hết mọi vai + việc tồn rồi **giữ phiên mở tiếp tục nhận việc**; CẤM viện bất kỳ lý do nào (ngân sách/context/nghi-thức-đã-đóng) để dừng. *(Đội hiểu thêm: `_end` phiên-LOGIC L14 đã ghi TRƯỚC lệnh này ~15 phút — dấu frozen không gỡ được; hiệu lực thực tế = conversation tiếp tục làm việc, mạch mới ghi WAL như thường. Anh bác cách hiểu thì em sửa.)* | |
| `YC-025` | "OK làm tiếp hết đi, xong hết tao review 1 lần luôn" | 2026-08-10 · S188 | **đóng** *(vế làm-trọn SHIP @S187-S188; vế "review 1 lần" anh THỰC HIỆN @S190 2026-08-12 trên prod → ra 5 điều chỉnh = `YC-029`)* | 1 | WAL chain (thi-công → WAL) | Làm TRỌN các wave còn lại của YC-023/024 (W3 seed 7 quy trình + key Designer → W4 guard 4-cửa → W5 card nguồn-gốc + ruột pre-fill (88) → W6 màn duyệt 2-nút + Đ2-guard → W10 dry-run toàn trình) KHÔNG dừng chờ anh nhìn prod giữa wave; gate máy + reviewer-agent per-wave GIỮ NGUYÊN; push gom 1 lượt cuối (tránh #86 + tránh bản prod trung gian); anh review MỘT LẦN trên prod khi trọn. W8 vẫn HOÃN theo (82) "phân quyền sau", W9 vẫn HỦY theo (85) | |
| `YC-030` | "Q1 ->như KHKK ⏎ Q2 -> Chỉ select theo loại HĐ ⏎ Q3 -> Port sang luôn ⏎ Q4 -> Người tao xóa người duyệt ko đc xóa, chỉ trả lại thôi. ⏎ Q5 -> Thay luôn và mỗi loại 1 quy trình tương tự KHKK và cấu trúc duyệt và history cũng tương tư KHKK ⏎ Xong thì push và deploy lên nhé. Để tao kiểm tra" | 2026-08-12 · S190 | **mở** | 1 | run `2026-08-12-S190-soltuon-dieu-chinh-hd/` *(thi-công → WAL)* | 5 phán quyết đóng Q1-Q5 của YC-029 + lệnh deploy: **Q1** layout my-contracts về **KHKK-THUẦN** (bác nhánh hoán-đổi đã chạy: BỎ cột danh-sách thường-trực bên phải; cây trái = trục, flat-list = fallback trong CÙNG panel khi search/lọc; panel-3 = workflow+history/dashed y KhkkListPage) · **Q2** panel cây giữ **Select theo LOẠI HĐ** (trục nhóm của KHKK ⇒ trục loại của HĐ) · **Q3** PORT 3 món KHKK vào màn duyệt HĐ (ô "Cấp này KẾT THÚC" + badge "Duyệt thay CEO" + banner kết-thúc-sớm — cần nở `ContractDetail` DTO + service đọc cờ) · **Q4** *"người TẠO xóa (typo 'tao'), người DUYỆT KHÔNG được xóa — chỉ Trả lại"* = XÁC NHẬN đúng W5 đã ship (approver-delete KHÔNG BAO GIỜ mở cho HĐ — khác PE; đóng `[carry:w8-delete-policy]` vế approver) · **Q5** THAY `QT-HD-V2-001` bằng đúng 7 bản `HD-*` per-loại (data-op cả Dev lẫn prod) + cấu trúc duyệt & history màn HĐ = y khuôn KHKK (gộp Q1/Q3) · rồi **PUSH + DEPLOY prod để anh kiểm tra** (⇒ mở CỬA NGOÀI-GIỜ: dọn workspace runner vá-gốc P0 TRƯỚC push) | |
| `YC-029` | "Thứ 1 (Ành 1): Bỏ phần này sang bên này nhé. ⏎ Thứ 2 (Ảnh 2): Điều chỉnh. ⏎ Thứ 3: Phần hợp đồng Menu đang bị lẫn lộn, click vào menu này thì nhảy sang Menu khác, điều chỉnh lại nhé. ⏎ Thứ 4: Phần thao tác, duyệt, xóa ... -> Cấu trúc tương tự như KHKK. ⏎ Thứ 5: Bên trong Admin -> Cấu hình Menu đúng chính xác cho từng loại HĐ nguyên tắc, thầu phụ -> Cấu trúc Menu tương tự giống với KHKK và Duyệt NCC (Ảnh 3) ⏎ Cho /fable-real invest và review các điều chỉnh spec, ra các wave và checklist cụ thể. ⏎ /fable-clone review lại 1 lần nữa. ⏎ /fable-real vào các vai style FE, BE -> Invest Ra cái spec list để style đồng nhất với các thiết kế đó. ⏎ /fable-clone Vai FE, BE review style -> Review lại ⏎ /fable-real tổng hợp cuối cùng ra từng wave cụ thể, sau đó ⏎ -> Sau đó Fan-out cho OPus 5 MAX xử lý toàn bộ plan, tên Plan \"SOLTUON-12-08-2026\"" *(kèm 3 ảnh prod eoffice `my-contracts?type=1` + admin Designer)* | 2026-08-12 · S190 | **mở** | 1 | run `2026-08-12-S190-soltuon-dieu-chinh-hd/` *(thi-công → WAL)* | Kết quả review GĐ3 của anh (vế 2 YC-025) = 5 điều chỉnh UAT: **(1)** ảnh-1 dời khối được khoanh (cột danh-sách HĐ trống) sang vị-trí mũi-tên chỉ — đọc-hình bậc-2, invest xác nhận từ khuôn KHKK trước khi khoá spec · **(2)** ảnh-2 mỗi LOẠI HĐ = 1 quy-trình duyệt RIÊNG, UI phải thể hiện đúng (7 menu loại đã khoanh) · **(3)** BUG menu HĐ lẫn lộn: click menu này nhảy sang menu khác — điều chỉnh routing/menu-key · **(4)** bộ thao-tác (duyệt/xóa/thao tác/đang duyệt/đã duyệt/đã xóa) cấu trúc y KHUÔN KHKK · **(5)** ảnh-3 Admin Designer: thêm mục cấu-hình quy-trình per-LOẠI-HĐ (nguyên tắc, thầu phụ, …) y khuôn "Duyệt NCC (Mới)" + "Duyệt KHKK — Nhóm 1..8". Pipeline anh chỉ định 6 bước: ① `/fable-real` invest+review điều chỉnh spec → wave+checklist *(em gán `investigator-codebase`)* ② `/fable-clone` review lại *(`reviewer`)* ③ `/fable-real` ×2 vai style FE/BE invest spec-list style đồng nhất *(`front-end-reviewer-style` + `back-end-reviewer-style`)* ④ `/fable-clone` FE/BE review style lại ⑤ `/fable-real` tổng hợp cuối ra wave cụ thể *(`reviewer`)* ⑥ fan-out **Opus 5 MAX** xử lý toàn bộ plan, tên plan **"SOLTUON-12-08-2026"** (giữ nguyên văn tên anh đặt) | |
| `YC-031` | "Admin -> tạm ôn. ⏎ eOffice -> vào trắng màn hình" *(kèm ảnh prod eoffice trắng trơn)* ⏎ → "fix luôn đi, lỗi này bị 2-3 lần rồi" ⏎ → "Fix lỡi này luôn rồi chạy /session-end" | 2026-08-13 · S191 | **mở** *(vá GỐC đã ship `305b573f`, CI đang verify; đóng khi anh xác nhận prod ổn qua 1 chu-kỳ deploy KHÔNG hotfix tay)* | 3 | `docs/gotchas.md` #92 + `.gitea/workflows/deploy.yml` + session-log S189-S191 *(thi-công → WAL)* | Anh kiểm prod GĐ3 sau deploy #600 → eOffice **trắng màn**, admin tạm ổn. 🔴 Vế **"bị 2-3 lần rồi"** là phần NẶNG NHẤT của yêu-cầu: anh KHÔNG xin hotfix, anh đòi **thôi tái phát** ⇒ cấm vá triệu chứng (scp bundle) rồi tuyên xong. Đội hiểu: **(1)** cứu prod ngay (build local lành scp đè ×2 app — đã làm, console 0 lỗi) · **(2)** truy ROOT-CAUSE thật: `deploy.yml` xoá `package-lock.json` rồi `npm install` ⇒ mỗi run resolve lại cây theo semver ⇒ cùng commit ra bundle khác nhau ⇒ CI xanh mà bundle crash `useState null`; lockfile cũ (23/04) thiếu `@microsoft/signalr` nên "xoá cho lành" từng có vẻ hợp lý · **(3)** vá gốc: lockfile tái sinh từ cây lành + `npm ci` + **GUARD-92** chặn React trùng bản (fault-inject 4 ca, bắt được dương-giả `lucide-react` trước khi push) · **(4)** khắc gotcha **#92** kèm luật "verify deploy FE phải có 1 phép đo RUNTIME" — vì 2 lần lọt đều do mọi phép đo chỉ đo FILE (byte-match + HTTP 200), không đo CHƯƠNG TRÌNH CHẠY. ✅ **ĐÓNG vế kỹ-thuật @S191:** CI run **#488 PASS 6/6**, hash CI == local **4/4** (`CR538vZx`/`C10ta-wB`), runtime-verify 2 app console 0 lỗi. 🔴 **ĐÍNH CHÍNH 2 điều lead ghi SAI ở dòng này (cặp H24 bắt @close):** **(a)** `.nvmrc` **CÓ tồn tại** (`fe-admin/.nvmrc` + `fe-user/.nvmrc` = `20`, tracked từ `25dad7f3`) — cái thiếu là **người ĐỌC nó** (`deploy.yml` 0 hit `setup-node`) = ghost-wire class-2, không phải file-missing; chẩn sai thì vá sai (đi tạo lại file = vô ích). **(b)** nghi vấn "chênh node/npm là nguồn bất-định còn lại" **BỊ BÁC bằng đo**: runner node v24.15.0/npm 11.12.1 vs local v22.13.0/npm 10.9.2 vẫn ra **đúng 4/4 hash** ⇒ nguồn bất-định duy nhất là việc xoá lockfile, đã vá. 🔸 **1 điểm chưa khớp CẦN ANH 1 CÂU:** anh nói **"2-3 lần"**, sổ + gotcha #92 truy được **2 ca có vết** (S189 #486 · S191 #600); grep `"trắng màn"` toàn sổ bền = 6 hit/5 file, **100% thuộc 2 ca đó, 0 vết cho ca thứ 3**. ⇒ hoặc có 1 ca chưa từng vào sổ (mẫu root-cause đang thiếu 1/3 dữ liệu), hoặc anh nói ước lượng. 🔸 CÒN TREO: node/npm runner **chưa pin** — chờ anh quyết pin `setup-node` đọc `.nvmrc` hay khai thẳng "cố ý không pin". | |
| `YC-018` | "2 phần bookend và bookstart -> trong đợt adapt này AI_INFRA cũng có hướng dẫn bọn mày chạy 1 mạch hết toàn bộ ko còn pause/tiep nữa, chú ý cấu hình cái đó kỹ nhé" | 2026-08-09 · S185 | **đóng** *(cấu hình land 4 site @S185 + chạy thật trọn 1 mạch bookend @close cùng đêm — nghiệm bằng vận hành; 🔴 nhắc lần 2 @S188 = PN-001: lead bỏ 3 vai @close với lý do "ngân sách" — owner bác, chạy nốt ngay trong lượt)* | **2** | WAL chain (TASK → WAL) | Nghi-thức 2 đầu phiên (`/session-start` bookstart + `/session-end` bookend) phải chạy **TRỌN TRONG MỘT LƯỢT** như hub kể ở thư 08-08 Phần 1b ("lượt mở phiên gần nhất chạy trọn trong một lượt duy nhất, không cần cửa tạm dừng nào chen giữa") — cấu hình luật ONE-SHOT vào 2 file lệnh, CẤM rải nghi-thức qua nhiều cửa pause/tiep, CẤM hẹn-cửa-sau. *(Đội hiểu: pause/tiep VẪN là recovery khi đứt bất-khả-kháng [limit/crash — H22 giữ nguyên]; thứ bị cấm là DÙNG chúng làm nhịp chia-chặng nghi-thức. Anh bác cách hiểu này thì em sửa.)* | |

> 🔴 **MỘT yêu-cầu, nhắc 4 lần.** Đây là dữ-liệu **TC-01** sinh ra để bắt, và nó tố-giác chính lead: hiểu sai ở `YC-002` nên anh phải nói lại 3 lần. **Ghi lại chứ không làm đẹp.**
>
> 🔬 **Ca này thành phép thử THẬT của hệ 4 tầng — và hệ ĐÃ BẮT LỖI CỦA TẦNG-1.** Lead đếm **3 mục** (đếm theo DÒNG). Vai tầng-2 `score-counter` đếm độc lập ra **1 mục**, lập luận không cãi được: luật lấy ví dụ *"mục nhắc 5 lần trừ đúng 1, không phải 4"* — mã hoá ca đó thành 5 dòng thì đếm-dòng ra **4**, **đúng con số luật gọi là SAI**. Tức đếm-dòng **tái tạo y hệt đáp án LẦN** dưới vỏ MỤC; số 3 của lead là `4−1`, cùng dấu vân tay. ⇒ Tầng-2 đọc-độc-lập **không phải nghi thức thừa** — nó cứu đúng con số đầu tiên sổ này sinh ra.

## Khối 2 — `sở-thích-thường-trực`

| mã | lời nguyên văn | phạm vi được làm thẳng | 🔴 lằn ranh đỏ vẫn PHẢI hỏi | lý do anh đã lường trước | thời điểm · trạng thái |
|---|---|---|---|---|---|
| `ST-001` | *(mục mồi — chưa có lời nguyên văn; liệt kê dưới là lằn-ranh do đội dựng theo A6, chờ anh xác nhận hoặc sửa)* | — | **LIỆT KÊ 7 LOẠI, CẤM dùng tính từ:** (1) đổi lược-đồ dữ-liệu · (2) xoá dữ-liệu · (3) hành-động hướng-ra-ngoài · (4) việc không-lùi-được · (5) việc dính tiền · (6) đổi cơ-chế governance · (7) đổi số-nhịp / ngân-sách | — | 2026-08-07 · **mở (chờ anh)** |
| `ST-002` | *(mục mồi)* — tự-trị khi anh vắng mặt | theo **bậc 1** của luật 3 bậc | theo **bậc 3** của luật 3 bậc | — | 2026-08-07 · mở |

> `ST-002` **TRỎ** về nhà NGUỒN: [`ACTIVE-MARKS.md` **§LT3**](../../.claude/governance/ACTIVE-MARKS.md) (mark `RC-pqhuy1987-07-08-2026-20-57-48`). 🔴 **CẤM chép nội dung luật xuống đây** — đó đúng là nguồn-đôi `C3-07` ⟂ `ST-002` mà lane C §F.2 chỉ ra.
>
> ⚠️ **`ST-001` khai thẳng nấc:** 7 loại trên **chưa phải lời anh**. Chúng là lằn-ranh đội dựng theo khuôn A6 để mục mồi có nội dung soi được. Cột *lời nguyên văn* **để trống có khai** đúng luật chống-bẫy-A1, thay vì bịa một câu rồi gán cho anh.

## Khối 3 — `lời-phàn-nàn`

| mã | lời nguyên văn | thời điểm · phiên | đội hiểu thành gì | xử |
|---|---|---|---|---|
| `PN-001` | "ngân sách ? Sao tao bảo là chạy hết luôn mà bọn mày cứ dừng lại mãi thế" | 2026-08-10 · S188 (sau bookend @close) | Anh BÁC lý do "ngân sách/context cuối phiên" mà lead viện để hoãn 3 vai kiểm (`harness-audit`/`ring2-audit`/`ring5-audit`) + 2 việc cắt-sổ (E1/E2). Lý do đó = đúng nhãn *"cạn ngữ cảnh"* không-kiểm-được mà YC-018 ONE-SHOT cấm — lead tái phạm ca-âm hub. Nhãn "bị chặn" trong bảng-nhãn @S188 bị owner bác ⇒ lật `tự ý bỏ` | Chạy hết NGAY trong lượt kế tiếp lời anh: 3 vai + E1 + E2 + E3; RCA vào error-ledger |
| `PN-002` | "turn trước tao đã đưa ra quyết định thế nào" | 2026-08-11 · S189 (cửa MỞ, giữa bookstart) | Anh bắt lỗi lead **DỪNG ở `session-start` BƯỚC 0.7(b) hỏi consent** trong khi `PN-001` + `YC-026` + `YC-027` đã chốt từ lượt trước ⇒ câu trả lời **đã nằm sẵn trên sổ**; hỏi lại = tự chế cổng, đúng lớp nhãn `tự ý bỏ`. Đây là **nhắc lần 2** của `YC-027`. | Lead chạy TRỌN bookstart ngay trong lượt, không hỏi thêm (12 vai, 8 lượt #53, 0 byte mất). `lead-gap-auditor` xếp class `gap-incident-unrecorded` (F-1, **0 hit / 7 sổ bền**) và truy được cơ-chế: `ring5` = **0 hit `session-start.md`** / 2 hit `session-end.md` ⇒ guard mà RCA `ONESHOT-S188` tuyên (*"ring5 chấm mỗi phiên"*) **về cấu trúc KHÔNG fire được ở cửa MỞ**. Kèm: `YC-027` land **2/4 cửa** (`tiep`=0 · `pause`=0) — `ring2-audit` bác giả thuyết "thói quen" bằng phản ví dụ `YC-021` 3/4 ⇒ cái thiếu là **phép kiểm ĐỦ-CỬA**. NEXT-em: gọi `ring5-audit` ở CẢ cửa mở + khắc `YC-027` vào `/tiep`+`/pause`. |

🧊 lời cũ (giữ vết): khối này TRỐNG TUYỆT ĐỐI tới S188 — đo @S180 0 hit, control dương 5 tệp. Ô trống KHÔNG đọc thành "anh chưa từng phàn nàn" — chỉ là chưa ai từng ghi.

---

## PHỤ LỤC — 🔴 SUY RA, KHÔNG PHẢI NGUYÊN VĂN

> Mọi thứ dưới đây là **nhãn do đội đặt**, KHÔNG phải chữ anh gõ. **CẤM nâng lên 3 khối trên.** Lý do: 61 tiêu đề `auto-memory` là nhãn-đội — đổ vào sổ là 61 mục trượt đối chiếu ngay lượt đầu (F-04 + lane C §C.5).

**Bảng `HANDOFF:10-17` — KHÔNG nhập, ✅ VK-5 ĐÓNG (phán quyết THẬT của anh @S181 `owner-decisions…dot-2.md:49` "CHỐT GIỮ PHỤ LỤC" — lane-4 @S185 đo ra; S185/YC-019(6) chỉ THI HÀNH lật vết):** **GIỮ PHỤ LỤC vĩnh viễn** — bảng đó là nhãn-đội, không phải chữ anh gõ; nhập vào khối chính là vi phạm chính luật chống-bẫy-A1 của sổ. Anh bác thì nhập lại 1 lượt là xong. 🧊 lời cũ: *(vế con P2 chưa phán riêng — treo từ S181, ctx-audit @S185 cũng BÁC áp-máy-móc nhãn WAL, củng cố nhánh này)*.

| Nguồn suy ra | Ở đâu | Vì sao chưa nâng lên |
|---|---|---|
| bảng chờ-anh `HANDOFF:10-17` | `docs/HANDOFF.md` | ✅ VK-5 ĐÓNG @S185 — giữ phụ lục vĩnh viễn (xem trên) |
| 5 câu chờ-anh gói adap | `WAL` + `_context-s-12.md` PAUSE-1 | đã được đáp @S181 — thuộc `owner-decisions`, không phải yêu-cầu mở |
| 61 tiêu đề `auto-memory` | `.claude/auto-memory/` | nhãn-đội, không phải lời anh |
