[CLAUDE] Docs: S76 closeout — PE ngan sach ma tran 3 cot + bang luoi + badge quyen-NS

STATUS/HANDOFF (Mig 55->56, test 339->344, gotcha 69->70, bundle jOqxW4-p/DbsznVvR
Run #319, Phase +S76, In Progress->Recently Done) + gotcha #70 (FE absolute-set echo
stale-echo data-loss -> useIsFetching gate) + ef-core skill Mig 56 row + session log
2026-06-19-S76 + agent-memory harvest (impl-FE stray->canonical + 4 sub diary).
Curate-debt carry: reviewer 45KB + inv-codebase 35KB keep-floor-hit manual-condense.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-06-19 11:44:34 +07:00
parent 21d1f4ec43
commit 8f780b6237
10 changed files with 113 additions and 14 deletions

View File

@ -1218,6 +1218,20 @@ for h in resp.points: # ← .points không phải iterable trực tiếp
---
### 70. FE absolute-set form echo field anh-em từ server-snapshot + `invalidate()` fire-and-forget → cửa-sổ STALE-ECHO mất dữ-liệu khi lưu 2 ô liên-tiếp (Session 76)
**Triệu chứng:** Form ngân sách PE 2 ô cùng cột PRO (ban hành + hiệu chỉnh) lưu qua CÙNG `proMut`, mỗi save echo field anh-em từ `bs` (server snapshot). Lưu ô A (proInitial) `invalidate()` refetch BẤT-ĐỒNG-BỘ; TRƯỚC khi refetch về, `bs.proInitial` còn lưu ô B (proAdjust) echo `bs.proInitial` **đè mất giá-trị A**. Workflow review (reviewer) bắt implementer self-review SÓT.
**Cơ chế:** BE handler absolute-set (set thẳng cả 3 field, thiếu=null=CLEAR) FE PHẢI echo field không-đổi. Echo lấy từ `bs` (props từ query) STALE trong cửa-sổ [mutate-resolve refetch-land]. `mut.isPending` chỉ true trong HTTP mutate, KHÔNG cover refetch nút Lưu re-enable khi `bs` vẫn .
**Guard:** Gate nút Lưu = `mut.isPending || useIsFetching({queryKey:['pe-detail',ev.id]}) > 0` khoá save tới khi refetch land (`bs` fresh). Đóng cửa-sổ stale-echo. Áp CẢ PRO+CCM cells + notes. (Pattern absolute-set-echo từ CCM Mig 50/55 prod chưa-báo-lỗi nhưng PRO nhân-đôi bề-mặt trước go-live tài-chính.)
**Credit:** reviewer S76 (2-lane workflow review Part 2/3) escalate MAJOR data-loss; em-main `useIsFetching` ×2 app trước deploy.
**References:** `fe-*/src/components/pe/PeDetailTabs.tsx` (PeBudgetSummaryTable `peFetching`) · gotcha #44 (silent issue self-review bias).
---
## Checklist debug bug mới
1. Build pass không? fail check using + package version compat