--- name: bounded-context-generator description: > Generates CONTEXT.md documentation for bounded contexts by exploring existing code and YAML definitions. Trigger: When user asks to document a bounded context, generate CONTEXT.md, or analyze a domain. license: MIT metadata: author: aurora version: "1.0" auto_invoke: "Generate CONTEXT.md, document bounded context, analyze domain" allowed-tools: Read, Write, Glob, Grep, Task, AskUserQuestion --- ## When to Use - User wants to generate/update CONTEXT.md for a bounded context - User needs to document an existing domain based on code - Analyzing a bounded context structure ## Critical Patterns ### 1. Exploration First Before generating, ALWAYS explore the bounded context: ``` 1. Find all .aurora.yaml files in cliter/{context}/ 2. Read each YAML to extract modules, fields, relationships 3. Explore src/@api/{context}/ for resolvers, controllers, DTOs 4. Explore src/@apps/{context}/ for handlers, services, domain logic 5. Identify business rules from code patterns (guards, validators, handlers) ``` ### 2. Information Sources | Source | What to Extract | |--------|-----------------| | `cliter/{context}/*.aurora.yaml` | Modules, fields, relationships, aggregates | | `src/@api/{context}/` | API endpoints, resolvers, DTOs | | `src/@apps/{context}/*/application/` | Commands, queries, handlers, use cases | | `src/@apps/{context}/*/domain/` | Value objects, entities, business rules | | `src/@apps/{context}/*/infrastructure/` | Repositories, external integrations | ### 3. Module Discovery from YAML Read `.aurora.yaml` files and extract: ```yaml # From the YAML, extract: boundedContextName: business-partner-portal # Context name moduleName: partner # Module name moduleNames: partners # Plural aggregateName: Partner # Aggregate # From properties, infer: # - Field types and relationships # - Required fields (business rules) # - Indexes (query patterns) ``` ### 4. Business Rules Discovery Look for patterns in code: | Code Pattern | Business Rule Type | |--------------|-------------------| | `@Guards()` decorators | Access control rules | | Validators in handlers | Data validation rules | | `if/throw` in domain | Domain invariants | | Value Objects | Data constraints | | Saga/Events | Process rules | ## Generation Process 1. **Receive bounded context name** from user 2. **Explore code structure**: ```bash # Find all YAML definitions glob: cliter/{context}/*.aurora.yaml # Find application handlers glob: src/@apps/{context}/**/handlers/**/*.handler.ts # Find domain entities and value objects glob: src/@apps/{context}/**/domain/**/*.ts ``` 3. **Read and analyze** each found file 4. **Extract information**: - Modules from YAML files - Business flows from handlers (commands/queries) - Business rules from validators and guards - Dependencies from imports 5. **Generate CONTEXT.md** with discovered information 6. **Write to** `cliter/{context}/CONTEXT.md` ## Output Structure ```markdown # {Bounded Context Name} ## Purpose {Inferred from module descriptions and aggregate names} ## Modules | Module | Responsibility | |--------|----------------| | {module} | {Inferred from aggregate and fields} | ## Key Business Rules {Extracted from code analysis} - Rule from guards/validators - Rule from domain invariants - Rule from value object constraints ## Main Flows {Extracted from command/query handlers} 1. **{CommandName}**: {Description from handler} 2. **{QueryName}**: {Description from handler} ## Dependencies - **Uses**: {From imports analysis} - **Used by**: {From reverse dependency search} ## Technical Notes - Aggregate roots identified - Event patterns found - Integration points discovered ``` ## Example Exploration For `business-partner-portal`: ```bash # Step 1: Find YAMLs glob: cliter/business-partner-portal/*.aurora.yaml # Step 2: Read each YAML read: cliter/business-partner-portal/partner.aurora.yaml # Step 3: Find handlers glob: src/@apps/business-partner-portal/**/handlers/**/*.ts # Step 4: Find domain logic glob: src/@apps/business-partner-portal/**/domain/**/*.ts # Step 5: Analyze imports for dependencies grep: "from '@api/" in src/@apps/business-partner-portal/ ``` ## Commands ```bash # Explore bounded context structure eza -T cliter/{context}/ eza -T src/@apps/{context}/ # Find all modules fd ".aurora.yaml" cliter/{context}/ # Find all handlers fd "handler.ts" src/@apps/{context}/ ``` ## User Interaction If code exploration reveals ambiguity, ask user: 1. **Purpose clarification**: "Based on the modules found ({list}), is this context about {inferred purpose}?" 2. **Missing information**: "I couldn't find business rules in code. Can you describe the key constraints?" 3. **Dependencies**: "I found imports from {contexts}. Are there other dependencies?" ## Resources - **Template**: See [assets/CONTEXT-template.md](assets/CONTEXT-template.md)