Files
ColaFlow/ARCHITECTURE-DECISION-SUMMARY.md
Yaojia Wang 08b317e789
Some checks failed
Code Coverage / Generate Coverage Report (push) Has been cancelled
Tests / Run Tests (9.0.x) (push) Has been cancelled
Tests / Docker Build Test (push) Has been cancelled
Tests / Test Summary (push) Has been cancelled
Add trace files.
2025-11-04 23:28:56 +01:00

370 lines
12 KiB
Markdown

# ColaFlow Architecture Decision Summary
## Epic/Story/Task Hierarchy Clarification
**Date**: 2025-11-04 (Day 14 - Evening)
**Decision Maker**: Product Manager Agent
**Status**: APPROVED - Ready for Implementation
---
## Problem Statement
During Day 14 code review, we discovered **two different implementations** for task management:
### Implementation 1: ProjectManagement Module
- **Location**: `colaflow-api/src/Modules/ProjectManagement/`
- **Structure**: `Project → Epic → Story → WorkTask`
- **Status**: Partial implementation, no tests, no frontend integration
- **Problem**: Incomplete, abandoned, not used
### Implementation 2: Issue Management Module
- **Location**: `colaflow-api/src/Modules/IssueManagement/`
- **Structure**: `Issue (type: Story | Task | Bug | Epic)` - flat structure
- **Status**: Complete (Day 13), 8/8 tests passing, multi-tenant secured (Day 14), frontend integrated
- **Problem**: Missing parent-child hierarchy
---
## Decision
### Use Issue Management Module as Single Source of Truth
**Rationale**:
1. **Production-Ready**: Fully tested, multi-tenant secured, frontend integrated
2. **Zero Risk**: No data migration needed, no breaking changes
3. **Time Efficient**: Saves 3-4 days vs. rebuilding or migrating
4. **Quality**: CQRS + DDD architecture, 100% multi-tenant isolation verified
5. **Extensible**: Easy to add parent-child hierarchy as enhancement
### Architecture Strategy
#### Phase 1: Keep Issue Management (Current State) - DONE ✅
- Issue entity with IssueType enum (Story, Task, Bug, Epic)
- Full CRUD operations
- Kanban board integration
- Multi-tenant isolation (Day 14 CRITICAL fix)
- Real-time updates (SignalR)
- Performance optimized (< 5ms queries)
#### Phase 2: Add Hierarchy Support (Day 15-17) - TO DO
**Add to Issue entity**:
- `ParentIssueId` (Guid?, nullable)
- `ParentIssue` (navigation property)
- `ChildIssues` (collection)
**Hierarchy Rules (DDD Business Logic)**:
```
Epic (IssueType.Epic)
├─ Story (IssueType.Story)
│ ├─ Task (IssueType.Task)
│ └─ Bug (IssueType.Bug)
└─ Story (IssueType.Story)
Validation Rules:
1. Epic → can have Story children only
2. Story → can have Task/Bug children only
3. Task → cannot have children (leaf node)
4. Bug → can be child of Story, cannot have children
5. Max depth: 3 levels (Epic → Story → Task)
6. Circular dependency prevention
7. Same tenant enforcement
```
**New API Endpoints**:
- `POST /api/issues/{id}/add-child` - Add child issue
- `DELETE /api/issues/{id}/remove-parent` - Remove parent
- `GET /api/issues/{id}/children` - Get direct children
- `GET /api/issues/{id}/hierarchy` - Get full tree (recursive CTE)
#### Phase 3: Deprecate ProjectManagement Module (M2) - FUTURE
- Mark as deprecated
- Remove unused code in cleanup phase
---
## Answers to Key Questions
### Q1: Which Architecture to Use?
**Answer**: **Issue Management Module** is the primary architecture.
### Q2: What is M1 Task "Epic/Story Hierarchy"?
**Answer**: Add parent-child relationship to **Issue Management Module** (Day 15-17).
### Q3: Is Multi-Tenant Isolation Implemented?
**Answer**: **YES, 100% verified** (Day 14 CRITICAL fix completed, 8/8 tests passing).
### Q4: Which API Does Frontend Use?
**Answer**: **Issue Management API** (`/api/issues/*`). No changes needed for Day 15-17 work.
---
## Impact Assessment
### On M1 Timeline
- **Before Decision**: Ambiguity, risk of duplicate work, potential data migration (5-7 days)
- **After Decision**: Clear direction, focused work, no migration (2-3 days)
- **Time Saved**: 3-4 days
- **M1 Completion**: On track for **Nov 20** (2-3 weeks from now)
### On Code Quality
**Benefits**:
1. Single source of truth (no duplication)
2. Proven architecture (CQRS + DDD)
3. Fully tested (100% multi-tenant isolation)
4. Production-ready foundation
5. Clean migration path (no breaking changes)
**Risks Mitigated**:
1. No data migration needed
2. No breaking changes to frontend
3. No need to rewrite tests
4. No performance regressions
---
## Implementation Plan (Day 15-17)
### Day 15: Database & Domain Layer (6-8h)
**Morning (3-4h)**: Database Design
- Create migration: Add `parent_issue_id` column to `issues` table
- Add foreign key constraint + index
- Run migration on dev environment
- Verify backward compatibility
**Afternoon (3-4h)**: Domain Logic
- Update Issue entity: Add `ParentIssueId`, `ParentIssue`, `ChildIssues`
- Implement `SetParent(Issue parent)` method with 4 validations
- Implement `RemoveParent()` method
- Add hierarchy validation rules
- Add domain events: `IssueHierarchyChangedEvent`
- Unit tests: 10+ test cases (100% coverage)
### Day 16: Application & API Layer (6-8h)
**Morning (3-4h)**: Commands & Queries
- Create `AddChildIssueCommand` + handler
- Create `RemoveChildIssueCommand` + handler
- Create `GetIssueHierarchyQuery` + handler (CTE)
- Create `GetChildIssuesQuery` + handler
- Add FluentValidation rules
**Afternoon (3-4h)**: API Endpoints
- Add 4 new endpoints to `IssuesController`
- Implement repository methods (GetHierarchyAsync, GetChildrenAsync)
- Use PostgreSQL CTE for recursive queries (< 50ms performance)
- Swagger documentation
- Integration tests: 10+ test cases
### Day 17: Testing & Frontend (Optional, 4-6h)
**Morning (2-3h)**: Integration Tests
- Test all hierarchy scenarios (valid, invalid, circular, cross-tenant)
- Test query performance (< 50ms for 100+ issues)
- Test multi-tenant isolation
- Verify 100% test pass rate
**Afternoon (2-3h)**: Frontend Integration (Optional)
- Update Kanban board to show child issue count
- Add "Create Child Issue" button
- Display parent issue breadcrumb
- Test real-time updates (SignalR)
---
## Technical Specifications
### Database Schema Change
```sql
ALTER TABLE issues
ADD COLUMN parent_issue_id UUID NULL;
ALTER TABLE issues
ADD CONSTRAINT fk_issues_parent
FOREIGN KEY (parent_issue_id)
REFERENCES issues(id)
ON DELETE SET NULL;
CREATE INDEX ix_issues_parent_issue_id
ON issues(parent_issue_id)
WHERE parent_issue_id IS NOT NULL;
```
### Domain Model Change
```csharp
public class Issue : TenantEntity, IAggregateRoot
{
// Existing properties...
// NEW: Hierarchy support
public Guid? ParentIssueId { get; private set; }
public virtual Issue? ParentIssue { get; private set; }
public virtual ICollection<Issue> ChildIssues { get; private set; } = new List<Issue>();
// NEW: Hierarchy methods
public Result SetParent(Issue parent) { /* 4 validations */ }
public Result RemoveParent() { /* ... */ }
private bool IsValidHierarchy(Issue parent) { /* Epic→Story→Task */ }
private bool WouldCreateCircularDependency(Issue parent) { /* ... */ }
public int GetDepth() { /* Max 3 levels */ }
}
```
### API Contract
```
POST /api/issues/{parentId}/add-child - Add child issue
DELETE /api/issues/{issueId}/remove-parent - Remove parent
GET /api/issues/{issueId}/hierarchy - Get full tree (CTE)
GET /api/issues/{issueId}/children - Get direct children
```
### Performance Target
- Query: < 50ms for 100+ issues in hierarchy
- API: < 100ms response time
- Database: Use PostgreSQL CTE (Common Table Expressions) for recursive queries
---
## Success Criteria
### Functional Requirements
- [ ] Can create Epic Story Task hierarchy
- [ ] Can add/remove parent-child relationships via API
- [ ] Can query full hierarchy tree
- [ ] Hierarchy rules enforced (validation)
- [ ] Circular dependency prevention works
- [ ] Max depth 3 levels enforced
### Non-Functional Requirements
- [ ] Query performance < 50ms (100+ issues)
- [ ] Multi-tenant isolation 100% verified
- [ ] Backward compatible (no breaking changes)
- [ ] Integration tests pass rate 95%
- [ ] API response time < 100ms
### Documentation Requirements
- [ ] API documentation updated (Swagger)
- [ ] Database schema documented
- [ ] ADR-035 architecture decision recorded
- [ ] Frontend integration guide (if implemented)
---
## Risks & Mitigations
### Risk 1: Performance Degradation
**Impact**: Medium | **Probability**: Low
**Mitigation**:
- Use CTE for recursive queries (PostgreSQL optimized)
- Add index on `parent_issue_id`
- Limit depth to 3 levels
- Cache frequently accessed trees (Redis)
### Risk 2: Data Integrity Issues
**Impact**: High | **Probability**: Low
**Mitigation**:
- Database foreign key constraints
- Domain validation rules (DDD)
- Transaction isolation
- Comprehensive integration tests (10+ scenarios)
### Risk 3: Frontend Breaking Changes
**Impact**: Low | **Probability**: Very Low
**Mitigation**:
- Backward compatible API (ParentIssueId nullable)
- Existing endpoints unchanged
- New endpoints additive only
- Frontend can adopt gradually
### Risk 4: Multi-Tenant Security Breach
**Impact**: Critical | **Probability**: Very Low (Already mitigated Day 14)
**Mitigation**:
- Tenant validation in SetParent method
- EF Core Global Query Filters
- Integration tests for cross-tenant scenarios
- Code review by security-focused reviewer
---
## Reference Documents
### Primary Documents
1. **ADR-035**: Epic/Story/Task Architecture Decision (Full Technical Specification)
- File: `docs/architecture/ADR-035-EPIC-STORY-TASK-ARCHITECTURE.md`
- Content: 20+ pages, full implementation details
2. **Day 15-16 Implementation Roadmap** (Task Breakdown)
- File: `docs/plans/DAY-15-16-IMPLEMENTATION-ROADMAP.md`
- Content: Hour-by-hour tasks, code samples, checklists
3. **M1_REMAINING_TASKS.md** (Updated with Architecture Clarification)
- File: `M1_REMAINING_TASKS.md`
- Section: "重要架构说明 (ADR-035)"
### Supporting Documents
- `product.md` - Section 5: Core Modules
- `day13-issue-management.md` - Issue Management Implementation (Day 13)
- Day 14 Security Fix: Multi-Tenant Isolation (CRITICAL fix)
---
## Approval & Next Steps
### Approval Status
- [x] Product Manager Agent - Architecture decision made
- [ ] Architect Agent - Technical review (PENDING)
- [ ] Backend Agent - Implementation feasibility (PENDING)
- [ ] QA Agent - Testing strategy (PENDING)
- [ ] Main Coordinator - Project alignment (PENDING)
### Immediate Next Steps (Day 15 Morning)
1. **Get Approval**: Share this decision with all agents for review
2. **Technical Review**: Architect Agent validates approach
3. **Implementation Start**: Backend Agent begins Day 15 tasks
4. **QA Preparation**: QA Agent prepares test scenarios
### Success Metrics
- **Day 15 EOD**: Database migration + domain logic complete, unit tests passing
- **Day 16 EOD**: API endpoints working, integration tests passing (10+/10+)
- **Day 17 EOD**: Performance verified (< 50ms), frontend integrated (optional)
---
## Communication Plan
### Stakeholders
- **Main Coordinator**: Overall project coordination
- **Architect Agent**: Technical architecture review
- **Backend Agent**: Implementation (Day 15-17)
- **Frontend Agent**: UI integration (Day 17, optional)
- **QA Agent**: Testing strategy and execution
- **Progress Recorder**: Update project memory with decision
### Status Updates
- **Daily**: End-of-day summary to Main Coordinator
- **Day 15 EOD**: Domain layer complete
- **Day 16 EOD**: API layer complete
- **Day 17 EOD**: Testing complete + M1 progress update
---
## Conclusion
This architecture decision provides a **clear, low-risk path forward** for implementing Epic/Story/Task hierarchy in ColaFlow:
1. **Use existing Issue Management Module** (production-ready, tested, secure)
2. **Add parent-child hierarchy** as enhancement (Day 15-17)
3. **No breaking changes**, no data migration, no frontend disruption
4. **Time saved**: 3-4 days vs. alternative approaches
5. **M1 on track**: Target completion Nov 20 (2-3 weeks)
**Decision Status**: APPROVED - Ready for Day 15 implementation
---
**Document Version**: 1.0 (Executive Summary)
**Author**: Product Manager Agent
**Date**: 2025-11-04
**Next Review**: After Day 17 implementation
For detailed technical specifications, see:
- `docs/architecture/ADR-035-EPIC-STORY-TASK-ARCHITECTURE.md` (Full ADR)
- `docs/plans/DAY-15-16-IMPLEMENTATION-ROADMAP.md` (Implementation Guide)