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

12 KiB

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

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

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

  • 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)