- STATUS + HANDOFF: S74 entry (Mig 55 CcmNote, test 334->339, "0 het CCM"=role-gate khong bug -> UAT bang CostControl/Admin) - cicd Run #315 PASS ~4m54s: Mig 55 applied prod (CcmNote nvarchar 1000 nullable), sys.tables 88, smoke 4x200; bundle admin BYF5vIMJ / user CB-tiRxd - session log 2026-06-18-S74-pe-ccm-note.md (chan doan + 2 fork + lessons) - agent-memory harvest: implementer-frontend (FE mirror) + test-specialist (5 test §4b + L1 curate ->24.6KB + archive activity-s51-s52) + cicd-monitor (Run #315) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5.4 KiB
5.4 KiB
name, description, metadata
| name | description | metadata | ||
|---|---|---|---|---|
| activity-s51-s52 | L2 archive — Recent-activity FIFO entries S51-S52 (filtered-unique gotcha |
|
L2 archive — activity S51-S52 (aged out of HOT FIFO 2026-06-18 S74)
Verbatim entries moved from MEMORY.md "Recent activity" to keep HOT index under cap. Recall via RAG search_memory or read here directly.
- 2026-06-08 (S52 P11-D Master gotcha #57 EXT) [test-before · 3 RED LIVE]: +3 test
tests/.../Application/MasterCatalogFilteredUniqueTests.cs(run--filter MasterCatalogFilteredUnique→ Failed 3/Passed 0). Department+Project+Supplier.IsUnique()BARE (Dept cfg:18 / Proj:19 / Supp:24) chưa[IsDeleted]=0— cùng class gotcha #57. Mirror EXACT GROUP B HrmConfigFilteredUniqueTests: seed rowIsDeleted=trueslot Code="DUP1" →Create{Dept|Project|Supplier}CommandHandler(db)cùng Code → assertNotThrowAsync+ active==1 +IgnoreQueryFiltersall==2. 3 RED =DbUpdateException → SQLite Error 19 UNIQUE constraint failed: {Departments|Projects|Suppliers}.Code(app-checkAnyAsync(Code==X)chạy QUA HasQueryFilter → loại soft-deleted → PASS → Add+SaveChanges → DB UNIQUE bare đếm cả row xoá → throw). NOT test lỗi — REPORTED em main fix migration.HasFilter3 config → flip GREEN. ⚠️ all-count PHẢIIgnoreQueryFilters()(khác HRM ref dùng rawCount(Code==X)trên DbSet đã có HasQueryFilter → trả 1 not 2 = sai; tôi sửa = active-count plain DbSet, all-count IgnoreQueryFilters). 3 handler clean(IApplicationDbContext db)1-dep. KHÔNG đụng Configuration/Domain/migration. Tag [s52, p11-d, gotcha-57, master-catalog, filtered-unique, test-before, RED]. - 2026-06-08 (S52 P11-D Wave2 round-robin + SLA-due) [proxy by em main: agent killed session-limit trước MEMORY step]: +9 test
ItTicketAssignSlaTests.cs→ 200 PASS (Infra 133→142). Round-robin: seed Department Code="IT" + 2 user A/BIsActivetrong IT + A có 1 ticket Open → Create → assign B (load 0<1); tie A=B →ThenBy(Id); edge no-dept-IT / no-user-IT → unassigned; user ngoài IT hoặcIsActive=falseKHÔNG assign. SLA-due: Priority Urgent→+4h / High→+8h / Medium→+24h / Low→+72h (asserte.SlaDueAt==CreatedAt+SlaWindow[priority]). Regression P11-F: create vẫn gen^IT/\d{4}/\d{3}$.ItTicketSlaJobBackgroundService SKIP unit-test (breach-query inline, khó test trực tiếp — REPORTED). Baseline 191→200 (58 Domain + 142 Infra). Tag [s52, p11-d, round-robin, sla-due, regression]. - 2026-06-08 (S52 P11-E + P11-F WorkflowApps/Attendance test-after): +5 test → 191 PASS (Infra 128→133). 2 file
tests/.../Application/: ItTicketCodeGenTests (3 — MaTicket regex^IT/\d{4}/\d{3}$+ sequential 001→002 cùng prefixIT/{year}LastSeq++ + per-year-prefix 2027 reset 001) + AttendanceReportTests (2 — full aggregate day-type/weighted + DepartmentId filter). ⭐ Serializable-on-SQLite GOTCHA = NON-ISSUE (confirmed):WorkflowAppCodeGen.GenerateMaDonTuAsyncdùngBeginTransactionAsync(IsolationLevel.Serializable)chạy SẠCH trên SQLite — provider map isolation level gracefully (no throw), format+seq+per-year đều hold KHÔNG cần try/skip. Đã proven sẵn bởi WorkflowAppApproveV2Tests (DT/LR path). HandlerCreateItTicketHandler(db, cu, clock)= 3 dep MediatR. Day-type test pattern (P11-E core): holiday check chạy TRƯỚC weekend/weekday → seed 2026-06-01 (thứ Hai) vào holidaySet → assert phân Holiday dù là weekday (override day-of-week). Holiday.Date=DateOnly →BuildHolidaydùngDateOnly.FromDateTime. OtWeighted = 2×1.5+3×2.0+1×3.0=12.0m. DepartmentId filter: seed 2 Department row + 2 user khác dept → query deptA chỉ trả 1 row (handler join Usersu.DepartmentId==deptId, userMeta dùngDefaultIfEmptynên dept row optional nhưng seed cho DepartmentName assert). No prod bug. ⚠️ MSBuild OOM chạy full parallel → dùng-maxcpucount:1 -p:BuildInParallel=false(env resource, KHÔNG test fail). Tag [s52, p11-e, p11-f, codegen, day-type, serializable-sqlite-ok, test-after]. - 2026-06-08 (S51 P11-C HMW Wave2 filtered-unique gotcha #57): +4 test
tests/.../Application/HrmConfigFilteredUniqueTests.cs→ 185 total = 183 PASS + 2 RED (Infra 123→127). Mirror HolidayTests Case 7 (seed soft-deleted Code-slot → Create same Code → assert success + active==1 + all==2). 2 GREEN Vehicle+Driver (Mig 44 config ĐÃ filtered → 2 catalog mới đúng). 2 RED INTENTIONAL = gotcha #57 REPRODUCED (test-before):CreateLeaveType_OnSoftDeletedCodeSlot...→SQLite Error 19 UNIQUE constraint failed: LeaveTypes.Code+CreateShift_OnSoftDeletedCodeSlot...→ShiftPatterns.Code(bare.IsUnique()đếm cả row soft-deleted; handler app-check!IsDeletedPASS → Add+SaveChanges → DbUpdateException). NOT test lỗi — REPORTED em main fix Mig 45.HasFilter("[IsDeleted]=0")cho 2 config → flip GREEN. ⚠️ Soft-delete trong test (giống Holiday): AuditingInterceptor (prod soft-delete Deleted→Modified+IsDeleted=true) KHÔNG wire trong SqliteDbFixture →Remove+SaveChanges= HARD delete (không test được). PHẢI seed rowIsDeleted=truethủ công để mô phỏng slot bị chiếm. Handlers chỉ cần IApplicationDbContext →new CreateXxxHandler(db). Tag [s51, p11-c, gotcha-57, filtered-unique, test-before].