Add BMAD, Claude, Cursor, and OpenCode configuration directories along with AGENTS.md documentation. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
5.1 KiB
Essential Patterns - Core Development Guidelines
Quick Reference
Core Philosophy: Modular, Functional, Maintainable
Critical Patterns: Error Handling, Validation, Security, Logging, Pure Functions
ALWAYS: Handle errors gracefully, validate input, use env vars for secrets, write pure functions
NEVER: Expose sensitive info, hardcode credentials, skip input validation, mutate state
Language-agnostic: Apply to all programming languages
Overview
This file provides essential development patterns that apply across all programming languages. For detailed standards, see:
standards/code.md- Modular, functional code patternsstandards/patterns.md- Language-agnostic patternsstandards/tests.md- Testing standardsstandards/docs.md- Documentation standardsstandards/analysis.md- Analysis framework
Core Philosophy
Modular: Everything is a component - small, focused, reusable Functional: Pure functions, immutability, composition over inheritance Maintainable: Self-documenting, testable, predictable
Critical Patterns
1. Pure Functions
ALWAYS write pure functions:
- Same input = same output
- No side effects
- No mutation of external state
- Predictable and testable
2. Error Handling
ALWAYS handle errors gracefully:
- Catch specific errors, not generic ones
- Log errors with context
- Return meaningful error messages
- Don't expose internal implementation details
- Use language-specific error handling mechanisms (try/catch, Result, error returns)
3. Input Validation
ALWAYS validate input data:
- Check for null/nil/None values
- Validate data types
- Validate data ranges and constraints
- Sanitize user input
- Return clear validation error messages
4. Security
NEVER expose sensitive information:
- Don't log passwords, tokens, or API keys
- Use environment variables for secrets
- Sanitize all user input
- Use parameterized queries (prevent SQL injection)
- Validate and escape output (prevent XSS)
5. Logging
USE consistent logging levels:
- Debug: Detailed information for debugging (development only)
- Info: Important events and milestones
- Warning: Potential issues that don't stop execution
- Error: Failures and exceptions
Code Structure Patterns
Modular Design
- Single responsibility per module
- Clear interfaces (explicit inputs/outputs)
- Independent and composable
- < 100 lines per component (ideally < 50)
Functional Approach
- Pure functions: Same input = same output, no side effects
- Immutability: Create new data, don't modify existing
- Composition: Build complex from simple functions
- Declarative: Describe what, not how
Component Structure
component/
├── index.js # Public interface
├── core.js # Core logic (pure functions)
├── utils.js # Helpers
└── tests/ # Tests
Anti-Patterns to Avoid
Code Smells:
- ❌ Mutation and side effects
- ❌ Deep nesting (> 3 levels)
- ❌ God modules (> 200 lines)
- ❌ Global state
- ❌ Large functions (> 50 lines)
- ❌ Hardcoded values
- ❌ Tight coupling
Security Issues:
- ❌ Hardcoded credentials
- ❌ Exposed sensitive data in logs
- ❌ Unvalidated user input
- ❌ SQL injection vulnerabilities
- ❌ XSS vulnerabilities
Testing Patterns
ALWAYS write tests:
- Unit tests for pure functions
- Integration tests for components
- Test edge cases and error conditions
- Aim for > 80% coverage
- Use descriptive test names
Test Structure:
describe('Component', () => {
it('should handle valid input', () => {
// Arrange
const input = validData;
// Act
const result = component(input);
// Assert
expect(result).toBe(expected);
});
it('should handle invalid input', () => {
// Test error cases
});
});
Documentation Patterns
ALWAYS document:
- Public APIs and interfaces
- Complex logic and algorithms
- Non-obvious decisions
- Usage examples
Use clear, concise language:
- Explain WHY, not just WHAT
- Include examples
- Keep it up to date
- Use consistent formatting
Language-Specific Implementations
These patterns are language-agnostic. For language-specific implementations:
TypeScript/JavaScript: See project context for Next.js, React, Node.js patterns Python: See project context for FastAPI, Django patterns Go: See project context for Go-specific patterns Rust: See project context for Rust-specific patterns
Quick Checklist
Before committing code, verify:
- ✅ Pure functions (no side effects)
- ✅ Input validation
- ✅ Error handling
- ✅ No hardcoded secrets
- ✅ Tests written and passing
- ✅ Documentation updated
- ✅ No security vulnerabilities
- ✅ Code is modular and maintainable
Additional Resources
For more detailed guidelines, see:
standards/code.md- Comprehensive code standardsstandards/patterns.md- Detailed pattern catalogstandards/tests.md- Testing best practicesstandards/docs.md- Documentation guidelinesstandards/analysis.md- Code analysis frameworkworkflows/review.md- Code review process