directus-task-management/planning/Phase3-Migration-Strategy.md

23 KiB

Phase 3: Strategic + Tactical Web Unification Migration Strategy

Migration Overview

This document outlines the migration strategy for Phase 3, which will unify strategic planning (BMad) and tactical task management (Task Master) into a single web-based interface through the Directus Task Management Suite.

Current State Analysis

Existing Systems Architecture

Strategic Level (BMad):
┌─────────────────┐
│ BMad Planning   │ → Local files (.bmad-core/)
│ - PRDs          │ → Manual document management
│ - Architecture  │ → CLI-based agent workflows
│ - Research      │ → Scattered planning artifacts
└─────────────────┘

Tactical Level (Task Master):
┌─────────────────┐
│ Task Master CLI │ → Command-line task tracking  
│ - Projects      │ → Local JSON files
│ - Tasks         │ → Individual markdown files
│ - Dependencies  │ → CLI-based management
└─────────────────┘

Integration Layer (Phase 1-2):
┌─────────────────┐
│ Directus Suite  │ → Web-based task management
│ - Task CRUD     │ → Basic task operations
│ - AI Integration│ → Agent context provision
│ - BMad Tracking │ → Workflow step monitoring
└─────────────────┘

Target State Architecture

Unified Web Interface (Phase 3):
┌─────────────────────────────────────────────────────┐
│                Strategic Planning                   │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐   │
│  │ BMad Projects│ │ Planning    │ │ Research    │   │
│  │ & Epics     │ │ Documents   │ │ Analysis    │   │
│  └─────────────┘ └─────────────┘ └─────────────┘   │
├─────────────────────────────────────────────────────┤
│                Tactical Management                  │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────┐   │
│  │ Task        │ │ Progress    │ │ Team        │   │
│  │ Management  │ │ Tracking    │ │ Collaboration│   │
│  └─────────────┘ └─────────────┘ └─────────────┘   │
└─────────────────────────────────────────────────────┘
                         │
    ┌────────────────────┼────────────────────┐
    │                    │                    │
┌───▼────┐        ┌──────▼──────┐      ┌─────▼─────┐
│ Claude │        │   BMad      │      │ Task      │
│ Agents │        │ Workflows   │      │ Master    │
│        │        │ (Optional)  │      │ (Sync)    │
└────────┘        └─────────────┘      └───────────┘

Migration Strategy

Phase 3A: Strategic Collections Implementation (Weeks 9-10)

New Collections for Strategic Planning

1. BMad Projects Collection

bmad_projects {
  id: uuid (primary key)
  name: string (required, indexed)
  description: text
  bmad_phase: enum ['planning', 'development', 'review', 'complete']
  project_type: enum ['greenfield', 'brownfield', 'maintenance']
  methodology_version: string (e.g., "bmad-v2.0")
  
  -- Strategic metadata
  business_objectives: json
  success_metrics: json
  stakeholders: json
  risk_assessment: json
  
  -- Planning artifacts
  planning_documents: relation (one-to-many with planning_documents)
  research_outputs: json
  architecture_decisions: json
  
  -- Tactical links
  tactical_projects: relation (many-to-many with projects)
  user_stories: relation (computed from linked tactical tasks)
  
  -- Workflow tracking
  methodology_compliance: json
  phase_completion: json
  quality_gates: json
  
  -- Standard fields
  created_by: uuid (foreign key to directus_users.id)
  assigned_pm: uuid (foreign key to directus_users.id, nullable)
  start_date: date (nullable)
  target_completion: date (nullable)
  actual_completion: date (nullable)
  status: enum ['active', 'on_hold', 'completed', 'archived']
  
  created_at: timestamp (auto)
  updated_at: timestamp (auto)
}

2. Planning Documents Collection

planning_documents {
  id: uuid (primary key)
  title: string (required, indexed)
  content: text (rich text/markdown)
  document_type: enum ['prd', 'architecture', 'research', 'validation', 'user_stories', 'implementation_guide']
  
  -- BMad integration
  bmad_project: uuid (foreign key to bmad_projects.id)
  bmad_phase: enum ['pm', 'architect', 'analyst', 'po', 'sm', 'dev']
  bmad_agent: string (agent that created/manages document)
  
  -- Document management
  version: integer (document versioning)
  parent_version: uuid (foreign key to planning_documents.id, nullable)
  status: enum ['draft', 'review', 'approved', 'archived']
  
  -- Content metadata
  word_count: integer (computed)
  estimated_read_time: integer (computed)
  last_reviewed: timestamp (nullable)
  
  -- Collaboration
  created_by: uuid (foreign key to directus_users.id)
  reviewers: json (array of user IDs)
  approval_status: json
  
  -- Integration
  related_tasks: relation (many-to-many with tasks)
  external_refs: json (links to files, repos, etc.)
  
  created_at: timestamp (auto)
  updated_at: timestamp (auto)
}

3. BMad Workflows Collection (Enhanced)

bmad_workflows {
  id: uuid (primary key)
  
  -- Strategic or tactical level
  bmad_project: uuid (foreign key to bmad_projects.id, nullable)
  tactical_task: uuid (foreign key to tasks.id, nullable)
  
  -- Workflow definition
  workflow_type: enum ['strategic_planning', 'epic_breakdown', 'tactical_execution']
  bmad_phase: enum ['pm', 'architect', 'analyst', 'po', 'sm', 'dev', 'qa']
  workflow_step: string
  step_order: integer
  
  -- Status and progress
  step_status: enum ['pending', 'in_progress', 'completed', 'skipped', 'blocked']
  completion_percentage: integer (0-100)
  quality_score: integer (1-10, nullable)
  
  -- Agent integration
  assigned_agent: string (nullable)
  agent_context: json
  automation_rules: json
  
  -- Deliverables and artifacts
  expected_deliverables: json
  actual_deliverables: json
  artifacts_generated: json
  
  -- Time tracking
  estimated_duration: interval (nullable)
  actual_duration: interval (nullable)
  started_at: timestamp (nullable)
  completed_at: timestamp (nullable)
  
  -- Dependencies
  depends_on_steps: relation (many-to-many with bmad_workflows)
  blocks_steps: relation (many-to-many with bmad_workflows)
  
  created_at: timestamp (auto)
  updated_at: timestamp (auto)
}

Migration Process for Strategic Collections

Step 1: Data Migration from BMad Core

// Migration service for existing BMad artifacts
export class BMadMigrationService {
  async migrateBMadProjects(): Promise<void> {
    const bmadProjects = await this.scanBMadDirectory('.bmad-core/');
    
    for (const project of bmadProjects) {
      // Create strategic BMad project
      const bmadProject = await this.directus.createItem('bmad_projects', {
        name: project.name,
        description: project.description,
        bmad_phase: this.determineBMadPhase(project),
        project_type: project.type || 'greenfield',
        methodology_version: 'bmad-v2.0',
        business_objectives: project.objectives,
        planning_documents: [], // Will be linked separately
        status: 'active'
      });
      
      // Migrate planning documents
      await this.migratePlanningDocuments(bmadProject.id, project.documents);
      
      // Link to existing tactical projects
      await this.linkTacticalProjects(bmadProject.id, project.tacticalLinks);
    }
  }
  
  private async migratePlanningDocuments(bmadProjectId: string, documents: any[]): Promise<void> {
    for (const doc of documents) {
      await this.directus.createItem('planning_documents', {
        title: doc.title,
        content: doc.content,
        document_type: this.mapDocumentType(doc.filename),
        bmad_project: bmadProjectId,
        bmad_phase: this.extractBMadPhase(doc),
        version: 1,
        status: 'approved',
        created_by: await this.getCurrentUserId()
      });
    }
  }
  
  private mapDocumentType(filename: string): string {
    const mapping = {
      'prd.md': 'prd',
      'architecture.md': 'architecture', 
      'research.md': 'research',
      'validation.md': 'validation',
      'user-stories.md': 'user_stories',
      'implementation-guides.md': 'implementation_guide'
    };
    
    const type = Object.keys(mapping).find(key => filename.includes(key));
    return type ? mapping[type] : 'prd';
  }
}

Phase 3B: Enhanced Task Schema (Weeks 11-12)

Task Collection Enhancements for Strategic Integration

Enhanced Task Schema:

-- Add strategic-tactical linking fields to existing tasks collection
ALTER TABLE tasks ADD COLUMN strategic_level enum('epic', 'user_story', 'task', 'subtask');
ALTER TABLE tasks ADD COLUMN bmad_project uuid REFERENCES bmad_projects(id);
ALTER TABLE tasks ADD COLUMN parent_user_story uuid REFERENCES tasks(id);
ALTER TABLE tasks ADD COLUMN strategic_importance enum('low', 'medium', 'high', 'critical');
ALTER TABLE tasks ADD COLUMN business_value integer; -- 1-100 scale
ALTER TABLE tasks ADD COLUMN strategic_context json; -- Links to strategic planning artifacts

-- Create strategic-tactical mapping view
CREATE VIEW strategic_tactical_hierarchy AS
SELECT 
  bp.id as bmad_project_id,
  bp.name as strategic_name,
  bp.bmad_phase as strategic_phase,
  p.id as tactical_project_id,
  p.name as tactical_name,
  COUNT(t.id) as tactical_task_count,
  AVG(t.progress_percentage) as tactical_progress
FROM bmad_projects bp
LEFT JOIN projects p ON p.bmad_project = bp.id
LEFT JOIN tasks t ON t.project = p.id
GROUP BY bp.id, p.id;

Migration Process for Enhanced Tasks:

export class TaskEnhancementMigration {
  async enhanceExistingTasks(): Promise<void> {
    // 1. Identify strategic tasks (epics, user stories)
    const strategicTasks = await this.identifyStrategicTasks();
    
    for (const task of strategicTasks) {
      await this.directus.updateItem('tasks', task.id, {
        strategic_level: this.determineStrategicLevel(task),
        strategic_importance: this.calculateStrategicImportance(task),
        business_value: this.calculateBusinessValue(task)
      });
    }
    
    // 2. Link tactical tasks to BMad projects
    await this.linkTasksToBMadProjects();
    
    // 3. Create user story hierarchies
    await this.createUserStoryHierarchies();
  }
  
  private async linkTasksToBMadProjects(): Promise<void> {
    const tacticalProjects = await this.directus.readItems('projects', {
      filter: { repository_url: { _nnull: true } }
    });
    
    for (const project of tacticalProjects.data) {
      // Find matching BMad project based on repository or naming patterns
      const bmadProject = await this.findMatchingBMadProject(project);
      
      if (bmadProject) {
        await this.directus.updateItem('projects', project.id, {
          bmad_project: bmadProject.id
        });
      }
    }
  }
}

Phase 3C: Unified Web Interface (Weeks 13-14)

Strategic Planning Dashboard

Strategic Dashboard Component:

<template>
  <div class="strategic-dashboard">
    <!-- BMad Projects Overview -->
    <div class="bmad-projects-section">
      <h2>Strategic Initiatives</h2>
      <div class="projects-grid">
        <bmad-project-card 
          v-for="project in bmadProjects" 
          :key="project.id"
          :project="project"
          @view-details="viewBMadProject"
        />
      </div>
    </div>
    
    <!-- Strategic to Tactical Flow -->
    <div class="strategic-tactical-flow">
      <h3>Strategic → Tactical Progress</h3>
      <strategic-tactical-timeline 
        :bmad-projects="bmadProjects"
        :tactical-projects="linkedTacticalProjects"
      />
    </div>
    
    <!-- Planning Documents Management -->
    <div class="planning-documents">
      <h3>Planning Artifacts</h3>
      <planning-document-manager 
        :documents="planningDocuments"
        @create-document="createPlanningDocument"
        @update-document="updatePlanningDocument"
      />
    </div>
  </div>
</template>

<script>
export default {
  name: 'StrategicDashboard',
  
  data() {
    return {
      bmadProjects: [],
      linkedTacticalProjects: [],
      planningDocuments: []
    };
  },
  
  async mounted() {
    await this.loadStrategicData();
  },
  
  methods: {
    async loadStrategicData() {
      // Load BMad projects with tactical links
      this.bmadProjects = await this.directusApi.readItems('bmad_projects', {
        fields: [
          '*',
          'tactical_projects.id',
          'tactical_projects.name', 
          'tactical_projects.completion_percentage',
          'planning_documents.id',
          'planning_documents.title',
          'planning_documents.document_type',
          'planning_documents.status'
        ]
      });
      
      // Load planning documents
      this.planningDocuments = await this.directusApi.readItems('planning_documents', {
        filter: { status: { _neq: 'archived' } },
        sort: ['-updated_at']
      });
    },
    
    async viewBMadProject(projectId) {
      this.$router.push(`/strategic/bmad-projects/${projectId}`);
    },
    
    async createPlanningDocument(documentData) {
      const newDoc = await this.directusApi.createItem('planning_documents', documentData);
      this.planningDocuments.unshift(newDoc);
    }
  }
};
</script>

Unified Task Management Interface

Enhanced Task Interface with Strategic Context:

<template>
  <div class="unified-task-interface">
    <!-- Strategic Context Bar -->
    <div class="strategic-context-bar" v-if="task.bmad_project">
      <div class="strategic-info">
        <span class="bmad-project">{{ task.bmad_project.name }}</span>
        <span class="strategic-phase">{{ task.bmad_project.bmad_phase }}</span>
        <span class="business-value">Value: {{ task.business_value || 'N/A' }}</span>
      </div>
      <div class="strategic-actions">
        <button @click="viewStrategicContext">View Strategic Context</button>
        <button @click="linkToUserStory">Link to User Story</button>
      </div>
    </div>
    
    <!-- Standard Task Interface -->
    <div class="task-content">
      <task-detail-form 
        :task="task" 
        :enhanced-fields="strategicFields"
        @update="updateTask"
      />
    </div>
    
    <!-- Strategic Planning Integration -->
    <div class="strategic-integration" v-if="showStrategicIntegration">
      <h4>Strategic Planning Artifacts</h4>
      <div class="related-documents">
        <planning-document-link 
          v-for="doc in relatedPlanningDocs"
          :key="doc.id"
          :document="doc"
        />
      </div>
      
      <div class="bmad-workflow-tracking">
        <bmad-workflow-steps 
          :task-id="task.id"
          :workflow-steps="bmadWorkflowSteps"
          @update-step="updateWorkflowStep"
        />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'UnifiedTaskInterface',
  
  props: {
    taskId: String
  },
  
  data() {
    return {
      task: null,
      relatedPlanningDocs: [],
      bmadWorkflowSteps: [],
      showStrategicIntegration: false
    };
  },
  
  computed: {
    strategicFields() {
      return [
        'strategic_level',
        'strategic_importance', 
        'business_value',
        'parent_user_story',
        'bmad_project'
      ];
    }
  },
  
  async mounted() {
    await this.loadTaskWithStrategicContext();
  },
  
  methods: {
    async loadTaskWithStrategicContext() {
      this.task = await this.directusApi.readItem('tasks', this.taskId, {
        fields: [
          '*',
          'bmad_project.*',
          'parent_user_story.*',
          'project.*',
          'status.*'
        ]
      });
      
      if (this.task.bmad_project) {
        this.showStrategicIntegration = true;
        await this.loadStrategicContext();
      }
    },
    
    async loadStrategicContext() {
      // Load related planning documents
      this.relatedPlanningDocs = await this.directusApi.readItems('planning_documents', {
        filter: { 
          bmad_project: { _eq: this.task.bmad_project.id }
        }
      });
      
      // Load BMad workflow steps
      this.bmadWorkflowSteps = await this.directusApi.readItems('bmad_workflows', {
        filter: {
          tactical_task: { _eq: this.task.id }
        },
        sort: ['step_order']
      });
    },
    
    async viewStrategicContext() {
      this.$router.push(`/strategic/bmad-projects/${this.task.bmad_project.id}`);
    },
    
    async updateWorkflowStep(stepId, stepData) {
      await this.directusApi.updateItem('bmad_workflows', stepId, stepData);
      await this.loadStrategicContext(); // Refresh workflow steps
    }
  }
};
</script>

Phase 3D: Task Master Integration Evolution (Week 15-16)

Enhanced Task Master Sync for Strategic Context

Strategic Context Sync Service:

export class StrategicTaskMasterSync extends TaskMasterSyncService {
  async syncStrategicContext(): Promise<void> {
    // Sync strategic metadata to Task Master
    const tasksWithStrategicContext = await this.directus.readItems('tasks', {
      filter: {
        _and: [
          { task_master_id: { _nnull: true } },
          { bmad_project: { _nnull: true } }
        ]
      },
      fields: ['*', 'bmad_project.*', 'parent_user_story.*']
    });
    
    for (const task of tasksWithStrategicContext.data) {
      await this.updateTaskMasterWithStrategicContext(task);
    }
  }
  
  private async updateTaskMasterWithStrategicContext(task: any): Promise<void> {
    const strategicMetadata = {
      bmad_project: task.bmad_project?.name,
      strategic_level: task.strategic_level,
      strategic_importance: task.strategic_importance,
      business_value: task.business_value,
      strategic_links: {
        bmad_project_id: task.bmad_project?.id,
        planning_documents: await this.getRelatedPlanningDocuments(task.bmad_project?.id)
      }
    };
    
    await this.executeTaskMasterCommand([
      'update-task',
      '--id', task.task_master_id,
      '--strategic-metadata', JSON.stringify(strategicMetadata)
    ]);
  }
  
  async exportStrategicSummary(bmadProjectId: string): Promise<void> {
    // Export strategic summary for Task Master projects
    const bmadProject = await this.directus.readItem('bmad_projects', bmadProjectId, {
      fields: [
        '*',
        'tactical_projects.*',
        'planning_documents.*'
      ]
    });
    
    const strategicSummary = {
      bmad_project: bmadProject,
      tactical_projects: bmadProject.tactical_projects,
      planning_artifacts: bmadProject.planning_documents,
      task_summary: await this.generateTaskSummary(bmadProjectId)
    };
    
    // Export to Task Master as project documentation
    await this.executeTaskMasterCommand([
      'create-project-doc',
      '--type', 'strategic-summary',
      '--data', JSON.stringify(strategicSummary)
    ]);
  }
}

Migration Timeline & Rollout Strategy

Pre-Migration Phase (Week 8)

  • Complete Phase 2 implementation and testing
  • Backup all existing BMad and Task Master data
  • Create migration testing environment
  • Document rollback procedures

Migration Execution (Weeks 9-16)

Week 9-10: Strategic Collections

  • Implement bmad_projects and planning_documents collections
  • Migrate existing BMad artifacts from .bmad-core/
  • Test strategic dashboard basic functionality
  • Validate data migration integrity

Week 11-12: Task Enhancement

  • Add strategic fields to tasks collection
  • Migrate existing strategic tasks (epics, user stories)
  • Link tactical projects to BMad projects
  • Create strategic-tactical hierarchy views

Week 13-14: Unified Interface

  • Deploy strategic planning dashboard
  • Enhanced task interface with strategic context
  • Integration testing with existing workflows
  • User acceptance testing with key stakeholders

Week 15-16: Integration & Optimization

  • Enhanced Task Master sync with strategic context
  • Performance optimization for unified interface
  • Documentation and training materials
  • Production deployment and monitoring

Post-Migration Phase (Week 17+)

Validation & Optimization:

  • Monitor system performance and user adoption
  • Collect user feedback and iterate on interface
  • Fine-tune strategic-tactical workflow integration
  • Plan future enhancements based on usage patterns

Success Metrics for Phase 3

Technical Success Metrics

  • 100% data migration without loss
  • <200ms response times for unified interface
  • 99.9% uptime during migration period
  • All existing integrations continue to function

User Experience Metrics

  • 90% user satisfaction with unified interface
  • 50% reduction in context switching between strategic/tactical views
  • 80% of strategic planning managed through web interface
  • Team collaboration increased by 60%

Business Value Metrics

  • Strategic planning cycle time reduced by 40%
  • Tactical execution tracking accuracy improved by 30%
  • Decision-making speed increased through better strategic-tactical visibility
  • Overall development workflow efficiency improved by 75%

Risk Management

High-Risk Areas

  1. Data Migration Complexity: Strategic artifacts span multiple formats and locations
  2. User Workflow Disruption: Significant change to established BMad and Task Master workflows
  3. Performance Impact: Additional collections and relationships may impact response times
  4. Integration Compatibility: Ensuring existing Claude Code agents continue to function

Mitigation Strategies

  1. Extensive Testing: Comprehensive migration testing in staging environment
  2. Phased Rollout: Gradual migration with rollback options at each phase
  3. Performance Monitoring: Proactive monitoring and optimization during migration
  4. Training and Support: Comprehensive documentation and user training programs

This Phase 3 migration strategy provides a clear path for unifying strategic and tactical management while maintaining compatibility with existing systems and workflows. The phased approach ensures minimal disruption while delivering significant value through the unified web interface.