Files
solution-erp/.claude/agent-memory/cicd-monitor/archive/2026-05-q4.gist.md
2026-08-03 10:53:28 +07:00

14 KiB
Raw Blame History

cicd-monitor/2026-05-q4 — gist

distill-gen: 1 source-verbatim: .claude/agent-memory/cicd-monitor/archive/2026-05-q4.md (7 entry → 5 cụm) pointer-style: substring

TỔNG-HỢP (3-5 ý)

  1. Chuỗi 3 Run module-mới S33→S34 (#350 → #237 → #238) ALL-PASS theo khuôn Pattern 12-bis cookie-cutter (PE→Hrm→Office, MediatR auto-discover namespace mới không đăng-ký tay); verify module-mới = 3 lớp: build/test (120/120) → bundle-rotate → sqlcmd seed + menu-key + permission-row (EmployeeProfiles 33 + LastSeq=33 khớp nguyên-tử).
  2. Path-filter phải rà theo thư-mục MỚI sinh ra: DISCOVERY #7 — paths-ignore thiếu eval/** ⇒ commit telemetry RAG (Run #234 b223466) kích deploy ~3m30s vô-ích; cùng một filter vừa đúng (#41 skip 4 commit docs) vừa thủng trong cùng cửa-sổ — sai-sót là VẮNG-MẶT một dòng.
  3. Kinh-tế spawn (S26, Run #222-#227): spawn CICD-monitor 1× đầu Phase-wire là đủ, chunk polish tự verify — ranh-giới "được tự verify" = có/không đổi hợp-đồng dữ-liệu, không phải kích-thước diff.
  4. Phiên không-deploy vẫn có việc: canh cert (2026-07-23 notAfter), drift Mig TOP 5, MEMORY sát ngưỡng 25KB, RAG rerank 0.906 + ghi baseline bundle-hash; /healthz 404 — canonical là /health/live.
  5. Ghi cả kết-quả ÂM-TÍNH có chủ-đích (gotcha #1/#44 KHÔNG dính, #51 áp đúng chiều, bộ test BW1-BW7 caught NOTHING) — nếu chỉ ghi lỗi, lần sau không ai biết bẫy đã được kiểm hay bị bỏ quên.

Entries

[cao] C1 — Chuỗi deploy 3 Run module-mới (Hrm → Office), ALL PASS

  • VIỆC: Verify 3 Run liên-tiếp: #350 48a99e1 (Mig 34 EmployeeProfile 17 entity + Plan C test BW1-BW7) → #237 79a8343 (Hrm CQRS endpoint + FE 2 app + menu seed) → #238 ea440da (Office /api/directory Danh bạ nội bộ BE+FE 2 app).
  • KẾT-LUẬN: 3/3 PASS (3m38s / 3m50s / ~3m30s). Test 58+62=120/120 giữ nguyên từ #350 trở đi (62 = 53 baseline + 9 BW). Bundle-chain khớp liền mạch: admin BUTKoqRP(#350 giữ)→CqGMUMOr(#237)→ChA9_vP5(#238); user CMHv2GS4C_HKyxBeDCpX7akt. Mig 34 20260526110207_AddEmployeeProfiles TOP 1 xuyên cả 3. Seed verify sqlcmd: EmployeeProfiles 33 row (16 demo + 14 Solutions thật + 3 admin/test) + EmployeeCodeSequences NV/2026 LastSeq=33 khớp nguyên-tử; menu key Hrm+Hrm_HoSo rồi Off+Off_DanhBa (+2 row Permission auto-grant); /api/directory trả 13.6KB/34 dòng phủ đủ 9 phòng ban.
  • BÀI-HỌC: khuôn Pattern 12-bis cookie-cutter mirror (PE→Hrm→Office) chạy end-to-end không cần đăng-ký thủ-công: namespace mới SolutionErp.Application.Office được MediatR auto-discover. Verify module-mới phải gồm 3 lớp: build/test → bundle-rotate → sqlcmd seed + menu-key + permission-row (bundle xanh không nói gì về seed).
  • BẤT-NGỜ: cả 3 Run không bắt được lỗi nào — kể cả bộ test BW1-BW7 vừa thêm cũng "caught NOTHING, all PASS first try"; và LastSeq=33 khớp đúng 33 row là bằng-chứng codegen nguyên-tử không rò. → substring:"20260526110207_AddEmployeeProfiles"

[cao] C3 — DISCOVERY #7: eval/** ngoài paths-ignore

  • VIỆC: rà vì sao Run #234 b223466 (3m52s) chạy dù commit chỉ là docs + eval/*.json của S31 RAG.
  • KẾT-LUẬN: paths-ignore thiếu eval/** ⇒ mọi commit telemetry RAG kích deploy ~3m30s vô-ích (0 thay-đổi code); đề-xuất em-main cân thêm 'eval/**' nếu tần-suất tăng. (Đối-chứng: b832f43..5400983 4 commit docs-only SKIP đúng theo #41.)
  • BÀI-HỌC: path-filter phải rà theo thư-mục MỚI sinh ra (eval/, telemetry) — filter đúng hôm qua thành thủng hôm nay khi repo mọc thư-mục mới.
  • BẤT-NGỜ: cùng một filter vừa đúng (skip 4 commit docs) vừa thủng (chạy eval/**) trong cùng cửa-sổ vài ngày — sai-sót là VẮNG-MẶT một dòng, không phải dòng sai. → substring:"b223466"

[cao] C4 — Khuôn "hybrid verify" (S26, Run #222-#227)

  • VIỆC: Plan AG series (PE List tree-view) 6 Run liên-tiếp — chọn cách verify tiết-kiệm.
  • KẾT-LUẬN: spawn CICD-Monitor 1 lần ở Run #222 0bf6c7e (bundle 2/2 rotate C8TvDy7r→CWHIdoFo / BvcWrq2z→Bg2FNeIz, smoke 5/5 200, PE List API giữ 9 field, test-gate 111, Mig 31 y cũ); #223-#227 (AG2-AG6) em-main tự verify (bundle mắt-thường + push OK + Gitea auto-trigger 3-4 phút). AG4 cross-stack (DTO +4 field Drafter*/Department* + 3 projection JOIN) chạy dotnet test 111/111 local trước push. 0 regression toàn cụm.
  • BÀI-HỌC: ROI spawn: 1× đầu Phase-wire là đủ cho kịch-bản 1 dev solo lặp nhanh; chunk polish (CSS/UX/copy) tự verify — re-spawn ~150K × N là phí.
  • BẤT-NGỜ: cách rẻ hơn lại không giảm an-toàn — vì chunk polish không đụng shape API; ranh-giới "được tự verify" là có/không đổi hợp-đồng dữ-liệu, chứ không phải kích-thước diff. → substring:"0bf6c7e"

[vừa] C2 — Snapshot phi-deploy S32/S33 (hạ-tầng + tự-kiểm)

  • VIỆC: 3 lượt spawn read-only không có deploy nào để soi (S32 startup, S32 wrap, S33 health-check).
  • KẾT-LUẬN: VERDICT=HEALTHY — 0 unpushed (HEAD=5400983), 5 Run gần nhất SUCCESS (#235/#234/#233/#232/#231), 3 endpoint smoke 200 (0.23s/0.29s/0.31s), Mig prod TOP 5 khớp repo không drift (33→32→31→30→29), cert api.solutions.com.vn notAfter Jul 23 01:58:16 2026 GMT (~58 ngày, auto-renew ~2026-06-23 cửa-sổ win-acme 30d). Tự-kiểm: MEMORY 24.9KB/221 dòng sát ngưỡng 25KB → sau curate còn 24.2KB; RAG 2949 chunk, search_memory top rerank 0.906.
  • BÀI-HỌC: phiên không-deploy vẫn có việc: canh cert · drift Mig · kích-thước MEMORY · sức-khoẻ RAG — và ghi lại baseline bundle-hash để lượt sau có mốc so.
  • BẤT-NGỜ: /healthz trả 404 — canonical là /health/live; và Gitea API gọi unauth (token rỗng) vẫn đọc được lịch-sử Run. → substring:"Jul 23 01:58:16 2026 GMT"

[vừa] C5 — Bốn ca "âm-tính" đáng giữ

  • VIỆC: ghi nhận các bẫy ĐÃ BIẾT nhưng KHÔNG tái-diễn trong 3 Run.
  • KẾT-LUẬN: gotcha #1 không dính (namespace Application.Office mới vẫn được MediatR auto-discover); gotcha #44 silent-403 không thấy ([Authorize] mức class trên DirectoryController cho mọi user đã đăng-nhập); gotcha #51 được áp đúng chiều (SeedDemoEmployeeProfilesAsync cố-ý KHÔNG gate DemoSeed:Disabled vì là seed HẠ-TẦNG); EmployeeProfiles 33 không tăng ở #237 = guard idempotent chạy.
  • BÀI-HỌC: ghi cả kết-quả ÂM-TÍNH có chủ-đích — nếu chỉ ghi lỗi, lần sau không ai biết bẫy đã được kiểm hay bị bỏ quên.
  • BẤT-NGỜ: bài-học từ #51 (seed bị gate nhầm) đã đảo thành tiêu-chí phân-loại DEMO-seed ⟂ INFRASTRUCTURE-seed và được viện-dẫn chủ-động ở Run sau. → substring:"caught NOTHING"

Phụ-lục token (coverage)

  • gotcha#: #1 (MediatR auto-discovery — KHÔNG dính) · #41 (path filter docs-only skip — dẫn 3 lần) · #44 (silent 403 — NOT observed) · #48 (SQLite tie-break — foundation preserved ×2) · #51 (INFRASTRUCTURE vs DEMO seed — dẫn + áp)
  • Discovery#: #5 (sqlcmd pattern — "UPDATED from") · #6 (INFRASTRUCTURE vs DEMO seed Stage 4.6) · #7 (NEWpaths-ignore thiếu eval/**) · #8 (chỉ có ở HEADER dòng 3 "NEW collection naming", 0 hit trong thân — con-trỏ mồ-côi; nội-dung thuộc entry S35/S36 NGOÀI file này — KHÔNG cite như content của file)
  • surprise: DISCOVERY #7 NEW: path filter paths-ignore MISSING eval/** → ... triggered ~3m30s deploy wastefully (no code change) · Gotcha #44 silent 403 NOT observed · Application/Office namespace mới auto-discovered MediatR — KHÔNG gotcha #1 · Plan C BW1-BW7 ROI: test gate caught NOTHING this run (all PASS first try) · SeedDemoEmployeeProfilesAsync correctly NOT gated DemoSeed:Disabled per gotcha #51 lesson · EmployeeProfiles total=33 (unchanged Run #350 baseline — idempotent guard skip) · /healthz 404 N/A — /health/live canonical · Gitea API unauth (token empty OK) · Pattern saved: CICD Monitor spawn 1× đầu Phase wire ROI tốt ... re-spawn ~150K × N wasteful · bundle hash 2/2 UNCHANGED (... expected NO FE) · Pattern 12-bis cross-module mirror reaffirmed strong
  • guard: class-level [Authorize] trên DirectoryController · idempotent guard skip (EmployeeProfiles 33 không đổi) · DemoSeed:Disabled gate (và ca cố-ý không gate) · paths-ignore + glob **/*.md · Stage 4 + Stage 4.6 sqlcmd seed verify · test-gate CI + "Implementer Reviewer pre-commit gate strong" · MEMORY ngưỡng 25KB · win-acme cửa-sổ renew 30d · EmployeeCodeSequences LastSeq nguyên-tử · BW-guard: BW4 ForbiddenException outsider · BW5 wrong ApplicableType · BW6a UNIQUE composite · BW6b UPSERT 1 row · BW6c Cascade delete · BW7 V1 fallback ConflictException
  • root-cause: eval/** KHÔNG có trong paths-ignore ⇒ commit eval/*.json (S31 RAG) kích deploy vô-ích · **/*.md khớp mọi độ sâu ⇒ commit docs+MEMORY bị SKIP đúng thiết-kế · seed hạ-tầng từng bị nhốt nhầm sau DemoSeed (bài #51) ⇒ tiêu-chí tách DEMO ⟂ INFRASTRUCTURE
  • file:line / định-danh: Run #238 ea440da push edba4ae..ea440da 2 commit/23 file (7b0781b curate 4 agent MEMORY = 8 file MD) · DirectoryFeatures.cs · DirectoryController.cs route /api/directory · MenuKeys.cs (+Off, Off_DanhBa) · DbInitializer.cs · FE ×2 app: types/directory.ts, pages/office/InternalDirectoryPage.tsx, App.tsx, Layout.tsx, menuKeys.ts · directory 13.6KB / 34 row / 9 phòng ban · bundle CqGMUMOr→ChA9_vP5 + C_HKyxBe→DCpX7akt · namespace SolutionErp.Application.Office · ~25K token · Run #237 79a8343 3m50s push 48a99e1..79a8343 3 commit/18 file (0e191de Task 4+6 · 9616ae2 Task 5 FE ×2 · 79a8343 MEMORY 3 agent) · EmployeesController + EmployeeDtos + EmployeeFeatures · /api/employees GET list + paged page=1&pageSize=5 · bundle BUTKoqRP→CqGMUMOr + CMHv2GS4→C_HKyxBe · key Hrm + Hrm_HoSo · mẫu NV/2026/0007 (BOD 1 — Director, Ban Giám đốc, hireDate 2021-08-01) · ~30K token · Run #350 48a99e1 3m38s push 5400983..48a99e1 4 commit/34 file (1bc6b70 docs 3 MD · b3444a3 3 MEMORY · 0605f19 Plan C +4 test file +9 [Fact]/Theory · 48a99e1 Mig 34 + 17 entity/config new + 7 modified) · test_infra 62/62 = 53 + 9 BW (BW1 happy Cấp 1→2 · BW2 terminal DaPhatHanh + gen mã · BW3 skipToFinal F2 admin opt-in · BW4-BW7 xem mục guard) · build_be +6555 LOC · Mig 34 20260526110207_AddEmployeeProfiles · SeedDemoEmployeeProfilesAsync · EmployeeProfiles 33 (16+14+3) · NV/2026/0001-0003 EmployeeStatus=1 Active Nationality="Việt Nam" · ~30K token · S33 startup: HEAD=5400983 · 5 Run: #235 1e1c9a2 3m38s / #234 b223466 3m52s / #233 e199603 / #232 38f1c4d / #231 3e92584 · skip range b832f43..5400983 · smoke api/health/live 0.23s + admin 0.29s + eoffice 0.31s · sqlcmd ssh vietreport-vps "powershell ... '.\\SQLEXPRESS' -E" · Mig TOP 5: AddContractLevelOpinions(33) → AddApprovalWorkflowToContract(32) → RefactorSkipToFinalToApproverLevel(31) → AddAllowApproverEditBudgetToLevels(30) → RefactorAdvancedOptionsToPerLevelAndDrafterUser(29) · cert api.solutions.com.vn notAfter Jul 23 01:58:16 2026 GMT · bundle baseline index-BUTKoqRP.js / index-CMHv2GS4.js · ~12K token · S32 wrap: agent id a505a02d84fc1fabe · MEMORY 27→24.2KB · 5 commit docs-only · cert 2026-07-23 (openssl s_client) · Plan G 11 module backlog · BW1-BW7 spec ready · 3 trigger chờ S33 (a) G-H1 Hồ sơ NS · (b) BW test bundle · (c) UAT smoke V2 contract · ~3K token · Tag [wrap, phase-9-to-phase-10, cicd] · S32 startup: MEMORY 24.9KB / 221 lines · search_memory query "Run 232 Plan B Hotfix CICD SeedSampleContractWorkflowV2" rerank 0.906 / 0.828 / 0.816 · RAG 2949 chunk · last push f938bf5 (S31 docs patch cicd-monitor.md) · ~10K token · S26: Run #222 0bf6c7e ~12K · bundle C8TvDy7r→CWHIdoFo + BvcWrq2z→Bg2FNeIz · smoke 5/5 200 · PE List API 9 field · test-gate 111 · Mig 31 unchanged · Run #223-#227 = Plan AG2-AG6 · AG4 DTO +4 field DrafterUserId/DrafterName/DepartmentId/DepartmentName + 3 projection JOIN Users+Departments · dotnet test 111/111 local pre-push · ~150K × N wasteful

Bổ-sung coverage @P3-gate S170 — ⚠️ LƯỚI GREP THUẦN, KHÔNG PHẢI DỮ KIỆN (đoạn trích sau mỗi token là phần ĐẦU DÒNG verbatim chứa token — dòng archive là mega-line nên đoạn trích thường KHÔNG liên-quan token; CHỈ dùng để coverage-diff grep trúng, đọc nội-dung thì tra verbatim theo token — reviewer P3 @S170)

  • Mig 29Mig prod TOP 5 DESC sqlcmd Windows-auth via ssh vietreport-vps "powershell ... '.\\SQLEXPRESS' -E" pattern (UPDATED from Discovery #5): `AddCont…
  • Mig 30Mig prod TOP 5 DESC sqlcmd Windows-auth via ssh vietreport-vps "powershell ... '.\\SQLEXPRESS' -E" pattern (UPDATED from Discovery #5): `AddCont…
  • Mig 32Mig prod TOP 5 DESC sqlcmd Windows-auth via ssh vietreport-vps "powershell ... '.\\SQLEXPRESS' -E" pattern (UPDATED from Discovery #5): `AddCont…
  • Mig 33 — Archived 2026-05-28 S36 startup curate (em main proxy) — 6 verbose Run entries from S32-S34 absorbed into baseline summary (test 120 → 130, Mig 33…
  • Run #231 — Session 32 đóng clean. Em chủ trì spawn em 1 lần S32 startup verify (a505a02d84fc1fabe alive, MEMORY 27→24.2KB post curate Run #231 PARTIAL d…
  • Run #232Mig prod TOP 5 DESC sqlcmd Windows-auth via ssh vietreport-vps "powershell ... '.\\SQLEXPRESS' -E" pattern (UPDATED from Discovery #5): `AddCont…
  • Run #235Cert api.solutions.com.vn notAfter Jul 23 01:58:16 2026 GMT (matches HANDOFF expected ~2026-07-23, ~58 days lead, auto-renew ~2026-06-23 win-acm…