| name | ddd-validate |
| description | Validate domain boundaries -- detect cross-context import violations and aggregate invariant issues |
| argument-hint | |
| allowed-tools | Bash(find * grep * npx *) Read Grep Glob mcp__claude-flow__memory_store mcp__claude-flow__memory_search mcp__claude-flow__hooks_pre-task mcp__claude-flow__hooks_post-task |
Validate domain boundary integrity across all bounded contexts.
Steps
-
Discover contexts: Scan src/*/domain/ to find all bounded contexts.
-
Check cross-boundary violations:
- For each context, scan all
.ts files for import statements
- Flag any import that reaches into another context's
domain/ directory directly
- Allowed: importing from another context's public
index.ts (application layer)
- Violation: importing from
src/<other-context>/domain/entities/... directly
for ctx in $(find src -maxdepth 2 -name "domain" -type d | sed 's|src/||;s|/domain||'); do
grep -rn "from ['\"].*src/" "src/$ctx/" --include="*.ts" | grep -v "src/$ctx/" || true
done
-
Check aggregate invariant enforcement:
- Scan aggregate root entities for public setters that bypass validation
- Flag mutable public properties without invariant checks
- Verify that child entities are not directly accessible (must go through aggregate root)
-
Check event naming conventions:
- Domain events should be past-tense named (e.g.,
OrderCreated, not CreateOrder)
- Events should be immutable (no public setters)
- Events should carry the aggregate ID
-
Check repository patterns:
- Repository interfaces should exist in
domain/repositories/, not infrastructure/
- Repository implementations should exist in
infrastructure/, not domain/
- Each aggregate root should have exactly one repository
-
Report findings:
- Output a table of violations with file path, line number, violation type, and suggestion
- Categorize as:
BOUNDARY, INVARIANT, EVENT, REPOSITORY
- Exit with summary: total violations, by category, severity
-
Store results:
npx @claude-flow/cli@latest memory store --key "ddd-validation-TIMESTAMP" --value "RESULTS_SUMMARY" --namespace tasks
npx @claude-flow/cli@latest hooks post-task --task-id "ddd-validate" --success true --store-results true