[CLAUDE] Docs: S187-S188 closeout — bookend ONE-SHOT 8 vòng + vá 4 bề mặt stale (Tests 668→680 · bundle 2 đời · roster README · Modules GĐ3) + 2 carry mới + seed 12 diary + orphan S187 đóng
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 10m40s

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-08-10 20:44:52 +07:00
parent 80febec977
commit c7b7ca4594
36 changed files with 1161 additions and 37 deletions

View File

@ -0,0 +1,58 @@
# S187→S188 — YC-023/024/025: module **Duyệt Hợp đồng (GĐ3)** từ KHKK
> 2026-08-10 · phiên-LOGIC **L14** (window 2-3) · lead = Fable 5 (đổi Opus 5 @closeout) · 0 migration · test **668 → 680**
> Run-trace: `.claude/workflows/runs/2026-08-10-S187-duyet-hd-tu-khkk/` (11 artifact) + `…/2026-08-10-S188-bookend-close/`
> Push: `bc309c55..0149f106` (đợt-1) · `0149f106..b275893c` (cụm) · `80febec9` (sổ) — cicd **4/4** + **5/5**
## 1. Owner-decisions (nguyên văn → sổ yêu-cầu)
| mã | tóm | thi hành |
|---|---|---|
| `YC-023` (S187) | mở module Duyệt HĐ GĐ3 mirror PE/KHKK, quy trình per-LOẠI, kế thừa KHKK đã duyệt; điều phối 2 invest + 1 style-review + 1 plan-review ×`/fable-real` → fan-out Opus 5 MAX per-wave | 4/4 lượt Fable xong → spec → 2 đợt fan-out |
| `YC-024` (S188) | **9 đáp án (80)-(88)** | 7-LOẠI · PA-A · mở-tất-cả-trước (W8 HOÃN) · roster sao khuôn KHKK · 2-nút · admin giữ ẩn (W9 HỦY) · khoá cứng · 0-cột-gợi-ý · ruột pre-fill |
| `YC-025` (S188) | *"làm tiếp hết đi, xong hết tao review 1 lần"* | W3-W6 + W10 chạy trọn không dừng giữa wave; push gom; trình review 1 lần |
## 2. Chuỗi 4 lượt `/fable-real` (STAGE A-C) — S187→S188
- **invest BE** (26.119 B) + **invest FE** (21.981 B) song song 2 lăng kính. Lõi: V2 tái dùng 100% · `ApplicableType=3` không phân loại · **phiếu GĐ3 = chính `Contract`** (0 entity mới) · 0-mig · vỏ FE đủ 42 leaf `Ct_*` · khuôn duyệt = `KhkkWorkflowPanel`.
- **style-review** (`back-end-reviewer-style` ×Fable, 21.680 B) — `PASS_WITH_FLAGS — 7 flag`; nặng nhất **FLAG-2 wave MỒ CÔI**: F1/F2 cần BE-DTO mà wave-list không có.
- **plan-review** (`reviewer` ×Fable, 29.647 B) — 12/12 claim re-verify bằng code + **3 phát hiện mới**: ① FE đề xuất DTO khuôn **PE** trong khi panel mirror là khuôn **KHKK** (chọn PE = viết lại panel) · ② `fe-admin` ẩn `Ct_*` **2 TẦNG** (`ADMIN_HIDDEN_KEYS` + prefix-rule `:248`) · ③ đường fetch cây workflow đã có sẵn. Ra **plan 11 wave** + hợp nhất 12 nhãn CHỜ-ANH → **9 câu** + 3 tự-quyết.
- Lead verify + ghi [`spec-duyet-hd-10-08-2026.md`](../../../.claude/workflows/runs/2026-08-10-S187-duyet-hd-tu-khkk/spec-duyet-hd-10-08-2026.md) (H21① 3 heading).
## 3. Thi công — 2 đợt ship
**Đợt-1 (0-chặn-owner, `0149f106`):** W1 gỡ 2 bom per-type (test-before 3 ĐỎ-hành-vi → XANH) · W2 BE-DTO nền (`ContractSourceDto` reverse-join KHKK + `CurrentWorkflowStepIndex` + cây thô khuôn KHKK) · W7 server-filter per-type. Reviewer `PASS_WITH_FLAGS — 8`: **F-1/F-2 MAJOR** (3 tên field FE↔BE lệch + nullability — build xanh nên không máy nào bắt) **vá ngay trước commit**; F-4 sửa AC-W7 + nợ `[carry:w7b-inbox-param]`; F-3 treo W6.
**Cụm W3-W6 (`b275893c`):** W3 seed 7 quy trình `HD-*` sao khuôn KHKK (builder chung; cờ finalize **false** có khai — tránh config-lie #78) + 7 key `AwV2_Hd*` **by-construction** + menu-row T6 + 2 row canonical STATUS · W4 guard 4-cửa nhà chung `ContractWorkflowGuards` (khoá cứng theo loại; bridge `ApprovalWorkflowId` → nullable auto-pin) · W6-BE Đ2 guard đúng-trạm V2 (V1 giữ nguyên) + test security · W5 card "Nguồn gốc KHKK" · W6-FE panel duyệt **2 nút** mirror `KhkkWorkflowPanel` (dual-render V1) + Designer type-3 family-slice.
## 4. Nghiệm thu
- **cicd đợt-1** 4/4 · **cicd cụm PASS 5/5**: run #482 success (gate 680) · bundle rotate ×2 app · **seeder chạy thật prod: 7 `HD-*` + 7 menu-row, FK sạch, 8 `KHKK-N*` control nguyên** · smoke 9/9 · DLL marker `ContractWorkflowGuards` 0→4.
- **W10 dry-run Dev PASS 5/5** (lead tự chạy sau 4 đời agent chết non): nhánh A `HD-TP` auto-pin → 5 trạm → **DaPhatHanh** (`APVN01/HDTP/SOL&NCC-DIEN/01`) · sai-trạm **403 nêu đích danh Bước/Cấp** · nhánh B gửi mã sai họ → **409 nêu tên mã**, auto-pin → `APVN01/HĐDV/SOL&DV-BAOVE/01` · F3 inbox 2 chiều đúng (approver thấy / ngoài cấp không).
- Sổ ID Dev (seq đã cháy — không phải data thật): `KHKK/2026/901` + 2 HĐ `ZZTEST-W10`.
## 5. Bài học phiên (ứng viên gotcha/memory)
1. 🔴 **#53 garble ~90% return** (≈15/17 lượt sub) — **đĩa cứu 100%, 0 byte mất**. Lượt nào lead ép "ghi file TRƯỚC TIÊN" thì recover trọn; lượt reviewer-cụm **không ép** → chết trắng 0 trace ×2 ⇒ *ép-ghi-trước-tiên là biến quyết định, không phải lời khuyên*.
2. **Agent chết non ≠ mất việc, NHƯNG ledger phải tiến từng đời**: W10 qua 4 đời agent, mỗi đời để lại B0/B1 trên trace ⇒ đời sau nối được; cuối cùng lead tự chạy B2-B5. Trace = đơn vị tiến-độ, không phải return.
3. **Tiền-đề spec sai 3/4 ở W7** (fe-admin không có `MyContractsPage`; inbox không có param) — implementer **BLOCKED đúng kỷ luật** thay vì làm bừa ⇒ nợ có mã thay vì bug câm.
4. **Build xanh ≠ hợp đồng đúng**: 3 tên field FE lệch BE mà `tsc`/680 test đều im (0 consumer) — chỉ reviewer đọc chéo 2 phía mới bắt.
5. **sqlcmd `-i` mặc định `QUOTED_IDENTIFIER OFF`** ⇒ mọi DML trên bảng có filtered index chết `Msg 1934`; `sqlcmd < file` (stdin) chạy **im lặng 0 dòng**. Dùng `-I`.
6. **Rate-limit login 5/phút/IP** (`Program.cs` `RateLimit:AuthLoginPerMinute`) — kịch bản nhiều danh tính phải cache token, không login lại mỗi bước.
## 6. Nợ mang sang
- `[carry:w7b-inbox-param]` — BE `/contracts/inbox` thêm `?type=` + bỏ `Take(100)`, rồi FE gỡ client-filter (kèm `ContractCreatePage` ×2 cùng lớp).
- **W8 authz Đ1 HOÃN** theo (82) — chờ anh nói "ổn rồi". **W9 HỦY** theo (85).
- F-3 `ActiveOthers` — Designer đã đi hướng lát-cắt-history (khuôn KHKK) ⇒ field API còn 0 consumer, quyết giữ/gỡ ở wave sau.
- Slot chờ anh còn: (74)(76)(77)(78)(79) + tồn (22)(67)(72).
## 7. memory-triple + gate (điền ở closeout)
```
memory-triple: do=scripts/measure-agent-memory.ps1 · exit 0
memory-triple: de-xuat=scripts/memory-archive-gate.ps1 DRY · (xem harness-eval return)
memory-triple: kiem=harness-audit · (verdict trong run-folder bookend-close)
memory-triple: do-record=governance-detectors TOTAL=59 (INFORM 24 tách riêng)
memory-triple: do-record=NHIP-NO: kiem light 2/6 deep 2/1 OVERDUE:deep | tran-bo-nho 5 over-cap l2idx 0 over | run-chua-gom 1 | pull-cach 0 ngay | so-yc treo 4 / nhac2+ 2
```