35 lines
3.9 KiB
Markdown
35 lines
3.9 KiB
Markdown
# run — 2026-07-17-S133-pe-budget-freeze-daduyet
|
||
|
||
- **engine:** `/fable-real investigator-codebase` (H21 lệnh-A per-invocation, alias "invest" anh gõ) → lead verify + ghi spec → **hmw implement Opus 4.8 MAX** (anh chỉ định "hwm cho đám Opus 4.8 MAX xử lý") → review → deploy
|
||
- **goal:** UAT anh Kiệt FDC (chat 2026-07-16 17:24-17:27): cập nhật ngân sách (`PeWorkItemBudgets` live, per Dự án × Hạng mục) làm **phiếu ĐÃ DUYỆT đổi số theo** (retro-display). Yêu cầu chốt: (R1) phiếu DaDuyet **bất biến** — không đổi gì hết; (R2) ngân sách đúng nhất cho phiếu mới = bản cập nhật **gần nhất** (live giữ nguyên semantics); (R3) "tức lại database tí là oki" — DB delta nhỏ, **không sinh bảng mới** (snapshot AddColumn).
|
||
- **session:** S133 · lead: Fable 5 (owner-choice) · HMW-mode ON
|
||
|
||
## taskList snapshot
|
||
|
||
1. `[fable-real:invest-pe-budget-freeze]` role=`investigator-codebase` · tier=`'fable'` (engine-đắt trong lượt lệnh anh gõ — H21) — deep-pass:
|
||
- MAP read-sites `PeWorkItemBudgets` trong PE flow (BE projection + FE 2-app consumer, file:line) → xác nhận cơ chế live-join gây retro-change trên phiếu DaDuyet.
|
||
- MAP write-sites (command role-gated PRO/CCM).
|
||
- Kiểm per-slip fields sẵn có (PE.BudgetPeriodAmount / CcmBudgetPeriodAmount Mig 59 / Detail.DonGiaNganSach·ThanhTienNganSach) — dùng lại được làm snapshot không.
|
||
- Liệt kê MỌI nhánh vào DaDuyet (CEO-final · level-finalize Mig 58/60 · CCM-threshold Mig 53) → 1 choke-point đặt snapshot (ứng viên: cùng site `ApplyApprovedPriceOnFinalize`).
|
||
- Propose spec 3-mục + checklist per-vai acceptance ĐO ĐƯỢC + backfill phiếu DaDuyet cũ + edge (TuChoi/TraLai-re-approve/WorkItemId null).
|
||
- RETURN structured (findings + checklistEvidence + memoryDelta) + ghi `sub-investigator-codebase-0.md` (ghi-đĩa-trong-lúc-làm — chống #53).
|
||
|
||
(taskList implement sẽ append vào run.md này khi spec chốt + HMW implement phóng.)
|
||
|
||
## Stages
|
||
|
||
- [x] 1. invest fable-real (wf: `wf_348f6155-167`) — #53 return-fail, disk sub-file 22.5KB cứu; lead verify 7/7 claim PASS
|
||
- [x] 2. lead verify + ghi `spec-pe-budget-freeze-daduyet-17-07-2026.md` (OD1 CÓ · OD2 CÓ · OD3 KHÔNG)
|
||
- [ ] 3. hmw implement Opus MAX theo spec — 3 invocation staged:
|
||
- [x] INV-A (2-task ‖, wf_d9639faa-97a, 0-garble): T0 RED thật (`Failed 1/1` found 999tr @PeBudgetFreezeTests.cs:184, prod sạch — evidence sub-test-specialist-0.md) · FE 4 file (badge amber @ "Tổng hợp ngân sách trình ký" :1352, hash mirror `5534addb` ×2, npm build ×2 PASS) · errata spec: query = GetPurchaseEvaluationQuery (bundle prop BudgetSummary)
|
||
- [x] INV-B (1-task, wf_4bef08b8-730, #53 return-fail ×2): lane XONG 6 file + PeBudgetAccumulator (helper 4-site :862/:901/:934/:1109 · display-gate · 2 guard) — chết trước mig → **em-main-solo Mig 67** (scaffold 11 AddColumn sạch + backfill Sql OUTER APPLY khớp accumulator; apply 2 DB, Dev catch-up Mig 66 lag; build slnx 0/0; filter 44/44 **T0 RED→GREEN**)
|
||
- [ ] INV-C (1-task): test-specialist T1-T9 + full suite
|
||
- [ ] 4. reviewer pre-commit → commit/push → cicd verify prod
|
||
|
||
## taskList snapshot — implement (append @spec-chốt)
|
||
|
||
- INV-A.1 `[impl:t0-reproduce]` test-specialist — PeBudgetFreezeTests T0: đưa phiếu tới DaDuyet QUA service finalize (mirror PeApproverFinalizeTests, KHÔNG seed thẳng Phase), đổi pair qua UpdatePeBudgetPro, GetDetail assert giữ số cũ → RED hiện tại (evidence log).
|
||
- INV-A.2 `[impl:fe-badge-types]` implementer-frontend — types 2 app +budgetFrozen (file KHÔNG mirror, sửa riêng) + PeDetailTabs 2 app badge 🔒 (SHA-mirror, hash-object bằng nhau) + npm build ×2.
|
||
- INV-B.1 `[impl:be-full]` implementer-backend — theo spec ② bước 1-7 + checklist BE.
|
||
- INV-C.1 `[impl:test-full]` test-specialist — T1-T9 + dotnet test full PASS.
|