Each layer depends only on layers below it. No circular dependencies. Created once per session.
initialized first (no dependencies)
1
Defaults
sessionId
logger
eventBus
2
Configuration
ProjectConfig
WorkflowConfig
GitWorkflowConfig
MethodologyProfile
3
Infrastructure
GraphQLClient
IssueRepository
ProjectRepository
RepositoryRepository
EpicRepository
4
Domain Services
EpicService
IntegrityValidator
DependencyService
ContainerService
5
Audit + Agents
AuditService
AgentService
6
BRE + Task Engine
ValidationStepRegistry
TaskTransitionValidator
TaskWorkflowService
SuggestionService
TaskService
7
Analytics + Compliance
AnalyticsService
ComplianceService
8
Work Distribution
WorkDistributionService
9
Merge Readiness
MergeReadinessService
initialized last (depends on everything above)
Key invariant: Created once per MCP session via ServiceContainer.create(), then reused across all tool calls. The private constructor ensures all services are wired through the factory method. Profile is immutable once set — changing methodology requires resetContainer().