[CLAUDE] Docs+Memory: S36 wrap — Plan G-O2 Phòng họp ALL DONE deploy prod end-to-end

S36 sequence done end-to-end 6 step trong 1 session (1 commit + 1 CI Run):
1. Curate 2 MEMORY (Implementer 36.4→31.7KB + CICD 40.4→28.3KB archive q4.md)
2. Investigator pre-flight G-O2 (clean-room 3 entity + FullCalendar v6 alternative)
3. Em main solo Mig 36 schema + Apply Dev+Design DB
4. Implementer BE CQRS (584 LOC) + Application.csproj +Relational fix gotcha #53 4th
5. Implementer FE 2 app (1770 LOC SHA256 IDENTICAL × 2 app + Pattern 16-bis 7×)
6. Reviewer Smart Friend 9× cumulative CLEAN + CICD Run #359 PASS

Verify cumulative S36:
- Run #359 sha=f45090b 3m55s success
- Bundle rotate × 2 (admin Bl6e54yi→C9kzTTmq + user DHmW2tUF→CC4DQ-Tr)
- Mig 36 prod head + 4 sample room + 4 menu seeded
- 0 prod regression observed
- 130/130 test PASS baseline preserve

State chốt S36:
- 36 mig (+1) · 74 tables (+3) · ~201 endpoints (+9 Meeting)
- 45 FE pages (+2 × 2 app) · 73 menu keys (+4 Off_PhongHop)
- Reviewer 9× cumulative + Pattern 16-bis 7× + Pattern 12-bis 10× cumulative
- 3 minor defer (AttendeeInput.Notes + Room race + silent skip) non-blocking

Next S37: Plan 10.3 Pre-flight Mig 37 enum extend +5 values → G-O3 Đề xuất.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
pqhuy1987
2026-05-28 15:14:38 +07:00
parent f45090b654
commit 75521b8b88
6 changed files with 159 additions and 39 deletions

View File

@ -674,29 +674,38 @@ Cron task `solution-erp-skill-audit-monthly` fire 9:00 AM ngày 1 mỗi tháng.
**Phase 1.5 backlog (defer S34+):** Per-action policy Hrm_HoSo_View/Create/Edit/Delete + bool partial update + Satellite CRUD endpoint + Test bundle Plan B Phase 2 + UAT non-admin smoke + fe-admin menuKeys sync Bg_*/Catalog*.
#### Plan G-H2 — Cấu hình chung HRM
#### Plan G-H2 — Cấu hình chung HRM ✅ FULL DEPLOYED PROD (S34 schema + S35 BE CRUD + FE Admin)
- [ ] 👤 Chủ trì Solo Mig 35 `AddHrmConfigs` — LeaveTypes + Holidays + ShiftPatterns + OtPolicy lookup tables
- [ ] 🟦 Investigator audit NamGroup demo seed (LeaveTypes/Holidays/Shifts/OtPolicy) — reference cho seed sample data
- [ ] 🟨 Implementer Case 2 mirror SOL Catalogs pattern (Plan CA Chunk B) BE CQRS CRUD 4 catalog
- [ ] 🟨 Implementer Case 2 mirror admin Catalogs FE Admin 4 catalog page (list/create/edit dialog inline)
- [ ] 👤 Chủ trì Solo Permission menu `Hrm_Config*` 4 leaf + admin role assign
- [x] 👤 Chủ trì Solo Mig 35 `AddHrmConfigs` — LeaveTypes + Holidays + ShiftPatterns + OtPolicy lookup tables (S34 commit `07b3f3b`)
- [x] 🟦 Investigator audit NamGroup demo seed **MISS verdict** SOL clean-room mạnh hơn NamGroup, KHÔNG cần port (S35 `a42bd882c367f6e47`)
- [x] 🟨 Implementer Case 2 BE CQRS CRUD 4 catalog mega `HrmConfigFeatures.cs` 439 LOC + Controller 137 LOC = 16 endpoint (S35 commit `909655c` Run #243 PASS)
- [x] 🟨 Implementer Case 2 FE Admin `HrmConfigsPage.tsx` declarative `KIND_CONFIG` Record × 2 app SHA256 IDENTICAL + types/hrm-config.ts + Layout staticMap (S35 commit `021674a` Run #244 PASS)
- [x] 👤 Chủ trì Solo Permission menu `Hrm_Config*` 5 row (1 root + 4 leaf Order=2) seeded prod (S34 commit `07b3f3b`)
**Pattern Smart Friend Implementer 2 catch S35 G-H2:**
1. MaxLength validator vs EF config mismatch → EF source-of-truth aligned (Code 50, Name 200, Description 500)
2. HRM entities NO HasQueryFilter → explicit `.Where(!IsDeleted)` 8 site
**Pattern Smart Friend Implementer 1 catch S35 FE Admin:**
3. Em main spec gap Layout staticMap miss → Pattern 16-bis 4-place enforced (gotcha #50 silent sidebar prevention)
**NEW Pattern Declarative KIND_CONFIG Record** documented memory user-level `feedback_declarative_kind_config_pattern.md` — reusable cross-module single-page multi-kind CRUD.
### Phase 10.2 — Office Core standalone (KHÔNG cần workflow)
#### Plan G-O1 — Danh bạ nội bộ
#### Plan G-O1 — Danh bạ nội bộ ✅ DONE S34 (commit `ea440da` Run #238 PASS)
- [ ] 👤 Chủ trì Solo BE 1 endpoint `GET /api/directory` — filter dept/position/search name+email+phone (reuse Users + EmployeeProfiles + Departments)
- [ ] 🟨 Implementer Case 2 cookie-cutter FE 2 app InternalDirectoryPage (card grid avatar + dept + extension + email + mobile click-to-call)
- [ ] 👤 Chủ trì Solo Permission `Off_DanhBa` 1 leaf
- [x] 👤 Chủ trì Solo BE 1 endpoint `GET /api/directory` — filter dept/position/search name+email+phone (reuse Users + EmployeeProfiles + Departments)
- [x] 🟨 Implementer Case 2 cookie-cutter FE 2 app InternalDirectoryPage (card grid avatar + dept + extension + email + mobile click-to-call) — SHA256 IDENTICAL × 2 app
- [x] 👤 Chủ trì Solo Permission `Off_DanhBa` 1 leaf + parent `Off` (Order=29)
#### Plan G-O2 — Phòng họp (booking calendar standalone)
#### Plan G-O2 — Phòng họp (booking calendar standalone) ✅ DONE S36
- [ ] 👤 Chủ trì Solo Mig 36 `AddMeetingRooms` — MeetingRooms + MeetingBookings (RoomId/UserId/StartAt/EndAt/Title/Attendees[]/Status enum)
- [ ] 🟨 Implementer Case 2 BE CQRS Room CRUD + Booking Create/Cancel + GetCalendar + check conflict (SERIALIZABLE transaction race-safe)
- [ ] 🟨 Implementer Case 2 FE 2 app — Admin Rooms CRUD + User BookingCalendar (FullCalendar lib new dep — check license + bundle size impact)
- [ ] 👤 Chủ trì Solo Notification push attendees when booking created (NotificationPushInterceptor reuse)
- [ ] 👤 Chủ trì Solo Permission `Off_PhongHop*` 3 leaf
- [x] 👤 Chủ trì Solo Mig 36 `AddMeetingRooms`3 entity (MeetingRoom catalog + MeetingBooking header + MeetingBookingAttendees N-to-N join — clean-room SOL, NOT JSON per Investigator verdict)
- [x] 🟨 Implementer Case 2 BE CQRS Room CRUD + Booking Create/Cancel + GetCalendar + check conflict (SERIALIZABLE transaction + EXISTS query overlap detect race-safe) — 584 LOC MeetingFeatures + 2 Controller + Application.csproj +Relational package (em main fix gotcha #53 4th occurrence Implementer truncated mid-diagnose)
- [x] 🟨 Implementer Case 2 FE 2 app — MeetingCalendarPage (custom HTML 7-day grid 8h-20h slot, NO FullCalendar dep save ~80 KB bundle per Investigator verdict alternative) + MeetingRoomsPage (admin catalog CRUD) — SHA256 IDENTICAL × 2 app 3 file pair
- [ ] 👤 Chủ trì Solo Notification push attendees when booking created (DEFER — NotificationPushInterceptor reuse khi UAT confirm need)
- [x] 👤 Chủ trì Solo Permission `Off_PhongHop_View/Manage/Book` 3 leaf + sub-group `Off_PhongHop` Order=2 under Off root + 4 sample MeetingRoom seed (PH-A/PH-B/PHG-501/ONL-1)
### Phase 10.3 — Workflow Apps (extend ApprovalWorkflow V2 enum +5 values)