- STATUS/HANDOFF S73: Mig 54 · test 334 · bundle Bv3jUCNo/BWlMBQz6 (Run #313 feature + #314 fix) - session log 2026-06-18-S73-pe-gia-de-xuat-ccm-done.md - run-trace runs/2026-06-18-mig54-pe-review (custom-inline review, bu post-hoc) + _ledger 2 row (R1 schema 1/4 + R2 free-text 2/3) - agent-memory flush 5 sub + reconcile implementer-frontend cwd-misland stray -> canonical Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
28 lines
3.4 KiB
Markdown
28 lines
3.4 KiB
Markdown
# S73 (2026-06-18) — Mig 54 PE giá đề xuất PRO/CCM + CEO chọn giá chốt + CCM duyệt-done ô-tích
|
|
|
|
> anh Kiệt FDC spec (Zalo) — go-live so-sánh-giá **thứ Hai 22/06**. em main + 6 sub + 2 review-workflow. State đầy đủ ở `STATUS.md` / `HANDOFF.md` S73; file này = arc + lessons.
|
|
|
|
## Yêu cầu (3 nhóm — anh Kiệt FDC)
|
|
- **① "Giá chào thầu" thêm giá đề xuất NGOÀI giá NCC:** PRO nhập Min/Max + CCM nhập 1 giá → CEO duyệt theo. anh chốt (AskUserQuestion): **CEO CHỌN 1 giá chốt khi duyệt** (bind + lưu trên phiếu).
|
|
- **② Cờ gấp PRO đỏ / CCM xanh** — ĐÃ có từ S69 (Mig 53), chỉ verify lại.
|
|
- **③ CCM duyệt-done khi gói < ngưỡng CEO-uỷ-quyền.** anh chốt: ĐỔI auto-threshold (S69) → **Ô-TÍCH-TAY** (CCM chủ động tích).
|
|
|
|
## Done (2 commit prod-verified)
|
|
- `1d86abc` (feature, cicd **Run #313** PASS) + `6aa4dcb` (FE empty-candidates fix, **Run #314** PASS). Bundle final admin **`Bv3jUCNo`** / user **`BWlMBQz6`**.
|
|
- **BE:** Mig 54 `AddPeSuggestedAndApprovedPrice` 5-cột additive-nullable · 2 setter role-gate PRO/CCM (Forbidden fail-closed mirror budget) · ApproveV2 **③ opt-in** (`finalizeByCcmDelegation`, gỡ auto S69) + **① bind giá chốt** mọi nhánh DaDuyet (human bắt-buộc-chọn, isSystem-miễn) · DTO +7. Threading 7-layer (né bẫy F1+F2 wire-fail).
|
|
- **FE 2 app SHA-mirror:** PeWorkflowPanel (bộ chọn giá + ô tích CCM, FE derive `currentIsFinalApprover` từ approvalFlow) + PeDetailTabs `SuggestedPriceRows` + types +7.
|
|
- **Test 306→334** (+28: opt-in spec 6→11 + 10 `PeApprovedPriceFinalizeTests` + 13 `PeSuggestedPriceSetterAuthzTests`).
|
|
|
|
## Lessons (đáng nhớ)
|
|
1. **Workflow schema-force unreliable:** R1 custom-inline `agent({schema})` CHỈ **1/4** lane trả (3/4 fail no-StructuredOutput). R2 **free-text 2/3 PASS** (cùng harness/task). → review/verify fan-out dùng **free-text / hmw RUN-TRACE**, KHÔNG ép-schema. (`feedback_workflow_fanout_reliability` updated.)
|
|
2. **Governance honesty arc:** anh hỏi "sao ultra-on task lớn ko chạy workflow?" → em nhận **lệch mandate auto-Workflow** (spawn-lẻ + em-main BE solo) + chỉ khai khi bị hỏi → cam kết **surface-before-deviate** (báo trước khi đi khác chuẩn).
|
|
3. **Rủi ro #1 FE empty-candidates = UNREACHABLE:** double-check phát hiện submit-guard `PurchaseEvaluationWorkflowService.cs:194` chặn gửi-duyệt khi `winnerQuoteTotal≤0` → phiếu ChoDuyet luôn có ≥1 giá NCC. Fix `length===0` = phòng-thủ thuần + sửa mâu thuẫn UX cũ.
|
|
4. **Custom-inline workflow KHÔNG tự-scaffold run-trace** → bù post-hoc `runs/2026-06-18-mig54-pe-review/` (anh chốt "custom OK, miễn ghi MD").
|
|
5. **cwd-misland tái diễn:** implementer-frontend (cd fe-user) → MEMORY rơi `fe-user/.claude/` → em reconcile → canonical + xóa stray. Optional `.gitignore` guard defer.
|
|
|
|
## NEXT (anh/anh Kiệt UAT — go-live thứ Hai)
|
|
- **Cấu hình "Ngưỡng giá trị gói CEO"** Workflow Designer (③ ô-tích chỉ hiện khi gói < ngưỡng).
|
|
- **Test 3 luồng:** ① PRO/CCM nhập giá → duyệt cuối chọn giá chốt · ③ phiếu < ngưỡng → CCM tích duyệt-done.
|
|
- **Xác nhận:** CCM (CostControl) NGAY TRƯỚC CEO (logic tự-done giả định vậy).
|
|
- "C" (sau duyệt → chuyển phiếu đến dự án) chờ anh Kiệt spec form. E-Office update sau.
|