Files
jdescopingtool/PLANS/proposals.md
T
Joseph Doherty 26ff8d9b4f Initial commit: JDE Scoping Tool migration project
Set up repository with legacy .NET Framework 4.8 source (OLD/),
new .NET 10 Blazor solution (NEW/), OpenSpec specifications,
documentation, and project configuration.
2026-01-02 07:43:29 -05:00

194 lines
7.2 KiB
Markdown

# Migration Phase Proposals Plan
## Objective
Create OpenSpec change proposals for all remaining migration phases (2-9), review each with Codex MCP, answer questions with best practices, and collect unanswered questions in questions.md.
## Phases Overview
| Phase | Change ID | Spec Dependencies | Parallelizable |
|-------|-----------|-------------------|----------------|
| 1 | migrate-database-schema | database-schema, sql-views-types, sql-business-logic | ✅ DONE |
| 2 | setup-solution-foundation | (infrastructure) | Yes |
| 3 | implement-domain-models | domain-models | Yes |
| 4 | implement-data-access | data-access | Yes |
| 5 | implement-data-sync | data-sync | Yes |
| 6 | implement-search-processing | search-processing | Yes |
| 7 | implement-excel-export | excel-export | Yes |
| 8 | implement-web-api | web-api-auth | Yes |
| 9 | implement-blazor-ui | web-ui | Yes |
## Execution Strategy
### Batch 1: Parallel Proposals (Phases 2-5)
Create 4 proposals in parallel - these are foundational phases.
**Phase 2: setup-solution-foundation**
- Scope: DI configuration, appsettings structure, project references, base infrastructure
- Key deliverables: Program.cs setup, configuration binding, service registration patterns
- No spec dependencies (infrastructure scaffolding)
**Phase 3: implement-domain-models**
- Scope: All domain entities from domain-models spec (52 requirements)
- Key deliverables: Models/, Enums/, Extensions/, validation
- Dependencies: Phase 2 (solution structure)
**Phase 4: implement-data-access**
- Scope: Repository interfaces and implementations (50+ requirements)
- Key deliverables: ILotFinderRepository, IJdeRepository, ICmsRepository, IDbConnectionFactory
- Dependencies: Phase 3 (domain models)
**Phase 5: implement-data-sync**
- Scope: BackgroundService for cache refresh (15+ requirements)
- Key deliverables: DataSyncService, IDataFetcher<T>, health checks
- Dependencies: Phase 4 (data access)
### Batch 2: Parallel Proposals (Phases 6-7)
Create 2 proposals in parallel - these are processing phases.
**Phase 6: implement-search-processing**
- Scope: SqlKata query building, search execution
- Key deliverables: ISearchQueryBuilder, SearchProcessor, filter handlers
- Dependencies: Phase 4 (data access)
**Phase 7: implement-excel-export**
- Scope: ClosedXML workbook generation
- Key deliverables: IExcelExportService, sheet generators, formatting
- Dependencies: Phase 6 (search results)
### Batch 3: Sequential Proposals (Phases 8-9)
Create 2 proposals - API then UI.
**Phase 8: implement-web-api**
- Scope: REST endpoints, SignalR hub, authentication
- Key deliverables: Controllers, StatusHub, IAuthService, LDAP integration
- Dependencies: Phases 5, 6, 7
**Phase 9: implement-blazor-ui**
- Scope: Blazor WASM pages and components
- Key deliverables: Pages/, Components/, SignalR client, Radzen integration
- Dependencies: Phase 8 (API endpoints)
## Proposal Template
Each proposal follows OpenSpec structure:
```
openspec/changes/<change-id>/
├── proposal.md # Summary, scope, acceptance criteria
├── design.md # Architecture decisions (when needed)
├── tasks.md # Ordered work items with validation
└── specs/ # Spec deltas (ADDED/MODIFIED requirements)
└── <spec-name>/
└── spec.md
```
## Codex MCP Review Prompts
**For each proposal, run:**
```
Review openspec/changes/<change-id>/ against:
- openspec/specs/<related-spec>/spec.md
- OLD/<legacy-source-files>
- NEW/src/<target-directories>
Verify:
1. All requirements from spec are covered in tasks
2. Dependency order is correct
3. Acceptance criteria are measurable
4. Design decisions align with specs
Report gaps, errors, recommendations.
```
## Best Practice Decisions
Pre-answer common questions with best practices:
| Question | Decision | Rationale |
|----------|----------|-----------|
| Async vs sync methods | Async-first with CancellationToken | Modern .NET pattern |
| Exception handling | Custom typed exceptions per layer | Clear error propagation |
| Configuration | IOptions<T> pattern | Type-safe, testable |
| Logging | ILogger<T> with structured logging | Framework integration |
| Testing | xUnit + Shouldly + NSubstitute | Project constraints (no FluentAssertions) |
| DI lifetime | Scoped for DB, Singleton for config | Standard patterns |
| Nullable refs | Enable project-wide | Modern C# safety |
## Questions Collection
All unanswered questions go to: `openspec/changes/questions.md`
Format:
```markdown
## Phase N: <change-id>
### Question: <topic>
- Context: <why this matters>
- Options: <possible answers>
- Impact: <what depends on this decision>
```
## Execution Order
1. **Create questions.md** - Empty file for collecting questions
2. **Batch 1** - Launch 4 parallel agents for Phases 2-5
3. **Review Batch 1** - Codex MCP review all 4 proposals
4. **Batch 2** - Launch 2 parallel agents for Phases 6-7
5. **Review Batch 2** - Codex MCP review both proposals
6. **Batch 3** - Create Phase 8, then Phase 9 (sequential due to dependencies)
7. **Review Batch 3** - Codex MCP review both proposals
8. **Final validation** - `openspec validate --changes` for all proposals
9. **Summary** - Report all proposals created, questions collected
## Validation Checklist
For each proposal:
- [ ] `openspec validate <change-id> --strict` passes
- [ ] Codex MCP review completed
- [ ] All answerable questions resolved with best practice
- [ ] Unanswerable questions added to questions.md
- [ ] Dependencies on other phases documented
## Critical Files
```
openspec/
├── changes/
│ ├── questions.md # Collected unanswered questions
│ ├── migrate-database-schema/ # ✅ DONE
│ ├── setup-solution-foundation/ # Phase 2
│ ├── implement-domain-models/ # Phase 3
│ ├── implement-data-access/ # Phase 4
│ ├── implement-data-sync/ # Phase 5
│ ├── implement-search-processing/ # Phase 6
│ ├── implement-excel-export/ # Phase 7
│ ├── implement-web-api/ # Phase 8
│ └── implement-blazor-ui/ # Phase 9
└── specs/
├── database-schema/
├── domain-models/
├── data-access/
├── data-sync/
├── search-processing/
├── excel-export/
├── web-api-auth/
├── web-ui/
├── sql-business-logic/
└── sql-views-types/
```
## Spec-to-Phase Mapping
| Spec | Primary Phase | Tasks |
|------|---------------|-------|
| database-schema | Phase 1 (DONE) | DbUp scripts |
| sql-views-types | Phase 1 (DONE) | Views, TVPs |
| sql-business-logic | Phase 1 (DONE) | Stored procedures |
| domain-models | Phase 3 | Entity classes |
| data-access | Phase 4 | Repository interfaces/implementations |
| data-sync | Phase 5 | BackgroundService |
| search-processing | Phase 6 | Query builder |
| excel-export | Phase 7 | ClosedXML service |
| web-api-auth | Phase 8 | Controllers, auth, SignalR |
| web-ui | Phase 9 | Blazor pages/components |