BMAD-METHOD/.claude/orchestrator/context-engine.md

12 KiB

Context Engine - Advanced Context Management

System Overview

The Context Engine provides structured data passing, validation, and transformation between agents to ensure consistent, high-quality outputs across the entire workflow.

Context Schema Definition

Session Context Structure

{
  "session_id": "bmad-session-{{timestamp}}-{{random}}",
  "project_metadata": {
    "name": "{{project_name}}",
    "workflow_type": "{{workflow_type}}",
    "complexity_score": 0,
    "project_type": "{{project_type}}",
    "created_at": "{{iso_timestamp}}",
    "estimated_duration": "{{duration_estimate}}"
  },
  "workflow_state": {
    "current_step": 0,
    "completed_steps": [],
    "failed_steps": [],
    "quality_gates_passed": [],
    "overall_quality_score": 0.0
  },
  "agent_contexts": {
    "analyst": {
      "status": "pending|in_progress|completed|failed",
      "execution_start": null,
      "execution_end": null,
      "outputs": {
        "project_brief": {
          "file_reference": "artifacts/project-brief.md",
          "structured_data": {
            "problem_statement": "",
            "target_users": [],
            "core_features": [],
            "success_metrics": [],
            "technical_constraints": [],
            "complexity_indicators": {
              "feature_count": 0,
              "integration_complexity": 0,
              "user_type_complexity": 0,
              "data_complexity": 0
            }
          },
          "quality_metrics": {
            "completeness_score": 0,
            "clarity_score": 0,
            "feasibility_score": 0,
            "overall_score": 0
          }
        }
      },
      "validation_results": [],
      "retries": 0
    },
    "pm": {
      "status": "pending",
      "inputs": {
        "required": ["analyst.outputs.project_brief"],
        "optional": ["global_context.technical_preferences"]
      },
      "outputs": {
        "prd": {
          "file_reference": "artifacts/prd.md",
          "structured_data": {
            "user_stories": [],
            "functional_requirements": [],
            "non_functional_requirements": [],
            "acceptance_criteria": [],
            "priority_matrix": {},
            "success_metrics": []
          },
          "quality_metrics": {
            "requirements_coverage": 0,
            "story_completeness": 0,
            "testability_score": 0,
            "overall_score": 0
          }
        }
      }
    },
    "architect": {
      "status": "pending",
      "inputs": {
        "required": ["pm.outputs.prd", "analyst.outputs.project_brief.structured_data.technical_constraints"],
        "optional": ["global_context.technology_preferences"]
      },
      "outputs": {
        "architecture": {
          "file_reference": "artifacts/architecture.md",
          "structured_data": {
            "technology_stack": {},
            "system_architecture": {},
            "database_design": {},
            "api_specifications": {},
            "security_architecture": {},
            "performance_considerations": {}
          },
          "quality_metrics": {
            "technical_feasibility": 0,
            "scalability_assessment": 0,
            "security_coverage": 0,
            "overall_score": 0
          }
        }
      }
    },
    "ux_expert": {
      "status": "pending", 
      "inputs": {
        "required": ["pm.outputs.prd", "analyst.outputs.project_brief.structured_data.target_users"],
        "optional": ["architect.outputs.architecture.structured_data.system_architecture"]
      },
      "outputs": {
        "ui_spec": {
          "file_reference": "artifacts/ui-spec.md",
          "structured_data": {
            "user_personas": [],
            "user_journeys": [],
            "component_specifications": {},
            "design_system": {},
            "accessibility_requirements": [],
            "responsive_specifications": {}
          },
          "quality_metrics": {
            "user_experience_score": 0,
            "accessibility_score": 0,
            "design_completeness": 0,
            "overall_score": 0
          }
        }
      }
    },
    "developer": {
      "status": "pending",
      "inputs": {
        "required": ["architect.outputs.architecture", "ux_expert.outputs.ui_spec", "pm.outputs.prd"],
        "optional": ["global_context.coding_standards"]
      },
      "outputs": {
        "implementation": {
          "file_references": ["src/frontend/", "src/backend/", "config/"],
          "structured_data": {
            "component_list": [],
            "api_endpoints": [],
            "database_schema": {},
            "configuration_files": [],
            "test_coverage": {}
          },
          "quality_metrics": {
            "code_quality_score": 0,
            "test_coverage_score": 0,
            "security_implementation": 0,
            "overall_score": 0
          }
        }
      }
    },
    "qa": {
      "status": "pending",
      "inputs": {
        "required": ["developer.outputs.implementation", "pm.outputs.prd"],
        "optional": ["architect.outputs.architecture.structured_data.performance_considerations"]
      },
      "outputs": {
        "test_plan": {
          "file_reference": "artifacts/test-plan.md",
          "structured_data": {
            "test_scenarios": [],
            "coverage_analysis": {},
            "quality_gates": [],
            "risk_assessment": {},
            "performance_tests": []
          },
          "quality_metrics": {
            "coverage_completeness": 0,
            "risk_assessment_quality": 0,
            "test_scenario_quality": 0,
            "overall_score": 0
          }
        }
      }
    }
  },
  "global_context": {
    "project_constraints": {
      "budget_level": "startup|enterprise|unlimited",
      "timeline": "rush|normal|extended",
      "team_size": 0,
      "complexity_tolerance": "simple|moderate|complex"
    },
    "technical_preferences": {
      "frontend_framework": "",
      "backend_technology": "",
      "database_preference": "",
      "deployment_target": "",
      "performance_requirements": {}
    },
    "quality_standards": {
      "minimum_test_coverage": 80,
      "code_quality_threshold": 8.0,
      "accessibility_level": "WCAG-AA",
      "security_requirements": []
    },
    "business_context": {
      "industry_sector": "",
      "target_market": "",
      "competitive_landscape": "",
      "regulatory_requirements": []
    }
  },
  "validation_history": [],
  "decision_log": []
}

Context Validation Rules

Input Validation for Each Agent

validation_rules:
  analyst:
    inputs:
      user_specification:
        required: true
        min_length: 50
        must_contain: ["problem", "solution", "users"]
    
  pm:
    inputs:
      analyst_project_brief:
        required: true
        required_sections: ["problem_statement", "target_users", "core_features"]
        quality_threshold: 6.0
        
  architect:
    inputs:
      pm_prd:
        required: true
        required_sections: ["functional_requirements", "non_functional_requirements"]
        quality_threshold: 7.0
      technical_constraints:
        source: "analyst.outputs.project_brief.structured_data.technical_constraints"
        format: "array"
        
  ux_expert:
    inputs:
      user_requirements:
        source: "pm.outputs.prd.structured_data.user_stories"
        min_count: 3
      target_users:
        source: "analyst.outputs.project_brief.structured_data.target_users" 
        min_count: 1
        
  developer:
    inputs:
      architecture_spec:
        source: "architect.outputs.architecture"
        required_sections: ["technology_stack", "system_architecture", "database_design"]
        quality_threshold: 7.0
      ui_specifications:
        source: "ux_expert.outputs.ui_spec"
        required_sections: ["component_specifications", "user_journeys"]
        quality_threshold: 6.5
        
  qa:
    inputs:
      implementation_artifacts:
        source: "developer.outputs.implementation"
        required_data: ["component_list", "api_endpoints", "test_coverage"]
      requirements_traceability:
        source: "pm.outputs.prd.structured_data.user_stories"
        format: "array"

Context Transformation Engine

Data Extraction and Transformation

transformations:
  complexity_scoring:
    trigger: "analyst_completion"
    inputs:
      - "analyst.outputs.project_brief.structured_data.core_features"
      - "analyst.outputs.project_brief.structured_data.target_users"
      - "analyst.outputs.project_brief.structured_data.technical_constraints"
    algorithm: |
      feature_complexity = len(core_features) * 2
      user_complexity = len(target_users) * 1.5
      technical_complexity = len(technical_constraints) * 3
      complexity_score = (feature_complexity + user_complexity + technical_complexity) / 3      
    output: "project_metadata.complexity_score"
    
  workflow_adaptation:
    trigger: "complexity_scoring_completion"
    logic: |
      if complexity_score <= 4:
        workflow_type = "simplified"
        skip_steps = ["optional_architectural_review"]
      elif complexity_score <= 7:
        workflow_type = "standard"
      else:
        workflow_type = "comprehensive"  
        add_steps = ["detailed_security_review", "performance_analysis"]
              
  technology_constraints_propagation:
    trigger: "analyst_completion"
    source: "analyst.outputs.project_brief.structured_data.technical_constraints"
    destinations:
      - "architect.inputs.technical_constraints"
      - "global_context.technical_preferences.constraints"
      
  user_persona_enrichment:
    trigger: "pm_completion"
    inputs:
      - "analyst.outputs.project_brief.structured_data.target_users"
      - "pm.outputs.prd.structured_data.user_stories"
    transformation: |
      for user_type in target_users:
        related_stories = filter_stories_by_user(user_stories, user_type)
        enhanced_persona = create_detailed_persona(user_type, related_stories)
        enriched_personas.append(enhanced_persona)      
    output: "ux_expert.inputs.enriched_personas"

Context Access Methods

Agent Context Injection System

Each agent prompt receives structured context through these injection points:

# Agent prompt enhancement template
agent_context_injection: |
  ## <available_context>
  You have access to the following structured context from previous agents:
  
  {{#if analyst.completed}}
  ### From Analyst Agent:
  **Problem Statement**: {{analyst.outputs.project_brief.structured_data.problem_statement}}
  **Target Users**: {{#each analyst.outputs.project_brief.structured_data.target_users}}{{this}}, {{/each}}
  **Core Features**: {{#each analyst.outputs.project_brief.structured_data.core_features}}{{this}}, {{/each}}
  **Technical Constraints**: {{#each analyst.outputs.project_brief.structured_data.technical_constraints}}{{this}}, {{/each}}
  **Complexity Score**: {{project_metadata.complexity_score}}
  {{/if}}
  
  {{#if pm.completed}}
  ### From PM Agent:
  **Functional Requirements**: {{pm.outputs.prd.structured_data.functional_requirements}}
  **User Stories Count**: {{pm.outputs.prd.structured_data.user_stories.length}}
  **Success Metrics**: {{pm.outputs.prd.structured_data.success_metrics}}
  {{/if}}
  
  ### Project Context:
  **Budget Level**: {{global_context.project_constraints.budget_level}}
  **Timeline**: {{global_context.project_constraints.timeline}}
  **Quality Standards**: Minimum {{global_context.quality_standards.minimum_test_coverage}}% test coverage required
  </available_context>
  
  ## <context_validation>
  Before proceeding, confirm you have received the required context:
  {{#each required_inputs}}
  - [ ] {{this}}: {{lookup ../context this}}
  {{/each}}
  
  If any required context is missing, request it explicitly before proceeding.
  </context_validation>  

Context Persistence and Recovery

Session Management

context_persistence:
  storage_location: ".claude/context/sessions/"
  file_naming: "session-{{session_id}}.json"
  backup_frequency: "after_each_agent_completion"
  retention_policy: "30_days"
  
recovery_mechanisms:
  session_restoration:
    trigger: "context_corruption_detected"
    fallback: "restore_from_latest_backup"
    validation: "validate_context_schema"
    
  partial_recovery:
    trigger: "agent_failure_with_partial_completion"
    action: "preserve_completed_outputs"
    recovery: "resume_from_last_checkpoint"

This Context Engine provides the foundation for all other system improvements - structured data flow, validation, and intelligent context management between agents.