1.6 KiB
WAL — auto-generated, không sửa tay
updated: 2026-07-12 | session: S114 | branch: main goal: PE multi-NCC per hạng mục (anh Kiệt) — cho ≥2 NCC-TP trúng thầu/1 hạng mục, mỗi nhà 1 giá riêng — 6-bước fable-clone→hmw→verify→deploy→session-end
chain: [x] B1 fable-clone invest ensemble (4-lane inv-cb) DONE — wf_dd49ddc0-f29 [x] B2a anh Kiệt chốt D1=SUM · D2=THAY-THẾ · D3=giá-gốc · D4=1HĐ/NCC (D5 default) — spec LOCKED, 0 bảng/cột mới [x] B2b fable-clone review ensemble DONE — wf_1e127f4b-de5 (2/3 clean, lane correctness #53-garble→em-recover); 6 adjustment A1-A6 fold vào spec cuối [!] B3 hmw Opus 4.8 MAX implement — RUN-TRACE 3-lane (implementer-backend + implementer-frontend + test-specialist) [ ] B4 fable-clone reviewer verify (grep-suite 0 sót IsWinner-aggregation + threshold-crossing) [ ] B5 deploy + commit (cicd verify) [ ] B6 session-end
next: launch B3 hmw implement per spec cuối. DTO chốt: POST /select-winner {detailId, supplierIds[]} per-detail. 6 adjustment: A1 giaTri=SUM(IsSelected) bỏ detailsSum (⚠️ single đổi budget→bid) · A2 derive IsWinner mọi writer+seed+backfill-2-chiều · A3 re-key SPLIT (5 financial→IsSelected, winner-names GIỮ IsWinner-derived) · A4 endpoint+FE per-cell grid · A5 test-before+threshold-crossing · A6 mig 3-file Down-noop verify: build 0-error + dotnet test (7 file cũ update + test mới per-hạng-mục total + threshold-crossing) + npm build ×2 + FE PeDetailTabs SHA 2-app run-folder: .claude/workflows/runs/2026-07-12-S114-multi-ncc-per-hangmuc/ (run.md + spec-multi-ncc-per-hangmuc-12-07-2026.md)