14 KiB
14 KiB
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 ý)
- 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=33khớp nguyên-tử). - Path-filter phải rà theo thư-mục MỚI sinh ra: DISCOVERY #7 —
paths-ignorethiếueval/**⇒ commit telemetry RAG (Run #234b223466) 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. - 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.
- Phiên không-deploy vẫn có việc: canh cert (
2026-07-23notAfter), drift Mig TOP 5, MEMORY sát ngưỡng 25KB, RAG rerank 0.906 + ghi baseline bundle-hash;/healthz404 — canonical là/health/live. - 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) → #23779a8343(Hrm CQRS endpoint + FE 2 app + menu seed) → #238ea440da(Office/api/directoryDanh 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); userCMHv2GS4→C_HKyxBe→DCpX7akt. Mig 3420260526110207_AddEmployeeProfilesTOP 1 xuyên cả 3. Seed verify sqlcmd: EmployeeProfiles 33 row (16 demo + 14 Solutions thật + 3 admin/test) +EmployeeCodeSequencesNV/2026LastSeq=33khớp nguyên-tử; menu keyHrm+Hrm_HoSorồiOff+Off_DanhBa(+2 row Permission auto-grant);/api/directorytrả 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=33khớ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/*.jsoncủa S31 RAG. - KẾT-LUẬN:
paths-ignorethiếueval/**⇒ 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..54009834 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 rotateC8TvDy7r→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ạydotnet test111/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 × Nlà 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), certapi.solutions.com.vnnotAfterJul 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_memorytop 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Ờ:
/healthztrả 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.Officemới vẫn được MediatR auto-discover); gotcha #44 silent-403 không thấy ([Authorize]mức class trênDirectoryControllercho mọi user đã đăng-nhập); gotcha #51 được áp đúng chiều (SeedDemoEmployeeProfilesAsynccố-ý KHÔNG gateDemoSeed:Disabledvì 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(NEW —paths-ignorethiếueval/**) ·#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ênDirectoryController· idempotent guard skip (EmployeeProfiles33 không đổi) ·DemoSeed:Disabledgate (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 ·EmployeeCodeSequencesLastSeq nguyên-tử · BW-guard: BW4ForbiddenExceptionoutsider · BW5 wrongApplicableType· BW6a UNIQUE composite · BW6b UPSERT 1 row · BW6c Cascade delete · BW7 V1 fallbackConflictException - root-cause:
eval/**KHÔNG có trongpaths-ignore⇒ commiteval/*.json(S31 RAG) kích deploy vô-ích ·**/*.mdkhớ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 sauDemoSeed(bài #51) ⇒ tiêu-chí tách DEMO ⟂ INFRASTRUCTURE - file:line / định-danh: Run #238
ea440dapushedba4ae..ea440da2 commit/23 file (7b0781bcurate 4 agent MEMORY = 8 file MD) ·DirectoryFeatures.cs·DirectoryController.csroute/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 · bundleCqGMUMOr→ChA9_vP5+C_HKyxBe→DCpX7akt· namespaceSolutionErp.Application.Office· ~25K token · Run #23779a83433m50s push48a99e1..79a83433 commit/18 file (0e191deTask 4+6 ·9616ae2Task 5 FE ×2 ·79a8343MEMORY 3 agent) ·EmployeesController+EmployeeDtos+EmployeeFeatures·/api/employeesGET list + pagedpage=1&pageSize=5· bundleBUTKoqRP→CqGMUMOr+CMHv2GS4→C_HKyxBe· keyHrm+Hrm_HoSo· mẫuNV/2026/0007(BOD 1 — Director, Ban Giám đốc, hireDate 2021-08-01) · ~30K token · Run #35048a99e13m38s push5400983..48a99e14 commit/34 file (1bc6b70docs 3 MD ·b3444a33 MEMORY ·0605f19Plan C +4 test file +9[Fact]/Theory ·48a99e1Mig 34 + 17 entity/config new + 7 modified) · test_infra 62/62 = 53 + 9 BW (BW1 happy Cấp 1→2 · BW2 terminalDaPhatHanh+ gen mã · BW3 skipToFinal F2 admin opt-in · BW4-BW7 xem mục guard) · build_be +6555 LOC · Mig 3420260526110207_AddEmployeeProfiles·SeedDemoEmployeeProfilesAsync· EmployeeProfiles 33 (16+14+3) ·NV/2026/0001-0003EmployeeStatus=1ActiveNationality="Việt Nam"· ~30K token · S33 startup: HEAD=5400983· 5 Run: #2351e1c9a23m38s / #234b2234663m52s / #233e199603/ #23238f1c4d/ #2313e92584· skip rangeb832f43..5400983· smokeapi/health/live0.23s + admin 0.29s + eoffice 0.31s · sqlcmdssh vietreport-vps "powershell ... '.\\SQLEXPRESS' -E"· Mig TOP 5:AddContractLevelOpinions(33) →AddApprovalWorkflowToContract(32) →RefactorSkipToFinalToApproverLevel(31) →AddAllowApproverEditBudgetToLevels(30) →RefactorAdvancedOptionsToPerLevelAndDrafterUser(29) · certapi.solutions.com.vnnotAfterJul 23 01:58:16 2026 GMT· bundle baselineindex-BUTKoqRP.js/index-CMHv2GS4.js· ~12K token · S32 wrap: agent ida505a02d84fc1fabe· MEMORY 27→24.2KB · 5 commit docs-only · cert2026-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_memoryquery "Run 232 Plan B Hotfix CICD SeedSampleContractWorkflowV2" rerank 0.906 / 0.828 / 0.816 · RAG 2949 chunk · last pushf938bf5(S31 docs patchcicd-monitor.md) · ~10K token · S26: Run #2220bf6c7e~12K · bundleC8TvDy7r→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 fieldDrafterUserId/DrafterName/DepartmentId/DepartmentName+ 3 projection JOINUsers+Departments·dotnet test111/111 local pre-push ·~150K × N wasteful
Bổ-sung coverage @P3-gate S170 (token literal — nội-dung đã sống dạng dải/range ở trên; dòng dưới chép NGUYÊN-VĂN context verbatim làm lưới grep)
Mig 29— Mig prod TOP 5 DESC sqlcmd Windows-auth viassh vietreport-vps "powershell ... '.\\SQLEXPRESS' -E"pattern (UPDATED from Discovery #5): `AddCont…Mig 30— Mig prod TOP 5 DESC sqlcmd Windows-auth viassh vietreport-vps "powershell ... '.\\SQLEXPRESS' -E"pattern (UPDATED from Discovery #5): `AddCont…Mig 32— Mig prod TOP 5 DESC sqlcmd Windows-auth viassh 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 #232— Mig prod TOP 5 DESC sqlcmd Windows-auth viassh vietreport-vps "powershell ... '.\\SQLEXPRESS' -E"pattern (UPDATED from Discovery #5): `AddCont…Run #235— Cert api.solutions.com.vn notAfterJul 23 01:58:16 2026 GMT(matches HANDOFF expected ~2026-07-23, ~58 days lead, auto-renew ~2026-06-23 win-acm…