project_specs-generation
Generate comprehensive BDD/DDD specifications for domains, resources, features, integrations, and policies
- Category: discovered
- Tags: github, community
- Version: 1.0.0
- Author: walid
- Downloads: 0
- GitHub stars: 1
- Updated: 2025-11-21
Download the latest version (v1.0.0) from this page.
SKILL.md
---
name: project_specs-generation
description: Generate comprehensive BDD/DDD specifications for domains, resources, features, integrations, and policies
---
# BDD/DDD Specification Generator Skill
## Skill Purpose
This skill enables you to generate comprehensive BDD (Behavior-Driven Development) and DDD (Domain-Driven Design) specifications for software projects. Use it to create structured requirement artifacts that serve as living documentation and source of truth for implementation.
## When to Use This Skill
**Use this skill to generate individual specification documents** after the spec system has been initialized.
Trigger this skill when you need to:
- Create domain specifications (bounded contexts)
- Generate resource specifications (entities, aggregates)
- Write BDD feature scenarios with Given-When-Then
- Document integrations between domains
- Create authorization/validation policy specifications
**Related Skills:**
- Use `project_specs-setup_spec_system` FIRST to initialize the /specs folder structure
- Use `project_specs-quick_reference` for fast template lookups when context is tight
**Integration with Implementation:**
- Specifications should be created BEFORE implementing Ash resources (see `ash-guidelines` skill)
- BDD features inform LiveView implementations (see `liveview-guidelines` skill)
- Domain specs guide overall project architecture (see `project-guidelines` skill)
**Proactive Usage:**
When users discuss requirements, features, domain modeling, or "what should this do?", suggest creating specifications first.
## Folder Structure
All specifications live in `/specs` with numbered prefixes for natural sorting:
```
/specs
├── README.md
├── 01-domains/ # Domain models & bounded contexts
│ └── [domain-name]/
│ ├── domain.md # Domain definition
│ ├── resources/ # Entities & aggregates
│ ├── features/ # BDD scenarios
│ └── policies/ # Authorization & rules
├── 02-features-cross-domain/ # Multi-domain features
├── 03-integrations/ # Domain communication specs
├── 04-architecture/ # System architecture (arc42)
├── 05-ui-design/ # Cross-domain UI/UX design system
│ ├── components/ # Reusable component specs
│ ├── patterns/ # Common UI patterns (CRUD, list-detail, etc)
│ ├── screens/ # Screen designs organized by domain
│ └── figma/ # Figma links and exports
├── 90-generated-bdd/ # Auto-generated aggregated views
└── 99-coverage/ # Metrics & tracking
```
**Numbering scheme**:
- 01-09: Core specifications (source files you edit)
- 90-99: Generated/derived content (don't edit directly)
## Specification Types
### 1. Domain Specification
**File**: `01-domains/[domain-name]/domain.md`
**Template**:
```markdown
# Domain: [DomainName]
**Status**: draft | review | approved
**Last Updated**: YYYY-MM-DD
**Owner**: [Team/Person]
## Domain Purpose
[What this bounded context handles]
## Ubiquitous Language
- **[Term]**: [Definition in domain context]
## Domain Boundaries
### In Scope
- [Responsibility 1]
### Out of Scope
- [What this domain does NOT handle]
### Integration Points
- **[OtherDomain]**: [How they interact]
## Core Business Rules
1. **[Rule]**: [Description and rationale]
## Domain Events
### Published Events
| Event Name | Trigger | Payload | Consumers |
|------------|---------|---------|-----------|
| [domain].[event] | [When] | [Data] | [Who] |
### Consumed Events
| Event Name | Source | Handler Action |
|------------|--------|----------------|
| [other].[event] | [Source] | [Action] |
## Resources in This Domain
- [Resource1] - [Purpose]
## Aggregate Roots
- **[Root]**: Ensures [invariant]
```
---
### 2. Resource Specification
**File**: `01-domains/[domain]/resources/[resource].md`
**Template**:
```markdown
# Resource: [ResourceName]
**Domain**: [DomainName]
**Status**: draft | review | approved | implemented
**Last Updated**: YYYY-MM-DD
## Purpose
[What this resource represents]
## Attributes
| Attribute | Type | Required | Validation | Description |
|-----------|------|----------|------------|-------------|
| id | uuid | Yes | - | Unique identifier |
| [attr] | [type] | [Y/N] | [rules] | [description] |
## Business Rules
### Invariants
- [Rule that must always be true]
### Validations
- [Field]: [Validation rule and rationale]
## State Transitions
```
[initial] -> [state1] -> [state2] -> [final]
```
**Valid Transitions**:
- `initial → state1`: When [condition]
## Relationships
- **Belongs to**: [Parent] (many-to-one)
- **Has many**: [Children] (one-to-many)
- **References**: [Other] (for ACL/read-only)
## Domain Events
### Published Events
- `[resource].[event]`: Triggered when [condition]
- Payload: {field1, field2}
### Subscribed Events
- `[other].[event]`: Responds by [action]
## Access Patterns
### Queries
- List all [resources] for [context]
- Find [resource] by [criteria]
### Common Operations
- Create: Requires [data]
- Update: Can modify [fields]
- Delete: Cascades to [related]
```
---
### 3. Feature Specification (BDD)
**File**:
- Single domain: `01-domains/[domain]/features/[feature].feature.md`
- Cross-domain: `02-features-cross-domain/[feature].feature.md`
**Template**:
```markdown
# Feature: [Feature Name]
**Domain**: [DomainName]
**Priority**: high | medium | low
**Status**: draft | review | approved | implemented
## Feature Description
As a [user role]
I want to [action]
So that [business value]
## Acceptance Criteria
- [ ] [Criterion 1]
- [ ] [Criterion 2]
## Scenarios
### Scenario: [Happy Path Name]
**Tags**: `@happy-path @domain:[domain]`
**Status**: implemented | pending
```gherkin
Given [precondition]
And [another precondition]
When [action]
And [another action]
Then [expected outcome]
And [another outcome]
```
### Scenario: [Edge Case Name]
**Tags**: `@edge-case @domain:[domain]`
**Status**: implemented | pending
```gherkin
Given [edge condition]
When [action]
Then [expected handling]
```
### Scenario Outline: [Parameterized Name]
**Tags**: `@validation @domain:[domain]`
**Status**: implemented | pending
```gherkin
Given [setup with <parameter>]
When [action with <parameter>]
Then [outcome with <result>]
Examples:
| parameter | result | description |
| value1 | result1 | what this tests |
| value2 | result2 | what this tests |
```
## Cross-Domain Impacts
### Events Triggered
- `[domain].[event]`: [When and why]
### Events Consumed
- `[other].[event]`: [How it affects this]
## Security Considerations
- [ ] Authorization: [Who can do this]
- [ ] Validation: [What must be validated]
- [ ] Audit: [What must be logged]
```
---
### 4. Integration Specification
**File**: `03-integrations/[source]_to_[target]_integration.md`
**Template**:
```markdown
# Integration: [Source] to [Target]
**Type**: event-driven | api | shared-database
**Status**: draft | review | approved | implemented
**Last Updated**: YYYY-MM-DD
## Integration Purpose
[Why these domains communicate]
## Communication Pattern
### Direction
- [Source] → [Target]
- Type: [Async/Sync, Event/API]
### Trigger
[What causes this integration]
## Anti-Corruption Layer (ACL)
### Source Domain Model
```yaml
SourceResource:
field1: type
field2: type
```
### Target Domain Model
```yaml
TargetResource:
field_a: type
field_b: type
```
### Translation Rules
| Source Field | Target Field | Transformation | Notes |
|--------------|--------------|----------------|-------|
| field1 | field_a | direct | 1:1 mapping |
| field2 | field_b | transform() | [description] |
## Event Contract
### Event: `[source].[event_name]`
**Payload Schema**:
```json
{
"event_type": "[source].[event]",
"occurred_at": "timestamp",
"aggregate_id": "uuid",
"data": {
"field1": "value"
}
}
```
**Required Fields**: [List required fields]
## Consumer Behavior
### Processing Logic
1. [Step 1: What target domain does]
2. [Step 2: Transformations]
### Error Handling
- **Validation Error**: [What happens]
- **Business Rule Violation**: [What happens]
- **System Error**: [Retry policy]
### Idempotency
[How duplicates are prevented]
## Monitoring
- Metrics: [What to track]
- Alerts: [When to alert]
```
---
### 5. Policy Specification
**File**: `01-domains/[domain]/policies/[policy].md`
**Template**:
```markdown
# Policy: [PolicyName]
**Domain**: [DomainName]
**Type**: authorization | validation | business-rule | multi-tenancy
**Status**: draft | review | approved | implemented
**Last Updated**: YYYY-MM-DD
## Policy Purpose
[What this policy governs]
## Scope
**Applies to**:
- Resources: [List]
- Actions: [create, read, update, delete]
- Actors: [user roles, services]
## Policy Rules
### Rule 1: [Rule Name]
**Condition**: [When applies]
**Requirement**: [What must be true]
**Enforcement**: [How checked]
**Examples**:
```yaml
# Allowed
actor: admin
action: delete
resource: lead
result: allowed
# Denied
actor: sales_rep
action: delete
resource: lead
result: denied with "Insufficient permissions"
```
## Authorization Matrix
| Role | Resource | Create | Read | Update | Delete |
|------|----------|--------|------|--------|--------|
| Admin | Lead | ✓ | ✓ | ✓ | ✓ |
| Sales Rep | Lead | ✓ | ✓ | ✓ | ✗ |
## Multi-Tenancy Rules
- [Resource] must be scoped to `tenant_id`
- Cross-tenant access: [policy]
## Validation Rules
| Field | Validation | Error Message |
|-------|------------|---------------|
| email | RFC 5322 | "Invalid email" |
```
---
## Usage Instructions
### Setting Up a New Spec System
When asked to create a spec system:
1. **Ask about domains**: "What are the main bounded contexts/domains?"
2. **Create folder structure**:
```
specs/
├── README.md
├── 01-domains/
├── 02-features-cross-domain/
├── 03-integrations/
├── 04-architecture/
├── 05-ui-design/ # Cross-domain UI specs
├── 90-generated-bdd/
└── 99-coverage/
```
3. **Generate domain.md** for each domain
4. **Create resource specs** for key entities
5. **Add README.md** with navigation guidance
### Creating Individual Specs
1. **Identify spec type**: Domain, resource, feature, integration, or policy
2. **Use appropriate template** from above
3. **Fill with concrete examples**: Use real data, not placeholders
4. **Add cross-references**: Link related specs
5. **Place in correct location**: Follow folder structure
### Best Practices
**DO**:
- Use concrete examples with specific data
- Write Given-When-Then scenarios for features
- Define clear business rules and invariants
- Link related specifications
- Use ubiquitous language from domain.md
**DON'T**:
- Use vague requirements ("should be fast")
- Include implementation details (database tables)
- Mix concerns (authorization in resource specs)
- Use placeholders like [TODO] or [TBD]
- Edit files in 90-generated-bdd/ (they're auto-generated)
### File Naming Conventions
- **Domains**: lowercase-with-hyphens (`sales`, `user-management`)
- **Resources**: lowercase_with_underscores (`lead.md`, `form_submission.md`)
- **Features**: lowercase_with_underscores (`lead_assignment.feature.md`)
- **Integrations**: `[source]_to_[target]_integration.md`
- **Policies**: descriptive (`lead_permissions.md`, `tenant_isolation.md`)
### Tags for BDD Features
```gherkin
@domain:[name] # Which domain
@integration:[source]-[target] # Which integration
@priority:[high|medium|low] # Priority
@status:[draft|approved|implemented]
@happy-path # Main success scenario
@edge-case # Edge case handling
@error-case # Error handling
@smoke-test # Include in smoke tests
```
## Examples
### Example 1: Create Domain Spec
**User**: "Create a domain specification for Sales"
**Response**:
```markdown
# Domain: Sales
**Status**: draft
**Last Updated**: 2024-11-11
**Owner**: Sales Team
## Domain Purpose
Manages the sales pipeline from lead capture through opportunity closure, including lead qualification, territory assignment, and deal progression.
## Ubiquitous Language
- **Lead**: A potential customer who has shown interest
- **Opportunity**: A qualified lead with defined potential value
- **Territory**: Geographic or market segment assigned to sales reps
- **Qualification**: Process of determining if a lead meets sales criteria
## Domain Boundaries
### In Scope
- Lead management and qualification
- Opportunity tracking and progression
- Territory and rep assignment
- Sales forecasting
### Out of Scope
- Marketing campaign management (Marketing domain)
- Customer onboarding after sale (Success domain)
- Billing and invoicing (Billing domain)
### Integration Points
- **Forms**: Receives leads from form submissions
- **Marketing**: Receives campaign-generated leads
- **Billing**: Sends closed deals for invoicing
[Continue with rest of template...]
```
### Example 2: Create Resource Spec
**User**: "Create a resource spec for Lead in Sales domain"
**Response**: [Creates complete lead.md with attributes like id, email, company, status, assigned_to, territory, etc., with business rules about state transitions, validation rules, and relationships]
### Example 3: Create BDD Feature
**User**: "Create a BDD feature for automatic lead assignment"
**Response**: [Creates lead_assignment.feature.md with scenarios for assigning to lowest-load rep, handling capacity limits, territory-based assignment, etc.]
## Common Patterns
### Cross-Referencing Specs
In feature files, reference related specs:
```markdown
## Cross-Domain Impacts
### Integration Required
See: [03-integrations/forms_to_sales_integration.md](../../03-integrations/forms_to_sales_integration.md)
### Resources Affected
- [Lead](../resources/lead.md)
- [Territory](../resources/territory.md)
```
### Multi-Tenancy Considerations
Include tenant_id in resources:
```markdown
## Attributes
| Attribute | Type | Required | Validation | Description |
|-----------|------|----------|------------|-------------|
| id | uuid | Yes | - | Unique identifier |
| tenant_id | uuid | Yes | valid tenant | Multi-tenancy scope |
```
And in policies:
```markdown
## Multi-Tenancy Rules
- All Lead queries must filter by `tenant_id`
- Cross-tenant access denied except for platform admins
```
## Generated BDD Views
The `90-generated-bdd/` folder contains auto-generated aggregated views:
- **all-scenarios.feature**: Every scenario from all domains
- **by-domain/[domain].feature**: Scenarios grouped by domain
- **by-persona/[role].feature**: Scenarios grouped by user role
**How to generate**: Ask "Aggregate all scenarios into specs/90-generated-bdd/"
**Important**: Never edit these files directly - they're regenerated from source feature specs.
## Integration with Implementation
When implementing features, reference the specs:
```
"Implement the Lead resource per specs/01-domains/sales/resources/lead.md"
"Implement lead assignment per specs/01-domains/sales/features/lead_assignment.feature.md"
"Implement the forms-to-sales integration per specs/03-integrations/forms_to_sales_integration.md"
```
## Remember
- Specs are source of truth - write them BEFORE code
- Review specs via PR before implementation
- Update specs when requirements change
- Use concrete examples, not abstractions
- Link related specifications
- Follow the folder structure consistently