Adds 2 units and docs for unit 3. nfr-requirements plan

This commit is contained in:
2026-06-29 22:18:37 +02:00
parent 0e01ca1e1c
commit c156107cb1
126 changed files with 15204 additions and 80199 deletions
@@ -0,0 +1,160 @@
# 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.Master` project; extended `SlpModularCms.Modules.Availability`; updated `/cms` frontend page
- **Related Components**: Core (new entity), Api shell (module registration), Availability module (middleware extension), Frontend (CMS page)
### Change Impact Assessment
- **User-facing changes**: Yes — `/cms` page 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 `CmsInstance` entity (master), new `MasterRegistration` entity (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-side `MasterDbContext`
- 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
```mermaid
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
- [x] Workspace Detection — COMPLETED
- [x] Reverse Engineering — SKIPPED (shared artifacts already exist in `aidlc-docs/_shared/`)
- [x] 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.
- [x] 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 13 (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.Master` project, extended Availability module, updated `/cms` frontend 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