370 lines
12 KiB
Markdown
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)
|