[CLAUDE] Docs: S133 closeout — PE budget freeze DaDuyet (STATUS Mig 67/520 + HANDOFF UAT-script 9-carry + gotcha #81-EXT + session-log + close-synthesis dong orphan)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@ -1348,6 +1348,8 @@ for h in resp.points: # ← .points không phải iterable trực tiếp
|
||||
|
||||
**Bài học:** derived-invariant phải re-establish ở **MỌI mutation đổi tập-nguồn — kể cả DELETE + cascade-delete**, không chỉ write/select. **Enumeration writer trong spec KHÔNG đáng tin** — grep độc-lập MỌI `.Remove(` chạm entity chứa field-nguồn (S87/S88 cardinality class mở rộng lên tầng mutation-path: writer-miss ≡ read-site-miss). Chỉ **verify adversarial-refute** bắt (invest/review/implement đều sót vì cùng theo enumeration). Liên-quan #72/#73 (cardinality) + `feedback_cardinality_change_grep_consumers`.
|
||||
|
||||
**EXT S133 (instance 2 — indirect-assignment):** snapshot ngân-sách-at-DaDuyet (Mig 67) đặt hook ở finalize choke-point (`ApplyApprovedPriceOnFinalize` + helper `PeBudgetAccumulator` 4-site) NHƯNG 2 site gán `Phase` TRỰC TIẾP bypass hook: admin-override `PurchaseEvaluationWorkflowService.cs:308` (`= targetPhase`) + seeder `DbInitializer:1323` (`= current`) → phiếu vào DaDuyet qua 2 đường này KHÔNG snapshot (frozen=0, display rơi về live — đúng bug đang vá, chỉ ở nhánh hiếm hơn). Reviewer adversarial bắt pre-commit; em-main + 3 invocation implement đều sót — cùng bài enumeration. Fix: site-5 chốt snapshot trong admin-override (comment `[S133 site 5]`) + seeder + test `AdminOverride`. **Meta-class chung với instance 1:** field-đích có hook/derive/snapshot ⇒ grep MỌI assignment-site của field đó (`= targetPhase`, `.Phase =`, seeder, override) chứ không chỉ mutation-API chính-tắc.
|
||||
|
||||
### 82. Menu-flag permission grant ≠ quyền API thật — controller gate GET bằng `[Authorize]` trần (Session 118)
|
||||
|
||||
**Triệu chứng:** S118 phân quyền role Procurement — grant menu `Suppliers` (R+C+U) tưởng "menu hiện = làm được mọi thứ". THỰC TẾ 2 chiều lệch: (1) `PUT/DELETE /suppliers` gate `[Authorize(Roles="Admin,CatalogManager")]` → PRO vẫn **403 khi Sửa/Xóa NCC** dù CanUpdate=1 (chỉ Publish/Import theo policy `Suppliers.Update` là ăn); nút Sửa hiện nhưng bấm lỗi. (2) Ngược lại `ReportsController` chỉ `[Authorize]` **trần (KHÔNG policy)** → menu bị S92 ẩn nhưng **MỌI user đăng nhập** vẫn gọi `GET /reports/dashboard` lấy tổng giá trị HĐ + top NCC/dự án theo giá trị (gõ URL/API trực tiếp, bỏ qua menu).
|
||||
|
||||
Reference in New Issue
Block a user