Files
solution-erp/docs/changelog/sessions/2026-08-10-2000-S187-S188-duyet-hop-dong-gd3.md

7.7 KiB
Raw Blame History

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)

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 (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

8. Chạy-bù bookend TRỌN theo PN-001/YC-027 (owner bác "ngân sách" — cùng phiên)

completeness-gate S188 (SAU chạy-bù): vong 5/5 chuc-nang (khong-nhip: V4-shard-8/15) | phep DAT 3 / TRUOT 1 / vacuous 0
  V1 ring1 (roster 29 5/5-nguon + A-00 bat loi lead-pin) · V2 ring2 lan-3 (2Đ1T2KC — TRƯỢT=RESET-tally-sai ⇒ HOÀN 8 class tu git + history entry) ·
  V3 trio (eval MIXED-35 [return v2 TRANSCRIBE TRỌN — v1 lead scribe TÓM làm mất bảng, audit C1 bắt] · refine 2A/16BÁC/4E · audit gộp 4Đ2T1KC) ·
  V4 khong-nhip · V5 floor áp mọi verdict. Phép-1 tick (62, 3 số) ĐẠT · phép-2 NHIP-NO nguyên văn ĐẠT · phép-3 closeout-4-sổ ĐẠT · phép-4 vai-có-sổ TRƯỢT-lúc-đo→SEED-12-vai-đã-vá.
memory-triple: kiem=harness-audit gộp 3 lượt · 4Đ2T1KC (2 TRƯỢT đều lỗi phía lead: scribe-tóm + đề-bài sai tiền-đề)
ring5: 6 nhãn — 1Đ·5T·0-xoá-án ⇒ 6 `tự ý bỏ` + SÓT-1 (đảo thứ tự §6.4 — cửa sổ mù Sàn-2 ~73') ⇒ RCA ONESHOT-S188 + [carry:sentinel-truoc-bu]
headroom @audit-tick = 122.555 (giảm tiếp — hotload đo 6 file docs, HANDOFF phình do chính RE-STAMP; N4 đúng)