wal: flush 20260801T1240
This commit is contained in:
@ -43,7 +43,11 @@ chain:
|
|||||||
dựng nút — sub-implfe-k7.md) ⟂ test-lane spawn @sau-BE (8-case + 2-authz + idempotency + :398
|
dựng nút — sub-implfe-k7.md) ⟂ test-lane spawn @sau-BE (8-case + 2-authz + idempotency + :398
|
||||||
ngoại-lệ — sub-test-k7.md). Cửa chết → ĐỌC 3 SUB-FILE trước, đừng spawn lại. CÒN: gate-K7 → commit
|
ngoại-lệ — sub-test-k7.md). Cửa chết → ĐỌC 3 SUB-FILE trước, đừng spawn lại. CÒN: gate-K7 → commit
|
||||||
→ cicd
|
→ cicd
|
||||||
|
[ ] GĐ3 cây-4-folder ĐỒNG-NHẤT — anh chốt (55) @S167 "Nên đồng nhất": áp cây 4-folder lên cụm trang
|
||||||
|
Duyệt-hợp-đồng (7 loại HĐ) ×2 app — làm SAU K7 ship (tái dùng tập ContractIds/usePipelineStages mới)
|
||||||
[ ] K8-prep form-14-người fail-closed + gói SOLUTION-PE-{n} + QĐ9 đo-2-nhánh + ZZTEST + rollback-theo-ID
|
[ ] K8-prep form-14-người fail-closed + gói SOLUTION-PE-{n} + QĐ9 đo-2-nhánh + ZZTEST + rollback-theo-ID
|
||||||
|
+ dựng 2 workflow KHKK type-3/type-10 qua Designer đọc roster từ PE-live — anh (54) @S167 "quy trình
|
||||||
|
duyệt tử tế rồi ko sao" = ratified-hướng, dựng khi vào K8-prep (báo cáo khi làm, KHÔNG SQL tay #84)
|
||||||
[ ] closeout-nợ: ✅ slot(57) ĐÓNG @S167 (anh "auto"): SPLIT _INDEX 21.468→8.756B (42,7% cap) +
|
[ ] closeout-nợ: ✅ slot(57) ĐÓNG @S167 (anh "auto"): SPLIT _INDEX 21.468→8.756B (42,7% cap) +
|
||||||
_INDEX-2026-H1.md 13.906B tầng-lạnh · vá kèm 3-bệnh-sẵn (mega-line #423 · 29-entry lạc-section ·
|
_INDEX-2026-H1.md 13.906B tầng-lạnh · vá kèm 3-bệnh-sẵn (mega-line #423 · 29-entry lạc-section ·
|
||||||
needle-quote test-specialist) · 3 script cùng-class → `_INDEX*.md` (gate-2-chỗ chống-haystack-dương-giả
|
needle-quote test-specialist) · 3 script cùng-class → `_INDEX*.md` (gate-2-chỗ chống-haystack-dương-giả
|
||||||
@ -70,11 +74,12 @@ verify:
|
|||||||
dotnet test SolutionErp.slnx --nologo # 622/0 = 45D + 577I
|
dotnet test SolutionErp.slnx --nologo # 622/0 = 45D + 577I
|
||||||
|
|
||||||
notes: MANDATE PAUSE-3 sống (sổ nhớ kỹ từng đầu việc đã review — rà OG từng dòng trước khi tuyên xong).
|
notes: MANDATE PAUSE-3 sống (sổ nhớ kỹ từng đầu việc đã review — rà OG từng dòng trước khi tuyên xong).
|
||||||
S166 chết-vì-limit GIỮA /pause-4: draft MIND-4 7Đ/0T CHƯA chèn (ctx-curator chết) ⇒ /pause kế (ctx-verifier
|
4-chốt anh @S167 lượt-2: (54) ratified-hướng · (55) GĐ3 đồng-nhất → chain · (56) ĐÓNG (anh view "hiện
|
||||||
@S167 11 cờ): PAUSE-4 khai 2-WINDOW (④ _context mù trọn window-4) · NÉN MIND-2 SÂU ≤1,5KB (⑤ số-học thiếu
|
ổn", có yêu-cầu User thì cập nhật sau) · (58) TRẦN `_mind` 32→48KB ĐÃ THI HÀNH (mind-check live 62,2%
|
||||||
≥700B dù nén khuôn cũ) + di-trú nhãn TỪNG Ý 22-ý-D + 4 con-trỏ vào TRƯỚC (PARK-2/PARK-5 cấp nhà ⑨ ·
|
ĐẠT — "57" anh gõ = slot 58, lead khai cách hiểu) ⇒ áp-lực "PHẢI nén MIND-2" HẾT, nén = tùy-chọn-khi-tiện.
|
||||||
ESCALATE(i) disposition ⑩ · slot(57) _INDEX đo tươi 104,8% TRÀN 988B ⑥ · slot(58) ruột "65,7%" đã lật ⑦)
|
S166 chết-vì-limit GIỮA /pause-4: draft MIND-4 7Đ/0T CHƯA chèn ⇒ /pause kế (cờ ctx-verifier còn hiệu-lực):
|
||||||
· chuẩn-hoá nhãn `{UX chờ anh}`→`{treo-chờ-anh}` khi di-trú (⑧ ngoài bộ-4 = trượt-cấu-trúc) · MIND-4 ≤6.331B
|
PAUSE-4 khai 2-WINDOW (④ _context mù trọn window-4) · khi nào NÉN MIND-2 thì di-trú nhãn TỪNG Ý trước
|
||||||
· diary ctx-verifier S167 = lead seed on-behalf (vai nhịn Write giữ rào R0 gate-K6). run.md ledger tụt hậu ③
|
(PARK-2/PARK-5 cấp nhà ⑨ · ESCALATE(i) disposition ⑩) · chuẩn-hoá nhãn `{UX chờ anh}`→`{treo-chờ-anh}`
|
||||||
|
(⑧ ngoài bộ-4 = trượt-cấu-trúc) · diary ctx-verifier S167 = lead seed on-behalf. run.md ledger tụt hậu ③
|
||||||
(row 4 "☐ lần /tiep sau" + 0 row F-1) = sửa cùng closeout. Treo-không-chặn: (I)(II)(III) · OG-5 ·
|
(row 4 "☐ lần /tiep sau" + 0 row F-1) = sửa cùng closeout. Treo-không-chặn: (I)(II)(III) · OG-5 ·
|
||||||
OG-6-soát-4-ô-UI · 2-hở-UX-K1-FE · F-5-PermGuard-khuôn-cũ · O-2-literal-2-nơi · G-1-ratify-OPT-IN.
|
2-hở-UX-K1-FE · F-5-PermGuard-khuôn-cũ · O-2-literal-2-nơi. G-1 comment-đóng-dấu = commit riêng sau K7.
|
||||||
|
|||||||
@ -6,8 +6,9 @@
|
|||||||
"session_ctx_kb": 64,
|
"session_ctx_kb": 64,
|
||||||
"_session_ctx_kb_owner_set": "🔴 OWNER-SET TUONG-MINH @S146 2026-07-22 — anh chot '1 -> tuong minh' sau khi lead surface DAY DU 2 ly-do phan-bien (K6.2 muon-so-chua-do + H18 ghost-wire). Quyet-dinh cua owner co concern trong tam nhin => THUC THI, khong hoi lai. Don vi = KB; code doc PHAI nhan 1024 (khop manifest hub 101e69d6 'session_ctx_kb: 64'). Nguon so 64 = manifest hub, KHONG phai SE tu do.",
|
"_session_ctx_kb_owner_set": "🔴 OWNER-SET TUONG-MINH @S146 2026-07-22 — anh chot '1 -> tuong minh' sau khi lead surface DAY DU 2 ly-do phan-bien (K6.2 muon-so-chua-do + H18 ghost-wire). Quyet-dinh cua owner co concern trong tam nhin => THUC THI, khong hoi lai. Don vi = KB; code doc PHAI nhan 1024 (khop manifest hub 101e69d6 'session_ctx_kb: 64'). Nguon so 64 = manifest hub, KHONG phai SE tu do.",
|
||||||
"_session_ctx_kb_reader": "🔄 GHOST-WIRE DONG @S153 2026-07-26 (adopt 0df10df4 T7): reader THAT dau tien = scripts/session_ctx.py mind-check phep-phu-8 — doc khoa nay LIVE, nhan 1024, do _context-s-<N>.md, CO khi vuot (verify acceptance-d @S153: output in 'aux tran _context ... session_ctx_kb'). Lam dung 3 dieu caveat cu tu dan {(a) doc khoa khong hardcode (b) x1024 (c) go dong caveat khi co reader}. 🧊 Lineage: caveat H18 class-2 defined-but-unread song S146→S153 (do @S146 0-reader, hit duy nhat = comment nhip-no-probe.ps1:42; doi chung pull_warn_days co reader that :190) — go dung luc co reader, khong som hon.",
|
"_session_ctx_kb_reader": "🔄 GHOST-WIRE DONG @S153 2026-07-26 (adopt 0df10df4 T7): reader THAT dau tien = scripts/session_ctx.py mind-check phep-phu-8 — doc khoa nay LIVE, nhan 1024, do _context-s-<N>.md, CO khi vuot (verify acceptance-d @S153: output in 'aux tran _context ... session_ctx_kb'). Lam dung 3 dieu caveat cu tu dan {(a) doc khoa khong hardcode (b) x1024 (c) go dong caveat khi co reader}. 🧊 Lineage: caveat H18 class-2 defined-but-unread song S146→S153 (do @S146 0-reader, hit duy nhat = comment nhip-no-probe.ps1:42; doi chung pull_warn_days co reader that :190) — go dung luc co reader, khong som hon.",
|
||||||
"mind_ctx_kb": 32,
|
"mind_ctx_kb": 48,
|
||||||
"_mind_ctx_kb_set": "🔴 OWNER-DELEGATED → ENGINE-PROPOSED → LEAD-DECIDED @S153 2026-07-26 (adopt thu 0df10df4 khoan (35); lenh pipeline anh 26-07 'fable-real invest → spec → hmw xu ly' = UY QUYEN — KHONG PHAI owner chot so; anh veto 1 edit thi doi — khuon hmw_width._ratified_by). Don vi KB, reader x1024 = scripts/session_ctx.py mind-check phep-7 (fail-loud exit-3 khi khoa vang — CAM default, khuon H24-2). Nguon so 32 = hub O-4 (hub tu khai 'so chu dat, khong rut tu du lieu'); SE cung nac khai: file _mind dien hinh <10KB (p=1-3 pause/phien-logic, quan sat S147-S152) => 32 = >=3x headroom; re-tune sau dogfood T9 khi co so do that.",
|
"_mind_ctx_kb_raise_S167": "🔴 OWNER-DECIDED 2026-08-01 (anh: 'Đồng ý phương án nâng trần' — slot (58), anh gõ nhầm số 57, lead khai cách hiểu trong turn): 32→48 vì phiên-LOGIC L9 dài bất thường (5 window, chuỗi 8 wave — file phình theo độ dài MẠCH; đo 30.573B = 93,3% trần cũ, số học MIND-4 2-window thiếu ≥700B dù nén). L10 mở thì file mới về 0 nên không phình vĩnh viễn. Áp lực 'PHẢI nén MIND-2 mỗi cửa' HẾT — nén thành tùy-chọn-khi-tiện (luật di-trú nhãn TỪNG Ý trước nén GIỮ NGUYÊN khi nào nén thì làm).",
|
||||||
|
"_mind_ctx_kb_set": "🧊 lineage (số 32 cũ): OWNER-DELEGATED → ENGINE-PROPOSED → LEAD-DECIDED @S153 2026-07-26 (adopt thu 0df10df4 khoan (35); lenh pipeline anh 26-07 'fable-real invest → spec → hmw xu ly' = UY QUYEN — KHONG PHAI owner chot so; anh veto 1 edit thi doi — khuon hmw_width._ratified_by). Don vi KB, reader x1024 = scripts/session_ctx.py mind-check phep-7 (fail-loud exit-3 khi khoa vang — CAM default, khuon H24-2). Nguon so 32 = hub O-4 (hub tu khai 'so chu dat, khong rut tu du lieu'); SE cung nac khai: file _mind dien hinh <10KB (p=1-3 pause/phien-logic, quan sat S147-S152) => 32 = >=3x headroom; re-tune sau dogfood T9 khi co so do that.",
|
||||||
"tiep_reload": {
|
"tiep_reload": {
|
||||||
"_note": "🔄 @S153 adopt 0df10df4 khoan (37) RESOLVED (b) — nap-lai NEN RUT-GON mac dinh @/tiep (OWNER-DELEGATED cung vet _mind_ctx_kb_set). Nen-full SE do tuoi @S153 = 596.316B ~ [149.079..198.772] tok (instrument-backfill S153) — nang hon nen hub (439.328B ~ 110K tok) 1.36x, nuot tron rang mem ~150K/cua cua hub-owner neu full => rut gon ~ 40-60K tok (input one-shot cache-duoc). Reader = nghi-thuc /tiep (AI doc danh sach nay qua tiep.md §3-bis TRO KHOA — B1 lenh KHONG chep danh sach); KHAI THANG: chua co script-consumer — KHAC class ghost-wire vi hanh-vi tieu thu moi luot /tiep + dogfood T9 do that. Pham-vi tung muc khoanh ngay trong sources (khuon hub 'do theo pham-vi tung muc da khoanh trong cau-hinh').",
|
"_note": "🔄 @S153 adopt 0df10df4 khoan (37) RESOLVED (b) — nap-lai NEN RUT-GON mac dinh @/tiep (OWNER-DELEGATED cung vet _mind_ctx_kb_set). Nen-full SE do tuoi @S153 = 596.316B ~ [149.079..198.772] tok (instrument-backfill S153) — nang hon nen hub (439.328B ~ 110K tok) 1.36x, nuot tron rang mem ~150K/cua cua hub-owner neu full => rut gon ~ 40-60K tok (input one-shot cache-duoc). Reader = nghi-thuc /tiep (AI doc danh sach nay qua tiep.md §3-bis TRO KHOA — B1 lenh KHONG chep danh sach); KHAI THANG: chua co script-consumer — KHAC class ghost-wire vi hanh-vi tieu thu moi luot /tiep + dogfood T9 do that. Pham-vi tung muc khoanh ngay trong sources (khuon hub 'do theo pham-vi tung muc da khoanh trong cau-hinh').",
|
||||||
"mode": "rut-gon",
|
"mode": "rut-gon",
|
||||||
|
|||||||
@ -28,11 +28,45 @@ File: `tests/SolutionErp.Infrastructure.Tests/Api/AuthorizePolicyRegressionTests
|
|||||||
|
|
||||||
**ĐO:** `--filter AuthorizePolicyRegressionTests` → **Passed! Failed: 0, Passed: 22** (trước: 1 FAIL). File này +0 test mới (sửa test sẵn có, +2 vế assert).
|
**ĐO:** `--filter AuthorizePolicyRegressionTests` → **Passed! Failed: 0, Passed: 22** (trước: 1 FAIL). File này +0 test mới (sửa test sẵn có, +2 vế assert).
|
||||||
|
|
||||||
## §2 — 8 case T1-T8 + 2-authz + idempotency
|
## §2 — [BƯỚC 2 ✅ XONG] File MỚI 11 test bridge — `--filter CreateContractFromSigningPlanTests` → **Passed! Failed: 0, Passed: 11**
|
||||||
|
|
||||||
CHƯA ĐO.
|
File: `tests/SolutionErp.Infrastructure.Tests/Application/CreateContractFromSigningPlanTests.cs` (mirror khuôn bridge PE cũ `CreateContractFromEvaluationMultiWinnerTests` — `IdentityFixture` + deps THẬT `ContractCodeGenerator`/`ContractWorkflowService`, KHÔNG stub).
|
||||||
|
|
||||||
## §3 — Vá-7 B6 neo mới
|
| # | Test | Đo cái gì (vế mạnh nhất) |
|
||||||
|
|---|---|---|
|
||||||
|
| T1 | `T1_MotDong_TaoDungMotHopDong_VaGhiNguocContractId` | trọn field-map + **mã HĐ so RUỘT** `{Project.Code}/HĐTP/SOL&{Supplier.Code}/01` (bằng chứng cầu ĐÃ nạp 2 bảng — vá-6) + SLA≈+7d + `Line.ContractId` + `pe.ContractId` + **2 changelog ĐÚNG 2 BẢNG**. 3 số 900/999/750 cố ý khác nhau ⇒ chỉ `Σ ApprovedAmount` đúng |
|
||||||
|
| T2 | `T2_HaiDongCungNcc_GopVaoMotHopDong_GiaTriLaTong` | gộp N (vá-5, chỉ tồn tại nhờ Mig 71 bộ-3 unique) — 1 HĐ, CẢ 2 dòng cùng `ContractId` |
|
||||||
|
| T3 | `T3_DongChuaCoGiaChot_ThiChan_KhongTaoHd_VaKhongDotMa` | message NÊU TÊN hạng mục + atomic (dòng LÀNH cũng không bị ghi) + **`ContractCodeSequences` rỗng** = rào đứng TRƯỚC codegen |
|
||||||
|
| T4 | `T4_PhieuChuaDuyetXong_ThiChan` | dòng CÓ đủ giá ⇒ chỉ đổi ĐÚNG 1 biến (phase) |
|
||||||
|
| T5 | `T5_DongDaCoHopDong_ThiChan` | double-bridge PER-DÒNG + HĐ cũ không bị ghi đè |
|
||||||
|
| T6 | `T6_HaiDongKhacNcc_ThiChan` | + **ĐỐI CHỨNG DƯƠNG cùng lượt**: tách ra bấm từng dòng thì QUA (2 HĐ) |
|
||||||
|
| T7 | `T7_QuyTrinhPinSai_Chan4Nhanh_VaQuyTrinhDungThiQua` | **ma-trận cùng-ruột đổi ĐÚNG 1 biến**: NotFound · sai-loại · [vá-3] `!IsActive` · [vá-3] `!IsUserSelectable` — **4 message PHÂN BIỆT** + đối-chứng-dương quy-trình-đúng QUA |
|
||||||
|
| T8 | `T8_HdSinhTuCau_TrinhDuyet_ThiVaoDungHopThuCapDangCho` | **mối nối cầu→đường-ống** (chỗ `ContractV2PipelineTests` KHÔNG đo): trình qua máy THẬT → `levelOrder==1` (quên pin V2 = null) → Cấp-1 thấy hộp thư, Cấp-2 chưa |
|
||||||
|
| T9 | `T9_DongCuaPhieuKhac_ThiChan` | trộn dòng phiếu hàng xóm + id rác → chặn, dòng hàng xóm không bị đụng |
|
||||||
|
| T10 | `T10_BacCauLanHai_TaoHdThuHai_NhungPeGiuHdDau` | **CHIỀU của `??=` (vá-4a)**: viết `=` thay `??=` thì mọi assert khác vẫn xanh, chỉ vế này ĐỎ. + cardinality DoD vá-15 + seq mã 01→02 |
|
||||||
|
| T11 | `T11_BamHaiLanCungTapDong_ThiLanHaiBiChan_KhongTaoHdThua` | **double-click** — khoá HÀNH VI ĐANG CÓ (409 "đã có Hợp đồng", KHÔNG chế "no-op") + `LastSeq==1` (không cháy mã oan) |
|
||||||
|
|
||||||
|
**Ánh xạ bảng invest T1-T8 → 11 test:** T1→T1 · T2→T2 · T3→T3 · T4→T4 · T5→T5 · T6→T6 · T7→T7(nhánh b, +3 nhánh vá-3/NotFound) · T8→T8. **+3 test NGOÀI bảng** (T9 rào tập LineIds · T10 chiều `??=` · T11 double-click) — 2 cái sau là yêu cầu §4/§5 của đề bài.
|
||||||
|
|
||||||
|
🔴 **LỆCH SPEC ĐÃ ĐO, test theo CODE + khai trong header file:** bảng invest T1 (`:75`) ghi `WorkflowDefinitionId null`; **vá-6** (`spec-cum3:16`) ĐẢO lại "pin như 2 tiền lệ" và spec `:4` chốt "16 vá THẮNG". Mã theo vá-6 ⇒ T1 assert **pin ĐÚNG bản active của loại HĐ đó** (seed sẵn 1 bản NHIỄU loại khác ⇒ `!= null` suông sẽ không đủ).
|
||||||
|
|
||||||
|
**2 lần ĐỎ trên đường đi (đều là seed, KHÔNG phải prod):** T9 gọi `SeedAsync` 2 lần ⇒ SQLite 19 UNIQUE `ApprovalWorkflows(Code,Version)` rồi `PurchaseEvaluations.MaPhieu` → vá bằng hậu-tố ngẫu nhiên cho MỌI mã (`Projects.Code`/`Suppliers.Code`/2 bảng workflow/`MaPhieu`); T1+T10 chuyển sang so mã HĐ với `s.Project.Code`/`s.Suppliers[0].Code` đọc từ seed. **0 dòng production bị sửa.**
|
||||||
|
|
||||||
|
## §3a — [✅ XONG] Authz 2 CHIỀU — `--filter KhkkBridgeAuthzTests` → **Passed! Failed: 0, Passed: 5**
|
||||||
|
|
||||||
|
File MỚI: `tests/SolutionErp.Infrastructure.Tests/Api/KhkkBridgeAuthzTests.cs`. Chọn khuôn **RẺ NHẤT MÀ VẪN THẬT**: chạy thẳng `MenuPermissionHandler` + `UserManager`/`RoleManager` thật trên `IdentityFixture` — **KHÔNG WebApplicationFactory**. Khác `AuthorizePolicyRegressionTests` (đọc ATTRIBUTE = "cửa có khoá tên gì"), file này đo **QUYẾT ĐỊNH** = "khoá đó mở cho ai".
|
||||||
|
|
||||||
|
🔴 **Điều kiện làm phép đo có răng: 2 tên policy KHÔNG hardcode** — đọc TỪ CHÍNH controller (class-level + action-level của `CreateContract`) rồi mới đem đi hỏi handler ⇒ ai sửa attribute thì test đo theo cái MỚI mà vẫn hỏi đúng câu "hai vế có phải HỘI không". Kèm vế `actionPolicy != classPolicy` ("hai vế TRÙNG NHAU thì hội-2-khoá chỉ còn 1 khoá — cửa tự nới mà nhìn vẫn như cũ").
|
||||||
|
|
||||||
|
| # | Test | Vế |
|
||||||
|
|---|---|---|
|
||||||
|
| 1 | `CauKhkkSangHd_VaiDuCaHaiVe_ThiQua` | **ĐỐI CHỨNG DƯƠNG** — thiếu nó thì 2 test 403 vẫn xanh trong thế giới "chặn tất cả" |
|
||||||
|
| 2 | `CauKhkkSangHd_VaiChiCoQuyenKeHoach_ThiBiChan` | cấp RỘNG TAY cả 4 cờ trên `KeHoachKyKet` vẫn 403 — chốt trước vế-1-PHẢI-qua để không xanh vì lý do sai |
|
||||||
|
| 3 | `CauKhkkSangHd_VaiChiCoQuyenTaoHopDong_ThiBiChan` | chiều ngược lại, cũng chốt trước vế-2-PHẢI-qua |
|
||||||
|
| 4 | `CauKhkkSangHd_Admin_KhongCanDongQuyenNao_VanQua` | khoá nhánh bypass (0 dòng `Permissions`) — chống "siết cho nhất quán" rồi khoá luôn Admin |
|
||||||
|
| 5 | `CauKhkkSangHd_UserBiVoHieuHoa_ThiChan_DuCoDuQuyen` | **cùng bộ quyền, đổi ĐÚNG 1 biến `IsActive`** ⇒ kết quả ngược (nghỉ việc mà token còn hạn) |
|
||||||
|
|
||||||
|
## §3b — Vá-7 B6 neo mới
|
||||||
|
|
||||||
CHƯA ĐO.
|
CHƯA ĐO.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user