--- name: domain-knowledge description: Document domain knowledge including entities, attributes, relationships, processes, and ubiquitous language. Use when documenting domain models, entity relationships, business processes, or building a glossary of domain terms. --- # Domain Knowledge Documentation ## Overview This skill helps document domain knowledge systematically. It captures entities, relationships, processes, and terminology to create a shared understanding of the domain. **Purpose**: Build a comprehensive domain model that serves as the foundation for requirements, implementation, and team communication. ## CRITICAL: NO ASSUMPTIONS POLICY **This skill MUST trigger dialogue with users, NOT make assumptions about the domain.** AI has a strong tendency to: - Invent entity attributes when they're not specified - Make up relationships between entities - Fabricate process steps and business logic - Assume data types and validation rules - Create plausible but incorrect domain terminology **NEVER do any of the above.** Instead: - **ASK questions** about every entity attribute - **WAIT for answers** before documenting relationships - **DOCUMENT gaps** with `# TODO:` or `# QUESTION:` if user doesn't know - **VERIFY understanding** before creating documentation - **STOP immediately** when uncertain about ANY detail ### What to Always Ask - "What attributes does this entity have?" - "What's the data type of each attribute?" - "How does this entity relate to [other entity]?" - "What's the cardinality of this relationship?" (1:1, 1:N, N:M) - "What are the steps in this process?" - "Are there validation rules or constraints?" - "Can you provide a real example from your domain?" ## File Location and Organization ### Directory Structure Domain knowledge is organized in `docs/domains/[domain-name]/[subdomain-name]/` with subdirectories for each type: ``` docs/domains/ └── [domain-name]/ └── [subdomain-name]/ ├── entities/ │ ├── _overview.md (Master ERD with all entities) │ ├── customer.md (Individual entity file) │ └── order.md ├── processes/ │ ├── _overview.md (Process relationships and flow) │ ├── checkout.md (Individual process file) │ └── fulfillment.md └── glossary/ ├── _overview.md (Alphabetical index of all terms) ├── sku.md (Individual term file) └── backorder.md ``` **File organization:** - **entities/** - One file per entity, plus `_overview.md` with master ERD - **processes/** - One file per process, plus `_overview.md` showing relationships - **glossary/** - One file per term/concept, plus `_overview.md` as index ### File Naming - Use **kebab-case** for filenames: `order-item.md`, `user-registration.md` - Use `_overview.md` for index/summary files in each subdirectory - Keep names concise and domain-specific ## Core Capabilities ### 1. Document Entities Capture domain entities - the core concepts and objects in the domain. **Entity documentation includes:** - **Name** - What the entity is called - **Description** - What it represents in the domain - **Attributes** - Properties and data the entity holds - **Constraints** - Business rules and validation - **Lifecycle** - States and transitions - **Relationships** - Connections to other entities **Template:** ```markdown # [Entity Name] **Description**: [What this entity represents] ## Attributes | Attribute | Type | Required | Description | |-----------|------|----------|-------------| | id | string | Yes | Unique identifier | | name | string | Yes | ... | ## Relationships - **has-many** [Other Entity] - Description - **belongs-to** [Other Entity] - Description ## Lifecycle - Created when: [trigger/event] - Status transitions: [state changes] - Deleted when: [condition] ## Business Rules - [Rule 1] - [Rule 2] ## Example ```json { "id": "123", "name": "Example" } ``` ``` ### 2. Document Relationships Capture how entities connect and interact. **Relationship types:** - **One-to-One** (1:1) - Each A has exactly one B - **One-to-Many** (1:N) - Each A has many B - **Many-to-Many** (N:M) - Many A relate to many B - **Composition** - Part-of relationships (strong ownership) - **Aggregation** - Has-a relationships (weak ownership) **Template:** ```markdown ## [Entity A] → [Entity B] **Type**: one-to-many | many-to-many | one-to-one **Description**: [What this relationship means] **Cardinality**: - [Entity A]: 0..1 | 1 | 0..* | 1..* - [Entity B]: 0..1 | 1 | 0..* | 1..* **Constraints**: - [Business rules for this relationship] ``` ### 3. Visualize with Mermaid Diagrams #### Entity Relationship Diagrams (ERD) ```markdown ## Entity Relationship Diagram \`\`\`mermaid erDiagram Customer ||--o{ Order : "places" Order ||--|{ OrderItem : "contains" Product ||--o{ OrderItem : "included in" Customer { string id PK string name string email } Order { string id PK string customer_id FK date order_date string status } \`\`\` ``` **Relationship notation:** - `||--||` : One-to-one - `||--o{` : One-to-many - `}o--o{` : Many-to-many #### Process Flow Diagrams ```markdown ## Process Flow \`\`\`mermaid flowchart TD Start([Customer initiates checkout]) Start --> Validate{Cart valid?} Validate -->|No| Error[Show error] Validate -->|Yes| Payment[Process payment] Payment --> Confirm[Send confirmation] Confirm --> End([Complete]) \`\`\` ``` #### State Diagrams ```markdown ## Order Lifecycle \`\`\`mermaid stateDiagram-v2 [*] --> Pending : Order placed Pending --> Confirmed : Payment received Confirmed --> Shipped : Items dispatched Shipped --> Delivered : Customer receives Delivered --> [*] Pending --> Cancelled : Customer cancels Cancelled --> [*] \`\`\` ``` ### 4. Document Processes Capture business workflows and processes. **Process documentation includes:** - Process name and goal - Trigger (what starts it) - Actors (who participates) - Steps (what happens) - Decision points - Outcomes - Edge cases **Template:** ```markdown # [Process Name] **Goal**: [What this process achieves] **Trigger**: [What starts this process] ## Actors - [Actor 1] - [Their role] - [Actor 2] - [Their role] ## Steps 1. **[Step name]** - Who: [Actor] - What: [Action] - Input: [Required data/state] - Output: [Result/state change] 2. **[Decision point]** - If [condition]: Go to step X - Else: Go to step Y ## Outcomes - Success: [What happens] - Failure: [What happens] ## Business Rules - [Rule 1] - [Rule 2] ## Edge Cases - [Case 1]: [How it's handled] ``` ### 5. Document Ubiquitous Language Capture terms, definitions, and domain vocabulary. **Glossary documentation includes:** - Term name - Definition - Context/usage - Synonyms - Related terms - Examples **Template:** ```markdown # [Term] **Definition**: [Clear, concise definition] **Context**: [When/where this term is used] **Synonyms**: [Alternative terms] **Related terms**: [Connected concepts] **Example**: > [Usage in context] **Technical mapping**: - Database: `table_name.column_name` - Code: `ClassName` or `functionName` ``` ## Discovery Workflow When documenting domain knowledge, follow these steps: 1. **Ask about existing documentation** - "Where do you currently document domain knowledge?" - "Do you have schema files, type definitions, or API docs?" 2. **Start with entities** - "What are the core entities in this domain?" - "Which entity should we document first?" - Document one entity completely before moving to the next 3. **Map relationships** - "How do these entities relate to each other?" - "What's the cardinality of this relationship?" 4. **Document processes** - "What business processes involve these entities?" - "Who are the actors in this process?" 5. **Build glossary** - "What terms does your team use?" - "Are there any ambiguous terms?" ## Best Practices 1. **Start small, grow organically** - Don't try to document everything at once 2. **Keep it current** - Update when domain understanding changes 3. **Use examples liberally** - Concrete examples make concepts clear 4. **Link everything** - Connect entities to processes to glossary 5. **Document uncertainties** - Use `# TODO:` and `# QUESTION:` markers