plugins/ruflo-ddd/skills/ddd-aggregate/SKILL.md
Scaffold a complete aggregate root inside a bounded context.
Parse $ARGUMENTS as <context-name> <aggregate-name> (both kebab-case). The context must already exist under src/.
Validate: Confirm src/<context>/domain/ exists. If not, suggest running /ddd-context <context> first.
Pre-task hook: npx @claude-flow/cli@latest hooks pre-task --description "DDD aggregate: <aggregate-name> in <context>"
Create aggregate root entity:
src/<context>/domain/entities/<aggregate-name>.entity.tsequals() based on identityAggregateRoot interfaceCreate value objects:
src/<context>/domain/value-objects/<aggregate-name>-id.value-object.tsCreate repository interface:
src/<context>/domain/repositories/<aggregate-name>.repository.tsfindById, save, delete methodsCreate domain events:
src/<context>/domain/events/<aggregate-name>-created.event.tssrc/<context>/domain/events/<aggregate-name>-updated.event.tsCreate unit test stubs:
src/<context>/domain/entities/<aggregate-name>.entity.test.tsdescribe/it with should [behavior] when [condition] namesUpdate barrel exports: Add new files to the relevant index.ts barrel files.
Store in domain model graph:
mcp__claude-flow__agentdb_hierarchical-store --parent "context:<context>" --child "aggregate:<aggregate-name>" --relation "contains"
mcp__claude-flow__memory_store --key "ddd-aggregate-<context>-<aggregate-name>" --value "AGGREGATE_SUMMARY" --namespace tasks
Post-task hook: npx @claude-flow/cli@latest hooks post-task --task-id "ddd-aggregate-<aggregate-name>" --success true --train-neural true