mcpField
D
ddd-validate

ddd-validate

github.com/ruvnetTesting & quality80.0k736 installsUpdated today
Repository

About ddd-validate

ddd-validate is a development skill for checking domain-driven design boundaries and conventions in TypeScript projects. It reports violations across bounded contexts, aggregates, events, and repositories, then stores the results.

Key features

  1. 01Finds bounded contexts
  2. 02Checks cross-context imports
  3. 03Reviews aggregate invariants
  4. 04Validates event conventions
  5. 05Checks repository placement
  6. 06Reports and stores findings

Use cases

  1. 01Audit imports between domain contexts
  2. 02Find aggregate setters that bypass validation
  3. 03Review domain event naming and immutability
  4. 04Check repository interfaces and implementations

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/ruvnet/ruflo --skill ddd-validate

After installing, type/ddd-validatein Claude Code to confirm it loaded.

Details

From the project README

Validate domain boundary integrity across all bounded contexts.

Steps

  1. Discover contexts: Scan src/*/domain/ to find all bounded contexts.

  2. 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
    # Find cross-boundary imports
    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
    
  3. 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)
  4. 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
  5. 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
  6. 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
  7. 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
    

Comments

Markdown supported