8.5 KiB
8.5 KiB
Execution Plan — Master CMS Module
Detailed Analysis Summary
Transformation Scope
- Transformation Type: Multi-component addition — new module + slave-side middleware extension + frontend page + documentation
- Primary Changes: New
SlpModularCms.Modules.Masterproject; extendedSlpModularCms.Modules.Availability; updated/cmsfrontend page - Related Components: Core (new entity), Api shell (module registration), Availability module (middleware extension), Frontend (CMS page)
Change Impact Assessment
- User-facing changes: Yes —
/cmspage gets a full slave management UI; slave CMS users see a disable message on 503 - Structural changes: Yes — new module project, per-module DbContext pattern introduced
- Data model changes: Yes — new
CmsInstanceentity (master), newMasterRegistrationentity (slave) - API changes: Yes — new Master module endpoints; new internal slave registration endpoint; extended 503 response body
- NFR impact: Yes — API key security, availability caching strategy, background service, fail-open design
Component Relationships
Primary new component: SlpModularCms.Modules.Master
- Depends on:
SlpModularCms.Core(shared DbContext base, IModule),SlpModularCms.Api(module registration)
Modified component: SlpModularCms.Modules.Availability
- Extended with: master registration endpoint, two-phase availability check,
MasterAvailabilityService, slave-sideMasterDbContext - Depends on:
SlpModularCms.Core
Modified component: SlpModularCms.Frontend
- Extended with: CMS page slave management UI, new TanStack Query hooks, new API types
Risk Assessment
- Risk Level: Medium-High
- Rollback Complexity: Moderate — new module can be unregistered from Api; slave-side changes are additive; frontend changes are isolated to one route
- Testing Complexity: Complex — involves network calls between Master and Slave, background service timing, cache behavior, fallback logic
Workflow Visualization
flowchart TD
Start(["Master CMS Module Request"])
subgraph INCEPTION["🔵 INCEPTION PHASE"]
WD["Workspace Detection\nCOMPLETED"]
RE["Reverse Engineering\nSKIPPED (artifacts exist)"]
RA["Requirements Analysis\nCOMPLETED"]
US["User Stories\nSKIPPED"]
WP["Workflow Planning\nIN PROGRESS"]
AD["Application Design\nEXECUTE"]
UG["Units Generation\nEXECUTE"]
end
subgraph CONSTRUCTION["🟢 CONSTRUCTION PHASE — Per Unit"]
FD["Functional Design\nEXECUTE"]
NFRA["NFR Requirements\nEXECUTE"]
NFRD["NFR Design\nEXECUTE"]
ID["Infrastructure Design\nSKIPPED"]
CG["Code Generation\nEXECUTE"]
BT["Build and Test\nEXECUTE"]
end
subgraph OPERATIONS["🟡 OPERATIONS PHASE"]
OPS["Operations\nPLACEHOLDER"]
end
Start --> WD --> RA --> WP --> AD --> UG
UG --> FD --> NFRA --> NFRD --> CG
ID -.->|skipped| CG
CG -->|repeat per unit| FD
CG --> BT --> OPS --> End(["Complete"])
style WD fill:#4CAF50,stroke:#1B5E20,stroke-width:3px,color:#fff
style RA fill:#4CAF50,stroke:#1B5E20,stroke-width:3px,color:#fff
style WP fill:#4CAF50,stroke:#1B5E20,stroke-width:3px,color:#fff
style CG fill:#4CAF50,stroke:#1B5E20,stroke-width:3px,color:#fff
style BT fill:#4CAF50,stroke:#1B5E20,stroke-width:3px,color:#fff
style RE fill:#BDBDBD,stroke:#424242,stroke-width:2px,stroke-dasharray:5 5,color:#000
style US fill:#BDBDBD,stroke:#424242,stroke-width:2px,stroke-dasharray:5 5,color:#000
style ID fill:#BDBDBD,stroke:#424242,stroke-width:2px,stroke-dasharray:5 5,color:#000
style AD fill:#FFA726,stroke:#E65100,stroke-width:3px,stroke-dasharray:5 5,color:#000
style UG fill:#FFA726,stroke:#E65100,stroke-width:3px,stroke-dasharray:5 5,color:#000
style FD fill:#FFA726,stroke:#E65100,stroke-width:3px,stroke-dasharray:5 5,color:#000
style NFRA fill:#FFA726,stroke:#E65100,stroke-width:3px,stroke-dasharray:5 5,color:#000
style NFRD fill:#FFA726,stroke:#E65100,stroke-width:3px,stroke-dasharray:5 5,color:#000
style OPS fill:#BDBDBD,stroke:#424242,stroke-width:2px,stroke-dasharray:5 5,color:#000
style Start fill:#CE93D8,stroke:#6A1B9A,stroke-width:3px,color:#000
style End fill:#CE93D8,stroke:#6A1B9A,stroke-width:3px,color:#000
style INCEPTION fill:#BBDEFB,stroke:#1565C0,stroke-width:3px,color:#000
style CONSTRUCTION fill:#C8E6C9,stroke:#2E7D32,stroke-width:3px,color:#000
style OPERATIONS fill:#FFF59D,stroke:#F57F17,stroke-width:3px,color:#000
linkStyle default stroke:#333,stroke-width:2px
Text alternative: Inception (WD→RA→WP→AD→UG completed/executing), Construction per-unit loop (FD→NFR Req→NFR Design→CodeGen, Infrastructure skipped), Build & Test, Operations placeholder.
Phases to Execute
🔵 INCEPTION PHASE
- Workspace Detection — COMPLETED
- Reverse Engineering — SKIPPED (shared artifacts already exist in
aidlc-docs/_shared/) - Requirements Analysis — COMPLETED
- User Stories — SKIP
- Rationale: Feature is owner-operated and technical in nature. Requirements are clear and detailed. No multiple personas or acceptance criteria gaps.
- Workflow Planning — IN PROGRESS
- Application Design — EXECUTE
- Rationale: New module project, new services, new controller, background service, new frontend components — all need component definition and dependency mapping before code generation.
- Units Generation — EXECUTE
- Rationale: 4 distinct units spanning backend (master), backend (slave extension), frontend, and documentation. Sequencing and dependencies must be planned.
🟢 CONSTRUCTION PHASE (per unit)
- Functional Design — EXECUTE
- Rationale: Complex business logic per unit (registration handshake, two-phase middleware, background integrity check, cache + fallback)
- NFR Requirements — EXECUTE
- Rationale: New security concerns (API key handling), caching strategy, fail-open requirements, test coverage targets
- NFR Design — EXECUTE
- Rationale: Design patterns for background service, per-module DbContext, middleware extension, client-side caching
- Infrastructure Design — SKIP
- Rationale: No new cloud/infrastructure resources. Same deployment model (single .NET process + React SPA). Module registration is code-level, not infrastructure-level.
- Code Generation — EXECUTE (always)
- Build and Test — EXECUTE (always)
🟡 OPERATIONS PHASE
- Operations — PLACEHOLDER
Unit Decomposition (Proposed)
| # | Unit Name | Scope | Depends On |
|---|---|---|---|
| 1 | master-backend | New SlpModularCms.Modules.Master project: CmsInstance entity, MasterDbContext, migrations, CmsInstanceService, MasterController, IntegrityCheckBackgroundService, MasterModule : IModule, test project |
Core |
| 2 | slave-availability-extension | Extended SlpModularCms.Modules.Availability: MasterRegistration entity, slave MasterDbContext, migrations, MasterAvailabilityService (pull/cache/fallback), registration endpoint, two-phase AvailabilityMiddleware |
Unit 1 (API contract) |
| 3 | frontend-cms-page | /cms page: CmsInstanceList, AddCmsInstanceDialog, SetStatusDialog, new TanStack Query hooks, API types |
Unit 1 (REST API) |
| 4 | documentation | Update README.md (migrations section, module guide, prod env vars), replace frontend/README.md |
Units 1–3 (documents final patterns) |
Package Change Sequence
SlpModularCms.Core ← no changes (CmsInstance owned by Modules.Master)
↓
SlpModularCms.Modules.Master [Unit 1] ← new project
↓
SlpModularCms.Modules.Availability [Unit 2] ← extended
↓
SlpModularCms.Api ← registers new Master module
↓
frontend/ [Unit 3] ← CMS page updated
↓
README.md / frontend/README.md [Unit 4] ← documentation
Success Criteria
- Primary Goal: Owner on the Master CMS can register slave CMSes and toggle their availability; slaves enforce the master-controlled status with a two-phase check
- Key Deliverables:
SlpModularCms.Modules.Masterproject, extended Availability module, updated/cmsfrontend page, updated documentation - Quality Gates: ≥80% test coverage on new backend code; fail-open behavior verified; API key not exposed in list responses; two-phase middleware verified for all status combinations