All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 6m17s
Anh chốt "(c) THEO TAY CẦM PHIẾU": Nháp/Trả-lại (tay người soạn) ⇒ chỉ người soạn up file duyệt; Chờ-duyệt ⇒ chỉ thành viên quy trình đã pin (membership, không đòi đúng-lượt — chữ anh @S171 không thu hẹp); terminal DaDuyet/TuChoi ⇒ chặn cả hai (hồ sơ đã chốt). Guard mới EnsureApprovalAttachmentUploaderAsync (WorkflowGuards) wire vào UploadContractSigningPlanAttachmentCommandHandler — CHỈ rẽ nhánh Purpose=ApprovalAttachment; đường căn-cứ dossier giữ nguyên hành vi cũ (có control-test chặn nới guard ngoài phán quyết). Đóng lỗ đo prod @S172: drafter qua policy KeHoachKyKet.Update up được file vào phiếu không thuộc tay mình (#82 hai tầng — policy là quyền module, không phải quyền theo tay). FE 0-đổi (nút vốn chỉ trong dialog duyệt — display-layer; guard này là API-layer thật). Test 660 → 668 (+8: 3 nhánh tay × 2 chủ thể + ngoài-cuộc + terminal-2-vế + control đường-soạn). YC-016 vào sổ; YC-013 nhắc=2 (YC-015 verify 4-chân). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
85 lines
12 KiB
Markdown
85 lines
12 KiB
Markdown
# 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** | `WAL` chain W5 + W4b | *(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 | mở | 1 | `WAL` `next:` | (1) push 42 commit · (2) cổng đồng-bộ + báo cáo cuối · rồi đóng phiên | |
|
||
| `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 | **mở** *(code+deploy XONG — còn acceptance-mắt-anh + bookend @close rồi lật đóng; TASK → WAL)* | **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 | **mở** | 1 | 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 | |
|
||
|
||
> 🔴 **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`
|
||
|
||
**TRỐNG TUYỆT ĐỐI.** Đo @S180: **0 hit** trên toàn kho (control dương cùng phép, chuỗi *"điểm dừng"* = 5 tệp ⇒ lệnh chạy được, rỗng là rỗng thật).
|
||
|
||
🔴 Ô trống này **KHÔNG** đọc thành *"anh chưa từng phàn nàn"* — nó chỉ nghĩa là **chưa ai từng ghi**. Có `PN-001` thì đánh số từ 1.
|
||
|
||
---
|
||
|
||
## 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` — CHƯA nhập, có lý do.** Ngoại-lệ VK-5 (cho phép nhập bảng này vào khối chính) là **vế con của P2 mà anh chưa phán riêng**: anh chốt *"P2 = b"* cho trục REQUEST ⟂ TASK, không nói về VK-5. Theo **bậc 2** của luật 3 bậc vừa ban (*mơ hồ, không phá huỷ → chọn nhánh an toàn + khai*), lead chọn **KHÔNG nhập** và ghi ở đây. Anh gật VK-5 thì nhập sau, một lượt là xong.
|
||
|
||
| 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 chưa được phá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 |
|