Files
solution-erp/.claude/agent-memory/test-specialist/archive/activity-s51-s52.md
pqhuy1987 462bfbc854 [CLAUDE] Docs: S74 closeout — Mig 55 PE "Ghi chú từ CCM" (STATUS/HANDOFF/session-log + agent-memory harvest)
- 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>
2026-06-18 19:15:45 +07:00

5.4 KiB
Raw Blame History

name, description, metadata
name description metadata
activity-s51-s52 L2 archive — Recent-activity FIFO entries S51-S52 (filtered-unique gotcha
type
project

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 row IsDeleted=true slot Code="DUP1" → Create{Dept|Project|Supplier}CommandHandler(db) cùng Code → assert NotThrowAsync + active==1 + IgnoreQueryFilters all==2. 3 RED = DbUpdateException → SQLite Error 19 UNIQUE constraint failed: {Departments|Projects|Suppliers}.Code (app-check AnyAsync(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 .HasFilter 3 config → flip GREEN. ⚠️ all-count PHẢI IgnoreQueryFilters() (khác HRM ref dùng raw Count(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.cs200 PASS (Infra 133→142). Round-robin: seed Department Code="IT" + 2 user A/B IsActive trong 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ặc IsActive=false KHÔNG assign. SLA-due: Priority Urgent→+4h / High→+8h / Medium→+24h / Low→+72h (assert e.SlaDueAt==CreatedAt+SlaWindow[priority]). Regression P11-F: create vẫn gen ^IT/\d{4}/\d{3}$. ItTicketSlaJob BackgroundService 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 prefix IT/{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.GenerateMaDonTuAsync dùng BeginTransactionAsync(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). Handler CreateItTicketHandler(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 → BuildHoliday dùng DateOnly.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 Users u.DepartmentId==deptId, userMeta dùng DefaultIfEmpty nê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.cs185 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 !IsDeleted PASS → 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 row IsDeleted=true thủ 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].